?login_element?

Subversion Repositories NedoOS

Rev

Rev 1947 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         ;device pentagon1024
  3.  
  4.         include "../_sdk/syssets.asm"
  5.        ifdef USETOPDOWNMEM
  6. TOPDOWNMEM=1
  7.        else
  8. TOPDOWNMEM=0;1
  9.        endif
  10.  
  11. EFF7VALUE=0x10 ;noturbo
  12.  
  13.                 if atm != 2
  14. memport0000=0x37f7
  15. memport4000=0x77f7
  16. memport8000=0xb7f7
  17. memportc000=0xf7f7
  18. memportrom0000=0x3ff7
  19. memportrom4000=0x7ff7
  20. memportrom8000=0xbff7
  21. memportromc000=0xfff7
  22. pagexor=0xff
  23.         else
  24. memport0000=0x3ff7
  25. memport4000=0x7ff7
  26. memport8000=0xbff7
  27. memportc000=0xfff7
  28. memportrom0000=0x3ff7
  29. memportrom4000=0x7ff7
  30. memportrom8000=0xbff7
  31. memportromc000=0xfff7
  32. pagexor=0x7f
  33.         endif
  34.        
  35.         if NEMOIDE==1
  36. ;схема Nemo:
  37. hddstat=0xF0
  38. hddcmd=0xF0
  39. hddhead=0xD0
  40. hddcylhi=0xB0
  41. hddcyllo=0x90
  42. hddsec=0x70
  43. hddcount=0x50
  44. hdderr=0x30
  45. hdddatlo=0x10
  46. hdddathi=0x11
  47. hddupr=0xC8
  48. hdduprON=0
  49.         else
  50. ;схема ATM:
  51. hddstat=0xFEEF
  52. hddcmd=0xFEEF
  53. hddhead=0xFECF
  54. hddcylhi=0xFEAF
  55. hddcyllo=0xFE8F
  56. hddsec=0xFE6F
  57. hddcount=0xFE4F
  58. hdderr=0xFE2F
  59. hdddatlo=0xFE0F
  60. hdddathi=0xFF0F
  61. hddupr=0xFEBE ;при установленном b7 FFBA
  62. hdduprON=0xFFBA
  63. hddupr1=0xF7
  64. hddupr0=0x77
  65.         endif
  66. memport8000_hi=memport8000/256
  67. memportc000_hi=memportc000/256
  68.  
  69. SYSMINSTACK=0x3b00
  70.  
  71. resident=0x6000;0x6000+8000 (где не затрут при очистке экрана) ;pgtrdosfs
  72. trdos_catbuf=0x6300;0x3200 ;,0x900 ;pgtrdosfs (0x4000)
  73. trdos_sectorbuf=0x6c00
  74. trdos_fcbbuf=0x6d00 ;size=0x200*trdos_MAXFILES
  75. trdos_MAXFILES=8
  76. INTMUZSTACK=0x3e00 ;kernelspace
  77. ;INTSTACK1=0x3f00 ;kernelspace (для входа в обработчик без порчи стека) (не пересекается с возможным стеком задачи!!!)
  78. INTSTACK2=0x5f00;0x6000 ;pgkillable и pgtrdosfs (рабочий стек обработчика прерываний) (>=0x4000, иначе нельзя выключить теневые порты)
  79. TRDOSSTACK=0x5f00-96;0x6000-96 ;чтобы не пересекалось с INTSTACK (в промежутке между преключениями страниц может произойти системное прерывание), но и на экран не попало
  80. BDOSSTACK=0x4000 ;kernelspace
  81. STACK=0x4000 ;userspace
  82. ;при вызове BDOS стек некоторое время такой же, как в юзерспейсе
  83. ;поэтому на входе в BDOS надо иметь в 0x4000...0xffff страницы, которые не жалко
  84. ;предполагается, что юзер не имеет стек ниже 0x3b00, иначе он затрёт систему
  85.  
  86.         include "../_sdk/sys_h.asm"
  87.  
  88.         if TOPDOWNMEM
  89. pgtrdosfs=pagexor-(sys_npages-1)
  90. pgfatfs=pagexor-(sys_npages-2)
  91. pgsys=pagexor-(sys_npages-3)
  92. pgfatfs2=pagexor-(sys_npages-4) ;structs
  93.         else
  94. pgtrdosfs=pagexor-8
  95. pgfatfs=pagexor-9
  96. pgsys=pagexor-10
  97. pgfatfs2=pagexor-11 ;structs
  98.         endif
  99.  
  100. pgkillable=pagexor-4 ;в 128K памяти, т.к. можно портить
  101. ;pgfirstfree=pagexor-11
  102.  
  103. pgscr0_0=pagexor-1
  104. pgscr0_1=pagexor-5
  105. pgscr1_0=pagexor-3
  106. pgscr1_1=pagexor-7
  107.  
  108. fd_system=0x57;%01010111 ;%0x01sx1x ;для неисправленного АТМ2 надо A9=1, а номер страницы в 0x7ffd не будет влиять, если адресация по memportc000
  109. fd_system_getchar=0x56;%01010110 ;%0x01sx1x ;для неисправленного АТМ2 надо A9=1, а номер страницы в 0x7ffd не будет влиять, если адресация по memportc000
  110. fd_user=0x47;%01000111 ;%0x00sx1x ;для неисправленного АТМ2 надо A9=1, а номер страницы в 0x7ffd не будет влиять, если адресация по memportc000
  111.  
  112. ;условные страницы для sjasm
  113. COMPILEPG_INIT=0
  114. COMPILEPG_SYS0=4
  115. COMPILEPG_SYS1=6
  116.  
  117.         SLOT 1
  118.         page COMPILEPG_INIT
  119.         org 0x6000
  120. begin
  121.         di
  122.         xor a
  123.         out (0xfe),a
  124.         ifdef KOE
  125.             display "KOE!!!"
  126.             ld a,0+EFF7VALUE ;turbo ;0x10 ;noturbo
  127.             ld bc,0xeff7
  128.             out (c),a ;for KOE
  129.             ld a,0x10
  130.             ld bc,0x7ffd
  131.             out (c),a
  132.         endif
  133.         if atm==2
  134.             ld hl,basvar.tape
  135.             ld de,0x5c00
  136.             ld bc,basvar.endtape - basvar.tape
  137.             ldir
  138.             ld sp,0x5800
  139.             ld a,(0x3CBC)
  140.             cp 0x83
  141.             call z,0x3C9E
  142.             ;call 0x3d21
  143.         endif
  144.         if atm==3
  145.          ld a,32 ;xor a ;D5=444 palette
  146.          out (0xbf),a
  147.         endif
  148.         LD (IY+1),0xCC
  149.  
  150.         if 1==0
  151.             LD A,(23833)
  152.             ADD A,'A'
  153.             LD (src),A
  154.             LD (dst),A
  155.             XOR A
  156.             LD (23658),A ;0x5c6a
  157.             ;LD L,A,H,L
  158.             ;LD (23802),HL
  159.         endif
  160.         XOR A
  161.         ld (0x5d10),a
  162.        
  163.         call reset_ay
  164.        
  165.         ;ld hl,0xc9f1 ;pop af:ret
  166.         ;ld (0x5cc2),hl
  167.        
  168.         ;ld bc,0xfbdf ;x
  169.         ;in l,(c)
  170.         ;ld b,0xff
  171.         ;in h,(c)
  172.         ;ld (init_oldmousecoords),hl
  173.  
  174. ;;;;;;;;;;;;;;;;;;; set gfx mode ;;;;;;;;;;;;;;;;;
  175.                 ei
  176.         halt
  177.         ;LD A,0xaa;%10101010 ;640x200 mode
  178.         ;LD A,0xae;%10101110 ;textmode
  179.                 if atm==1
  180. init_rst_buf=0x4000
  181.             ;проверим версию ers
  182.             ld d,0x00
  183.                         rst 0x08
  184.                         defb 0x4d,0x00
  185.             ld hl,-0x5812    ;ERS_MIN_VERSION 0.58.12
  186.             add hl,de
  187.             ld a,0xff
  188.             jr nc,.err_version
  189.                         ;выясним откуда запустились
  190.                         ld hl,init_rst_buf
  191.                         rst 0x08
  192.                         defb 0x50,0x03
  193.                         rst 0x08        ; в D вернется текущий драйв
  194.                         defb 0x50,0x02
  195.                         ld a,d
  196.                         add a,a
  197.                         add a,a
  198.                         add a,a
  199.                         ld hl,init_rst_buf
  200.                         ld b,0
  201.                         ld c,a
  202.                         add hl,bc
  203.                         ld de,init_rst_buf+512
  204.                         ld bc,8
  205.                         ldir
  206.                         ld a,(init_rst_buf+512)
  207.                         rst 0x08
  208.                         defb 0x50,0x05
  209.                         ld a,(init_rst_buf+512)
  210.                         and 1 ;m/s
  211.                         ld hl,init_rst_buf
  212.                         ld bc,0x0000
  213.                         ld d,b
  214.                         ld e,c
  215.                         ld a,2
  216.                         ex af,af' ;'
  217.                         ld a,1
  218.                         rst 0x08
  219.                         defb 0x50,0x04,0x02
  220.                         ld a,(init_rst_buf+512)
  221.                         ld d,12
  222.                         cp 0x0f
  223.                         jr z,.l3
  224.                         ld d,3
  225.                         cp 4
  226.                         jr z,.init_sysdev_part
  227.                         ld d,7
  228.                         cp 5
  229.                         jp nz,init_sysdev_end
  230. .init_sysdev_part
  231.                         ld hl,init_rst_buf+0x01BE+0x0008-12
  232. .l2
  233.                         inc d
  234.                         push de
  235.                         ld bc,12
  236.                         add hl,bc
  237.                         ld bc,0x0400
  238.                         ld de,init_rst_buf+512+3
  239. .l1                     ld a,(de)
  240.                         xor (hl)
  241.                         or c
  242.                         ld c,a
  243.                         inc de
  244.                         inc hl
  245.                         djnz .l1
  246.                         pop de
  247.                         or a
  248.                         jr nz,.l2
  249. .l3
  250.                         ld a,d
  251. .err_version
  252.                         ld (init_sysdrv_val),a
  253. init_sysdev_end
  254.                         halt
  255.                         ld bc,0xeff7
  256.                         ld a,0x80+EFF7VALUE
  257.                         out (c),a
  258.                         ld a,0x10
  259.                         ld bc,0x7ffd
  260.                         out (c),a
  261.                         ld bc,0x01bf
  262.                         out (c),b
  263.                         LD A,0xa8;%10101000 ;320x200 mode
  264.                         ld bc,0xbd77    ;shadow ports and palette remain on
  265.                         out (c),a
  266.                          ld a,32 ;xor a ;D5=444 palette
  267.                         out (0xbf),a
  268.                 else
  269.                         LD A,0xa8;%10101000 ;320x200 mode
  270.                         CALL INIT_OUTSHADON
  271.         endif
  272.         call INIT_blackpal
  273.  
  274.         di
  275.                 if atm==1 and PS2KBD
  276.                         ld bc,0xdef7   
  277.                         out (c),c              
  278.                         ld b,0xbe              
  279.                         ld a,2                 
  280.                         out (c),a
  281.                 endif
  282.                
  283.                 if atm==3 or atm==1
  284.                         ld a,0x7f-5
  285.                         ld bc,memportrom4000
  286.                         out (c),a ;отключаем 7ffd
  287.                         ld a,0x7f-2
  288.                         ld bc,memportrom8000
  289.                         out (c),a ;отключаем 7ffd
  290.                         ;ld a,0x7f-2
  291.                         ld bc,memportromc000
  292.                         out (c),a ;отключаем 7ffd
  293.                 endif
  294.        
  295.                 if atm != 1
  296.                         call findpgdos
  297.                 else
  298.                         ld a,0x04
  299.                         in a,(0xbd)
  300.                         and 0xbf;%10111111
  301.                         ;ld a,0x8b
  302.                 endif
  303.         ld lx,a
  304.         ld (sys_pgdos),a ;до установки резидента
  305.  
  306.         ld a,pgsys
  307.         call INIT_setpg_c000
  308.         ld hl,0x8000
  309.         ld de,0xc000
  310.         ld bc,0x4000
  311.         ldir
  312.        
  313.         ld a,pgtrdosfs
  314.         call INIT_setpg_c000
  315.         ld hl,wastrdosfs
  316.         ld de,0xc000+idle;COMMANDLINE;PROGSTART ;idle code
  317.         ld bc,trdosfs_sz
  318.         ldir
  319.         ld a,(init_sysdrv_val)  ;нужно для проверки версии ERS
  320.         ld (0xc000+idle+6),a    ;при неправильном ERS сисдир==0xff
  321.                         ld a,0xc3
  322.                         ld (0x5cc2),a
  323.                         ld hl,ONERR;ddrv
  324.                         ld (0x5cc3),hl
  325.                         ld hl,0x5c00
  326.                         ld de,0xc000+0x1c00
  327.                         ld bc,0x0400;for run hobeta;0x0200;0x5d3b-0x5c00
  328.                         ldir
  329.         ld hl,wasresident
  330.         ld de,resident+0xc000-0x4000
  331.         ld bc,resident_sz
  332.         ldir
  333.                         ld hl,0x5c4b
  334.                         ld de,varbas_stor+0x8000
  335.                         ld bc,32
  336.                         ldir
  337.        
  338.         ld hl,0xc000+trdos_fcbbuf-0x4000
  339.         ld d,h
  340.         ld e,l
  341.         inc de
  342.         ld bc,0x200*trdos_MAXFILES-1
  343.         ld (hl),l;0
  344.         ldir
  345.  
  346.         ;ld a,pgidle
  347.         ;call INIT_setpg_c000
  348.         ;ld hl,wasidle
  349.         ;ld de,0x0100+0xc000
  350.         ;ld bc,idle_sz
  351.         ;ldir
  352.        
  353.         ld a,pgsys
  354.         call INIT_setpg_8000
  355.         ld a,pgfatfs
  356.         call INIT_setpg_c000
  357.        
  358.         ;jr $
  359. ;перебрасываем 16K упакованный блок в 0xb000
  360.         ld hl,wassys+0x4fff
  361.         ld de,0xffff
  362.         ld bc,0x5000
  363.         lddr
  364. ;распаковываем в 0x6400
  365.         ld hl,0xb000;wassys
  366.         ld de,0x6400;0x8000
  367.         call DEC40 ;распаковываем в de (там уже включены системные странички)
  368. ;перебрасываем 32K из 0x6400 в 0x8000
  369.         ld hl,0x6400+0x7fff
  370.         ld de,0x8000+0x7fff
  371.         ld bc,0x8000
  372.         lddr
  373.  
  374. fatfspatchaddr=0xc000
  375.        
  376.         ld hl,devices_init
  377.         ld (0xc000+FFS_DRV.init),hl
  378.         ld hl,disk_status
  379.         ld (0xc000+FFS_DRV.status),hl
  380.         ld hl,devices_read      ;read to userspace
  381.         ld (0xc000+FFS_DRV.rd_to_usp),hl
  382.         ld hl,devices_readnopg  ;read to buffer
  383.         ld (0xc000+FFS_DRV.rd_to_buf),hl
  384.         ld hl,devices_write     ;write from userspace
  385.         ld (0xc000+FFS_DRV.wr_fr_usp),hl
  386.         ld hl,devices_writenopg ;write from buffer
  387.         ld (0xc000+FFS_DRV.wr_fr_buf),hl
  388.         ld hl,get_fattime
  389.         ld (0xc000+FFS_DRV.RTC),hl
  390.         ld hl,strcpy_lib2usp   
  391.         ld (0xc000+FFS_DRV.strcpy_lib2usp),hl
  392.         ld hl,strcpy_usp2lib
  393.         ld (0xc000+FFS_DRV.strcpy_usp2lib),hl
  394.         ld hl,memcpy_lib2usp
  395.         ld (0xc000+FFS_DRV.memcpy_lib2usp),hl
  396.         ld hl,memcpy_usp2lib
  397.         ld (0xc000+FFS_DRV.memcpy_usp2lib),hl
  398.         ld hl,memcpy_buf2usp
  399.         ld (0xc000+FFS_DRV.memcpy_buf2usp),hl
  400.         ld hl,memcpy_usp2buf
  401.         ld (0xc000+FFS_DRV.memcpy_usp2buf),hl
  402.  
  403. ;инициализация менеджера памяти и вход в юзерспейс:
  404. ;HALT (чтобы прерывание не произошло когда не надо)
  405. ;[назначаем страницы системспейса (одна из них должна быть такая же, как в юзерспейсе) - уже есть общая страница 5]
  406. ;в юзерспейсе назначаем нижнюю страницу с керналем (вместо ПЗУ)
  407.         ld a,fd_user
  408.         out (0xfd),a
  409.                 if atm==3 or atm==1
  410.          ld a,0x7f
  411.          ld bc,memportrom0000
  412.          out (c),a ;отключаем ПЗУ
  413.          ld a,0x7f-5
  414.          ld bc,memportrom4000
  415.          out (c),a ;отключаем 7ffd
  416.          ld a,0x7f-2
  417.          ld bc,memportrom8000
  418.          out (c),a ;отключаем 7ffd
  419.          ;ld a,0x7f-2
  420.          ld bc,memportromc000
  421.          out (c),a ;отключаем 7ffd
  422.         endif
  423.         ld a,pgtrdosfs ;idle
  424.         ld bc,memport0000
  425.         out (c),a
  426.        
  427.         ;ld hl,wasuserkernel+0x8000
  428.         ;ld de,0
  429.         ;ld bc,userkernel_sz
  430.         ;ldir
  431.        
  432.         ld a,fd_system
  433.         out (0xfd),a
  434.                 if atm==3 or atm==1
  435.          ld a,0x7f
  436.          ld bc,memportrom0000
  437.          out (c),a ;отключаем ПЗУ
  438.          ;4000,8000,c000 уже отключили 7ffd выше
  439.         endif
  440.         ld a,pgsys
  441.         ld bc,memport0000
  442.         out (c),a
  443. ;в системспейсе:
  444. ;включить fatfs
  445. ;поставить резидент в 7fxx
  446. ;переходим в sys_intq, а оттуда в init_resident
  447.  
  448.         if 1==0
  449.         ld a,lx;(sys_pgdos)
  450.         ld bc,memportrom0000
  451.         out (c),a
  452.         LD A,0xa8;%10101000 ;320x200 mode
  453.         ld bc,0xff77 ;shadow ports off, palette off
  454.         out (c),a
  455.         ld a,1
  456.         ld c,1
  457.         call 0x3d13
  458.         ld c,0x18
  459.         call 0x3d13
  460.         ld hl,0xc000
  461.         ld de,0x0000
  462.         ld bc,0x0805
  463.         call 0x3d13
  464.         jr $
  465.         endif
  466.  
  467.         ld sp,BDOSSTACK
  468.         ;ei
  469.         ;halt ;чтобы прерывание не произошло когда не надо
  470.         ;di
  471.         ;jr $
  472. ;init_oldmousecoords=$+1
  473. ;        ld hl,0
  474. ;        ld (sys_oldmousecoords),hl
  475.          call BDOS_setpgstructs
  476.          ld hl,0xc000
  477.          ld de,0xc001
  478.          ld bc,0x3fff
  479.          ld (hl),l;0
  480.          ldir ;не помогло
  481. init_sysdrv_val=$+1
  482.          ld a,SYSDRV
  483.          ld (SYSDRV_VAL),a
  484.         jp setkernelpages_go ;di!!!
  485.  
  486. reset_ay
  487.         ld a,0xfe
  488.         call reset_ay_ay
  489.         ld a,0xff
  490. reset_ay_ay
  491.         ld bc,#fffd
  492.         out (c),a
  493.         xor a
  494.         ld l,a
  495. reset_ay_ay0
  496.         ld b,#ff
  497.         out (c),a
  498.         ld b,#bf
  499.         out (c),l
  500.         inc a
  501.         cp 14
  502.         jr nz,reset_ay_ay0
  503.         ret
  504.  
  505.                 if atm != 1
  506. INIT_OUTSHADON
  507.         ;LD BC,0xFF77 ;shadow ports remain off
  508.                         LD BC,0xBD77 ;shadow ports and palette remain on
  509.                         LD IX,10835
  510.                         PUSH IX
  511.                         JP 0x3D2F
  512.                 endif
  513.  
  514. INIT_setpg_low
  515.         LD BC,memportrom0000 ;page for 0x0000..0x3fff
  516.         OUT (C),A
  517.         ret
  518.  
  519. INIT_setpg_8000
  520.         LD BC,memport8000 ;page for 0x8000..0xbfff
  521.         OUT (C),A
  522.         ret
  523.  
  524. INIT_setpg_c000
  525.         LD BC,memportc000 ;page for 0xc000..0xffff
  526.         OUT (C),A
  527.         ret
  528.        
  529.                 if atm==2
  530. basvar
  531. .tape
  532.         defb 0xFF, 0x00, 0x00, 0x00, 0x0D, 0x05, 0x10, 0x0D, 0x0D, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
  533.         defb 0x01, 0x00, 0x06, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00
  534.         defb 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, 0x7F, 0x3E, 0x14, 0xED, 0x79, 0xC3, 0x00, 0xC0
  535.         defb 0x18, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x40, 0x00, 0xFF, 0xCC, 0x01, 0xFC, 0x5F, 0x00
  536.         defb 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x02, 0x07, 0x00, 0x00, 0xB4, 0x5D, 0x00, 0x00, 0x26
  537.         defb 0x5D, 0x26, 0x5D, 0x3B, 0x5D, 0xB4, 0x5D, 0x3A, 0x5D, 0xB5, 0x5D, 0xB5, 0x5D, 0xB3, 0x5D, 0x00
  538.         defb 0x00, 0xB7, 0x5D, 0xC3, 0x5D, 0xC3, 0x5D, 0x2D, 0x92, 0x5C, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00
  539.         defb 0x00, 0x00, 0x00, 0x00, 0xB6, 0x1A, 0x92, 0x00, 0x24, 0x01, 0x00, 0x58, 0xFF, 0x00, 0x00, 0x21
  540.         defb 0x00, 0x5B, 0x21, 0x17, 0x00, 0x40, 0xE0, 0x50, 0x21, 0x18, 0x21, 0x17, 0x01, 0x07, 0x00, 0x07
  541.         defb 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  542.         defb 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  543.         defb 0x00, 0x00, 0xFF, 0x5F, 0xFF, 0xFF, 0xF4, 0x09, 0xA8, 0x10, 0x4B, 0xF4, 0x09, 0xC4, 0x15, 0x53
  544.         defb 0x81, 0x0F, 0xC9, 0x49, 0x91, 0xF4, 0x09, 0xC4, 0x83, 0x83, 0x83, 0x83, 0x00, 0x00, 0x00, 0x35
  545.         defb 0x36, 0x31, 0x36, 0x0E, 0x00, 0x00, 0x03, 0x6B, 0x5E, 0x95, 0x5E, 0x00, 0x25, 0x73, 0x74, 0x73
  546.         defb 0x35, 0x2E, 0x31, 0x61, 0x20, 0x43, 0x00, 0xDB, 0x00, 0x25, 0x25, 0x03, 0x09, 0x00, 0x00, 0x00
  547.         defb 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x80, 0x08
  548.         defb 0x00, 0xC8, 0xFA, 0x5C, 0xFA, 0x5C, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
  549.         defb 0xFF, 0x89, 0x5D, 0xFC, 0x5F, 0xFF, 0x3C, 0xAA, 0x00, 0x00, 0x01, 0x02, 0xFA, 0x5F, 0x03, 0x00
  550.         defb 0xFE, 0x0D, 0x80, 0x00, 0x00, 0xFF, 0xF4, 0x09, 0xA8, 0x10, 0x4B, 0xF4, 0x09, 0xC4, 0x15, 0x53
  551.         defb 0x81, 0x0F, 0xC4, 0x15, 0x52, 0xF4, 0x09, 0xC4, 0x15, 0x50, 0x80, 0x01, 0x00, 0x23, 0x00, 0xFD
  552.         defb 0xB0, 0x22, 0x36, 0x35, 0x33, 0x36, 0x38, 0x22, 0x3A, 0xF9, 0xC0, 0xB0, 0x22, 0x31, 0x35, 0x36
  553.         defb 0x31, 0x39, 0x22, 0x3A, 0xEA, 0x3A, 0xF7, 0x22, 0x62, 0x6F, 0x6F, 0x74, 0x20, 0x20, 0x20, 0x20
  554.         defb 0x22, 0x0D, 0x80, 0xF4, 0x5C, 0x01, 0x05, 0x2E, 0x21, 0x00, 0x60, 0xE5, 0xC3, 0x13, 0x3D, 0x0D
  555. .endtape
  556.         endif
  557.  
  558.                 if atm != 1
  559. findpgdos
  560. ;если не найти страницу текущего доса, то на старых версиях ПЗУ ZX Evo не будет работать (в странице 0x83 почему-то не дос по умолчанию)
  561.         call crcdos
  562.         ld (doscrchi),de
  563.         ld (doscrclo),bc
  564.         ld lx,0x83
  565. findpgdos0
  566.         ld a,lx
  567.         call INIT_setpg_low
  568.         call crcdos
  569. doscrchi=$+1
  570.         ld hl,0
  571.         or a
  572.         sbc hl,de
  573.         jr nz,doscrcbad
  574. doscrclo=$+1
  575.         ld hl,0
  576.         or a
  577.         sbc hl,bc
  578.         jr nz,doscrcbad
  579.         ld a,lx
  580.         ret
  581. doscrcbad
  582.         ld a,lx
  583.         add a,4
  584.         ld lx,a
  585.         cp 0xc0
  586.         jr c,findpgdos0
  587.         ld a,0x83 ;not found
  588.         ret
  589. crcdos
  590.         ld hl,0x0000
  591.         ld bc,0
  592.         ld de,0
  593. crcdos0
  594.         ld a,d
  595.         add a,a
  596.         rl c
  597.         rl b
  598.         rl e
  599.         rl d
  600.         xor b
  601.         ld b,a
  602.         ld a,(hl)
  603.         xor c
  604.         ld c,a
  605.         inc hl
  606.         bit 6,h
  607.         jr z,crcdos0
  608.         ret
  609.                 endif
  610.  
  611. INIT_blackpal
  612.         LD HL,blackpalend
  613.         ;halt ;halt есть выше - убрано, чтобы не светилось ничего
  614.         LD DE,0xa80f ;0xab=6912 ;palette on, EGA, turbo
  615.         LD BC,0xBD77
  616.         OUT (C),D
  617. INIT_setpal0 LD A,E
  618.         and 7
  619.         BIT 3,E
  620.         OUT (0xFE),A
  621.         JR Z,$+4
  622.         OUT (0xF6),A
  623.         LD A,(HL)
  624.         DEC HL
  625.         ld b,(hl) ;DDp palette low bits
  626.         dec hl
  627.         ld c,0xff
  628.         OUT (c),a;(0xFF),A
  629.         DEC E
  630.         JP P,INIT_setpal0
  631.         ret
  632.  
  633.         ifdef NOPAL
  634.         dw 0xffff,0xfefe,0xfdfd,0xfcfc,0xefef,0xeeee,0xeded,0xecec
  635.         dw 0xffff,0xdede,0xbdbd,0x9c9c,0x6f6f,0x4e4e,0x2d2d,0x0c0c
  636.         else
  637.         ds 32,0xf3
  638.         endif
  639. blackpalend=$-1
  640.  
  641.         include "unmegalz.asm" ;DEC40
  642.  
  643. wasresident
  644.         disp resident
  645.                 if atm != 1
  646. readmouse  ;=$-wasresident+resident
  647. ;sp=0x7fxx
  648. ;e=gfxmode
  649. ;out:
  650. ;a=gfxmode, hl=mousecoords, d=mousebuttons, e=kempstonbuttons
  651.                         call sys_SHADOFF
  652.                        ;ifdef NOMOUSE
  653.                        ; ld hl,0
  654.                        ; ld d,0x0f ;buttons
  655.                        ;else
  656.                         ld bc,0xfadf ;buttons
  657.                         in d,(c)
  658.                         inc b ;ld bc,0xfbdf ;x
  659.                         in l,(c)
  660.                         ld b,0xff ;y
  661.                         in h,(c)
  662.                         ld c,0x1f
  663.                         in e,(c) ;kempstonbuttons
  664.                         inc e
  665.                         jr nz,$+3 ;0xff = kempston joystick absent
  666.                          inc e ;will be 0 after dec
  667.                         dec e
  668.                         jr shadon_pgsys_a
  669.                        ;endif
  670.                 endif
  671. shadon_pgsys  ;=$-wasresident+resident
  672.         LD A,e;0xa8;%10101000 ;320x200 mode
  673. shadon_pgsys_a  ;=$-wasresident+resident
  674.                 if atm != 1
  675.                         CALL sys_SHADON
  676.                 else
  677.                         ld bc,0x01bf
  678.                         out (c),b
  679.                         ld bc,0xbd77    ;shadow ports and palette remain on
  680.                         out (c),a
  681.                          ld a,32 ;xor a ;D5=444 palette
  682.                         out (0xbf),a
  683.                 endif
  684.                
  685.                 if atm==3 or atm==1
  686.                         ld a,0x7f
  687.                         call sys_setpg_low
  688.                         ld a,pgsys
  689.                         ld bc,memport0000
  690.                         jr sys_outca_jr
  691.          else
  692.                         ld a,0x7f-(pagexor-pgsys)
  693.          endif
  694. sys_setpg_low  ;=$-wasresident+resident
  695.                 ld bc,memportrom0000
  696.                 jr sys_outca_jr
  697. sys_SHADOFF  ;=$-wasresident+resident
  698. sys_pgdos=wasresident+(($+1)-resident) ;для патча
  699.                 ld a,0x83 ;48 basic switchable to DOS
  700.                 call sys_setpg_low
  701.         LD A,e;0xa8;%10101000 ;320x200 mode
  702.                 ld bc,0xff77 ;shadow ports off, palette off
  703. sys_outca_jr
  704.         out (c),a
  705.                 ret
  706.                 if atm != 1
  707. sys_SHADON  ;=$-wasresident+resident
  708.                         LD bc,10835
  709.                         PUSH bc
  710.                         LD BC,0xBD77 ;shadow ports and palette remain on
  711.                         JP 0x3D2F
  712.                 endif
  713.  
  714. ;TODO убрать в pgtrdos
  715. dos3d13_resident  ;=$-wasresident+resident
  716.  
  717. ;сейчас включена pg5
  718. ;iy=23610
  719.         ld (dos3d13_sp_st),sp
  720.         ld sp,trdos_sp ;надо стек в 0x4000+ (не пересекающийся с INTSTACK, т.к. сейчас может произойти системное прерывание), по умолчанию стек был в 0x3fxx
  721.         ;call swap_sysvars
  722.         ex af,af' ;'
  723.         call sys_SHADOFF ;включили ПЗУ
  724.                 ld (em3d13_de_st),de    ;push de ;e=gfxmode
  725.                  
  726.                 ;***************************** 
  727.                 ;call EM3D13PP;0x3d13
  728.                 ;собственно дpайвеp, аналогичный 0x3д13 (и с его использованием)
  729.                 ;на выходе - A pавно 0 - все окей, не 0 - ошибка
  730.                 ;вместо  пpоцедyp DRAW_WINDOWS, PRINT_WINDOWS и REST_WINDOW
  731.                 ;использyй свои.
  732.                 ;Kurleson
  733. ;EM3D13PP
  734.         ld      hl,em3d13pp_ret
  735.         push    hl
  736.         ld      (23613),sp
  737.         xor     a
  738.         ld (23801),a
  739.         ld      (23823),a
  740.         ld      (23824),a
  741.         ld hl,varbas_stor
  742.         ld de,0x5c4b
  743.         ld bc,32
  744.         ldir
  745.         if atm == 1
  746.                  ld a,32 ;xor a ;D5=444 palette
  747.                 out (0xbf),a
  748.         endif
  749.         exx     ;pop hl,de,bc
  750.         ex af,af' ;'
  751.         jp      0x3D13
  752.  
  753. ONERR
  754.         ex      (sp),hl
  755.         push    af
  756.         ld a,(0x5d0f)
  757.         or a
  758.         jr nz,em3d13pp_ret
  759.         ld      a,h
  760.         cp      0x0d
  761.         jr      z,em3d13_error
  762. ONERR_NO
  763.         pop     af
  764.         ex      (sp),hl
  765.         ret
  766. em3d13_error  
  767.         ld      a,0xff
  768.         ld (0x5d0f),a
  769. em3d13pp_ret
  770.  
  771. em3d13_de_st=$+1
  772.     ld de,0     ;e=gfxmode
  773.         di
  774.     call shadon_pgsys ;выключили ПЗУ (неатомарно - две записи в порт!!!)
  775.         ei
  776.         ;call swap_sysvars
  777. dos3d13_sp_st=$+1       ;-wasresident+resident
  778.         ld sp,0
  779.         ld a,(0x5d0f)   ;возврат ошибки
  780.         ret
  781.  
  782.         if atm != 1
  783.                 if atm2clock != 1
  784. ; Подержка часов GLUK в АТМ2+ (актуальная процедура для Evo находится в syskrnl)
  785. NVRAM_REG=0xdf
  786. NVRAM_VAL=0xbf
  787.  
  788. bin2cmos ;a to cmos cell b (BCD)
  789.         push af
  790.         ld a,b
  791.         ld bc,0xf7 + (NVRAM_REG<<8)
  792.         out (c),a
  793.         pop af
  794.         ld b,-1
  795.         inc b
  796.         sub 10
  797.         jr nc,$-3
  798.         add a,10
  799. ;a=num mod 10
  800. ;b=num div 10
  801.         sla b
  802.         sla b
  803.         sla b
  804. ;b=(num div 10) *8
  805.         add a,b
  806.         add a,b
  807.         ld b,NVRAM_VAL
  808.         out (c),a ;BCD
  809.         ret
  810.  
  811. minmes  ;=$-wasresident+resident
  812.         ld h,a
  813.         xor a
  814.         srl h
  815.         rra
  816.         srl h
  817.         rra
  818.         srl h
  819.         rra
  820.         ret
  821.  
  822. bcd2bin  ;=$-wasresident+resident
  823.         ld bc,0xf7 + (NVRAM_REG<<8)
  824.         out (c),a
  825.         ld b,NVRAM_VAL
  826.         in a,(c)
  827.         ld b,a
  828.         and 0xf0
  829.         rra ;*8
  830.         ld c,a ;*8
  831.         rra ;*4
  832.         rra ;*2
  833.         add a,c ;*10
  834.         res 7,b
  835.         res 6,b
  836.         res 5,b
  837.         res 4,b
  838.         add a,b
  839.         ret
  840.  
  841. readtime  ;=$-wasresident+resident
  842. ;sp=0x7fxx
  843. ;e=gfxmode
  844. ;out: hl=date, de=time
  845. ;TODO атомарно
  846.         call sys_SHADOFF
  847.         LD A,e;0xa8;%10101000 ;320x200 mode
  848.         push af
  849.         ld bc,0xeff7
  850.         ld a,0x80+EFF7VALUE
  851.         out (c),a
  852.         ;ld bc,0xf7 + (NVRAM_REG<<8)
  853.     ;ld a,0x0b
  854.     ;out (c),a
  855.     ;ld b,NVRAM_VAL
  856.     ;in a,(c)
  857.     ;or 0x04
  858.     ;out (c),a
  859.     xor a               ;sec
  860.     call bcd2bin
  861.     srl a
  862.     ld e,a
  863.    
  864.     ld a,2              ;min
  865.     call bcd2bin
  866.     call minmes ;a0 >> 3 => ha
  867.     add a,e
  868.     ld e,a
  869.     ld d,h
  870.    
  871.     ld a,4              ;h
  872.     call bcd2bin
  873.     add a,a
  874.     add a,a
  875.     add a,a
  876.     add a,d
  877.     ld d,a
  878.    
  879.     ld a,7              ;day
  880.     call bcd2bin
  881.     ld l,a
  882.    
  883.     ld a,8              ;month
  884.     call bcd2bin
  885.     call minmes ;a0 >> 3 => ha
  886.     add a,l
  887.     ld l,a
  888.    
  889.     ld a,9              ;year
  890.     call bcd2bin
  891.     add a,20
  892.     add a,a
  893.     add a,h
  894.     ld h,a
  895.     jp readtimeq
  896.        
  897. writetime
  898. ;bc=time
  899. ;hl=date
  900.        push bc
  901.         call sys_SHADOFF
  902.         LD A,e;0xa8;%10101000 ;320x200 mode
  903.        pop de
  904.         push af
  905.         ld bc,0xeff7
  906.         ld a,0x80+EFF7VALUE
  907.         out (c),a
  908.        
  909.         ld a,e
  910.         add a,a
  911.         and 63
  912.         ld b,0          ;sec
  913.         call bin2cmos
  914.  
  915.         ld a,d
  916.         rra
  917.         rra
  918.         rra
  919.         and 31 ;h
  920.         ld b,4
  921.         call bin2cmos
  922.  
  923.         ex de,hl
  924.         add hl,hl
  925.         add hl,hl
  926.         add hl,hl
  927.         ex de,hl
  928.         ld a,d
  929.         and 63 ;m
  930.         ld b,2
  931.         call bin2cmos
  932.  
  933.         ld a,h
  934.         srl a
  935.         sub 20
  936.         ld b,9          ;year
  937.         call bin2cmos
  938.  
  939.         ld a,l
  940.         and 31
  941.         ld b,7          ;day
  942.         call bin2cmos
  943.    
  944.         add hl,hl
  945.         add hl,hl
  946.         add hl,hl
  947.         ld a,h
  948.         and 15
  949.         ld b,8          ;month
  950.         call bin2cmos
  951. readtimeq
  952.         ld bc,0xeff7
  953.         ld a,0+EFF7VALUE
  954.         out (c),a
  955.         pop af
  956.         ld e,a ;!!! потом будет использоваться в readtime
  957.         jp shadon_pgsys
  958.  
  959.                 else ;if atm2clock == 1
  960.  
  961. ; Подержка часов 8952  АТМ2+ и АТМ8            
  962. cmd2ve: ;e=command       возвращаем результат в A
  963.                 di
  964.                 ld bc,0x55FE            ;адрес 8952
  965.                 in a,(c)                ;Переход в режим команды
  966.                 ld b,e                  ;команда из E переноcим в B
  967.                 in a,(c)                ;выполнить команду
  968.                 ei
  969.                 ret
  970. send2ve:        ;e=command b=data
  971.                 push de
  972.                 ld e,b
  973.                 ld d,a
  974.                 di
  975.                 ld bc,0x55FE            ;адрес 8952
  976.                 in a,(c)                ;Переход в режим команды
  977.                 ld b,e                  ;команда из E переноcим в B
  978.                 IN a,(c)
  979.                 ld b,d                  ;Параметр
  980.                 in a,(c)
  981.                 ei
  982.                 pop de
  983.                 ret
  984. writetime
  985. ;bc=time
  986. ;hl=date
  987. ;TODO (keep de!)
  988.         push bc
  989.         call sys_SHADOFF
  990.         LD A,e;0xa8;%10101000 ;320x200 mode
  991.         pop de
  992.         push af
  993.         ld bc,0xeff7
  994.         ld a,0x80+EFF7VALUE
  995.         out (c),a
  996.  
  997.         ld a,e
  998.         add a,a
  999.         and 63
  1000.         ld b,0x11               ;sec
  1001.         call send2ve
  1002.  
  1003.         ld a,d
  1004.         rra
  1005.         rra
  1006.         rra
  1007.         and 31 ;h
  1008.         ld b,0x91
  1009.         call send2ve
  1010.  
  1011.         ex de,hl
  1012.         add hl,hl
  1013.         add hl,hl
  1014.         add hl,hl
  1015.         ex de,hl
  1016.         ld a,d
  1017.         and 63                  ;m
  1018.         ld b,0x51
  1019.         call send2ve
  1020.  
  1021.         ld a,h
  1022.         srl a
  1023.         ;sub 20
  1024.         ld b,0x93               ;year
  1025.         call send2ve
  1026.  
  1027.         ld a,l
  1028.         and 31
  1029.         ld b,0x13               ;day
  1030.         call send2ve
  1031.    
  1032.         add hl,hl
  1033.         add hl,hl
  1034.         add hl,hl
  1035.         ld a,h
  1036.         and 15
  1037.         ld b,0x53               ;month
  1038.         call send2ve
  1039.         ld bc,0xeff7
  1040.         ld a,0+EFF7VALUE
  1041.         out (c),a
  1042.         pop af
  1043.         ld e,a                   ;!!! потом будет использоваться в readtime
  1044.         jp shadon_pgsys
  1045.  
  1046.  
  1047. readtime  ;=$-wasresident+resident
  1048. ;sp=0x7fxx
  1049. ;e=gfxmode
  1050. ;out: hl=date, de=time
  1051. ;TODO атомарно
  1052.  
  1053.         call sys_SHADOFF
  1054.         LD A,e;0xa8;%10101000 ;320x200 mode
  1055.         push af
  1056.         push bc
  1057.  
  1058.         ld e, 0x90              ;hours
  1059.         call cmd2ve
  1060.         ld l, a
  1061.         ADD HL,HL
  1062.         ADD HL,HL
  1063.         ADD HL,HL
  1064.         ADD HL,HL
  1065.         ADD HL,HL
  1066.         ADD HL,HL
  1067.         ld e, 0x50              ;Minutes
  1068.         call cmd2ve
  1069.         add a,l
  1070.         ld l,a
  1071.         ADD HL,HL
  1072.         ADD HL,HL
  1073.         ADD HL,HL
  1074.         ADD HL,HL
  1075.         ADD HL,HL
  1076.         ld e, 0x10              ;Seconds
  1077.         call cmd2ve
  1078.         srl a
  1079.         add a,l
  1080.         ld l,a
  1081.         push hl                 ;save time
  1082.  
  1083. ;       Date   
  1084.         ld e, 0x92              ;year
  1085.         call cmd2ve
  1086.         ;add a, 20
  1087.         ld l, a
  1088.         ADD HL,HL
  1089.         ADD HL,HL
  1090.         ADD HL,HL
  1091.         ADD HL,HL
  1092.        
  1093.         ld e, 0x52              ;month
  1094.         call cmd2ve
  1095.         add a,l
  1096.         ld l,a 
  1097.         ADD HL,HL
  1098.         ADD HL,HL
  1099.         ADD HL,HL
  1100.         ADD HL,HL
  1101.         ADD HL,HL
  1102.  
  1103.         ld e, 0x12              ;day
  1104.         call cmd2ve
  1105.         add a,l
  1106.         ld l,a
  1107.         pop de
  1108.  
  1109.         pop bc
  1110.         pop af
  1111.         jp shadon_pgsys_a
  1112.  
  1113.                 endif ;if atm2clock != 1
  1114.  
  1115.         endif ;if atm != 1
  1116.         ;disp $-wasresident+resident
  1117.  
  1118.                
  1119.                 ds 100
  1120. trdos_sp
  1121. varbas_stor
  1122.                 ds 32
  1123.         ent
  1124. resident_sz=$-wasresident
  1125.         display "residentend=",resident+resident_sz,"<=",trdos_catbuf
  1126.  
  1127. wastrdosfs
  1128.         disp COMMANDLINE;PROGSTART
  1129. idle
  1130.         db "idle",0
  1131.         ds PROGSTART-$
  1132.         include "idle.asm"
  1133. idle_sz=$-idle
  1134.         ent
  1135.         disp 0x4000+idle+idle_sz
  1136.         include "trdosfs.asm"
  1137.         include "trdosio.asm"
  1138.         include "bdospg2.asm"
  1139.         ent
  1140. trdosfs_sz=$-wastrdosfs
  1141.         display "trdosfs_sz=",/h,trdosfs_sz,"<=0x1c00"
  1142.        
  1143. end
  1144. wassys
  1145.  
  1146.         SLOT 0
  1147.         page COMPILEPG_SYS0
  1148.         SLOT 1
  1149.         page COMPILEPG_SYS1
  1150.         org 0x0000
  1151. sysbegin
  1152.         include "syskrnl.asm"
  1153.        
  1154.         display "$ before align=",syskrnl_end
  1155.        if 1
  1156.        macro SETHANDLER cmd,addr
  1157.         org wastbdoscmds+cmd
  1158.         db addr&0xff
  1159.         org wastbdoscmds+256+cmd
  1160.         db addr/256
  1161.        endm
  1162.  
  1163.         ds 0xff&(-syskrnl_end)
  1164. tbdoscmds=syskrnl_end+(0xff&(-syskrnl_end))
  1165. wastbdoscmds
  1166.         ds 256,BDOS_fail&0xff
  1167.         ds 256,BDOS_fail/256
  1168.        
  1169.          SETHANDLER CMD_GETPAGEOWNER,BDOS_getpageowner
  1170.          SETHANDLER CMD_WRITEHANDLE,BDOS_writehandle
  1171.          SETHANDLER CMD_WIZNETREAD,BDOS_wiznetread
  1172.          SETHANDLER CMD_YIELDKEEP,BDOS_yieldkeep
  1173.          SETHANDLER CMD_YIELD,BDOS_yield
  1174.          SETHANDLER CMD_READHANDLE,BDOS_readhandle
  1175.           SETHANDLER CMD_GETKEYMATRIX,BDOS_getkeymatrix
  1176.           SETHANDLER CMD_GETTIMER,BDOS_gettimer
  1177.           SETHANDLER CMD_CHECKPID,BDOS_checkpid
  1178.           SETHANDLER CMD_SETSCREEN,BDOS_setscreen
  1179.          SETHANDLER CMD_PRATTR,BDOS_prattr
  1180.          SETHANDLER CMD_SETXY,BDOS_setxy
  1181.          SETHANDLER CMD_SETCOLOR,BDOS_setcolor
  1182.          SETHANDLER CMD_PRCHAR,BDOS_prchar
  1183.          SETHANDLER CMD_GETATTR,BDOS_getattr
  1184.         SETHANDLER CMD_SETDTA,BDOS_setdta;0x1a
  1185.         SETHANDLER CMD_FOPEN,BDOS_fopen;0x0f
  1186.         SETHANDLER CMD_FREAD,BDOS_fread;0x14
  1187.         SETHANDLER CMD_FCLOSE,BDOS_fclose;0x10
  1188.         SETHANDLER CMD_FDEL,BDOS_fdel;0x13 ;DEPRECATED!!!!!
  1189.         SETHANDLER CMD_FCREATE,BDOS_fcreate;0x16
  1190.         SETHANDLER CMD_FWRITE,BDOS_fwrite;0x15
  1191.         SETHANDLER CMD_FSEARCHFIRST,BDOS_fsearchfirst;0x11
  1192.         SETHANDLER CMD_FSEARCHNEXT,BDOS_fsearchnext;0x12
  1193.         SETHANDLER CMD_OPENDIR,BDOS_opendir
  1194.         SETHANDLER CMD_READDIR,BDOS_readdir
  1195.         SETHANDLER CMD_SETDRV,BDOS_setdrv
  1196.         SETHANDLER CMD_PARSEFNAME,BDOS_parse_filename;0x5c
  1197.         SETHANDLER CMD_CHDIR,BDOS_chdir
  1198.         SETHANDLER CMD_GETPATH,BDOS_getpath
  1199.         SETHANDLER CMD_RUNAPP,BDOS_runapp
  1200.         SETHANDLER CMD_NEWAPP,BDOS_newapp
  1201.         SETHANDLER CMD_CLS,BDOS_cls
  1202.         SETHANDLER CMD_SETGFX,BDOS_setgfx
  1203.         SETHANDLER CMD_SETPAL,BDOS_setpal
  1204.         SETHANDLER CMD_GETMAINPAGES,BDOS_getmainpages
  1205.         SETHANDLER CMD_NEWPAGE,BDOS_newpage
  1206.         SETHANDLER CMD_DELPAGE,BDOS_delpage
  1207.         SETHANDLER CMD_MOUNT,BDOS_mount
  1208.         SETHANDLER CMD_FREEZEAPP,BDOS_freezeapp
  1209.         SETHANDLER CMD_MKDIR,BDOS_mkdir
  1210.         SETHANDLER CMD_RENAME,BDOS_rename
  1211.         SETHANDLER CMD_SETSYSDRV,BDOS_setsysdrv
  1212.         ;SETHANDLER CMD_FWRITE_NBYTES,BDOS_fwrite_nbytes
  1213.         SETHANDLER CMD_SCROLLUP,BDOS_scrollup
  1214.         SETHANDLER CMD_SCROLLDOWN,BDOS_scrolldown
  1215.         SETHANDLER CMD_OPENHANDLE,BDOS_openhandle
  1216.         SETHANDLER CMD_CREATEHANDLE,BDOS_createhandle
  1217.         SETHANDLER CMD_CLOSEHANDLE,BDOS_closehandle
  1218.         SETHANDLER CMD_SEEKHANDLE,BDOS_seekhandle
  1219.         SETHANDLER CMD_TELLHANDLE,BDOS_tellhandle
  1220.         SETHANDLER CMD_SETFILETIME,BDOS_setfiletime
  1221.         SETHANDLER CMD_GETFILETIME,BDOS_getfiletime
  1222.         SETHANDLER CMD_GETTIME,BDOS_gettime
  1223.         SETHANDLER CMD_GETXY,BDOS_getxy
  1224.         SETHANDLER CMD_GETAPPMAINPAGES,BDOS_getappmainpages
  1225.         SETHANDLER CMD_DROPAPP,BDOS_dropapp
  1226.         SETHANDLER CMD_WIZNETOPEN,BDOS_wiznetopen
  1227.         SETHANDLER CMD_WIZNETCLOSE,BDOS_wiznetclose
  1228.         SETHANDLER CMD_WIZNETWRITE,BDOS_wiznetwrite
  1229.         SETHANDLER CMD_GETFILESIZE,BDOS_getfilesize
  1230.         SETHANDLER CMD_DELETE,BDOS_delete
  1231.         SETHANDLER CMD_GETCHILDRESULT,BDOS_getchildresult
  1232.         SETHANDLER CMD_SETWAITING,BDOS_setwaiting
  1233.         SETHANDLER CMD_SETBORDER,BDOS_setborder
  1234.         SETHANDLER CMD_READSECTORS,BDOS_readsectors
  1235.         SETHANDLER CMD_WRITESECTORS,BDOS_writesectors
  1236.         SETHANDLER CMD_SETMAINPAGE,BDOS_setmainpage
  1237.         SETHANDLER CMD_SETMUSIC,BDOS_setmusic
  1238.         SETHANDLER CMD_PLAYCOVOX,BDOS_playcovox
  1239.         SETHANDLER CMD_GETSTDINOUT,BDOS_getstdinout
  1240.         SETHANDLER CMD_SETSTDINOUT,BDOS_setstdinout
  1241.         SETHANDLER CMD_HIDEFROMPARENT,BDOS_hidefromparent
  1242.         SETHANDLER CMD_RNDRD,BDOS_rndrd
  1243.         SETHANDLER CMD_RNDWR,BDOS_rndwr
  1244.         SETHANDLER CMD_GETFILINFO,BDOS_getfilinfo
  1245.         SETHANDLER CMD_RESERV_1,BDOS_reserv_1
  1246.         SETHANDLER CMD_GETCONFIG,BDOS_get_config
  1247.         SETHANDLER CMD_GETMEMPORTS,BDOS_getmemports
  1248.         SETHANDLER CMD_SETTIME,BDOS_settime
  1249.         SETHANDLER CMD_GETPAL,BDOS_getpal
  1250.          
  1251.          org wastbdoscmds+512
  1252. trecode=tbdoscmds+512
  1253.          
  1254.        else
  1255.  
  1256. tbdoscmds=syskrnl_end
  1257. wastbdoscmds
  1258.          db CMD_WRITEHANDLE
  1259.          db CMD_WIZNETREAD
  1260.          db CMD_YIELDKEEP
  1261.          db CMD_YIELD
  1262.          db CMD_READHANDLE
  1263.           db CMD_GETKEYMATRIX
  1264.           db CMD_GETTIMER
  1265.           db CMD_CHECKPID
  1266.           db CMD_SETSCREEN
  1267.          db CMD_PRATTR
  1268.          db CMD_SETXY
  1269.          db CMD_SETCOLOR
  1270.          db CMD_PRCHAR
  1271.          db CMD_GETATTR
  1272.         db CMD_SETDTA;0x1a
  1273.         db CMD_FOPEN;0x0f
  1274.         db CMD_FREAD;0x14
  1275.         db CMD_FCLOSE;0x10
  1276.         db CMD_FDEL;0x13 ;DEPRECATED!!!!!
  1277.         db CMD_FCREATE;0x16
  1278.         db CMD_FWRITE;0x15
  1279.         db CMD_FSEARCHFIRST;0x11
  1280.         db CMD_FSEARCHNEXT;0x12
  1281.         db CMD_OPENDIR
  1282.         db CMD_READDIR
  1283.         db CMD_SETDRV
  1284.         db CMD_PARSEFNAME;0x5c
  1285.         db CMD_CHDIR
  1286.         db CMD_GETPATH
  1287.         db CMD_RUNAPP
  1288.         db CMD_NEWAPP
  1289.         db CMD_CLS
  1290.         db CMD_SETGFX
  1291.         db CMD_SETPAL
  1292.         db CMD_GETMAINPAGES
  1293.         db CMD_NEWPAGE
  1294.         db CMD_DELPAGE
  1295.         db CMD_MOUNT
  1296.         db CMD_FREEZEAPP
  1297.         db CMD_MKDIR
  1298.         db CMD_RENAME
  1299.         db CMD_SETSYSDRV
  1300.         ;db CMD_FWRITE_NBYTES
  1301.         db CMD_SCROLLUP
  1302.         db CMD_SCROLLDOWN
  1303.         db CMD_OPENHANDLE
  1304.         db CMD_CREATEHANDLE
  1305.         db CMD_CLOSEHANDLE
  1306.         db CMD_SEEKHANDLE
  1307.         db CMD_TELLHANDLE
  1308.         db CMD_SETFILETIME
  1309.         db CMD_GETFILETIME
  1310.         db CMD_GETTIME
  1311.         db CMD_GETXY
  1312.         db CMD_GETAPPMAINPAGES
  1313.         db CMD_DROPAPP
  1314.         db CMD_WIZNETOPEN
  1315.         db CMD_WIZNETCLOSE
  1316.         db CMD_WIZNETWRITE
  1317.         db CMD_GETFILESIZE
  1318.         db CMD_DELETE
  1319.         db CMD_GETCHILDRESULT
  1320.         db CMD_SETWAITING
  1321.         db CMD_SETBORDER
  1322.         db CMD_READSECTORS
  1323.         db CMD_WRITESECTORS
  1324.         db CMD_SETMAINPAGE
  1325.         db CMD_SETMUSIC
  1326.         db CMD_PLAYCOVOX
  1327.         db CMD_GETSTDINOUT
  1328.         db CMD_SETSTDINOUT
  1329.         db CMD_HIDEFROMPARENT
  1330.         db CMD_RNDRD
  1331.         db CMD_RNDWR
  1332.         db CMD_GETFILINFO
  1333.         db CMD_RESERV_1
  1334.         db CMD_GETCONFIG
  1335.         db CMD_GETMEMPORTS
  1336.         db CMD_SETTIME
  1337.         db CMD_GETPAL
  1338. nbdoscmds=$-wastbdoscmds
  1339.         dw BDOS_getpal
  1340.         dw BDOS_settime
  1341.         dw BDOS_getmemports
  1342.         dw BDOS_get_config
  1343.         dw BDOS_reserv_1
  1344.         dw BDOS_getfilinfo
  1345.         dw BDOS_rndwr
  1346.         dw BDOS_rndrd
  1347.         dw BDOS_hidefromparent
  1348.         dw BDOS_setstdinout
  1349.         dw BDOS_getstdinout
  1350.         dw BDOS_playcovox
  1351.         dw BDOS_setmusic
  1352.         dw BDOS_setmainpage
  1353.         dw BDOS_writesectors
  1354.         dw BDOS_readsectors
  1355.         dw BDOS_setborder
  1356.         dw BDOS_setwaiting
  1357.         dw BDOS_getchildresult
  1358.         dw BDOS_delete
  1359.         dw BDOS_getfilesize
  1360.         dw BDOS_wiznetwrite
  1361.         dw BDOS_wiznetclose
  1362.         dw BDOS_wiznetopen
  1363.         dw BDOS_dropapp
  1364.         dw BDOS_getappmainpages
  1365.         dw BDOS_getxy
  1366.         dw BDOS_gettime
  1367.         dw BDOS_getfiletime
  1368.         dw BDOS_setfiletime
  1369.         dw BDOS_tellhandle
  1370.         dw BDOS_seekhandle
  1371.         dw BDOS_closehandle
  1372.         dw BDOS_createhandle
  1373.         dw BDOS_openhandle
  1374.         dw BDOS_scrolldown
  1375.         dw BDOS_scrollup
  1376.         ;dw BDOS_fwrite_nbytes
  1377.         dw BDOS_setsysdrv
  1378.         dw BDOS_rename
  1379.         dw BDOS_mkdir
  1380.         dw BDOS_freezeapp
  1381.         dw BDOS_mount
  1382.         dw BDOS_delpage
  1383.         dw BDOS_newpage
  1384.         dw BDOS_getmainpages
  1385.         dw BDOS_setpal
  1386.         dw BDOS_setgfx
  1387.         dw BDOS_cls
  1388.         dw BDOS_newapp
  1389.         dw BDOS_runapp
  1390.         dw BDOS_getpath
  1391.         dw BDOS_chdir
  1392.         dw BDOS_parse_filename
  1393.         dw BDOS_setdrv
  1394.         dw BDOS_readdir
  1395.         dw BDOS_opendir
  1396.         dw BDOS_fsearchnext
  1397.         dw BDOS_fsearchfirst
  1398.         dw BDOS_fwrite
  1399.         dw BDOS_fcreate
  1400.         dw BDOS_fdel ;DEPRECATED!!!!!
  1401.         dw BDOS_fclose
  1402.         dw BDOS_fread
  1403.         dw BDOS_fopen
  1404.         dw BDOS_setdta
  1405.          dw BDOS_getattr
  1406.          dw BDOS_prchar
  1407.          dw BDOS_setcolor
  1408.          dw BDOS_setxy
  1409.          dw BDOS_prattr
  1410.           dw BDOS_setscreen
  1411.           dw BDOS_checkpid
  1412.           dw BDOS_gettimer
  1413.           dw BDOS_getkeymatrix
  1414.          dw BDOS_readhandle
  1415.          dw BDOS_yield
  1416.          dw BDOS_yieldkeep
  1417.          dw BDOS_wiznetread
  1418.          dw BDOS_writehandle
  1419. trecode=tbdoscmds+$-wastbdoscmds
  1420.        endif
  1421.  
  1422. ;TODO хранить прямо в текстовом экране? а если затрут, то восстанавливать? по какому событию?
  1423.         incbin "../_sdk/codepage/866toatm"
  1424.  
  1425. syscodesz=trecode+256-wassyscode
  1426.         display "syscodesz=",/h,syscodesz," < minstack=",/h,SYSMINSTACK
  1427.  
  1428. wasuserkernel
  1429.         disp 0x0000
  1430.         include "userkrnl.asm"
  1431.         ent
  1432. userkernel_sz=$-wasuserkernel
  1433.         ;display "wasuserkernel=",/d,wasuserkernel
  1434.         ;display "wasuserkernel_end=",/d,$
  1435.         ;display "userkernel_sz=",/d,userkernel_sz
  1436. ;wastjump
  1437. ;        include "tjump.asm"
  1438. ;tjump_sz=$-wastjump
  1439.         ds 0x4000-$
  1440.         incbin "../fatfs4os/fatfs.raw"
  1441. sysend
  1442.  
  1443.         ;display "begin=",/d,begin
  1444.         ;display "end=",/d,end
  1445.        
  1446.         ;display "sysbegin=",/d,sysbegin
  1447.         ;display "sysend=",/d,sysend
  1448.  
  1449.         SLOT 1
  1450.         page COMPILEPG_INIT
  1451.         savebin "initcode.c",begin,end-begin
  1452.        
  1453.         SLOT 0
  1454.         page COMPILEPG_SYS0
  1455.         SLOT 1
  1456.         page COMPILEPG_SYS1
  1457.         savebin "syscode.c",sysbegin,sysend-sysbegin
  1458.        
  1459.         LABELSLIST "..\..\us\user.l",1
  1460.