Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. shadplay=0
  5. alasm=0;1
  6. fixtoENV=1 ;10XX,20XX
  7. hidearr=1
  8. ts=1
  9. pttfc=0;#55
  10. PATS=48
  11. SMPX=0
  12. SMPY=2
  13. SMPH=19;по WBUFTOP=#FFxx INPAGE опр-ет edsmp!
  14. skipABC=1;иначе в PLAYER стрелка исчез
  15. cl12345=1
  16. bemol=1
  17. tab=1
  18. ply=0;компиляция с плейером
  19. cmpilmnu=0|ply
  20. frqrosh=1
  21. linvol=0;1
  22. mkvol=1-linvol
  23. gs=1
  24. process=1
  25. portres=1
  26. goodpak=1 ;???in compiler
  27. about=1
  28. tstPT=0
  29. savset=0
  30. set=1
  31. opcompl=0
  32. ead=#5965 ;место inv для прозр.ENV
  33. SMPATR=(SMPY<<5)+#5820+SMPX
  34. SMPBOT=(SMPH<<5)+SMPATR
  35.  
  36.        IF gs
  37.         INCLUDE "gsports.asm"
  38.        ENDIF
  39.  
  40. iycurkey=23560
  41. iykeyflag=23611
  42.  
  43. TXTBUF=23698
  44. OOOO=23698
  45. l5b00=#6000;#5B00 глючит(Risk);CAT низя;длины треков при compile
  46.                              ;<=128 треков(нет проверки!)
  47.  
  48. ;MEMOBUF=0x6100 ;(320=#140)
  49. ;SIN=0xc000 ;(0x1000) ;todo re-generate?
  50.  
  51. BUF=0xc000-0x100-0x4a0;#6F60;#480+18zeros
  52. CATfilt=BUF-#580 ;,#580 todo pg4/pg7
  53. CATdos=BUF-#480 ;,#900
  54. SPRAR=BUF+#4A0 ;size=8*4*8=256 bytes
  55. BUFEND=SPRAR+256
  56. BUFSTART=CATfilt
  57.  
  58. ;TVOL=#BE00
  59. ;many
  60. EDORbf=#7100;(64)
  61. ;1
  62. bf240=#7180;EDPOSssQ BUF(#240)
  63. ;FONT=#7400;%512(лежит на 256 выше)
  64. ;FNTDEC=#7800;(512)
  65. ;FNTNOTE=FNTDEC+512;(256)
  66. TSMPSZ=#7B00;SMPLP,END(64)
  67. TPOSS=#7C00
  68. ;10
  69. TPATSZ=TPOSS+256;=0..63
  70. TORNSZ=#7DD0;ORNLP,END(32)
  71. ;2
  72. ;убить?
  73. ARBUF=#7D80
  74. ;2(GO,AtoPAT)
  75. ;убить?
  76. TPATS=#7E00;pg,E,D
  77. ;5
  78. ;убить?
  79. TLINES=#7F00;L/2*18(128)
  80. ;2+1
  81. ;убить
  82. TORNS=#7FD0;(32).TORNS=.TORNSZ
  83. ;FrTab=#BF00
  84.  
  85. ;FD=32765
  86. ;pg=#5B5C ;TODO kill
  87. pg6=#10
  88. pg4=#16
  89. pg3=#14
  90. pg7=#17
  91.  
  92. ;pg7
  93. _d000=#D000;scrollers
  94.  
  95. ;CS:
  96. kTRA='T'
  97. kBEG='U'
  98. kEND='I'
  99. kCOP='Y'
  100. kORD='L'
  101. kEON='E'
  102. kAON='A'
  103.  
  104. ;no CS:
  105. kA='a';'A'
  106. kF='f';'F'
  107. kY='y';'Y'
  108. kU='u';'U'
  109. kI='i';'I'
  110. kT='t';'T'
  111. kW='w';'W'
  112. kKpos='k';'K'
  113. kLpos='l';'L'
  114. kR='r';'R'
  115. kBEM=ssY;198
  116. kK='k';'K'
  117. kE='e';'E'
  118. kIns=key_ins;201
  119. kSmp=ssI;172
  120. kOrn=ssU;197
  121. kssA='~';226
  122. kL=key_del;15
  123. kssL='='
  124. kHom=key_home;199
  125. kEnd=key_end;200
  126. kTab=key_ssright;6
  127. kTabL=key_ssleft;7
  128. kDelLn=key_backspace;12
  129. kssE='>'
  130. kssR='<'
  131. kChip=key_tab;14
  132.  
  133.         org PROGSTART
  134. main_begin
  135.         ld sp,0x4000 ;не должен опускаться ниже 0x3b00! иначе возможна порча OS
  136.         OS_HIDEFROMPARENT
  137.         ld e,3 ;6912
  138.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  139.        
  140.         ;OS_GETMAINPAGES
  141. ;dehl=номера страниц в 0000,4000,8000,c000
  142.         ;ld a,e
  143.         ;ld (curpgshapes),a
  144.         ;ld a,h
  145.         ;ld (curpgpal),a
  146.         ;ld a,l
  147.         ;ld (curpgtemp),a
  148.  
  149.         ld hl,tpgs+16+1
  150.         ld b,7
  151. newpages0
  152.         push bc
  153.         push hl
  154.         OS_NEWPAGE
  155.         pop hl
  156.         pop bc
  157.         ld (hl),e
  158.         inc hl
  159.         djnz newpages0
  160.  
  161.         OS_GETMAINPAGES
  162. ;dehl=номера страниц в 0000,4000,8000,c000
  163.         ld a,l
  164.         ld (tpgs+16),a ;там inpage
  165.        
  166.         ld a,(user_scr0_high) ;ok
  167.         SETPG16K
  168.         ld hl,0x4000
  169.         ld de,0x4001
  170.         ld bc,0x1aff
  171.         ld (hl),l;0
  172.         ldir
  173.        
  174.         ;call OUT6 ;там SIN
  175.        
  176.         ;ld iy,23610 ;TODO kill
  177.        
  178.         LD HL,Tfonscr
  179.         ld DE,0
  180.         CALL PRMENU
  181.         call PRFONSCR
  182.         LD HL,FONATRS
  183.         ld DE,#5800
  184.         ld B,3
  185.         LDIR
  186.         LD H,wassin/256
  187.         CALL INPAGE
  188.         CALL OUT7 ;???
  189.         ;LD HL,PRESSED
  190.         ;ld DE,#C000
  191.         ;ld B,A
  192.         ;LDIR ;copy player?
  193.        
  194.         LD HL,SPRAR
  195.         ld A,127
  196. MKAR0   LD IX,sprar
  197.         RLCA
  198.         LD B,8
  199. MKAR1   LD C,(IX)
  200.         INC IX
  201.         LD D,(IX)
  202.         INC IX
  203.         LD E,0
  204.         PUSH AF
  205. MKAR2   SRL D
  206.         RR E
  207.         SCF
  208.         RR C
  209.         RRA
  210.         jr C,MKAR2
  211.         LD (HL),C
  212.         INC L
  213.         LD (HL),D
  214.         INC L
  215.         LD (HL),A
  216.         INC L
  217.         LD (HL),E
  218.         POP AF
  219.         INC L
  220.         DJNZ MKAR1
  221.         jr NZ,MKAR0
  222.        
  223.         CALL MHEXFNT
  224.         LD HL,setup_5D3B
  225.         LD DE,ink1
  226.         LD B,3
  227.         JR saG
  228. sa      LD A,(HL)
  229.         AND #38
  230.         LD (DE),A
  231.         INC DE
  232.         INC HL
  233. saG     LD A,(HL)
  234.         RLA
  235.         RLA
  236.         RLA
  237.         AND #38
  238.         LD (DE),A
  239.         INC DE
  240.         DJNZ sa
  241.         LD C,(HL)
  242.         RL C
  243.         SBC A,A
  244.         AND 31
  245.         LD (joy),A
  246.         RL C
  247.         SBC A,A
  248.         LD (poion),A
  249.         RL C
  250.         SBC A,A
  251.         AND 201
  252.         LD (SHOLK),A
  253.         RL C
  254.         SBC A,A
  255.         LD (playon),A
  256.        ;LD A,(HL),(poion),A
  257.         CALL SETCOLS ;EI
  258.         LD A,pg7
  259.         CALL MHEXFNTpg
  260.         LD HL,TSMPSZ+1
  261.         ld DE,TSMPSZ+2
  262.         ld C,62
  263.         LD (HL),L;1
  264.         DEC L
  265.         PUSH HL
  266.         LD (HL),B
  267.         LDIR
  268.         POP HL
  269.         LD DE,TORNSZ
  270.         ld C,E;32
  271.         LDIR
  272.        ;LD DE,TPATSZ+1,H,D,L,B,(HL),63
  273.        ;LD C,PATS-1
  274.        ;LDIR
  275.         LD A,63
  276.         CALL FILLENS
  277.         CALL CLPOS
  278.         LD IX,TPATS
  279.         LD A,pg6;#10
  280.         LD HL,+(42-PATS)*#480 ;TODO what if >42 patterns?
  281.         LD BC,3
  282.         ld DE,#480
  283.         JR MpA0
  284. MpatADS LD H,#C1
  285. MpA0    LD (IX),A
  286.         ld (IX+1),L
  287.         ld (IX+2),H
  288.         ADD IX,BC
  289.         add HL,DE
  290.         jr NC,MpA0
  291.         INC A
  292.         CP #12
  293.         jr NZ,$+3
  294.         INC A
  295.         CP #15
  296.         jr NZ,MpatADS
  297.         LD HL,TLINES
  298.         ld D,L
  299.         ld E,L
  300.         ld C,18
  301.         ld A,65
  302. MTLIN   LD (HL),E
  303.         INC L
  304.         LD (HL),D
  305.         INC L
  306.         ex de,hl
  307.         ADD HL,BC
  308.         ex de,hl
  309.         DEC A
  310.         jr NZ,MTLIN
  311.         LD DE,ORNS
  312.         ld HL,TORNS
  313.         ld C,64
  314.         ld A,16
  315. MTORN   LD (HL),E
  316.         INC L
  317.         LD (HL),D
  318.         INC L
  319.         ex de,hl
  320.         ADD HL,BC
  321.         ex de,hl
  322.         DEC A
  323.         jr NZ,MTORN
  324.         ;INC A
  325.         ;LD (#5C0A),A
  326.         CALL CLORNSM
  327.         CALL COPYFRQ
  328.         CALL CLPATS
  329.         CALL MKSCROL
  330.        IF alasm
  331.         CALL LOADASM
  332.        ENDIF
  333.        IF gs
  334.         CALL INIGS
  335.        ENDIF
  336.  
  337.        call swapimer
  338.  
  339.         LD HL,NLOOP
  340.         PUSH HL
  341.         JP EDPAT
  342.  
  343. swapimer
  344.         di
  345.         ld de,0x0038
  346.         ld hl,oldimer
  347.         ld bc,3
  348. swapimer0
  349.         ld a,(de)
  350.         ldi ;[oldimer] -> [0x0038]
  351.         dec hl
  352.         ld (hl),a ;[0x0038] -> [oldimer]
  353.         inc hl
  354.         jp pe,swapimer0
  355.         ei
  356.         ret
  357. oldimer
  358.         jp on_int ;заменится на код из 0x0038
  359.         jp 0x0038+3
  360.  
  361. MHEXFNT
  362.         LD A,pg4
  363. MHEXFNTpg
  364.         CALL OUTME
  365.         XOR A
  366.         LD DE,#F801
  367.         ld H,D
  368.         ld L,A
  369.         ld (HL),A
  370.         ld BC,#7FF
  371.         PUSH HL
  372.         LDIR
  373.         POP DE
  374. HFNT0   PUSH AF
  375.         push AF
  376.         RRCA
  377.         RRCA
  378.         RRCA
  379.         RRCA
  380.         LD C,#F0
  381.         PUSH DE
  382.         CALL PR1
  383.         POP DE
  384.         pop AF
  385.         LD C,#F
  386.         CALL PR1
  387.         INC DE
  388.         inc DE
  389.         POP AF
  390.         INC A
  391.         jr NZ,HFNT0
  392.         RET
  393. PR1
  394.         AND #F
  395.         ADD A,#90
  396.         DAA
  397.         ADC A,#40
  398.         DAA
  399.         ;or 0xf0 ;TODO
  400.         ;daa
  401.         ;add a,0xa0
  402.         ;adc a,0x40
  403. poion=$+1
  404.         LD B,0;при старте 0
  405.         INC B
  406.         DEC B
  407.         jr Z,PR1np
  408.         CP '0'
  409.         jr NZ,$+4
  410. PR1dot=$+1
  411.         LD A,'.'
  412. PR1np   ADD A,A
  413.         add A,A
  414.         LD L,A
  415.         ADC A,FONT/512
  416.         SUB L
  417.         LD H,A
  418.         ADD HL,HL
  419.         LD B,6
  420.         ex de,hl
  421. PR10    LD A,(DE)
  422.         AND C
  423.         OR (HL)
  424.         LD (HL),A
  425.         INC E
  426.         inc L
  427.         DJNZ PR10
  428.         ex de,hl
  429.         RET
  430. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; end init
  431.  
  432. OCT
  433.         DB 4
  434. SNGST
  435.         DW #C000
  436.  
  437.         INCLUDE "ptconst.asm"
  438. modC=mod
  439.  
  440. ;3тут+4(STPAT0,COPYU,CMpores,TransPP)
  441. AtoPAT
  442. ;HL,A на выходе не важны
  443. ;C надо сохранять для COPYU
  444. AtoPnsJ JR AtoPns2
  445.         CPL
  446.         ADD A,PATS;48
  447. AtoPns2 LD L,A
  448.         ADD A,A
  449.         ADD A,L
  450.         LD L,A
  451.         LD H,TPATS/256
  452.         LD A,(HL)
  453.         CALL OUTME
  454.         INC L
  455.         LD E,(HL)
  456.         INC L
  457.         LD D,(HL)
  458.         RET
  459. SWPAYPP
  460.        ;LD C,A
  461.         LD A,(AtoPnsJ)
  462.         AND 2
  463.         RRA
  464.         CPL
  465.        ;XOR C
  466.         LD BC,#FFFD
  467.        IF pttfc
  468.         RES 2,A
  469.        ENDIF
  470.         OUT (C),A
  471. sWPSNGPP
  472.         LD HL,ayblock
  473.        ;LD DE,ayblock2
  474.         LD B,szayblock4
  475. SWPAY0
  476.         DUP 4
  477.         LD A,(HL)
  478.         INC H
  479.         LD E,(HL)
  480.         LD (HL),A
  481.         DEC H
  482.         LD (HL),E
  483.         INC L
  484.         EDUP
  485.         DJNZ SWPAY0
  486.         LD HL,AtoPnsJ
  487.         LD A,(HL)
  488.         XOR 24^46
  489.         LD (HL),A
  490.         RET
  491. SWPSONG
  492.         CALL sWPSNGPP
  493.         RRA
  494.         AND 1
  495.         ADD A,'1'
  496.         LD DE,#1D0B
  497.         CALL PRADD
  498.         LD A,(pat1)
  499.         CPL
  500.         ADD A,PATS;48
  501.         CALL iPATq
  502.         LD A,(pat2)
  503.         CPL
  504.         ADD A,PATS;48
  505.         CALL iPAT2q
  506.         LD HL,TPATSZ
  507.         LD DE,TPATSZ+PATS-1
  508.         LD B,PATS/2
  509. SWPSNGL LD A,(DE)
  510.         LD C,(HL)
  511.         LD (HL),A
  512.         LD A,C
  513.         LD (DE),A
  514.         INC L
  515.         DEC E
  516.         DJNZ SWPSNGL
  517.         LD A,(EPAT)
  518.         LD L,A
  519.         LD A,(HL)
  520.         LD (PATLEN),A
  521.        ;LD A,(PATLEN)
  522.         CALL IPATLQ
  523.         JP PRPATUU
  524. CHKTS
  525.         LD A,(ts48)
  526.         LD HL,tson
  527.         CP 33 ;32=не TS
  528.         SBC A,A ;#FF=не TS
  529.         CP (HL)
  530.         RET NZ
  531. ONOFFTS
  532.         LD HL,#486B
  533.         LD C,3
  534.         CALL INVSYMS
  535.         LD HL,tson
  536.         LD A,(HL)
  537.         CPL
  538.         LD (HL),A
  539.         OR A
  540.         LD A,32
  541.         jr Z,$+4
  542.          LD A,48;PATS
  543.         LD (ts48),A
  544.         RET
  545. ALLCHAN
  546.         LD HL,#4853
  547.         LD C,4
  548.         CALL INVSYMS
  549.         LD HL,chnall
  550.         LD A,(HL)
  551.         CPL
  552.         LD (HL),A
  553.         RET
  554. ;10
  555. GETnADR
  556.         LD A,B
  557.         CALL AtoPAT
  558.         LD A,C
  559.         ADD A,A
  560.         LD L,A
  561.         LD H,TLINES/256
  562.         LD A,(HL)
  563.         INC L
  564.         LD H,(HL)
  565.         LD L,A
  566.         ADD HL,DE
  567.         RET
  568. ;2(PT2PATS,PT3PATS)
  569. PATfrBUF
  570.         PUSH AF
  571.         push HL
  572.         LD L,A
  573.         ld H,TPATSZ/256
  574.         DEC D
  575.         LD (HL),D
  576.         CALL aPATBUF
  577.         POP HL
  578.         pop AF
  579.         RET
  580. ;2(CLPATS,clPAT)
  581. CLPAT
  582.         CALL KILLBUF
  583.         LD HL,97
  584.         LD (BUF+3),HL
  585.         LD (BUF+8),HL
  586.         LD (BUF+13),HL
  587. aPATBUF CALL AtoPAT
  588.         LD HL,BUF
  589.         JR bUFLDIR
  590. ;2(COPYU,CMPP)
  591. PATtoBUF
  592.         CALL AtoPAT
  593.         LD HL,BUF
  594.         ex de,hl
  595. bUFLDIR LD BC,#480
  596.         LDIR
  597.         JP OUT7
  598. ;3(CLPAT,PT2PATS,PT3PATS)
  599. KILLBUF
  600.         PUSH HL
  601.         LD HL,BUF
  602.         LD DE,BUF+1
  603.         LD (HL),0
  604.         LD BC,#47F
  605.         LDIR
  606.         POP HL
  607.         RET
  608. ;2
  609. GETnPAT
  610.         LD A,(POS)
  611. GETnPAA
  612. LOOP=$+1
  613. LENG=LOOP+1
  614.         LD DE,#100
  615.         INC A
  616.         CP D
  617.         jr NC,$+3
  618.         LD E,A
  619.         LD D,TPOSS/256
  620.         LD A,(DE)
  621.         ld (nPAT),A
  622.         RET
  623. ;2(INCPOSU,ROLL)
  624. ROLnxPO
  625.         CALL GETnPAT ;(DE)->A->(nPAT)
  626.         LD (EPAT),A
  627.         LD B,E
  628.         LD E,A
  629.         INC D ;TPATSZ
  630.         LD A,(DE)
  631.         ld (PATLEN),A
  632.         INC A
  633.         LD C,A
  634.         LD A,B
  635.         ld (POS),A
  636.         RET
  637. ;2(UPRnxPO,PRPAT)
  638. ROLprPO
  639.        ;LD A,(POS)
  640.         LD DE,(LENG)
  641.         DEC A
  642.         CP E
  643.         jr C,$+4
  644.         LD A,E
  645.         DEC A
  646.         LD E,A
  647.         LD D,TPOSS/256
  648.         ex af,af'
  649.       ;LD (POS),A
  650.        LD A,(DE)
  651.        LD E,A
  652.        INC D
  653.        RET
  654. HLORN
  655. ORN=$+1
  656.        LD A,1
  657. ;6
  658. HLOR3   ADD A,A
  659.        ADD A,TORNS&0xff
  660.        LD L,A
  661. ;1:CLORN (убить)
  662. _orn    LD H,TORNS/256
  663.        PUSH AF
  664.        LD A,(HL)
  665.        INC L
  666.        LD H,(HL)
  667.        ld L,A
  668.        POP AF
  669.        RET
  670. FILLENS
  671.        LD DE,TPATSZ+1
  672.        LD BC,PATS-1
  673.        LD H,D
  674.        ld L,B
  675.        LD (HL),A
  676.        LDIR
  677.        RET
  678. DE2ATTR
  679.        LD A,E
  680.        RRCA
  681.        RRCA
  682.        RRCA
  683. DA2ATTR LD H,A
  684.        AND #E0
  685.        OR D
  686.        LD L,A
  687.        ld A,H
  688.        AND 3
  689.        OR 88
  690.        LD H,A
  691.        RET
  692. DE2SCR
  693.        LD A,E
  694.        AND 24
  695.        OR 64
  696.        LD H,A
  697.        LD A,E
  698.        AND 7
  699.        RRA
  700.        RRA
  701.        RRA
  702.        RRA
  703.        ADD A,D
  704.        LD L,A
  705.        RET
  706. DHL
  707.        INC H
  708.        LD A,H
  709.        AND 7
  710.        RET NZ
  711.        LD A,L
  712.        ADD A,32
  713.        LD L,A
  714.        RET C
  715.        LD A,H
  716.        SUB 8
  717.        LD H,A
  718. ;ret
  719.        RET
  720. DDE
  721.        INC D
  722.        LD A,D
  723.        AND 7
  724.        RET NZ
  725.        LD A,E
  726.        ADD A,32
  727.        LD E,A
  728.        RET C
  729.        LD A,D
  730.        SUB 8
  731.        LD D,A
  732.        RET
  733. SHOLK
  734.        NOP
  735.        LD HL,shlkR
  736.        LD DE,#202
  737.        CALL SHLK0
  738.        LD DE,#406
  739.        CALL SHLK0
  740.        LD DE,#30B
  741. SHLK0   LD BC,-3
  742.        OUT (C),E
  743.        LD B,#BF
  744.        OUTI
  745.        INC E
  746.        DEC D
  747.        jr NZ,SHLK0
  748.        RET
  749.  
  750. shlkR
  751.        DB 0,9,0,0,0,#10,0,1,0
  752.  
  753.        DB 1 ;number of options for DUMMY menu coords
  754. DUMMY   DS 4;MENUCOORDS
  755.  
  756. WINDUM
  757.        LD HL,DUMMY
  758. WINDOW
  759.        CALL WINmema
  760.        LD (useadr),DE
  761.        LD (optadr),HL
  762.        DEC HL
  763.        LD A,(HL)
  764.        ld (options),A
  765.        PUSH BC
  766.        POP IX
  767.        LD A,#B7
  768.        ld (DOWNM),A
  769.        CALL OUT4
  770.        LD D,(IX)
  771.        ld E,(IX+1)
  772.        CALL DE2ATTR
  773.        LD (WINATR),HL
  774.        PUSH HL
  775.        CALL DE2SCR
  776.        LD (WINTOP),HL
  777.        PUSH HL
  778.        CALL WINMEM
  779.        LD A,(IX)
  780.        ld C,A
  781.        ADD A,A
  782.        add A,A
  783.        add A,A
  784.        LD (TSTXMIN),A
  785.        ld A,C
  786.        INC A
  787.        ADD A,A
  788.        DEC A
  789.        LD (ADDX),A
  790.        ld A,(IX+1)
  791.        INC A
  792.        LD (ADDY),A
  793.        DEC A
  794.        ADD A,A
  795.        add A,A
  796.        add A,A
  797.        LD (TSTYMIN),A
  798.        ld A,(IX+2)
  799.        ADD A,A
  800.        DEC A
  801.        LD (PRMRGT),A
  802.        INC A
  803.        ADD A,A
  804.        add A,A
  805.        LD (TSTXMAX),A
  806.        POP HL ;WINTOP
  807.        LD A,(IX+3)
  808.        PUSH AF
  809.        ADD A,A
  810.        add A,A
  811.        add A,A
  812.        LD (TSTYMAX),A
  813.        POP AF
  814.        SUB (IX+1)
  815.        ADD A,A
  816.        add A,A
  817.        add A,A
  818.        LD (RMKHGT),A
  819.        DEC (IX+2)
  820.        LD B,0
  821. WIN0    ex af,af'
  822.         PUSH HL
  823.         LD (HL),B
  824.         ld D,H
  825.         ld E,L
  826.         INC E
  827.         LD A,(IX+2)
  828.         SUB (IX)
  829.         LD (WINWID),A
  830.         ld C,A
  831.         LDIR
  832.         POP HL
  833.         CALL DHL
  834.         ex af,af'
  835.        DEC A
  836.        jr NZ,WIN0
  837.        POP HL ;WINATR
  838.        LD A,(IX+4)
  839.        ex af,af'
  840.         LD A,(IX+3)
  841.         SUB (IX+1)
  842.         LD B,0
  843. WIN1    ex af,af'
  844.        PUSH HL
  845.        LD (HL),A
  846.        ld D,H
  847.        ld E,L
  848.        INC E
  849. WINWID=$+1
  850.        LD C,0
  851.        LDIR
  852.        POP HL
  853.        LD C,32
  854.        ADD HL,BC
  855.        ex af,af'
  856.         DEC A
  857.         jr NZ,WIN1
  858.         LD A,(IX+2)
  859.         INC (IX+2)
  860.         SUB (IX)
  861.         LD C,A
  862.         ld B,0
  863.         PUSH BC
  864.         LD HL,(WINTOP)
  865.         CALL FILM1
  866.         call DHL
  867. RMKHGT=$+1
  868.         LD D,0
  869.         DEC D
  870.         LD B,D
  871.         ld C,1
  872.         CALL VERLIN
  873.         LD B,D
  874.         ld HL,(WINTOP)
  875.         DEC B
  876.         CALL DHL
  877.         LD C,#80
  878.         CALL VERLIN
  879.         POP BC
  880. FILM1   LD D,H
  881.         ld E,L
  882.         ld (HL),-1
  883.         INC DE
  884.         LDIR
  885.         RET
  886. VERLIN  LD (HL),C
  887.         CALL DHL
  888.         DJNZ $-4
  889.         RET
  890. ;2
  891. WINmema
  892.         LD A,(options)
  893.         ld (Oldopt),A
  894.         PUSH HL
  895.         LD HL,(optadr)
  896.         ld (Oldoad),HL
  897.         LD HL,(useadr)
  898.         ld (Olduse),HL
  899.         POP HL
  900.         RET
  901. WINMEM
  902. WBUFTOP=$+1
  903.         LD HL,winbuf
  904.         PUSH HL
  905. Oldopt=$+1
  906.         LD (HL),0
  907.         INC HL
  908. Oldoad=$+1
  909.         LD DE,0
  910.         CALL WMEMPP
  911. Olduse=$+1
  912.         LD DE,0
  913.         CALL WMEMPP
  914. ADDY=$+1
  915. ADDX=$+2
  916.         LD DE,0
  917.         CALL WMEMPP
  918.         LD A,(PRMRGT)
  919.         LD (HL),A
  920.         INC HL
  921. WINATR=$+1
  922.         LD DE,0
  923.         CALL WMEMPP
  924.         LD A,(IX+2)
  925.         SUB (IX)
  926.         INC A
  927.         LD (HL),A
  928.         ld C,A
  929.         INC HL
  930.         LD A,(IX+3)
  931.         SUB (IX+1)
  932.         INC A
  933.         LD (HL),A
  934.         INC HL
  935.         PUSH AF
  936.         LD B,0
  937.         ex de,hl
  938. WMEM0   PUSH BC
  939.         push HL
  940.         LDIR
  941.         POP HL
  942.         LD C,32
  943.         ADD HL,BC
  944.         POP BC
  945.         DEC A
  946.         jr NZ,WMEM0
  947.         POP AF
  948.         DEC C
  949.         ADD A,A
  950.         add A,A
  951.         add A,A
  952.         ex de,hl
  953. WINTOP=$+1
  954.         LD DE,0
  955.         CALL WMEMPP
  956.         ex de,hl
  957. WMEM1   ex af,af'
  958.        PUSH HL
  959.        push BC
  960.        LDIR
  961.        POP BC
  962.        pop HL
  963.        CALL DHL
  964.        ex af,af'
  965.         DEC A
  966.         jr NZ,WMEM1
  967.         ex de,hl
  968.         POP DE
  969. WMEMPP  LD (HL),E
  970.         INC HL
  971.         LD (HL),D
  972.         INC HL
  973.         LD (WBUFTOP),HL
  974.         RET
  975. CLOSWIN
  976.         CALL OUT4
  977.         LD HL,(WBUFTOP)
  978.         DEC HL
  979.         LD A,(HL)
  980.         DEC HL
  981.         LD L,(HL)
  982.         ld H,A
  983.         OR L
  984.         RET Z
  985.         LD (WBUFTOP),HL
  986.         PUSH BC
  987.         LD DE,options
  988.         LDI
  989.         LD DE,optadr
  990.         LDI
  991.         LDI
  992.         LD DE,useadr
  993.         LDI
  994.         LDI
  995.         LD DE,ADDY
  996.         LDI
  997.         LDI
  998.         LD DE,PRMRGT
  999.         LDI
  1000.         LD E,(HL)
  1001.         INC HL
  1002.         LD D,(HL)
  1003.         INC HL
  1004.         LD C,(HL)
  1005.         INC HL
  1006.         LD A,(HL)
  1007.         INC HL
  1008.         PUSH AF
  1009.         LD B,0
  1010. CLOS0   PUSH BC
  1011.         push DE
  1012.         LDIR
  1013.         ex de,hl
  1014.         POP HL
  1015.         LD C,32
  1016.         ADD HL,BC
  1017.         ex de,hl
  1018.         POP BC
  1019.         DEC A
  1020.         jr NZ,CLOS0
  1021.         POP AF
  1022.         DEC A
  1023.         ADD A,A
  1024.         add A,A
  1025.         add A,A
  1026.         DEC C
  1027.         LD E,(HL)
  1028.         INC HL
  1029.         LD D,(HL)
  1030.         INC HL
  1031. CLOS1   ex af,af'
  1032.        PUSH DE
  1033.        push BC
  1034.        LDIR
  1035.        POP BC
  1036.        pop DE
  1037.        CALL DDE
  1038.        ex af,af'
  1039.         DEC A
  1040.         jr NZ,CLOS1
  1041.         LD A,'0'
  1042.         ld (PR1dot),A
  1043.         CALL MHEXFNT
  1044.         LD A,'.'
  1045.         ld (PR1dot),A
  1046.         LD A,pg7;(filladr+1),A
  1047.         CALL MHEXFNTpg
  1048.         POP BC
  1049.          CALL TSTFIRH
  1050.         jr C,$-3
  1051.         RET
  1052. ;6
  1053. WAITNOK
  1054.         CALL HALTER
  1055.         CALL ANYKEY
  1056.         CPL
  1057.         AND 31
  1058.         jr NZ,WAITNOK
  1059.         RET
  1060. LDKSAPP
  1061.         LD A,32
  1062.         LD (ts48),A
  1063.         CALL CLORNSM
  1064.         CALL BIGso
  1065.         CALL OUT3
  1066.         LD BC,(#5CE8)
  1067.         ld HL,#BFFF
  1068.         ld D,L
  1069.         ld E,L
  1070.         ADD HL,BC
  1071.         LDDR
  1072.         INC DE
  1073.         ex de,hl
  1074.         LD DE,la000
  1075.         ld A,(HL)
  1076.         PUSH AF
  1077.         INC HL
  1078. KSAPP0  LD A,(HL)
  1079. KSAPP1  INC HL
  1080.         LD B,0
  1081.         SRL A
  1082.         jr C,KSAPPb0
  1083.         RRA
  1084.         jr C,KSAPPb1
  1085.         RRA
  1086.         LD C,A
  1087.         jr C,$+5
  1088.         LD B,A
  1089.         ld C,(HL)
  1090.         INC HL
  1091.         LD A,(HL)
  1092.         INC HL
  1093. KSAPP2  LD (DE),A
  1094.         PUSH HL
  1095.         LD A,(HL)
  1096.         ex af,af'
  1097.        LD H,D
  1098.        ld L,E
  1099.        INC DE
  1100.        JR KSAPP2G
  1101.  
  1102. KSAPPb1 SRL A
  1103.        LD C,(HL)
  1104.        jr NC,KSAPPn2
  1105.        LD C,A
  1106.        INC C
  1107.        LDIR
  1108.        JR KSAPP0
  1109.  
  1110. KSAPPb0 SRL A
  1111.        jr C,KSAPP01
  1112.        AND 7
  1113.        LD B,A
  1114.        DEC HL
  1115.        RLD
  1116.        RRA
  1117.        LD C,A
  1118.        LD A,B
  1119. KSAPPn2 LD B,A
  1120.        INC HL
  1121.        inc HL
  1122.        LD A,(HL)
  1123.        ex af,af'
  1124.         PUSH HL
  1125.         DEC HL
  1126.         LD A,E
  1127.         SUB (HL)
  1128.         LD L,A
  1129.         LD A,D
  1130.         SBC A,B
  1131.         LD B,0
  1132.         LD H,A
  1133.         INC BC
  1134. KSAPP2G INC BC
  1135.         inc BC
  1136.         LDIR
  1137.         POP HL
  1138.         ex af,af'
  1139.        JR KSAPP1
  1140. KSAPP01
  1141.        SRL A
  1142.        DEC A
  1143.        LD C,B
  1144.        DEC BC
  1145.        jr C,KSAPP2
  1146.        POP AF
  1147.        LD (DE),A
  1148.        LD HL,labc0
  1149.        LD DE,TPATSZ
  1150.        LD B,31
  1151. KSAlens LD A,(HL)
  1152.        DEC A
  1153.        LD (DE),A
  1154.        INC HL
  1155.        inc DE
  1156.        DJNZ KSAlens
  1157.        CALL STSMP
  1158.        LD HL,labdf
  1159.        LD A,(HL)
  1160.        ld (LOOP),A
  1161.        INC L
  1162.        LD DE,TTITLE
  1163.        LD C,25
  1164.        LDIR
  1165.        LD A,E
  1166.        ld (STtit),A
  1167.        LD A,7
  1168.        ld (STtitZ),A
  1169.        XOR A
  1170.        CALL STORN
  1171.        LD A,1
  1172.        ld (FRQn),A
  1173.        CALL OUT3
  1174.        LD HL,labf9
  1175.        LD DE,labc1
  1176.        LD B,96
  1177.        LDIR
  1178.        JR LDSTPGO
  1179. BIGso
  1180.        LD A,33
  1181.        LD HL,TSMPSZ+3
  1182.        LD DE,TSMPSZ+4
  1183.        LD (HL),A
  1184.        DEC A
  1185.        CALL BIGsoQ
  1186.        LD HL,TORNSZ+3
  1187.        LD DE,TORNSZ+4
  1188.        LD (HL),A
  1189.        XOR A
  1190. BIGsoQ  DEC L
  1191.        LD (HL),A
  1192.        LD BC,30
  1193.        LDIR
  1194.        RET
  1195. LDSTPP
  1196.        LD A,32
  1197.        LD (ts48),A
  1198.        CALL CLORNSM
  1199.        CALL BIGso
  1200.        INC A
  1201.        LD (FRQn),A
  1202.        LD A,(labc0)
  1203.        DEC A
  1204.       ;LD C,PATS-1
  1205.       ;LD DE,TPATSZ+1
  1206.       ;LD H,D,L,B
  1207.       ;LD (HL),A
  1208.       ;LDIR
  1209.        CALL FILLENS
  1210.        LD (PATLEN),A
  1211.        CALL STSMP
  1212.        LD A,TTITLE&0xff
  1213.        ld (STtit),A
  1214.        LD A,31
  1215.        ld (STtitZ),A
  1216.        LD A,LOOP/256
  1217.        CALL STORN
  1218.        CALL OUT3
  1219. LDSTPGO LD A,(labbf)
  1220.        ld (TEMPO),A
  1221.        LD A,(la99e)
  1222.        INC A
  1223.        LD (LENG),A
  1224.        LD HL,la79e
  1225.        LD DE,TPOSS
  1226.        LD A,E
  1227. LDSTpos DEC (HL)
  1228.        LDI
  1229.        INC HL
  1230.        DEC A
  1231.        jr NZ,LDSTpos
  1232.        LD HL,labc1
  1233.        LD DE,la000
  1234.        PUSH DE
  1235.        LD B,#5F
  1236.        LDIR
  1237.        POP HL
  1238. STPAT0  PUSH AF
  1239.        CALL OUT3
  1240.        POP AF
  1241.        PUSH AF
  1242.        LD DE,EDORbf
  1243.        LD BC,#240
  1244.        LDIR
  1245.        PUSH HL
  1246.        CALL AtoPAT
  1247.        LD HL,EDORbf
  1248.        PUSH DE
  1249.        POP IX
  1250.        LD B,64
  1251. STPAT1  PUSH BC
  1252.        INC DE
  1253.        inc DE
  1254.        inc DE
  1255.        PUSH IX
  1256.        LD (IX),C
  1257.        LD (IX+1),C
  1258.        LD (IX+2),C
  1259.        LD B,3
  1260. STPAT2  PUSH BC
  1261.        push DE
  1262.        XOR A
  1263.        LD (DE),A
  1264.        INC DE
  1265.        LD (DE),A
  1266.        INC DE
  1267.        INC DE
  1268.        LD (DE),A
  1269.        INC DE
  1270.        LD (DE),A
  1271.        ex de,hl
  1272.        EX (SP),HL
  1273.        ex de,hl
  1274.        CALL STPAPP
  1275.        POP DE
  1276.        INC DE
  1277.        POP BC
  1278.        DJNZ STPAT2
  1279.        POP IX
  1280.        LD C,18
  1281.        ADD IX,BC
  1282.        POP BC
  1283.        DJNZ STPAT1
  1284.        POP HL
  1285.        pop AF
  1286.        INC A
  1287.        AND 31
  1288.        jr NZ,STPAT0
  1289. STloop=$+2
  1290.        LD (LOOP),A
  1291.        LD (POS),A
  1292. STtit=$+1
  1293.        LD HL,TTITLE
  1294. STtitZ=$+1
  1295.        LD BC,31
  1296.        CALL STtitQ
  1297.        LD HL,TAUTHOR
  1298.        LD C,31
  1299. STtitQ  LD D,H
  1300.        LD E,L
  1301.        INC E
  1302.        LD (HL),32
  1303.        LDIR
  1304.        RET
  1305.  
  1306. STSMP   CALL OUT4
  1307.        LD HL,la000
  1308.        LD DE,_c000+256
  1309.        LD A,15
  1310. STSMP0  PUSH AF
  1311.        PUSH HL
  1312.        PUSH DE
  1313.        CALL STSMPP
  1314.        LD A,(IX+#60)
  1315.        LD H,(IX+#61)
  1316.        OR A
  1317.        jr Z,STSMPQ
  1318.        DEC A
  1319.        INC H
  1320.        LD L,A
  1321.        ADD A,H
  1322.        LD H,A
  1323.        LD A,D
  1324.        SUB SMPS/256
  1325.        ex de,hl
  1326.        ADD A,A
  1327.        LD L,A
  1328.        LD H,TSMPSZ/256
  1329.        LD (HL),E
  1330.        INC L
  1331.        LD (HL),D
  1332. STSMPQ  POP DE
  1333.        POP HL
  1334.        INC D
  1335.        LD BC,#82
  1336.        ADD HL,BC
  1337.        POP AF
  1338.        DEC A
  1339.        jr NZ,STSMP0
  1340.        RET
  1341.  
  1342. STSMPP  PUSH HL
  1343.        POP IX
  1344.        LD (STSMbse),HL
  1345.        ex de,hl
  1346.        LD B,32
  1347. STSMPP0 LD A,64
  1348.        SUB B
  1349.        ADD A,A
  1350.        LD (STSMix1),A
  1351.        INC A
  1352.        LD (STSMix2),A
  1353.        PUSH IX
  1354. STSMbse=$+2
  1355.        LD IX,0
  1356. STSMix1=$+2
  1357.        LD E,(IX)
  1358. STSMix2=$+2
  1359.        LD D,(IX+1)
  1360.        POP IX
  1361.        BIT 4,D
  1362.        RES 4,D
  1363.        ex de,hl
  1364.        CALL Z,NEGHL
  1365.        ex de,hl
  1366.        LD (HL),E
  1367.        INC L
  1368.        LD (HL),D
  1369.        INC L
  1370.        LD A,(IX+#20)
  1371.        ld E,A
  1372.        AND 31
  1373.        RL E
  1374.        jr NC,$+4
  1375.         LD A,#40
  1376.        RL E
  1377.        RLA
  1378.        RRCA
  1379. ksaON=$+1
  1380.        LD D,0
  1381.        DEC D
  1382.        INC D
  1383.        jr Z,$+8
  1384.         RL E
  1385.         jr C,$+4
  1386.          OR #20
  1387.        LD (HL),A
  1388.        INC L
  1389.        LD A,(IX)
  1390.        ld (HL),A
  1391.        INC L
  1392.        INC IX
  1393.        DJNZ STSMPP0
  1394.        INC L
  1395.        inc L
  1396.        LD (HL),96
  1397.        ex de,hl
  1398.        RET
  1399.  
  1400. STORN  LD (STloop),A
  1401.        LD A,(ksaON)
  1402.        LD HL,la9bf
  1403.        LD DE,ORNS+64
  1404.        OR A
  1405.        jr NZ,KSAORN
  1406.        LD A,15
  1407. STORN0  LD BC,32
  1408.        LDIR
  1409.        ex de,hl
  1410.        LD C,32
  1411.        ADD HL,BC
  1412.        ex de,hl
  1413.        DEC A
  1414.        jr NZ,STORN0
  1415.        RET
  1416.  
  1417. KSAORN  LD A,1
  1418. KSAORN0 PUSH AF
  1419.        LD BC,TORNSZ
  1420.        ADD A,A
  1421.        add A,C
  1422.        LD C,A
  1423.        LD A,(HL)
  1424.        ld (BC),A
  1425.        INC C
  1426.        INC HL
  1427.        LD A,(HL)
  1428.        INC A
  1429.        LD (BC),A
  1430.        INC HL
  1431.        LD BC,30
  1432.        LDIR
  1433.        ex de,hl
  1434.        LD C,34
  1435.        ADD HL,BC
  1436.        ex de,hl
  1437.        POP AF
  1438.        INC A
  1439.        AND 15
  1440.        jr NZ,KSAORN0
  1441.        RET
  1442.  
  1443. STPAPP  LD A,(HL)
  1444.        CP #10
  1445.        jr C,STEt
  1446.        CP #F0
  1447.        jr NC,STres
  1448.        AND 7
  1449.        ADD A,A
  1450.        add A,A
  1451.        LD B,A
  1452.        ADD A,A
  1453.        add A,B
  1454.        LD B,A
  1455.        LD A,(HL)
  1456.        LD C,8
  1457.        CP #78
  1458.        jr NC,STnot
  1459.        DEC C
  1460.        CP #70
  1461.        jr NC,STnot
  1462.        DEC C
  1463.        CP #68
  1464.        jr NC,STnot
  1465.        DEC C
  1466.        CP #60
  1467.        jr NC,STnot
  1468.        DEC C
  1469.        CP #50
  1470.        jr NC,STnot
  1471.        DEC C
  1472.        CP #48
  1473.        jr NC,STnot
  1474.        DEC C
  1475.        CP #40
  1476.        jr NC,STnot
  1477.        DEC C
  1478.        CP #38
  1479.        jr NC,STnot
  1480.        DEC C
  1481.        CP #30
  1482.        jr NC,STnot
  1483.        LD C,11
  1484.        CP #20
  1485.        jr NC,STnot
  1486.        DEC C
  1487.        CP #18
  1488.        jr NC,$+3
  1489.         DEC C
  1490. STnot   LD A,C
  1491.        ADD A,B
  1492.        INC A
  1493.        JR STPAPQ
  1494.  
  1495. STres   LD A,97
  1496.        JR $+3
  1497. STEt    XOR A
  1498. STPAPQ  LD (DE),A
  1499.        INC DE
  1500.        inc DE
  1501.        inc DE
  1502.        INC HL
  1503.        LD A,(HL)
  1504.        ld (DE),A
  1505.        INC DE
  1506.        inc HL
  1507.        AND #F
  1508.        jr Z,STEold
  1509.        CP #F
  1510.        jr Z,STorn
  1511.        LD C,A
  1512.        LD A,(ksaON)
  1513.        OR A
  1514.        jr Z,STnKSA
  1515.        LD A,C
  1516.        CP 3
  1517.        jr C,STglis
  1518. STnKSA  LD A,(HL)
  1519.        ld (IX+1),A
  1520.        INC HL
  1521.        RET
  1522.  
  1523. STEold  LD A,(ksaON)
  1524.        OR A
  1525.        LD A,(HL)
  1526.        INC HL
  1527.        RET Z
  1528.        AND #F0
  1529.        JR STgliQ
  1530.  
  1531. STorn   LD A,(HL)
  1532.        INC HL
  1533. STand=$+1
  1534.        AND -1
  1535.        JR STgliQ
  1536.  
  1537. STglis  LD C,A
  1538.        DEC DE
  1539.        LD A,(DE)
  1540.        AND #F0
  1541.        LD (DE),A
  1542.        LD A,C
  1543.        LD C,1
  1544.        DEC A
  1545.        jr NZ,$+3
  1546.         INC C
  1547.        LD A,(HL)
  1548.        OR A
  1549.        JP P,$+6
  1550.         NEG
  1551.        INC C
  1552.        DEC DE
  1553.        LD (DE),A
  1554.        DEC DE
  1555.        INC HL
  1556.        LD A,C
  1557.        AND 1
  1558.        ADD A,17
  1559. STgliQ  RRCA
  1560.        RRCA
  1561.        RRCA
  1562.        RRCA
  1563.        LD (DE),A
  1564.        RET
  1565.  
  1566.        align 512
  1567. FONT ;реально +256
  1568. tpgs
  1569.        ds 256
  1570.        INCBIN "f7400.bin"
  1571. FNTDEC
  1572.        INCBIN "digits.bin"
  1573. FNTNOTE=FNTDEC+512
  1574.        ;ORG $-72
  1575.        ;DS 72
  1576.  
  1577. ;FNTNOTE+512
  1578.        ;DISPLAY "bufs ",$,"..7FXX=",#7F7D-$
  1579.        ;DS #7F81-$
  1580.        align 256
  1581. CMbuf   DB -1 ;USED ORNS+SMPS
  1582.        DS 16+31
  1583. t1buf   DB -1,-1,-1,-1,0
  1584. TEDCURX
  1585. ;NO CROSS sec!
  1586.        DISPLAY "TEDCURX=",$
  1587.        DB 6,7,8,9,12,13
  1588.        DB 16,20,21,22,23,26,27,28,29
  1589.        DB 32,36,37,38,39,42,43,44,45
  1590.        DB 48,52,53,54,55,58,59,60,61
  1591.  
  1592. sprar   DW #00BF,#401F,#600F,#7007,#7803,#6007,#401F,#00BF
  1593.  
  1594. on_int
  1595.        PUSH HL
  1596.        push DE
  1597.        push BC
  1598.        push AF
  1599.        call oldimer;RST 56 ;ei
  1600.        exx
  1601.        push bc
  1602.        push de
  1603.        push hl
  1604.        push ix
  1605.        push iy
  1606.        ex af,af'
  1607.         push af
  1608.         GET_KEY
  1609.         or a
  1610.         jr z,on_int_nokey
  1611.         ld (iycurkey),a;23560
  1612.         ld hl,iykeyflag;23611
  1613.         set 5,(hl)
  1614. on_int_nokey
  1615.         pop af
  1616.         ex af,af'
  1617.        pop iy
  1618.        pop ix
  1619.        pop hl
  1620.        pop de
  1621.        pop bc
  1622.        exx
  1623.        CALL MANAGE
  1624.        POP AF
  1625.        pop BC
  1626.        pop DE
  1627.        pop HL
  1628.        ;ei
  1629.        RET
  1630.  
  1631. SNGLEN
  1632.        DW 0
  1633.  
  1634. TPROTR  DB "ProTracker 3.7 compilation of "
  1635. TTITLE
  1636. ;NO CROSS sec!
  1637.        DISPLAY "TTITLE=",$
  1638.        DS 33,32
  1639.       IF linvol
  1640.        DB "By "
  1641.       ELSE
  1642.        DB "by "
  1643.       ENDIF
  1644. TAUTHOR DS 33,32
  1645. ts48=$-1
  1646.  
  1647. AUTO1   DB "----"
  1648. AUTO2   DB 0x7f,0x7f,0x7f,0x7f
  1649. LINESon DS 9,#7F
  1650. NLOOP
  1651.        ;LD (IY+48),8
  1652.        CALL RESHALT
  1653.        LD HL,NLOOP
  1654.        PUSH HL
  1655.        jr Z,NLOONK
  1656.        CP kW;'W'
  1657.        JP Z,EDSONG
  1658.        SUB key_enter;13
  1659.        JP Z,PLSONG
  1660.        DEC A
  1661.        JP Z,EDPAT
  1662. NLOONK  CALL JPITEM
  1663. DOWNMER LD A,#6F
  1664.        ld (DOWNM),A
  1665.        RET
  1666. FIRE
  1667. ;NZ=y
  1668. ;CALL cs_8026
  1669. ;JNC fIREcs
  1670.        LD A,#7F
  1671.        IN A,(-2)
  1672.        RRA
  1673. fIREOK  DEC A
  1674.        jr NC,FIREYES
  1675. fIREcs  LD A,#FA
  1676. MOUSF   IN A,(#DF)
  1677.        RRA
  1678.        jr NC,FIREYES
  1679.        RRA
  1680.        jr C,fIREKJ
  1681.        LD A,(ITEM)
  1682.        CP DIVNO+1
  1683.        jr Z,fIREOK
  1684. fIREKJ  CALL KEMPJOY
  1685.        AND 16
  1686.        RET Z
  1687. FIREYES
  1688.       IF hidearr
  1689.        LD A,(ARROWt)
  1690.        DEC A
  1691.        RET Z ;нет
  1692.        LD A,0 ;NZ=да
  1693.        LD (ARROWt),A
  1694.       ENDIF
  1695.        RET
  1696. CANCEL
  1697.        LD A,#BF
  1698.        IN A,(-2)
  1699.        RRA
  1700.        RET NC
  1701. CANCEL2 LD A,#FA
  1702. MOUSF2  IN A,(#DF)
  1703.        RRA
  1704.        RRA
  1705.        RET
  1706. CLPOS
  1707.       IF 0==cl12345
  1708.        LD DE,TPOSS+1
  1709.        LD BC,255
  1710.        LD H,D
  1711.        ld L,B
  1712.        LD (HL),L
  1713.        LDIR
  1714.        RET
  1715.       ELSE
  1716.        LD HL,TPOSS
  1717.       LD BC,PATS*255+255
  1718.       LD (HL),L
  1719.       INC L
  1720.       DJNZ $-2
  1721.        LD D,H
  1722.        ld E,L
  1723.        INC E
  1724.        LD (HL),B
  1725.        LDIR
  1726.        RET
  1727.       ENDIF
  1728.      
  1729.       if 1==1
  1730. MOVD0A0
  1731.        LD (movd0a0),A
  1732.        CALL OUT7
  1733.        LD HL,la000
  1734.        ld (LDADR),HL
  1735.        LD DE,ld000
  1736.        ld BC,#2000
  1737.        LDIR
  1738.       endif
  1739. OUT3    LD A,pg3
  1740.        JR OUTME
  1741. OUT7    LD A,pg7
  1742.        JR OUTME
  1743. OUT6    LD A,pg6
  1744.        JR OUTME
  1745. OUT4    LD A,pg4
  1746. OUTME
  1747.        ;LD (pg),A
  1748.        PUSH BC
  1749.        ;LD BC,FD
  1750.        ;OUT (C),A
  1751.        ld ($+4),a
  1752.        ld a,(tpgs)
  1753.        SETPG32KHIGH
  1754.        POP BC
  1755.        RET
  1756.  
  1757. PRADDPP
  1758.        PUSH HL
  1759.        LD HL,(ADDY)
  1760.        ADD HL,DE
  1761.        ex de,hl
  1762.        POP HL
  1763.        RET
  1764.  
  1765. PRTXADDBUF
  1766.        LD HL,TXTBUF
  1767. PRTXADD CALL PRADDPP
  1768. PRTXT   LD A,(HL)
  1769.        INC HL
  1770.        CALL PR4X8
  1771.        INC D
  1772.        DJNZ PRTXT
  1773.        RET
  1774.  
  1775. PRMEMO  LD HL,T____
  1776. PRMENU
  1777.        CALL PRADDPP
  1778. PRMNU0  LD A,(HL)
  1779.        CP 6
  1780.        jr NZ,PRMNUN6
  1781.        INC HL
  1782.        LD D,(HL)
  1783.        INC HL
  1784.        LD E,(HL)
  1785.        INC HL
  1786.        CALL PRADDPP
  1787.        LD A,(HL)
  1788. PRMNUN6 PUSH AF
  1789.        CALL PR4X8
  1790.        INC HL
  1791.        LD A,D
  1792.        INC A
  1793. PRMRGT=$+1
  1794.        CP 62
  1795.        jr NZ,$+6
  1796.         LD A,(ADDX)
  1797.         INC E
  1798.        LD D,A
  1799.        POP AF
  1800.        RLA
  1801.        jr NC,PRMNU0
  1802.        RET
  1803. RESHALT
  1804.        ;RES 5,(IY+1)
  1805.        xor a
  1806.        ld (iykeyflag),a
  1807. HALTER
  1808.       CALL ARROW
  1809. HALTnAR
  1810. options=$+1
  1811.        LD DE,mains
  1812.        LD BC,(ARXY)
  1813. optadr=$+1
  1814.        LD HL,MENUCOO
  1815. OPTER0  INC D
  1816.        LD A,B
  1817.        CP (HL)
  1818.        INC HL
  1819.        JP C,OPTI3
  1820.        LD A,C
  1821.        CP (HL)
  1822.        JP C,OPTI3
  1823.        INC HL
  1824.        LD A,B
  1825.        CP (HL)
  1826.        INC HL
  1827.        JP NC,OPTI1
  1828.        LD A,C
  1829.        CP (HL)
  1830.        JP NC,OPTI1
  1831.        LD A,D
  1832.        DEC HL
  1833.        dec HL
  1834.        dec HL
  1835.        LD (ITEMADR),HL
  1836.        JR OPTQ
  1837. OPTI3   INC HL
  1838.        inc HL
  1839. OPTI1   INC HL
  1840.        DEC E
  1841.        JP NZ,OPTER0
  1842.        LD A,-1
  1843. OPTQ    LD (ITEM),A
  1844. ITEM=$+1
  1845.        LD A,-1
  1846.        INC A
  1847.        CALL NZ,OP_INV
  1848.        HALT
  1849.       CALL RE
  1850. filladr=$+1
  1851.        LD HL,0
  1852.         ld a,h
  1853.         cp 7
  1854. fillpat=$+1
  1855.        LD A,#68
  1856. fillN=$+1
  1857.        LD C,1
  1858.        CALL nz,FILLPP
  1859.      LD A,7
  1860.      ld (#5810),A
  1861.      ld (#5890),A
  1862.      ld (#58B0),A
  1863.      LD (filladr+1),A ;disable fill
  1864.       CALL OUT6
  1865.        XOR A
  1866. NOPKA=$+1
  1867.        CP 0 ;fire
  1868.        ;di ;doesn't help
  1869.         CALL GETAYER
  1870.         ;ei
  1871. BIT5
  1872.         ;BIT 5,(IY+1)
  1873.         ld a,(iykeyflag)
  1874.         or a
  1875.         LD A,(iycurkey);(23560)
  1876.         RET
  1877. RE
  1878.         PUSH AF
  1879.         push BC
  1880.         push DE
  1881.         push HL
  1882. ARSCR=$+1
  1883.         LD DE,0
  1884.        inc d
  1885.        dec d
  1886.        jr z,RE_skip
  1887.         ld HL,ARBUF
  1888.         ld BC,#8FF
  1889. RE0     LDI
  1890.         LDI
  1891.         DEC DE
  1892.         dec DE
  1893.         CALL DDE
  1894.         DJNZ RE0
  1895. RE_skip
  1896.         POP HL
  1897.         pop DE
  1898.         pop BC
  1899.         pop AF
  1900.         RET
  1901. ARROW
  1902. ARXY=$+1
  1903. ARX=$+2
  1904.         LD HL,#7707
  1905.        IF hidearr
  1906.        LD BC,0
  1907.         LD ($-2),HL
  1908.         XOR A
  1909.         SBC HL,BC
  1910.         ADD HL,BC
  1911.         jr NZ,ARROWsT
  1912.        LD (ARSCR+1),A ;hide arrow
  1913. ARROWt=$+1
  1914.         LD A,0
  1915.         DEC A
  1916.         RET Z
  1917. ARROWsT
  1918.        LD (ARROWt),A
  1919.        ENDIF
  1920.         LD C,H
  1921.         ld A,L
  1922.         ;CALL 8880
  1923.         ld b,a
  1924.         and a
  1925.         rra
  1926.         scf
  1927.         rra
  1928.         and a
  1929.         rra
  1930.         xor b
  1931.         and 0xf8
  1932.         xor b
  1933.         ld h,a
  1934.         ld a,c
  1935.         rlca
  1936.         rlca
  1937.         rlca
  1938.         xor b
  1939.         and 0xc7
  1940.         xor b
  1941.         rlca
  1942.         rlca
  1943.         ld l,a
  1944.         ld a,c
  1945.         and 7
  1946.        
  1947.         LD (ARSCR),HL
  1948.         ex de,hl
  1949.         RRCA
  1950.         RRCA
  1951.         RRCA
  1952.         LD L,A
  1953.         ld H,SPRAR/256
  1954.         ld BC,ARBUF
  1955. ARR0
  1956.         LD A,(DE)
  1957.         ld (BC),A
  1958.         AND (HL)
  1959.         INC L
  1960.         OR (HL)
  1961.         INC L
  1962.         LD (DE),A
  1963.         INC C
  1964.         inc E
  1965.         LD A,(DE)
  1966.         ld (BC),A
  1967.         AND (HL)
  1968.         INC L
  1969.         OR (HL)
  1970.         INC L
  1971.         LD (DE),A
  1972.         INC C
  1973.         DEC E
  1974.         CALL DDE
  1975.         LD A,L
  1976.         AND 31
  1977.         jr NZ,ARR0
  1978.         RET
  1979.  
  1980. RIGHT   LD A,#DF
  1981.         IN A,(-2)
  1982.         RRA
  1983.         CALL C,KEMPJOY
  1984.         RRA
  1985.         RET NC
  1986.         LD A,(ARX)
  1987.        INC C
  1988.         ADD A,B
  1989. RIGHTU  jr NC,$+4
  1990.          LD A,-9
  1991.         CP -8
  1992.         jr NC,$-4
  1993. L14     LD (ARX),A
  1994.         RET
  1995. MOUSER  PUSH BC
  1996.         push HL
  1997.         LD HL,(ARXY)
  1998.         LD A,-5
  1999.         IN A,(#DF)
  2000. OLDX    LD E,0
  2001.         ld (OLDX+1),A
  2002.         SUB E
  2003.         JP P,MPX
  2004.         ADD A,H
  2005.         CCF
  2006.         CALL LEFTU
  2007.         JR MXQ
  2008. MPX     ADD A,H
  2009.         CALL RIGHTU
  2010. MXQ     LD A,-1
  2011.         IN A,(#DF)
  2012. OLDY    LD E,0
  2013.         ld (OLDY+1),A
  2014.         SUB E
  2015.         NEG
  2016.         JP P,MPY
  2017.         ADD A,L
  2018.         jr C,$+3
  2019.          XOR A
  2020.         SUB L
  2021. MPY     ADD A,L
  2022.         LD (ARXY),A
  2023.         POP HL
  2024.         pop BC
  2025. LEFT    LD A,#DF
  2026.         IN A,(-2)
  2027.         RRA
  2028.         RRA
  2029.         CALL C,KEMPJOY
  2030.         AND 2
  2031.         LD A,(ARX)
  2032.        jr Z,$+4
  2033.        INC C
  2034.         SUB B
  2035. LEFTU   jr NC,$+3
  2036.         XOR A
  2037.         JR L14
  2038. UP      LD A,#FB
  2039.         IN A,(-2)
  2040.         RRA
  2041.         CALL C,KEMPJOY
  2042.         AND 8
  2043.         RET Z
  2044.         LD A,(HL)
  2045.         SUB B
  2046.         jr C,$+6
  2047.         CP 4
  2048.         jr NC,$+4
  2049.         LD A,4
  2050. L27     LD (HL),A
  2051.         INC C
  2052.         RET
  2053. DOWN    LD A,#FE
  2054.         IN A,(-2)
  2055.         RRA
  2056.         CALL C,KEMPJOY
  2057.         AND 4
  2058.         RET Z
  2059.         LD A,#EF
  2060.         IN A,(-2)
  2061.         CPL
  2062.         AND 31
  2063.         RET NZ ;cs+0..6
  2064.         LD A,#F7
  2065.         IN A,(-2)
  2066.         CPL
  2067.         AND 31
  2068.         RET NZ ;cs+1..5
  2069.        LD A,#7F
  2070.        IN A,(-2)
  2071.        AND 2
  2072.        RET Z ;Ext
  2073.         LD A,(HL)
  2074.         ADD A,B
  2075.         JR L27
  2076. MANAGE
  2077.         XOR A
  2078.         LD (NOPKA),A
  2079.         CALL FIRE
  2080.         LD A,9
  2081.         ld B,1
  2082.         jr Z,L2
  2083. L3      LD A,1
  2084.         DEC A
  2085.         jr NZ,L6
  2086.         CPL
  2087.         LD (NOPKA),A
  2088. TIMER   LD A,9
  2089.         DEC A
  2090.         jr NZ,$+3
  2091.         INC A
  2092.         LD B,A
  2093. L2      LD (TIMER+1),A
  2094.         LD A,B
  2095. L6      LD (L3+1),A
  2096. SPEED   LD BC,#101
  2097. CALLER  CALL MOUSER
  2098.         CALL RIGHT
  2099.         LD HL,ARXY
  2100.         CALL UP
  2101.         CALL DOWN
  2102. DOWNM=$+1
  2103.         LD A,#6F
  2104.         CP (HL)
  2105.         CALL C,L27
  2106.         LD A,1
  2107.         DEC C
  2108.         jr Z,L9
  2109.         LD A,1
  2110.         RLCA
  2111.         LD ($-2),A
  2112.         RET NC
  2113.         LD A,(SPEED+2)
  2114.         INC A
  2115.         CP 7
  2116.         RET Z
  2117. L9      LD (SPEED+2),A
  2118.         RET
  2119. ;5
  2120. KEMPJOY
  2121.         XOR A
  2122.         IN A,(31)
  2123. joy=$+1
  2124.         AND 0
  2125.         RET
  2126. ;1
  2127. OP_INV
  2128. ITEMADR=$+1
  2129.         LD HL,0
  2130.         LD B,(HL)
  2131.         ld D,B
  2132.         INC HL
  2133.         LD C,(HL)
  2134.         INC HL
  2135.         LD A,(HL)
  2136.         CP -1
  2137.         jr NZ,$+3
  2138.         DEC B
  2139.         SUB B
  2140.         RRA
  2141.         RRA
  2142.         RRA
  2143.         PUSH AF
  2144.         SRL D
  2145.         srl D
  2146.         srl D
  2147.         LD A,C
  2148.         RLCA
  2149.         RLCA
  2150.         CALL DA2ATTR
  2151.         POP AF
  2152.         LD (fillN),A
  2153.         LD C,A
  2154.         LD A,(HL)
  2155.         ld (fillpat),A
  2156.         RRCA
  2157.         LD B,A
  2158.         RRCA
  2159.         RRCA
  2160.         XOR B
  2161.         AND #E0
  2162.         XOR B
  2163.         RRA
  2164.         SRL A
  2165.         LD (filladr),HL
  2166. FILLPP
  2167.         LD (HL),A
  2168.         ld D,H
  2169.         ld E,L
  2170.         INC E
  2171.         DEC C
  2172.         RET Z
  2173.         LD B,0
  2174.         LDIR
  2175.         RET
  2176. CURPRTXADD
  2177.         PUSH DE
  2178.         CALL PRTXADDBUF
  2179.         POP DE
  2180.         CALL PRADDPP
  2181.         LD HL,(TXTLEN)
  2182.         ld A,(TXTX)
  2183.         CP L
  2184.         RET Z
  2185.         ADD A,D
  2186.         LD D,A
  2187.         LD A,'_'
  2188. PR4X8
  2189.         PUSH HL
  2190.         push DE
  2191.         push BC
  2192.         push AF
  2193.         SRL D
  2194.         LD C,15
  2195.         jr C,$+4
  2196.          LD C,#F0
  2197.         CALL DE2SCR
  2198.         POP AF
  2199.         ADD A,A
  2200.         ADD A,A
  2201.         LD E,A
  2202.        ADC A,FONT/512
  2203.         SUB E
  2204.         SLA E
  2205.         RLA
  2206.         LD D,A
  2207.        DUP 5
  2208.         INC H
  2209.         LD A,(DE)
  2210.         XOR (HL)
  2211.         AND C
  2212.         XOR (HL)
  2213.         LD (HL),A
  2214.         INC E
  2215.        EDUP
  2216.         INC H
  2217.         LD A,(DE)
  2218.         XOR (HL)
  2219.         AND C
  2220.         XOR (HL)
  2221.         LD (HL),A
  2222.         POP BC
  2223.         pop DE
  2224.         pop HL
  2225.         RET
  2226. SSA
  2227.         LD BC,(CURY)
  2228.         CALL GETnADR
  2229.         call XPP2
  2230.         LD A,C
  2231.        ADD A,A
  2232.        add A,A
  2233.        add A,C
  2234.        add A,-2
  2235.         ADD A,L
  2236.         LD L,A
  2237.        jr NC,$+3
  2238.          INC H
  2239.        LD A,(HL)
  2240.         INC HL
  2241.         inc HL
  2242.         RLA
  2243.         LD DE,AUTO1
  2244.        CALL puthB
  2245.        OR A
  2246.         LD BC,AUTOSu
  2247.         PUSH BC
  2248. puthB   INC HL
  2249.         LD A,(HL)
  2250.         RRA
  2251.         RRA
  2252.         RRA
  2253.         RRA
  2254.         AND 31
  2255.        CALL puth
  2256.         LD A,(HL)
  2257.         AND 15
  2258. puth    ADD A,'0'
  2259.         CP ':'
  2260.         jr C,$+4
  2261.         ADD A,'A'-':' ;TODO daa
  2262.         LD (DE),A
  2263.         INC DE
  2264.         RET
  2265. NotOct
  2266.         CALL cs_8026
  2267.         LD A,(OCT)
  2268.         SBC A,8
  2269.         ADC A,7
  2270.         LD C,A
  2271.         LD A,D
  2272.         SUB 13
  2273.         jr C,nOssnot
  2274.         INC A
  2275.         LD D,A
  2276.         INC C
  2277.         DEC C
  2278.         jr Z,$+3
  2279.         DEC C
  2280. nOssnot LD A,C
  2281.         ADD A,A
  2282.         add A,C
  2283.         ADD A,A
  2284.         add A,A
  2285.         add A,D
  2286.         LD D,A
  2287.         RET
  2288. EDSMP
  2289.         XOR A
  2290.         LD (volA),A
  2291.         LD (volC),A
  2292.         CALL OUT4
  2293.         LD A,(smp)
  2294.         ADD A,SMPS/256
  2295.         LD H,A
  2296.         ld BC,256
  2297.         ld L,C
  2298.         LD (ESMPadr),HL
  2299.         LD DE,EDORbf
  2300.         LDIR
  2301.         LD BC,mEDSMP
  2302.         CALL WINDUM
  2303.         XOR A
  2304.         LD (EsTOP),A
  2305.         LD HL,tSMPKEY
  2306.         LD DE,#900+SMPH
  2307.         CALL PRMENU
  2308.         CALL PROCORN
  2309.         CALL PRSMP
  2310.         LD A,(smp)
  2311.         ADD A,A
  2312.         LD L,A
  2313.         ld H,TSMPSZ/256
  2314.         LD A,(HL)
  2315.         ld (EsLOOP),A
  2316.         ld B,A
  2317.         INC L
  2318.         LD A,(HL)
  2319.         SUB B
  2320.         LD (EsLEN),A
  2321.        PUSH HL
  2322.         XOR A
  2323.         LD (EsMflag),A
  2324.         ld (EsLIN),A
  2325.         CALL GsMRK56
  2326. EDSMP0
  2327.        CALL RESHALT
  2328.         CALL EsCHMRK
  2329.         CALL EsPRMRK ;долго
  2330.         CALL EDSMCUR
  2331.         CALL EDSMPKY
  2332.         LD A,(smp)
  2333.         ld (piaSMP),A
  2334. EsORN=$+1
  2335.         LD A,0
  2336.         ld (piaORN),A
  2337.         LD HL,TORNSZ
  2338.         ADD A,A
  2339.         add A,L
  2340.         LD L,A
  2341.         ld A,(HL)
  2342.         ld (piOLOOP),A
  2343.         INC L
  2344.         LD A,(HL)
  2345.         ld (piOEND),A
  2346.         LD BC,(EsLOOP)
  2347.         ld A,C
  2348.         ld (piSLOOP),A
  2349.         ADD A,B
  2350.         LD (piSEND),A
  2351.         CALL OUT4
  2352.         LD HL,EDORbf
  2353. ESMPadr=$+1
  2354.         LD DE,0
  2355.         LD BC,256
  2356.         LDIR
  2357.         CALL PIANO
  2358.         CALL TSTFIRE
  2359.         jr NC,EDSMP0
  2360.        CALL DOWNMER
  2361.        POP HL
  2362. SMPQU
  2363.         LD DE,(EsLOOP)
  2364.         LD A,D
  2365.         ld B,E
  2366.         JP ORNQ
  2367. EDTXT
  2368.         LD (TXTSCR),DE
  2369.         ld (TXTLEN),A
  2370. EDTXw  ;LD A,#7F
  2371.         CALL ANYKEY
  2372.         RRA
  2373.         jr NC,EDTXw
  2374.         PUSH HL
  2375.         LD DE,TXTBUF
  2376.         ld (CURADR),DE
  2377.         ld BC,32
  2378.         LDIR
  2379.         XOR A
  2380.         LD (TXTX),A
  2381. TXTSCR=$+1
  2382. EDTX0   LD DE,0
  2383. TXTLEN=$+1
  2384.         LD B,0
  2385.        PUSH BC
  2386.        push DE
  2387.        CALL CURPRTXADD
  2388.         CALL RESHALT
  2389.         jr Z,$-3
  2390.        POP DE
  2391.        pop BC
  2392.        CALL PRTXADDBUF
  2393.         LD A,(iycurkey);(23560)
  2394.         ;CP 6 ;caps lock
  2395.         ;jr NZ,EDTXn6
  2396.         jr EDTXn6
  2397.         ;LD HL,#5C6A
  2398.         ;ld A,8
  2399.         ;XOR (HL)
  2400.         ;LD (HL),A
  2401. EDsholk CALL SHOLK
  2402.         JR EDTX0
  2403. EDTXn6  CP key_enter;13
  2404.         jr Z,EDTXQ
  2405.         CP key_left;12
  2406.         jr Z,EDTXdel
  2407.         CP key_backspace;8
  2408.         jr Z,EDTXdel
  2409.         CP key_right;9
  2410.         jr Z,EDTXrgt
  2411.         CP ' '
  2412.         jr C,EDTX0
  2413. EDTXrgt LD B,A
  2414.         ;RLA
  2415.         ;jr C,EDTX0
  2416. TXTX=$+1
  2417.         LD C,0
  2418.         ld A,(TXTLEN)
  2419.         INC C
  2420.         CP C
  2421.         jr C,EDTX0
  2422.         LD A,C
  2423.         ld (TXTX),A
  2424. CURADR=$+1
  2425.         LD HL,TXTBUF
  2426.         LD A,B
  2427.         CP key_right;9
  2428.         jr Z,$+3
  2429.          LD (HL),B
  2430.         INC HL
  2431.         LD (CURADR),HL
  2432.         LD A,(TXTLEN)
  2433.         ld C,A
  2434.         ld A,(TXTX)
  2435.         SUB C
  2436.         jr NZ,EDsholk
  2437. EDTXQIF=$+1
  2438.         CP 0
  2439.         jr Z,EDsholk
  2440.         LD A,(TXTLEN)
  2441.         ld B,A
  2442.         ld DE,(TXTSCR)
  2443.         CALL PRTXADDBUF
  2444. EDTXQ   LD HL,TXTBUF
  2445.         POP DE
  2446.         LD BC,(TXTLEN)
  2447.         ld B,0
  2448.         LDIR
  2449.         ;LD A,8
  2450.         ;ld (#5C6A),A ;caps lock
  2451.         RET
  2452. EDTXdel
  2453.         LD HL,TXTX
  2454.         ld B,(HL)
  2455.         DEC B
  2456.         JP M,EDTX0
  2457.         LD (HL),B
  2458.         ld HL,(CURADR)
  2459.         DEC HL
  2460.         CP key_left;8
  2461.         jr Z,$+4
  2462.          LD (HL),32
  2463.         LD (CURADR),HL
  2464.         JR EDsholk
  2465.  
  2466. cs_8020
  2467. ;out: NC=break
  2468.         ld a,0x7f
  2469.         in a,(0xfe)
  2470.         rra
  2471.         ret c
  2472. cs_8026
  2473. ;out: NC=caps shift
  2474.         ld a,0xfe
  2475.         in a,(0xfe)
  2476.         rra
  2477.         ret
  2478.  
  2479. ink1    DB #30
  2480. pap1    NOP
  2481. ink2    DB #38
  2482. pap2    NOP
  2483. bord    NOP
  2484.  
  2485. setup_5D3B
  2486.         DB 6
  2487.         DB 7
  2488.         DB %01010000;bord,bits
  2489. ;D7=joy 0/1F
  2490. ;D6=poion 0/FF
  2491. ;D5=SHOLK 0/C9
  2492. ;D4=playon 0/FF
  2493. ;curite DB 2;NU
  2494.  
  2495. filename_5CDD
  2496.         db "filename"
  2497. fileext_5CE5
  2498.         db "ext"
  2499.  
  2500. ;lb000=#B000;#1000<->COMFROM
  2501. ;COMFROM
  2502.        ;DISP lb000
  2503.         INCLUDE "ptcmpv8.asm"
  2504.        ;ENT
  2505. ;ENDC
  2506.         ;DISPLAY "COM/DECOM=",$-COMFROM
  2507.  
  2508. dotname_to_cpmname
  2509. ;de -> hl
  2510. ;out: de=pointer to termination character
  2511.         ;push hl ;buffer
  2512.        
  2513.         push de ;ASCIIZ string for parsing
  2514.         push hl ;Pointer to 11 byte buffer
  2515.         ld d,h
  2516.         ld e,l
  2517.         inc de
  2518.         ld [hl],' '
  2519.         ld bc,11-1
  2520.         ldir ;empty filename
  2521.         pop hl ;Pointer to 11 byte buffer
  2522.         pop de ;ASCIIZ string for parsing
  2523.  
  2524.         ld b,9
  2525.        
  2526.         ld a,(de)
  2527.         cp '.'
  2528.         jr nz,parse_filename0.
  2529.         ld (hl),a
  2530.         inc de
  2531.         ld a,(de)
  2532.         cp '.'
  2533.         jr nz,parse_filenameq_findterminator.
  2534.         inc hl
  2535.         ld (hl),a
  2536.         jr parse_filenameq_findterminator.
  2537. parse_filename0.
  2538.         ld a,[de]
  2539.         or a
  2540.         ret z ;jr z,parse_filenameq. ;no extension in string
  2541.         inc de
  2542.         cp '.'
  2543.         jr z,parse_filenamedot. ;можем уже быть на терминаторе
  2544.          ;cp 0x80
  2545.          ;jr nc,$+4
  2546.          ;or 0x20
  2547.         ld [hl],a
  2548.         inc hl
  2549.         djnz parse_filename0.
  2550. ;9 bytes in filename, no dot (9th byte goes to extension)
  2551. ;возможно, длинное имя, надо найти, что раньше - точка или терминатор
  2552. ;можем уже быть на терминаторе или на точке
  2553.         dec hl
  2554.         ld [hl],' '
  2555. parse_filenamelongname0.
  2556.         ld a,[de]
  2557.         or a
  2558.         ret z ;jr z,parse_filenameq. ;a=0
  2559.         inc de
  2560.         cp '.'
  2561.         jr z,parse_filenameLONGnamedot. ;можем уже быть на терминаторе
  2562.         jr parse_filenamelongname0.
  2563. parse_filenamedot.
  2564.         inc hl
  2565.         djnz $-1 ;hl points to extension in FCB
  2566.         dec hl
  2567. parse_filenameLONGnamedot.
  2568.         ld a,[de] ;extension in string
  2569.         or a
  2570.         ret z ;jr z,parse_filenameq. ;a=0
  2571.          ;cp 0x80
  2572.          ;jr nc,$+4
  2573.          ;or 0x20
  2574.         ld [hl],a ;extension in FCB
  2575.         inc hl
  2576.         inc de
  2577.         ld a,[de] ;extension in string
  2578.         or a
  2579.         ret z ;jr z,parse_filenameq. ;a=0
  2580.          ;cp 0x80
  2581.          ;jr nc,$+4
  2582.          ;or 0x20
  2583.         ld [hl],a ;extension in FCB
  2584.         inc hl
  2585.         inc de
  2586.         ld a,[de] ;extension in string
  2587.         or a
  2588.         ret z ;jr z,parse_filenameq. ;a=0
  2589.          ;cp 0x80
  2590.          ;jr nc,$+4
  2591.          ;or 0x20
  2592.         ld [hl],a ;extension in FCB
  2593. parse_filenameq_findterminator.
  2594.         inc de
  2595.         ld a,[de]
  2596.         or a
  2597.         jr nz,parse_filenameq_findterminator.
  2598. ;parse_filenameq. ;de на терминаторе
  2599.         ;pop hl ;buffer
  2600.         ret ;a=0
  2601.  
  2602. cpmname_to_dotname
  2603. ;hl -> de
  2604.         push hl
  2605.         ld b,8
  2606. cpmname_to_dotname0
  2607.         ld a,(hl)
  2608.         cp ' '
  2609.         jr z,cpmname_to_dotname0q
  2610.         ld (de),a
  2611.         inc hl
  2612.         inc de
  2613.         djnz cpmname_to_dotname0
  2614. cpmname_to_dotname0q
  2615.         pop hl
  2616.         ld bc,8
  2617.         add hl,bc ;hl=pointer to ext
  2618.         ld a,(hl)
  2619.         cp ' '
  2620.         jr z,cpmname_to_dotnameq
  2621.         ld a,'.'
  2622.         ld (de),a
  2623.         inc de
  2624.         ld  c,3
  2625.         ldir
  2626. cpmname_to_dotnameq
  2627.         xor a
  2628.         ld (de),a
  2629.         ret
  2630.  
  2631. loaddir_filinfo
  2632.         push bc
  2633.         push de
  2634.         push hl        
  2635.         ld de,filinfo
  2636.         OS_READDIR
  2637.         pop hl
  2638.         pop de
  2639.         pop bc
  2640.         or a
  2641.          scf
  2642.         ret nz ;CY
  2643.         ld a,(filinfo+FILINFO_FNAME)
  2644.         or a
  2645.          scf
  2646.         ret z ;CY
  2647.         ld a,(filinfo+FILINFO_FNAME+1)
  2648.         or a
  2649.         ret nz ;not one dot ;NC
  2650.         ld a,(filinfo+FILINFO_FNAME)
  2651.         cp '.'
  2652.         ret z ;Z,NC ;one dot
  2653.         or a ;NZ,NC
  2654.         ret
  2655. emptypath
  2656.         db 0
  2657. filinfo
  2658.         ds FILINFO_sz
  2659.  
  2660.         INCLUDE "ptmsg.asm"
  2661.  
  2662.         display "free in 0000: ",0x3f00-$
  2663.         ds 0x3f00-$ ;проверка на вшивость (в 0x4000 будет страница экрана)
  2664.         ds 0x8000-$
  2665.  
  2666.         INCLUDE "pt3d.asm"
  2667.         INCLUDE "pt5_371.asm"
  2668.         INCLUDE "pt6_371.asm"
  2669.  
  2670.         ;DISPLAY "FREE2=",plaer-$
  2671.         ;IF 0==((plaer-$)&0x8000)
  2672.         ;DS plaer-$
  2673.         ;ENDIF
  2674.         display "free in 8000: ",BUFSTART-$
  2675.         ds 0xc000-$
  2676.        
  2677.         include "ptinpage.asm"
  2678.  
  2679. main_end
  2680.  
  2681.         savebin "pt.com",main_begin,main_end-main_begin
  2682.  
  2683.         LABELSLIST "../../us/user.l"
  2684.