?login_element?

Subversion Repositories NedoOS

Rev

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