Subversion Repositories NedoOS

Rev

Rev 115 | Rev 141 | 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. TOPDOWNMEM=1
  6.  
  7.         if atm==3
  8. memport0000=#37f7
  9. memport4000=#77f7
  10. memport8000=#b7f7
  11. memportc000=#f7f7
  12. memportrom0000=#3ff7
  13. memportrom4000=#7ff7
  14. memportrom8000=#bff7
  15. memportromc000=#fff7
  16. pagexor=#ff
  17.         else
  18. memport0000=#3ff7
  19. memport4000=#7ff7
  20. memport8000=#bff7
  21. memportc000=#fff7
  22. memportrom0000=#3ff7
  23. memportrom4000=#7ff7
  24. memportrom8000=#bff7
  25. memportromc000=#fff7
  26. pagexor=#7f
  27.         endif
  28.        
  29.         if NEMOIDE==1
  30. ;ёїхьр Nemo:
  31. hddstat=#F0
  32. hddcmd=#F0
  33. hddhead=#D0
  34. hddcylhi=#B0
  35. hddcyllo=#90
  36. hddsec=#70
  37. hddcount=#50
  38. hdderr=#30
  39. hdddatlo=#10
  40. hdddathi=#11
  41. hddupr=#C8
  42. hdduprON=0
  43.         else
  44. ;ёїхьр ATM:
  45. hddstat=#FEEF
  46. hddcmd=#FEEF
  47. hddhead=#FECF
  48. hddcylhi=#FEAF
  49. hddcyllo=#FE8F
  50. hddsec=#FE6F
  51. hddcount=#FE4F
  52. hdderr=#FE2F
  53. hdddatlo=#FE0F
  54. hdddathi=#FF0F
  55. hddupr=#FEBE ;яЁш єёЄрэютыхээюь b7 FFBA
  56. hdduprON=#FFBA
  57. hddupr1=#F7
  58. hddupr0=#77
  59.         endif
  60. memport8000_hi=memport8000/256
  61. memportc000_hi=memportc000/256
  62.  
  63. SYSMINSTACK=0x3b00
  64.  
  65. resident=0x6000;#6000+8000 (уфх эх чрЄЁєЄ яЁш юўшёЄъх ¤ъЁрэр) ;pgtrdosfs
  66. trdos_catbuf=0x6300;#3200 ;,#900 ;pgtrdosfs (#4000)
  67. trdos_sectorbuf=0x6c00
  68. trdos_fcbbuf=0x6d00 ;size=0x200*trdos_MAXFILES
  69. trdos_MAXFILES=8
  70. INTSTACK1=0x3f00 ;kernelspace (фы  тїюфр т юсЁрсюЄўшъ схч яюЁўш ёЄхър)
  71. INTSTACK2=0x5f00;#6000 ;pgkillable ш pgtrdosfs (Ёрсюўшщ ёЄхъ юсЁрсюЄўшър яЁхЁ√трэшщ) (>=#4000, шэрўх эхы№ч  т√ъы■ўшЄ№ Єхэхт√х яюЁЄ√)
  72. TRDOSSTACK=0x5f00-96;#6000-96 ;ўЄюс√ эх яхЁхёхърыюё№ ё INTSTACK (т яЁюьхцєЄъх ьхцфє яЁхъы■ўхэш ьш ёЄЁрэшЎ ьюцхЄ яЁюшчющЄш ёшёЄхьэюх яЁхЁ√трэшх), эю ш эр ¤ъЁрэ эх яюярыю
  73. BDOSSTACK=0x4000 ;kernelspace
  74. STACK=0x4000 ;userspace
  75. ;яЁш т√чютх BDOS ёЄхъ эхъюЄюЁюх тЁхь  Єръющ цх, ъръ т ■чхЁёяхщёх
  76. ;яю¤Єюьє эр тїюфх т BDOS эрфю шьхЄ№ т #4000...#ffff ёЄЁрэшЎ√, ъюЄюЁ√х эх црыъю
  77. ;яЁхфяюырурхЄё , ўЄю ■чхЁ эх шьххЄ ёЄхъ эшцх #3b00, шэрўх юэ чрЄЁ╕Є ёшёЄхьє
  78.  
  79.         include "../_sdk/sys_h.asm"
  80.  
  81.         if TOPDOWNMEM
  82. pgtrdosfs=pagexor-(sys_npages-1)
  83. pgfatfs=pagexor-(sys_npages-2)
  84. pgsys=pagexor-(sys_npages-3)
  85. pgfatfs2=pagexor-(sys_npages-4) ;structs
  86.         else
  87. pgtrdosfs=pagexor-8
  88. pgfatfs=pagexor-9
  89. pgsys=pagexor-10
  90. pgfatfs2=pagexor-11 ;structs
  91.         endif
  92.  
  93. pgkillable=pagexor-4 ;т 128K ярь Єш, Є.ъ. ьюцэю яюЁЄшЄ№
  94. ;pgfirstfree=pagexor-11
  95.  
  96. pgscr0_0=pagexor-1
  97. pgscr0_1=pagexor-5
  98. pgscr1_0=pagexor-3
  99. pgscr1_1=pagexor-7
  100.  
  101. fd_system=%01010111 ;%0x01sx1x ;фы  эхшёяЁртыхээюую └╥╠2 эрфю A9=1, р эюьхЁ ёЄЁрэшЎ√ т #7ffd эх сєфхЄ тыш Є№, хёыш рфЁхёрЎш  яю memportc000
  102. fd_system_getchar=%01010110 ;%0x01sx1x ;фы  эхшёяЁртыхээюую └╥╠2 эрфю A9=1, р эюьхЁ ёЄЁрэшЎ√ т #7ffd эх сєфхЄ тыш Є№, хёыш рфЁхёрЎш  яю memportc000
  103. fd_user=%01000111 ;%0x00sx1x ;фы  эхшёяЁртыхээюую └╥╠2 эрфю A9=1, р эюьхЁ ёЄЁрэшЎ√ т #7ffd эх сєфхЄ тыш Є№, хёыш рфЁхёрЎш  яю memportc000
  104.  
  105. ;єёыютэ√х ёЄЁрэшЎ√ фы  sjasm
  106. COMPILEPG_INIT=0
  107. COMPILEPG_SYS0=4
  108. COMPILEPG_SYS1=6
  109.  
  110.         SLOT 1
  111.         page COMPILEPG_INIT
  112.         org #6000
  113. begin
  114.         xor a
  115.         out (#fe),a
  116.  
  117.         LD (IY+1),#CC
  118.  
  119.         if 1==0
  120.        ;IFN em3d13
  121.        ; LD HL,ONERR
  122.        ; LD (23747),HL
  123.        ;ENDIF
  124.        LD A,(23833)
  125.        ADD A,"A
  126.       LD (src),A
  127.       LD (dst),A
  128.       XOR A
  129.       LD (23658),A ;#5c6a
  130.      ;LD L,A,H,L
  131.      ;LD (23802),HL
  132.        endif
  133.       XOR A
  134.         ld (#5d10),a
  135.        
  136.        ;ld hl,#c9f1 ;pop af:ret
  137.        ;ld (#5cc2),hl
  138.        
  139.        ld bc,#fbdf ;x
  140.        in l,(c)
  141.        ld b,#ff
  142.        in h,(c)
  143.        ld (init_oldmousecoords),hl
  144.  
  145. ;;;;;;;;;;;;;;;;;;; set gfx mode ;;;;;;;;;;;;;;;;;
  146.        halt
  147.        LD A,%10101000 ;320x200 mode
  148.        ;LD A,%10101010 ;640x200 mode
  149.        ;LD A,%10101110 ;textmode
  150.        CALL INIT_OUTSHADON
  151.        
  152.        call INIT_blackpal
  153.  
  154.        di
  155.  
  156.        if atm==3
  157.         ld a,#7f-5
  158.         ld bc,memportrom4000
  159.         out (c),a ;юЄъы■ўрхь 7ffd
  160.         ld a,#7f-2
  161.         ld bc,memportrom8000
  162.         out (c),a ;юЄъы■ўрхь 7ffd
  163.         ;ld a,#7f-2
  164.         ld bc,memportromc000
  165.         out (c),a ;юЄъы■ўрхь 7ffd
  166.        endif
  167.  
  168.        call findpgdos
  169.         ld lx,a
  170.        ld (sys_pgdos),a ;фю єёЄрэютъш ЁхчшфхэЄр
  171.  
  172.        ld a,pgsys
  173.        call INIT_setpg_c000
  174.        ld hl,#8000
  175.        ld de,#c000
  176.        ld bc,#4000
  177.        ldir
  178.        
  179.        ld a,pgtrdosfs
  180.        call INIT_setpg_c000
  181.        ld hl,wastrdosfs
  182.        ld de,#c000+idle;COMMANDLINE;PROGSTART ;idle code
  183.        ld bc,trdosfs_sz
  184.        ldir
  185.        ld hl,#5c00
  186.        ld de,#c000+#1c00
  187.        ld bc,#0400;#5d3b-#5c00
  188.        ldir
  189.        ld hl,wasresident
  190.        ld de,resident+#c000-#4000
  191.        ld bc,resident_sz
  192.        ldir
  193.        
  194.        ld hl,#c000+trdos_fcbbuf-#4000
  195.        ld d,h
  196.        ld e,l
  197.        inc de
  198.        ld bc,0x200*trdos_MAXFILES-1
  199.        ld (hl),l;0
  200.        ldir
  201.  
  202.        ;ld a,pgidle
  203.        ;call INIT_setpg_c000
  204.        ;ld hl,wasidle
  205.        ;ld de,#0100+#c000
  206.        ;ld bc,idle_sz
  207.        ;ldir
  208.        
  209.        ld a,pgsys
  210.        call INIT_setpg_8000
  211.        ld a,pgfatfs
  212.        call INIT_setpg_c000
  213.        
  214. ;яхЁхсЁрё√трхь 16K єяръютрээ√щ сыюъ т #c000
  215.        ld hl,wassys+#3fff
  216.        ld de,#ffff
  217.        ld bc,#4000
  218.        lddr
  219. ;Ёрёяръют√трхь т #6400
  220.        ld hl,#c000;wassys
  221.        ld de,#6400;#8000
  222.        call DEC40 ;Ёрёяръют√трхь т #8000 (Єрь єцх тъы■ўхэ√ ёшёЄхьэ√х ёЄЁрэшўъш)
  223. ;яхЁхсЁрё√трхь 32K шч #6400 т #8000
  224.        ld hl,#6400+#7fff
  225.        ld de,#8000+#7fff
  226.        ld bc,#8000
  227.        lddr
  228.  
  229. fatfspatchaddr=#c000
  230.        
  231.        ld hl,devices_init
  232.        ld (0xc000+FFS_DRV.init),hl
  233.        ld hl,disk_status
  234.        ld (0xc000+FFS_DRV.status),hl
  235.         ld hl,devices_read      ;read to userspace
  236.        ld (0xc000+FFS_DRV.rd_to_usp),hl
  237.         ld hl,devices_readnopg  ;read to buffer
  238.        ld (0xc000+FFS_DRV.rd_to_buf),hl
  239.         ld hl,devices_write     ;write from userspace
  240.        ld (0xc000+FFS_DRV.wr_fr_usp),hl
  241.         ld hl,devices_writenopg ;write from buffer
  242.        ld (0xc000+FFS_DRV.wr_fr_buf),hl
  243.        ld hl,get_fattime
  244.        ld (0xc000+FFS_DRV.RTC),hl
  245.         ld hl,strcpy_lib2usp   
  246.        ld (0xc000+FFS_DRV.strcpy_lib2usp),hl
  247.        ld hl,strcpy_usp2lib
  248.        ld (0xc000+FFS_DRV.strcpy_usp2lib),hl
  249.        ld hl,memcpy_lib2usp
  250.        ld (0xc000+FFS_DRV.memcpy_lib2usp),hl
  251.        ld hl,memcpy_usp2lib
  252.        ld (0xc000+FFS_DRV.memcpy_usp2lib),hl
  253.        ld hl,memcpy_buf2usp
  254.        ld (0xc000+FFS_DRV.memcpy_buf2usp),hl
  255.        ld hl,memcpy_usp2buf
  256.        ld (0xc000+FFS_DRV.memcpy_usp2buf),hl
  257.  
  258. ;шэшЎшрышчрЎш  ьхэхфцхЁр ярь Єш ш тїюф т ■чхЁёяхщё:
  259. ;HALT (ўЄюс√ яЁхЁ√трэшх эх яЁюшчю°ыю ъюуфр эх эрфю)
  260. ;[эрчэрўрхь ёЄЁрэшЎ√ ёшёЄхьёяхщёр (юфэр шч эшї фюыцэр с√Є№ Єрър  цх, ъръ т ■чхЁёяхщёх) - єцх хёЄ№ юс∙р  ёЄЁрэшЎр 5]
  261. ;т ■чхЁёяхщёх эрчэрўрхь эшцэ■■ ёЄЁрэшЎє ё ъхЁэрыхь (тьхёЄю ╧╟╙)
  262.        ld a,fd_user
  263.        out (#fd),a
  264.        if atm==3
  265.         ld a,#7f
  266.         ld bc,memportrom0000
  267.         out (c),a ;юЄъы■ўрхь ╧╟╙
  268.         ld a,#7f-5
  269.         ld bc,memportrom4000
  270.         out (c),a ;юЄъы■ўрхь 7ffd
  271.         ld a,#7f-2
  272.         ld bc,memportrom8000
  273.         out (c),a ;юЄъы■ўрхь 7ffd
  274.         ;ld a,#7f-2
  275.         ld bc,memportromc000
  276.         out (c),a ;юЄъы■ўрхь 7ffd
  277.        endif
  278.        ld a,pgtrdosfs ;idle
  279.        ld bc,memport0000
  280.        out (c),a
  281.        
  282.        ;ld hl,wasuserkernel+#8000
  283.        ;ld de,0
  284.        ;ld bc,userkernel_sz
  285.        ;ldir
  286.        
  287.        ld a,fd_system
  288.        out (#fd),a
  289.        if atm==3
  290.         ld a,#7f
  291.         ld bc,memportrom0000
  292.         out (c),a ;юЄъы■ўрхь ╧╟╙
  293.         ;4000,8000,c000 єцх юЄъы■ўшыш 7ffd т√°х
  294.        endif
  295.        ld a,pgsys
  296.        ld bc,memport0000
  297.        out (c),a
  298. ;т ёшёЄхьёяхщёх:
  299. ;тъы■ўшЄ№ fatfs
  300. ;яюёЄртшЄ№ ЁхчшфхэЄ т 7fxx
  301. ;яхЁхїюфшь т sys_intq, р юЄЄєфр т init_resident
  302.  
  303.        if 1==0
  304.        ld a,lx;(sys_pgdos)
  305.        ld bc,memportrom0000
  306.        out (c),a
  307.        LD A,%10101000 ;320x200 mode
  308.         ld bc,#ff77 ;shadow ports off, palette off
  309.        out (c),a
  310.        ld a,1
  311.        ld c,1
  312.        call #3d13
  313.        ld c,#18
  314.        call #3d13
  315.        ld hl,#c000
  316.        ld de,#0000
  317.        ld bc,#0805
  318.        call #3d13
  319.        jr $
  320.        endif
  321.  
  322.        ld sp,BDOSSTACK
  323.        ;ei
  324.        ;halt ;ўЄюс√ яЁхЁ√трэшх эх яЁюшчю°ыю ъюуфр эх эрфю
  325.        ;di
  326.        ;jr $
  327. init_oldmousecoords=$+1
  328.        ld hl,0
  329.        ld (sys_oldmousecoords),hl
  330.          call BDOS_setpgstructs
  331.          ld hl,0xc000
  332.          ld de,0xc001
  333.          ld bc,0x3fff
  334.          ld (hl),l;0
  335.          ldir ;эх яюьюуыю
  336.        jp setkernelpages_go
  337.  
  338.        
  339. INIT_OUTSHADON
  340.        ;LD BC,#FF77 ;shadow ports remain off
  341.        LD BC,#BD77 ;shadow ports and palette remain on
  342.        LD IX,10835
  343.        PUSH IX
  344.        JP #3D2F
  345.  
  346. INIT_setpg_low
  347.        LD BC,memportrom0000 ;page for #0000..#3fff
  348.        OUT (C),A
  349.        ret
  350.  
  351. INIT_setpg_8000
  352.        LD BC,memport8000 ;page for #8000..#bfff
  353.        OUT (C),A
  354.        ret
  355.  
  356. INIT_setpg_c000
  357.        LD BC,memportc000 ;page for #c000..#ffff
  358.        OUT (C),A
  359.        ret
  360.  
  361. findpgdos
  362. ;хёыш эх эрщЄш ёЄЁрэшЎє Єхъє∙хую фюёр, Єю эр ёЄрЁ√ї тхЁёш ї ╧╟╙ ZX Evo эх сєфхЄ ЁрсюЄрЄ№ (т ёЄЁрэшЎх #83 яюўхьє-Єю эх фюё яю єьюыўрэш■)
  363.        call crcdos
  364.        ld (doscrchi),de
  365.        ld (doscrclo),bc
  366.        ld lx,#83
  367. findpgdos0
  368.        ld a,lx
  369.        call INIT_setpg_low
  370.        call crcdos
  371. doscrchi=$+1
  372.        ld hl,0
  373.        or a
  374.        sbc hl,de
  375.        jr nz,doscrcbad
  376. doscrclo=$+1
  377.        ld hl,0
  378.        or a
  379.        sbc hl,bc
  380.        jr nz,doscrcbad
  381.        ld a,lx
  382.        ret
  383. doscrcbad
  384.        ld a,lx
  385.        add a,4
  386.        ld lx,a
  387.        cp #c0
  388.        jr c,findpgdos0
  389.        ld a,#83 ;not found
  390.        ret
  391. crcdos
  392.        ld hl,#0000
  393.        ld bc,0
  394.        ld de,0
  395. crcdos0
  396.        ld a,d
  397.        add a,a
  398.        rl c
  399.        rl b
  400.        rl e
  401.        rl d
  402.        xor b
  403.        ld b,a
  404.        ld a,(hl)
  405.        xor c
  406.        ld c,a
  407.        inc hl
  408.        bit 6,h
  409.        jr z,crcdos0
  410.        ret
  411.  
  412. INIT_blackpal
  413.        LD HL,blackpalend
  414.        ;halt ;halt хёЄ№ т√°х - єсЁрэю, ўЄюс√ эх ётхЄшыюё№ эшўхую
  415.        LD DE,#a80f ;#ab=6912 ;palette on, EGA, turbo
  416.        LD BC,#BD77
  417.        OUT (C),D
  418. INIT_setpal0 LD A,E
  419.         and 7
  420.        BIT 3,E
  421.        OUT (#FE),A
  422.        JR Z,$+4
  423.        OUT (#F6),A
  424.        LD A,(HL)
  425.        DEC HL
  426.        ld b,(hl) ;DDp palette low bits
  427.        dec hl
  428.        ld c,#ff
  429.        OUT (c),a;(#FF),A
  430.        DEC E
  431.        JP P,INIT_setpal0
  432.        ret
  433.  
  434.        ds 32,#f3
  435. blackpalend=$-1
  436.  
  437.        include "unmegalz.asm" ;DEC40
  438.  
  439. wasresident
  440.        ;disp resident
  441. readmouse=$-wasresident+resident
  442. ;sp=#7fxx
  443. ;e=gfxmode
  444. ;out: hl=mousecoords, d=mousebuttons
  445.        call sys_SHADOFF
  446.        ld bc,#fadf ;buttons
  447.        in d,(c)
  448.        inc b ;ld bc,#fbdf ;x
  449.        in l,(c)
  450.        ld b,#ff ;y
  451.        in h,(c)
  452. shadon_pgsys=$-wasresident+resident
  453.        LD A,e;%10101000 ;320x200 mode
  454. shadon_pgsys_a=$-wasresident+resident
  455.        CALL sys_SHADON
  456.         if atm==3
  457.        ld a,#7f
  458.        call sys_setpg_low
  459.        ld a,pgsys
  460.         ld bc,memport0000
  461.        jr sys_outca_jr
  462.         else
  463.        ld a,#7f-(pagexor-pgsys)
  464.         endif
  465. sys_setpg_low=$-wasresident+resident
  466.         ld bc,memportrom0000
  467.        jr sys_outca_jr
  468. sys_SHADOFF=$-wasresident+resident
  469. sys_pgdos=$+1 ;фы  ярЄўр
  470.         ld a,#83 ;48 basic switchable to DOS
  471.         call sys_setpg_low
  472.        LD A,e;%10101000 ;320x200 mode
  473.         ld bc,#ff77 ;shadow ports off, palette off
  474. sys_outca_jr
  475.        out (c),a
  476.         ret
  477. sys_SHADON=$-wasresident+resident
  478.        LD bc,10835
  479.        PUSH bc
  480.        LD BC,#BD77 ;shadow ports and palette remain on
  481.        JP #3D2F
  482.  
  483. ;TODO єсЁрЄ№ т pgtrdos
  484. dos3d13_resident=$-wasresident+resident
  485. ;ёхщўрё тъы■ўхэр pg5
  486. ;iy=23610
  487.        ld (dos_sp),sp
  488.        ld sp,TRDOSSTACK ;эрфю ёЄхъ т #4000+ (эх яхЁхёхър■∙шщё  ё INTSTACK, Є.ъ. ёхщўрё ьюцхЄ яЁюшчющЄш ёшёЄхьэюх яЁхЁ√трэшх), яю єьюыўрэш■ ёЄхъ с√ы т #3fxx
  489.        ;call swap_sysvars
  490.        ex af,af'
  491.        call sys_SHADOFF ;тъы■ўшыш ╧╟╙
  492.        ex af,af'
  493.         push de ;e=gfxmode
  494.        exx
  495.         call EM3D13PP;0x3d13
  496.         pop de ;e=gfxmode
  497.         di
  498.        call shadon_pgsys ;т√ъы■ўшыш ╧╟╙ (эхрЄюьрЁэю - фтх чряшёш т яюЁЄ!!!)
  499.         ei
  500.        ;call swap_sysvars
  501. dos_sp=$+1-wasresident+resident
  502.        ld sp,0
  503.        ret
  504.  
  505. minmes=$-wasresident+resident
  506.    ld h,a
  507.    xor a
  508.    srl h
  509.    rra
  510.    srl h
  511.    rra
  512.    srl h
  513.    rra
  514.    ret
  515.  
  516. bcd2bin=$-wasresident+resident
  517.    ld b,0xdf
  518.    out (c),a
  519.    ld b,0xbf
  520.    in a,(c)
  521.    ret
  522.    
  523. readtime=$-wasresident+resident
  524. ;sp=#7fxx
  525. ;e=gfxmode
  526. ;out: hl=date, de=time
  527. ;TODO рЄюьрЁэю
  528.        call sys_SHADOFF
  529.        LD A,e;%10101000 ;320x200 mode
  530.        push af
  531.      ld bc,0xeff7
  532.      ld a,0x80
  533.      out (c),a
  534.    ld a,0x0b
  535.    ld bc,0xdff7
  536.    out (c),a
  537.    ld b,0xbf
  538.    in a,(c)
  539.    or 0x04
  540.    out (c),a
  541.     xor a               ;sec
  542.    call bcd2bin
  543.    srl a
  544.    ld e,a
  545.    
  546.     ld a,2              ;min
  547.    call bcd2bin
  548.    call minmes
  549.    add a,e
  550.    ld e,a
  551.    ld d,h
  552.    
  553.     ld a,4              ;h
  554.    call bcd2bin
  555.    add a,a
  556.    add a,a
  557.    add a,a
  558.    add a,d
  559.    ld d,a
  560.    
  561.     ld a,7              ;day
  562.    call bcd2bin
  563.    ld l,a
  564.    
  565.     ld a,8              ;mes
  566.    call bcd2bin
  567.    call minmes
  568.    add a,l
  569.    ld l,a
  570.    
  571.     ld a,9              ;god
  572.    call bcd2bin
  573.    add a,20
  574.    add a,a
  575.    add a,h
  576.    ld h,a
  577.      ld bc,0xeff7
  578.      xor a
  579.      out (c),a
  580.  
  581.        pop af
  582.        jp shadon_pgsys_a
  583.  
  584.         disp $-wasresident+resident
  585. ;ёюсёЄтхээю фpрщтхp, рэрыюушўэ√щ #3ф13 (ш ё хую шёяюы№чютрэшхь)
  586. ;эр т√їюфх - A pртэю 0 - тёх юъхщ, эх 0 - ю°шсър
  587. ;тьхёЄю  яpюЎхфyp DRAW_WINDOWS, PRINT_WINDOWS ш REST_WINDOW
  588. ;шёяюы№чyщ ётюш.
  589. ;Kurleson
  590. EM3D13PP
  591.        PUSH    HL
  592.        LD      HL,(23613)
  593.        LD      (eRR),HL
  594.       LD      HL,ONERR;DDRV
  595.       LD      (#5CC3),HL
  596.        LD      HL,ERR
  597.        EX      (SP),HL
  598.        LD      (23613),SP
  599.        EX      AF,AF'
  600. ;AC3=$+1
  601.        LD      A,#C3
  602.        LD      (#5CC2),A
  603.        XOR     A
  604.        LD      (23823),A
  605.        LD      (23824),A
  606.        LD      (eRR2),A
  607.        EX      AF,AF'
  608.        PUSH BC,DE,HL
  609.        LD HL,0x5e00;5f00
  610.        LD DE,SYSBUF
  611.        LD BC,256
  612.        LDIR
  613.        POP HL,DE,BC
  614. EMCALL  JP      #3D13
  615. ERR
  616. eRR=$+1
  617.        LD      HL,#0000
  618.        LD      (23613),HL ;??? eRR цх эх ьхэ хЄё  ???
  619.        LD      A,#C9
  620.        LD      (#5CC2),A
  621.        LD DE,0x5e00;5f00
  622.        LD HL,SYSBUF
  623.        LD BC,256
  624.        LDIR
  625. eRR2=$+1
  626.        LD      A,#00
  627.        OR      A
  628.        RET     NZ
  629.        LD      A,(23823)
  630.        AND     A
  631.        RET     Z
  632.        PUSH    AF
  633.       LD A,2
  634.       OUT (-2),A
  635.       ;PUSH    IX
  636.  
  637.       ;LD      IX,DISKERROR_TBL ;чфхё№ y ьхэ  pшёyхЄё  юъэю
  638.       ;CALL    DRAW_WINDOWS     ;ё эрфяшё№■ DISK ERROR
  639.       ;CALL    PRINT_WINDOWS
  640.        XOR     A
  641.        IN      A,(#FE)
  642.        CPL
  643.        AND     #1F
  644.        JR      Z,$-6             ;эрцрЄр ыш ъэюяър
  645.       ;CALL    REST_WINDOW       ;тюёЄрэютшыш Єю, ўЄю с√ыю яюф
  646.       ;POP     IX                ;юъэюь
  647.       XOR A
  648.       OUT (-2),A
  649.       ;CALL OLDRV
  650.        POP     AF
  651.        RET
  652. ONERR
  653.        EX      (SP),HL
  654.        PUSH    AF
  655.        LD      A,H
  656.        CP      #0D
  657.        JR      Z,ERROR
  658.        POP     AF
  659.        EX      (SP),HL
  660.        RET
  661. ERROR   POP     HL
  662.        POP     HL     ;┼╤╦╚ L=#D8, ╥╬        READ ONLY
  663.                       ;╚H└╫┼ DISK ERROR
  664.        POP     HL
  665.        POP     HL
  666.        POP     HL
  667.       LD A,2
  668.       OUT (-2),A
  669.       ;PUSH    IX
  670.       ;LD      IX,SAVELOADERROR_TBL ;чфхё№ юъэю
  671.       ;CALL    DRAW_WINDOWS      ;LOAD/SAVE ERROR
  672.       ;CALL    PRINT_WINDOWS     ;ABORT/RETRY/IGNORE
  673.                                  ;шэЇy ю Єpхъх/ёхъЄюpх ьюцэю
  674.                                  ;тч Є№ шч (#5CF4)
  675.  
  676. ERROR0  LD      A,#FB        ;яpютхp хь эрцрЄшх ъыртш° R,A,I
  677.        IN      A,(#FE)
  678.        LD      C,"R"
  679.        BIT     3,A
  680.        JR      Z,ERROR1
  681.        LD      C,"A"
  682.        LD      A,#FD
  683.        IN      A,(#FE)
  684.        RRA
  685.        JR      NC,ERROR1
  686.        LD      C,"I"
  687.        LD      A,#DF
  688.        IN      A,(#FE)
  689.        BIT     2,A
  690.        JR      NZ,ERROR0
  691. ERROR1  LD      A,C
  692.        CP      "A"
  693.        JR      NZ,$+7
  694.        LD      A,#FF
  695.        LD      (eRR2),A
  696.       ;PUSH    AF
  697.       ;CALL    REST_WINDOW     ;тюёЄрэртыштрхь Єю, ўЄю с√ыю
  698.                                ;яюф LOAD/SAVE ERROR юъэюь
  699.       XOR A
  700.       OUT (-2),A
  701.       ;POP     AF
  702.       ;POP     IX
  703.        LD      HL,#3F7E
  704.        EX      (SP),HL
  705.        JP       #3D2F
  706. SYSBUF
  707.         ds 256
  708.  
  709.        ent
  710. resident_sz=$-wasresident
  711.        display "residentend=",resident+resident_sz,"<=",trdos_catbuf
  712.  
  713. wastrdosfs
  714.        disp COMMANDLINE;PROGSTART
  715. idle
  716.        db "idle",0
  717.        ds PROGSTART-$
  718.        include "idle.asm"
  719. idle_sz=$-idle
  720.        ent
  721.        disp #4000+idle+idle_sz
  722.        include "trdosfs.asm"
  723.        include "trdosio.asm"
  724.        include "bdospg2.asm"
  725.        ent
  726. trdosfs_sz=$-wastrdosfs
  727.        display "trdosfs_sz=",/h,trdosfs_sz,"<=#1c00"
  728.        
  729. end
  730. wassys
  731.  
  732.        SLOT 0
  733.        page COMPILEPG_SYS0
  734.        SLOT 1
  735.        page COMPILEPG_SYS1
  736.        org #0000
  737. sysbegin
  738.        include "syskrnl.asm"
  739. wasuserkernel
  740.        disp #0000
  741.        include "userkrnl.asm"
  742.        ent
  743. userkernel_sz=$-wasuserkernel
  744.         ;display "wasuserkernel=",/d,wasuserkernel
  745.         ;display "wasuserkernel_end=",/d,$
  746.         ;display "userkernel_sz=",/d,userkernel_sz
  747.        ds #4000-$
  748.        incbin "../fatfs4os/fatfs.raw"
  749. sysend
  750.  
  751.         ;display "begin=",/d,begin
  752.         ;display "end=",/d,end
  753.        
  754.         ;display "sysbegin=",/d,sysbegin
  755.         ;display "sysend=",/d,sysend
  756.        
  757.        SLOT 1
  758.        page COMPILEPG_INIT
  759.         savebin "initcode.c",begin,end-begin
  760.        
  761.        SLOT 0
  762.        page COMPILEPG_SYS0
  763.        SLOT 1
  764.        page COMPILEPG_SYS1
  765.         savebin "syscode.c",sysbegin,sysend-sysbegin
  766.        
  767.         LABELSLIST "user.l"
  768.