?login_element?

Subversion Repositories NedoOS

Rev

Rev 1895 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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