Subversion Repositories NedoOS

Rev

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

  1. AUTOS
  2.         LD HL,AUTO1
  3.         LD A,4
  4.         LD DE,0x0e08;#E0A
  5.         CALL EDTXT
  6. AUTOSu  LD HL,AUTO1
  7.         LD DE,AUTO2
  8.         LD A,(HL)
  9.         CP 'G'
  10.         jr C,AUT0s
  11.         CP 'W'
  12.         jr NC,AUT0s
  13.         SUB 'G'
  14.         OR #80
  15.         LD (DE),A
  16.         INC DE
  17.         inc HL
  18.         JR AUTO0-2
  19. AUT0s   CALL D0TO_
  20.         LD (DE),A
  21.         INC DE
  22.         inc HL
  23.         LD B,3
  24. AUTO0   CALL D0TO_
  25.         LD (DE),A
  26.         INC DE
  27.         inc HL
  28.         DJNZ AUTO0
  29.         LD HL,AUTO1
  30.         LD DE,0x0e08;#E0A
  31.         LD B,4
  32.         JP PRTXADD
  33. BYS
  34.         LD HL,TAUTHOR
  35.         ld DE,0x060b;D
  36.         JR $+8
  37. TITLES
  38.          LD HL,TTITLE
  39.          ld DE,0x060a;C
  40.         LD A,#20
  41.         JP EDTXT
  42. COPYSMP
  43.         CALL OUT4
  44. SMP2=$+1
  45. smp=$+2
  46.         LD BC,#101
  47.         LD A,B
  48.         ADD A,SMPS/256
  49.         LD H,A
  50.         SUB B
  51.         ADD A,C
  52.         LD D,A
  53.         PUSH BC
  54.         LD BC,256
  55.         LD L,C
  56.         ld E,C
  57.         LDIR
  58.         POP BC
  59.         LD A,B
  60.         ADD A,A
  61.         LD L,A
  62.         ld H,TSMPSZ/256
  63.         LD E,(HL)
  64.         INC L
  65.         LD D,(HL)
  66.         LD A,C
  67.         ADD A,A
  68.         LD L,A
  69.         LD (HL),E
  70.         INC L
  71.         LD (HL),D
  72.         JP PROK
  73. DECSMP
  74.         LD A,31
  75.         JR $+4
  76. INCSMP
  77.         LD A,1
  78. ONCSMP  LD HL,smp
  79.         LD DE,#2F06
  80.         LD B,A
  81.         ADD A,(HL)
  82.         AND 31
  83.         jr NZ,$+3
  84.         ADD A,B
  85.         LD (HL),A
  86.         CALL D2HEX
  87.         LD A,(digit)
  88.         ld (EDSMPN),A
  89.         RET
  90. DECSMP2
  91.         LD A,31
  92.         JR $+4
  93. INCSMP2
  94.         LD A,1
  95. ONCSMP2 LD HL,SMP2
  96.         LD DE,#3906
  97.         LD B,A
  98.         ADD A,(HL)
  99.         AND 31
  100.         JR IORN2U
  101. DECORN
  102.         LD A,15
  103.         JR $+4
  104. INCORN
  105.         LD A,1
  106. ONCORN  LD HL,ORN
  107.         LD DE,#2F07
  108.         LD B,A
  109.         ADD A,(HL)
  110.         AND 15
  111.         jr NZ,$+3
  112.         ADD A,B
  113.         LD (HL),A
  114.         CALL D2HEX
  115. digit=$+1
  116.         LD A,'1'
  117.         LD (EDORNN),A
  118.         RET
  119. DECORN2
  120.         LD A,15
  121.         JR $+4
  122. INCORN2
  123.         LD A,1
  124. ONCORN2 LD HL,ORN2
  125.         LD DE,#3907
  126.         LD B,A
  127.         ADD A,(HL)
  128.         AND 15
  129. IORN2U  jr NZ,$+3
  130.         ADD A,B
  131.         LD (HL),A
  132.         JP D2HEX
  133. COPYORN
  134.         CALL OUT4
  135.         CALL HLORN
  136.         LD D,A
  137.         PUSH HL
  138. ORN2=$+1
  139.         LD A,0
  140.         CALL HLOR3
  141.         LD E,A
  142.         ex de,hl
  143.         EX (SP),HL
  144.         LD BC,64
  145.         LDIR
  146.         POP BC
  147.         LD L,B
  148.         ld H,TORNSZ/256
  149.         LD E,(HL)
  150.         INC L
  151.         LD D,(HL)
  152.         LD L,C
  153.         LD (HL),E
  154.         INC L
  155.         LD (HL),D
  156.         JP PROK
  157.        IF about
  158. ABOUT
  159.         CALL PIANAY
  160.         LD BC,mABOUT
  161.         CALL WINDUM
  162.         LD HL,tABOUT
  163.         LD DE,0
  164.         CALL PRMENU
  165. ABOUT0
  166.         CALL TSTFIRH
  167.         jr NC,ABOUT0
  168.         ld a,(focuslost)
  169.         or a
  170.         jr nz,ABOUT0
  171.         JP CLOSWIN
  172.        ENDIF
  173. HOMEtra
  174.         XOR A
  175.         jr Z,ITRAQ
  176. INCTRA
  177.         LD A,(transp)
  178.         INC A
  179. ITRAQ   LD C,0
  180.         JP P,$+7
  181.          NEG
  182.          LD C,-1
  183.         AND #3F
  184.         LD B,A
  185.         INC C
  186.         jr NZ,$+4
  187.          NEG
  188.         LD (transp),A
  189.         DEC C
  190.         LD A,'+'
  191.         jr Z,$+4
  192.          LD A,'-'
  193.         LD DE,0x1d09;#360D
  194.         CALL PRADD
  195.         LD A,B
  196.         INC D
  197.         JP toOO
  198. DECTRA  LD A,(transp)
  199.         DEC A
  200.         JR ITRAQ
  201.  
  202. pat1=$+1
  203. INCPAT1 LD A,0
  204.         INC A
  205.         LD B,0
  206. IPAT1Q  CP PATS
  207.         jr C,$+3
  208.         LD A,B
  209. iPATq   LD (pat1),A
  210.         LD DE,0x4917;#4937 ;screen addr
  211.         JP PRF8
  212. DECPAT1 LD A,(pat1)
  213.         LD B,PATS-1
  214.         DEC A
  215.         JR IPAT1Q
  216.  
  217. pat2=$+1
  218. INCPAT2 LD A,0
  219.         INC A
  220.         LD B,0
  221. IPAT2Q  CP PATS
  222.         jr C,$+3
  223.          LD A,B
  224. iPAT2q  LD (pat2),A
  225.         LD DE,0x491c;#493C ;screen addr
  226.         JP PRF8
  227. DECPAT2 LD A,(pat2)
  228.         LD B,PATS-1
  229.         DEC A
  230.         JR IPAT2Q
  231. HOMEcop
  232.         ;jr $
  233.         XOR A
  234.         LD (beg1),A
  235.         CALL IBEGq
  236.         XOR A
  237.         LD (beg2),A
  238.         CALL IBEG2q
  239.         LD A,63
  240.         JR IENDQ
  241. ENDcur
  242.         LD A,(CURY)
  243.         JR IENDQ
  244. INCEND
  245.         LD A,(fromEND)
  246.         INC A
  247. IENDQ   AND 63
  248.         LD (fromEND),A
  249.         LD DE,0x2e0b;#2E0C
  250.         JP toOO
  251. DECEND
  252.         LD A,(fromEND)
  253.         DEC A
  254.         JR IENDQ
  255. PLSONG
  256. POS=$+1
  257.         LD DE,TPOSS
  258.         LD A,(DE)
  259.         ld (EPAT),A
  260.         LD E,A
  261.         INC D
  262.         LD A,(DE)
  263.         ld (PATLEN),A
  264.         LD A,-1
  265. PLPaSo  LD HL,ESNGon
  266.         LD B,(HL)
  267.        PUSH BC
  268.        push HL
  269.         LD (HL),A
  270.         CALL PATFON ;для PLPAT не надо,но можно
  271.         CALL PRPAT
  272.         LD HL,PLEXT
  273.         ld (PLJP),HL
  274.         CALL INICHAN
  275.        IF pttfc
  276.         LD A,pttfc
  277.         CALL OUTME
  278.         LD HL,tfmmuz
  279.         CALL tfmini
  280.         CALL tfm ;первый фрейм пуст
  281.         LD A,1
  282.         LD (tfcplayon),A
  283.        ENDIF
  284.         CALL PLAYER
  285.        IF pttfc
  286.         XOR A
  287.         LD (tfcplayon),A
  288.         LD A,pttfc
  289.         CALL OUTME
  290.         CALL tfmshut
  291.        ENDIF
  292.        POP HL,BC
  293.         LD (HL),B
  294.         RET
  295. PLPAT
  296.         XOR A
  297.         JR PLPaSo
  298. ;1(PRPAT)
  299. INITPLY
  300.         LD A,#F
  301.         LD (Avol),A
  302.         LD (Bvol),A
  303.         LD (Cvol),A
  304.         cpl;LD A,#F0
  305.         LD (Avol2),A
  306.         LD (Bvol2),A
  307.         LD (Cvol2),A
  308.         LD HL,ORNS
  309.         LD (Aorn),HL
  310.         LD (Born),HL
  311.         LD (Corn),HL
  312.        IF ts
  313.         LD HL,ayblock
  314.         LD DE,ayblock2
  315.         LD BC,szayblock
  316.         LDIR
  317.        ENDIF
  318. ;3(EPENT,PLPAT,PLSONG)
  319. INICHAN LD A,-1
  320.         LD (Achan),A
  321.         LD (Bchan),A
  322.         LD (Cchan),A
  323.        IF ts
  324.         LD (Achan+szayblock),A
  325.         LD (Bchan+szayblock),A
  326.         LD (Cchan+szayblock),A
  327.        ENDIF
  328.         RET
  329. PATLENS
  330.         LD A,(PATLEN)
  331.         CALL FILLENS
  332.         CALL PROK
  333. PRPAT
  334.         XOR A
  335.         LD (CURY),A
  336. PRPATU
  337.         CALL PIANAY
  338.         CALL INITPLY
  339. PRPATUU
  340.         CALL CHKTS ;3.7
  341.         LD A,(CURY)
  342.         LD HL,PATLEN
  343.         CP (HL)
  344.         jr C,$+3
  345.          LD A,(HL)
  346.         LD (CURY),A
  347.         PUSH AF
  348.         CALL PRCU7
  349.         LD A,(POS)
  350.        ex af,af'
  351.        LD HL,(EPAT)
  352.        LD B,L
  353.        LD H,TPATSZ/256
  354.        LD C,(HL) ;0..63
  355.        POP AF ;line#
  356. patSUB=$+1
  357.        LD E,PATTOPLINES;4 ;5 для UPROLL
  358.      IF 1 ;см IFN ниже
  359.        SUB E
  360.        jr NC,$+3
  361.         ADC A,C
  362.      ELSE
  363. ;глючит печать 0-й позиции, т.к.идем на посл.поз., потом на LOOP
  364.                                                  ;а надо на 0-ю
  365. ;т.е. на средней строке надо вспоминать тек.позицию
  366. PRPATu0
  367.        DEC A
  368.        JP P,PRPATuY
  369.        LD A,(ESNGon)
  370.        OR A
  371.        jr Z,PRPATuP
  372.        PUSH DE
  373.       ex af,af' ;A=pos
  374.         CALL ROLprPO ;будет A'=pos
  375.         LD B,E ;pat ;глючит при ssQ!!!???
  376.         LD A,(DE) ;patsz
  377.         LD C,A ;0..63
  378.         POP DE
  379. PRPATuP LD A,C
  380. PRPATuY DEC E
  381.         jr NZ,PRPATu0
  382.       ENDIF
  383. ;A=line#
  384. ;B=pat
  385.         INC C
  386. ;C=patsz 1..64
  387.        ex af,af'
  388.       LD D,A
  389.       ex af,af'
  390. ;D=POS
  391. ;patHGT=$+1
  392.         LD L,PATVIEWLINES;9
  393.         LD E,PATTOPLINE;#F
  394. PRPAT0  PUSH HL
  395.         push DE
  396.         CALL STROKA
  397.         POP DE
  398.         INC E
  399.         inc A
  400.         POP HL
  401.         CP C
  402.         jr NZ,PRPATNE
  403.         LD A,(ESNGon)
  404.         INC A
  405.         jr NZ,PRPATE
  406.       IF 1 ;см IFN выше
  407.         LD A,E
  408.         CP #14
  409.         jr C,PRPATE
  410.       ENDIF
  411.         LD B,E
  412.         LD A,D
  413.         CALL GETnPAA
  414.         LD D,E
  415.         LD E,B
  416.         LD B,A
  417.         LD A,L
  418.         LD L,B
  419.         LD H,TPATSZ/256
  420.         LD C,(HL)
  421.         INC C
  422.         LD L,A
  423. PRPATE  XOR A
  424. PRPATNE
  425.         DEC L
  426.         jr NZ,PRPAT0
  427.         CALL FILLATR
  428.         JP PLREAD
  429. CLPATS
  430.         XOR A
  431. CLPATS0 PUSH AF
  432.         CALL CLPAT
  433.         POP AF
  434.         INC A
  435.         CP PATS
  436.         jr NZ,CLPATS0
  437.         RET
  438. EDSONGCS
  439.         CALL cs_8026
  440.         JP NC,ONOFFTS
  441. EDSONG
  442.         CALL MELINV
  443.         LD HL,ESNGon
  444.         LD A,(HL)
  445.         CPL
  446.         LD (HL),A
  447.         LD A,(POS)
  448.         LD E,A
  449.         ld D,TPOSS/256
  450.         LD A,(DE)
  451.         ld (EPAT),A
  452.         LD E,A
  453.         INC D
  454.         LD A,(DE)
  455.         ld (PATLEN),A
  456.         CALL PATFON
  457.         CALL PRPATU
  458.         LD A,(editON)
  459.         OR A ;0=не редактируем
  460.         RET NZ ;редактируем
  461.         JP EDPATu ;включаем редактирование
  462.  
  463. curfla=$+1
  464. FLACUR  LD A,1
  465.         DEC A
  466.         RET NZ
  467. curon=$+1
  468. PRCUR   LD A,0
  469.         CPL
  470.         LD (curon),A
  471.         LD A,(CURX)
  472.         CP 6
  473.         jr Z,CUR2
  474.         CP 11+4
  475.         jr Z,CUR2
  476.         CP 16+8
  477.         jr Z,CUR2
  478.         LD HL,TEDCURX
  479.         ADD A,L
  480.         LD L,A
  481.         LD A,(HL)
  482. lineX=$+1
  483.         ADD A,0
  484.         SRL A
  485.         LD C,#F0
  486.         jr NC,$+4
  487.          LD C,#F
  488.         LD D,A
  489.         ld E,#13
  490.         CALL DE2SCR
  491.         LD B,8
  492.          LD A,(HL)
  493.          XOR C
  494.          LD (HL),A
  495.          INC H
  496.         DJNZ $-4
  497. CURQ    LD A,6
  498.         RET
  499.  
  500. CUR2    LD HL,TEDCURX
  501.         ADD A,L
  502.         LD L,A
  503.         LD A,(HL)
  504.         RRA
  505.         LD D,A
  506.         ld E,#13
  507.         CALL DE2SCR
  508.         LD BC,#8F0
  509. cUR3    LD A,(HL)
  510.         CPL
  511.         LD (HL),A
  512.         INC L
  513.         LD A,(HL)
  514.         XOR C
  515.         LD (HL),A
  516.         DEC L
  517.         INC H
  518.         DJNZ cUR3
  519.         JR CURQ
  520.  
  521. PRCU7   LD A,(curon)
  522.         OR A
  523.         RET Z
  524.         JR PRCUR
  525.  
  526. EDPATQ  CALL JPITEM
  527.         ;LD A,#6F
  528.         ;LD (DOWNM),A
  529.         call DOWNMER
  530.         JR EDPAT0
  531. INCROLL
  532. roll=$+1
  533.         LD A,0
  534.         INC A
  535.         CP 9
  536.         jr C,$+3
  537.          XOR A
  538. IROLQ   LD (roll),A
  539.         LD DE,0x3900;#D09
  540.         JP PRBCD ;edit step
  541.         if 1==0
  542. DECROLL LD A,(roll)
  543.         DEC A
  544.         JP P,IROLQ
  545.         LD A,8
  546.         JR IROLQ
  547.         endif
  548.  
  549. EPss    LD A,C
  550.         JR IROLQ
  551.  
  552. EPDOWN
  553.         CALL PRCU7
  554.         LD L,1
  555.         CALL ROLLPATFON
  556. EPDQ    JP SHOLK
  557.  
  558.         if 1==0
  559. EPEXT
  560.         CALL PRCU7
  561.         XOR A
  562.         LD (editON),A
  563.         LD HL,ESNGon
  564.         CP (HL)
  565.         LD (HL),A
  566.         CALL NZ,MELINV
  567.         POP AF
  568.         JP WAITNOK
  569.         endif
  570. EPUP
  571.         CALL PRCU7
  572.         LD L,1
  573.         CALL UPROLL
  574.         JR EPDQ
  575. ;3(ini,NLOOP,MENUUSE)
  576. EDPAT
  577. editON=$+1
  578.         LD A,0
  579.         OR A
  580. ;если не редактировали(0), то входим на EDPATu
  581.         jr Z,EDPATu
  582. ;иначе
  583. ;если был EDSONG, то на EDSONG
  584.         LD A,(ESNGon)
  585.         INC A
  586.         JP Z,EDSONG
  587.         RET
  588. EDPATu  LD A,-1
  589.         LD (editON),A
  590.         XOR A
  591.         LD (CURY),A
  592.         CALL PRPAT
  593. EDPAT0
  594.         CALL RESHALT
  595.         CALL FLACUR
  596.         LD HL,EDPATQ
  597.         PUSH HL
  598.         LD (curfla),A
  599.         CALL BIT5
  600.         RET Z
  601.         LD HL,tSS
  602.         LD BC,9
  603.         CPIR
  604.         jr Z,EPss
  605.         CP kW;'W'
  606.         JP Z,EDSONGCS
  607.        IF bemol
  608.         CP kBEM
  609.         JP Z,EPbem
  610.        ENDIF
  611.         CP kssA
  612.         JP Z,SSA
  613.         CP kssR
  614.         JP Z,EPssr
  615.         CP kIns
  616.         JP Z,EPins
  617.         CP kssE
  618.         JP Z,EPsse
  619.         CP kDelLn
  620.         JP Z,EPdelln
  621.         CP kHom
  622.         jr Z,EPHOME
  623.         CP kEnd
  624.         jr Z,EPEND
  625.        IF tab
  626.         CP kTab
  627.         JP Z,JCUR
  628.         CP kTabL
  629.         JP Z,JCURL
  630.        ENDIF
  631.        IF ts
  632.         CP kChip
  633.         JP Z,SWPSONG
  634.        ENDIF
  635.         CP kSmp
  636.         JP Z,EDSMP
  637.         CP kOrn
  638.         JP Z,EDORN
  639.         cp key_pgup;SUB 4
  640.         JP Z,DECPOSU
  641.         cp key_pgdown;DEC A
  642.         JP Z,INCPOSU
  643.         cp key_left;SUB 3
  644.         jr Z,LCUR
  645.         cp key_right;DEC A
  646.         jr Z,RCUR
  647.         cp key_down;DEC A
  648.         JP Z,EPDOWN
  649.         cp key_up;DEC A
  650.         JP Z,EPUP
  651.         ;DEC A
  652.         ;dec A
  653.         cp key_enter
  654.         JP Z,EPENT
  655.         ;cp key_tab;DEC A ;???
  656.         ;JP Z,EPEXT
  657.         ;CALL cs_8026
  658.         ;jr C,NCAPCOM
  659.         LD A,(iycurkey);(23560)
  660.         CP kAON
  661.         JP Z,AUTOON
  662.         CP kEON
  663.         JP Z,ENVON
  664.         CP kTRA
  665.         JP Z,TRANSP
  666.         CP kBEG
  667.         JP Z,BEGcur
  668.         CP kEND
  669.         JP Z,ENDcur
  670.         CP kCOP
  671.         JP Z,COPcur
  672.         CP kORD
  673.         JP Z,POSEDIT
  674. NCAPCOM CALL TSTNOTE
  675.         CALL XPPSCF
  676.         JP Z,TSTOCT
  677.         RET
  678. EPHOME
  679.         XOR A
  680.         LD HL,CURY
  681.         CP (HL)
  682.         jr NZ,ePGQ
  683.         DEC H
  684. EPEND
  685.         LD HL,(EPAT)
  686.         LD H,TPATSZ/256
  687.         LD A,(HL)
  688.         jr Z,$+4
  689.          INC A
  690.          RRA
  691. ePGQ    LD (CURY),A
  692.         JP PRPATU
  693. LCUR
  694.         CALL PRCU7
  695. CURX=$+1
  696.         LD A,6
  697.         DEC A
  698.         JP P,LCURQM3
  699.         LD A,20+12
  700.         JP LCURQM3
  701. RCUR
  702.         CALL PRCU7
  703.         LD A,(CURX)
  704.         INC A
  705.         CP 21+12
  706.         jr C,$+3
  707.          XOR A
  708. LCURQM3 LD (CURX),A
  709. LCURQ   CALL PRCUR
  710.         JP SHOLK
  711. EPENT
  712. playon=$+1
  713.         LD A,-1
  714.         OR A
  715.         JP NZ,EPENTi
  716.         LD A,(CURX)
  717.         CP 6
  718.         jr Z,EPENTi
  719.         CP 11
  720.         jr Z,EPENTi
  721.         CP 16
  722.         JP NZ,PLNOTE
  723. EPENTi  LD A,(NOTENV)
  724.         LD (env),A
  725.         LD HL,PLCANC
  726.         LD (PLJP),HL
  727.         CALL INICHAN
  728.         JP PLAYER
  729.        IF tab
  730. JCUR
  731.         CALL PRCU7
  732.         LD BC,TJP
  733.         JR JCUROK
  734. JCURL
  735.         CALL PRCU7
  736.         LD BC,TJPLEFT
  737. JCUROK  LD HL,(CURX)
  738.         ld H,0
  739.         ADD HL,BC
  740.         LD A,(HL)
  741.         JP LCURQM3
  742.        ENDIF
  743. ROLLPATFON
  744.         CALL ROLL
  745.         JP PATFON
  746. ;3
  747. ROLL
  748. ;L=на сколько строк (для autoscroll)
  749.         PUSH HL
  750.         CALL PRCU7
  751. ROLnRE  LD A,(EPAT)
  752.         LD (nPAT),A
  753.         POP HL
  754. ROL0
  755. ;идем на строчку вниз
  756.         LD A,(PATLEN)
  757.         INC A
  758.         LD C,A
  759.         LD A,(CURY)
  760.         INC A
  761.         CP C
  762.         jr NZ,ROLNZ
  763.         LD A,(ESNGon)
  764.         OR A
  765.         CALL NZ,ROLnxPO ;C тоже корректируется
  766.         XOR A
  767. ROLNZ   LD (CURY),A
  768. ;ищем +4-ю строчку
  769.         ex af,af'
  770.        LD A,(POS)
  771.        ex af,af'
  772.         LD B,PATBOTTOMLINES;4
  773. ROLnx0  INC A
  774.         CP C ;patsz=1..64
  775.         jr NZ,ROLnx4
  776. ESNGon=$+1
  777.         LD A,0
  778.         OR A
  779.         jr Z,ROLnxY
  780.         ex af,af'
  781.        CALL GETnPAA;T ;(DE)->A->(nPAT)
  782.        ex af,af'
  783.         LD A,E
  784.         ex af,af'
  785.        LD E,A
  786.        INC D ;TPATSZ
  787.        LD A,(DE)
  788.        INC A
  789.        LD C,A
  790. ROLnxY  XOR A
  791. ROLnx4  DJNZ ROLnx0
  792. ;печатаем +4-ю строчку
  793.        PUSH HL
  794.        CALL scrolST ;DI;не портит регистры
  795.        LD HL,(POS)
  796.        PUSH HL
  797.        ex af,af'
  798.         LD (POS),A
  799.         ex af,af'
  800. nPAT=$+1
  801.        LD B,0
  802.        LD E,#17
  803.        CALL STROKA ;A=line#,E=scrY
  804.        POP HL
  805.        LD (POS),HL
  806.        POP HL
  807.        DEC L
  808.        jr NZ,ROL0
  809. rOLQ
  810.        JP   FILLATR ;DI..EI ;3200t
  811.       ;JP PATFON ;3000t
  812. UPROLL
  813.        CALL PRCU7
  814. PATLEN=$+1
  815. UPRnRE  LD C,63
  816.        LD A,(CURY)
  817.        DEC A
  818.        CP C
  819.        jr C,UPRNZ
  820.        LD A,(ESNGon)
  821.        OR A
  822.        jr NZ,UPRnxPO
  823.        LD A,C
  824. UPRNZ   LD (CURY),A
  825.        LD B,PATTOPLINES;4
  826. UPRnx4  DEC A
  827.        CP C
  828.        jr C,$+3
  829.         LD A,C
  830.        DJNZ UPRnx4
  831.        LD E,PATTOPLINE;#F
  832.        LD BC,(EPAT-1)
  833.        CALL scrol2 ;не портит регистры,не DI
  834.        CALL STROKA
  835. uPRQ    JR rOLQ
  836. UPRnxPO
  837.        PUSH AF
  838.        LD A,(POS)
  839.        CALL ROLprPO
  840.        LD (EPAT),A
  841.        ex af,af'
  842.         LD (POS),A
  843.         POP AF
  844.         RET C;pgUp
  845.         LD A,(DE)
  846.         LD (PATLEN),A
  847.         LD (CURY),A
  848.       ; PUSH AF ;!
  849.        ;LD A,PATBOTTOMLINES;5
  850.        ;LD (patHGT),A
  851.        ;LD (patSUB),A
  852.        ;CALL scrol2 ;не портит регистры,не DI
  853.         CALL PRPATU ;PRPAT
  854.         CALL POSFON ;3+699
  855.       ; POP AF
  856.       ; LD (CURY),A
  857.        ;LD A,PATTOPLINES;4
  858.        ;ld (patSUB),A
  859.        ;LD A,PATVIEWLINES
  860.        ;ld (patHGT),A
  861.         JR uPRQ
  862. PLAYER
  863.        IF hidearr
  864.         LD A,1
  865.         LD (ARROWt),A
  866.        ENDIF
  867.         LD A,18
  868.         ld (options),A
  869.         LD A,(TEMPO)
  870.         LD (temp1),A
  871.         LD (tempCNT),A
  872.         XOR A
  873.         LD (Acom),A
  874.         LD (Bcom),A
  875.         LD (Ccom),A
  876.         CALL PLREAD
  877.        IF ts
  878. ;5
  879. tson=$+1
  880.         LD A,0
  881.         OR A
  882.         jr Z,PLnots1
  883.        ;LD A,#FE
  884.         CALL SWPAYPP
  885.         XOR A
  886.         LD (Acom),A
  887.         LD (Bcom),A
  888.         LD (Ccom),A
  889.         CALL PLREAD
  890.        ;LD A,#FF
  891.         CALL SWPAYPP
  892. PLnots1
  893.        ENDIF
  894.         CALL ARROW     ;1700
  895.         LD A,(temp1)
  896.         LD (tempCNT),A ;иначе игнорит темп на line0
  897. PLAYER0
  898.        IF shadplay
  899.         LD A,#C9
  900.         LD (scrolST),A
  901.        ENDIF
  902.         LD A,(tempCNT)
  903.         DEC A
  904.         LD L,1
  905.         CALL Z,ROLL   ;35500
  906.        IF shadplay
  907.         LD A,#F3
  908.         LD (scrolST),A
  909.        ENDIF
  910.         CALL HALTnAR ;10000
  911.         CALL JPITEM ;стрелка выкл.
  912.         CALL PATFON      ;3000
  913.       ;при вых.после перекл.POS будет READ,ROLL
  914.         CALL ARROW     ;1700
  915.         CALL OUT4      ;100
  916.         CALL PLnOUT   ;5400
  917.        IF ts
  918.         LD A,(tson)
  919.         OR A
  920.         jr Z,PLnots2
  921.         LD A,(tempCNT)
  922.         DEC A
  923.         CALL Z,PLREAD ;2100
  924.        ;LD A,#FE
  925.         CALL SWPAYPP   ;7700;6881
  926.         CALL OUT4      ;100
  927.         CALL PLnOUT    ;5400
  928. PLnots2
  929.        ENDIF
  930. tempCNT=$+1
  931.         LD A,0
  932.         DEC A
  933.         jr NZ,PLnoNL
  934.         CALL PLREAD   ;2100
  935. temp1=$+1
  936.         LD A,0
  937. PLnoNL  LD (tempCNT),A
  938.        IF ts
  939.         LD A,(tson)
  940.         OR A
  941.        ;LD A,#FF
  942.         CALL NZ,SWPAYPP;7700;6881
  943.        ENDIF
  944.       ;CALL RE        ;1000
  945.        ;CALL JPITEM
  946.        IF pttfc
  947. tfcplayon=$+1
  948.         LD A,0
  949.         OR A
  950.         jr Z,tfcplayno
  951.         LD A,pttfc
  952.         CALL OUTME
  953.         CALL tfm
  954. tfcplayno
  955.        ENDIF
  956. PLJP=$+1
  957.         JP PLCANC ;or PLEXT (ed.song)
  958. PLCANC
  959.         CALL CANCEL
  960.         jr NC,PLAYER0
  961.         JR PLQ
  962. PLEXT
  963.         CALL CANCEL2
  964.         jr NC,PLQ
  965.         ;CALL cs_8026
  966.         ;jr C,PLAYER0
  967.         ;CALL cs_8020
  968.         ;RRA
  969.         ;jr C,PLAYER0
  970.          CALL BIT5
  971.          jr z,PLAYER0
  972.          cp key_esc
  973.          jr nz,PLAYER0
  974. PLQ     LD A,mains
  975.         LD (options),A
  976.         CALL RE        ;1000
  977.         CALL PIAN2AY
  978.        IF shadplay
  979.         CALL PRPATU
  980.        ENDIF
  981.         JP WAITNOK
  982. PLREAD
  983.         LD A,(CURY)
  984.         ld C,A
  985.         LD A,(EPAT)
  986.         ld B,A
  987.         CALL GETnADR
  988.         LD A,(HL)
  989.         ld (ENV+1),A
  990.         INC HL
  991.         LD A,(HL)
  992.         ld (ENV),A
  993.         INC HL
  994.         LD A,(HL)
  995.         ld (DNOIS),A
  996.         INC HL
  997.         PUSH HL
  998.         POP IX
  999.         LD IY,Achan
  1000.         CALL USEchan
  1001.         LD IY,Bchan
  1002.         ;LD BC,5
  1003.         ;ADD IX,BC
  1004.         CALL plreadadd5usechan;USEchan
  1005.         LD IY,Cchan
  1006. plreadadd5usechan
  1007.         LD BC,5
  1008.         ADD IX,BC
  1009.         jp USEchan
  1010.         ;LD IY,23610
  1011.         ;RET
  1012. USEchan
  1013.         LD C,(IX+3)
  1014.         LD A,(IX)
  1015.         AND #7F
  1016.         DEC A
  1017.         JP M,USEbl
  1018.         CP 96
  1019.         jr NZ,USEnR
  1020.         LD (IY+#E),0
  1021.         LD A,-1
  1022.         JR uSEnNOT
  1023. USEnR   LD B,(IY+#B)
  1024.         LD (IY+#B),A
  1025.         LD (IY+#12),B
  1026.         XOR A
  1027.         LD (IY+#1C),A
  1028.         LD (IY+#18),A
  1029.         LD (IY+#19),A ;
  1030.         LD (IY+#1A),A ;shift
  1031.         LD (IY+#1B),A
  1032.         LD (IY+#E),A
  1033.         LD L,(IY+#13)
  1034.         LD H,(IY+#14)
  1035.         LD (usedisp),HL
  1036.         LD (IY+#13),A
  1037.         LD (IY+#14),A
  1038.         LD (IY+4),A
  1039.         LD (IY+9),A
  1040. uSEnNOT LD (IY),A
  1041.         LD A,(IX)
  1042.         RLA
  1043.         LD A,C
  1044.         RRA
  1045.         RRA
  1046.         RRA
  1047.         RRA
  1048.         AND 31
  1049.         jr Z,USEbl
  1050.         LD L,A
  1051.         ADD HL,HL
  1052.         LD H,TSMPSZ/256
  1053.         LD B,(HL)
  1054.         LD (IY+#A),B
  1055.         INC L
  1056.         LD B,(HL)
  1057.         LD (IY+8),B
  1058.         LD (IY+6),0
  1059.         ADD A,SMPS/256
  1060.         LD (IY+7),A
  1061. USEbl   LD A,C
  1062.         LD B,#F
  1063.         AND B
  1064.         LD C,A
  1065. ;FX:B=F
  1066. ;?X:B=1F
  1067. ;0X:не менять
  1068.         jr Z,USE0x
  1069.        ;JZ USEoldE
  1070.         CP B
  1071.         jr Z,USEnE
  1072.         LD (NOTENV),A
  1073.         LD (env),A
  1074.         XOR A
  1075.         LD L,A
  1076.         ld H,A
  1077.         LD (Efrq),HL
  1078.         LD (EstCNT),A
  1079.         LD HL,(ENV)
  1080.         ld (BASENV),HL
  1081.         LD B,31
  1082. USEnE
  1083.         LD (IY+#D),B ;vol|envmask
  1084. USE0x
  1085.         LD A,(IX+4)
  1086.         AND #F0
  1087.         CP C
  1088.         jr Z,USEoldE
  1089.         RRCA
  1090.         RRCA
  1091.         RRCA
  1092.         RRCA
  1093.         CALL HLOR3
  1094.         LD (IY+4),0
  1095.         LD (IY+1),L
  1096.         LD (IY+2),H
  1097.         LD L,A
  1098.         ld H,TORNSZ/256
  1099.         LD A,(HL)
  1100.         ld (IY+5),A
  1101.         INC L
  1102.         LD A,(HL)
  1103.         ld (IY+3),A
  1104. USEoldE LD A,(IX+4)
  1105.         AND #F
  1106.         jr Z,USEnV
  1107.         ADD A,A
  1108.         add A,A
  1109.         add A,A
  1110.         add A,A
  1111.         LD (IY+#C),A
  1112. USEnV   LD A,(IX+1)
  1113.         AND #F0
  1114.         RET Z
  1115.         LD C,16
  1116.         SUB C
  1117.         jr Z,dncom
  1118.         SUB C
  1119.         jr Z,upcom
  1120.         SUB C
  1121.         jr Z,portcom
  1122.         SUB C
  1123.         jr Z,smpcom
  1124.         SUB C
  1125.         jr Z,orncom
  1126.         SUB C
  1127.         JP Z,vibcom
  1128.         SUB C
  1129.         RET Z
  1130.         SUB C
  1131.        IF gs
  1132.         JP Z,gscom ;"8snn"
  1133.        ELSE
  1134.         RET Z
  1135.        ENDIF
  1136.         SUB C
  1137.         JP Z,edcom
  1138.         SUB C
  1139.         JP Z,eucom
  1140.         SUB C
  1141.         RET NZ
  1142.         LD A,(IX+2)
  1143.         CP 1
  1144.         RET C
  1145.        ;LD (tempCNT),A  ;v3+698
  1146.         LD (temp1),A
  1147.         RET
  1148. upcom
  1149.         LD A,(IX+1)
  1150.         AND #F
  1151. upcomQ  LD (IY+#F),A ;delay
  1152.         LD (IY+#E),1 ;com.type
  1153.         LD (IY+#10),A ;count
  1154.        IF fixtoENV
  1155.         PUSH AF
  1156.        ENDIF
  1157.         LD L,(IX+2)
  1158.         LD H,0
  1159.         CALL NC,NEGHL
  1160.         LD (IY+#11),L
  1161.         LD (IY+#15),H
  1162.        IF fixtoENV
  1163.         POP AF
  1164.         RET NZ
  1165.         OR H
  1166.         or L
  1167.         RET Z ;3!699(глючили 1000,2000)
  1168.         LD (IY+#13),L
  1169.         LD (IY+#14),H
  1170.        ENDIF
  1171.         RET
  1172. dncom
  1173.         LD A,(IX+1)
  1174.         AND #F
  1175.         SCF
  1176.         JR upcomQ
  1177. smpcom
  1178.         LD A,(IX+2)
  1179.         ld (IY+9),A
  1180.         RET
  1181. orncom
  1182.         LD A,(IX+2)
  1183.         ld (IY+4),A
  1184.         RET
  1185. vibcom
  1186.         LD (IY+#E),3
  1187.         LD A,(IX+2)
  1188.         ld B,A
  1189.         AND #F
  1190.         LD (IY+#17),A
  1191.         LD A,B
  1192.         AND #F0
  1193.         RRCA
  1194.         RRCA
  1195.         RRCA
  1196.         RRCA
  1197.         LD (IY+#16),A
  1198.         LD (IY+#10),A
  1199.         RET
  1200. portcom
  1201.         LD A,(IX)
  1202.         AND #7F
  1203.         DEC A
  1204.         CP 96
  1205.         RET NC
  1206.         LD A,(IX+1)
  1207.         AND #F
  1208.         LD (IY+#F),A
  1209.         LD (IY+#10),A
  1210.         LD A,(IX+2)
  1211.         LD (IY+#11),A
  1212.         LD (IY+#15),0
  1213.         LD (IY+#E),2
  1214.         LD A,(IY+#12)
  1215.         ld C,A
  1216.         LD HL,FrTab
  1217.         ADD A,A
  1218.         ADD A,L
  1219.         LD L,A
  1220.         LD E,(HL)
  1221.         INC L
  1222.         LD D,(HL)
  1223.         PUSH DE
  1224.         LD HL,(usedisp)
  1225.         LD (IY+#13),L
  1226.         LD (IY+#14),H
  1227.         ADD HL,DE
  1228.         ex de,hl
  1229.         LD A,(IY+#B)
  1230.         LD (IY+#12),A
  1231.         LD (IY+#B),C
  1232.         LD HL,FrTab
  1233.         ADD A,A
  1234.         ADD A,L
  1235.         LD L,A
  1236.         LD A,(HL)
  1237.         INC L
  1238.         LD H,(HL)
  1239.         ld L,A
  1240.         PUSH HL
  1241.        ;OR A
  1242.         SBC HL,DE
  1243.         POP HL
  1244.         POP DE
  1245.         jr NC,portUP
  1246.         ex de,hl
  1247.         PUSH HL
  1248.         LD L,(IY+#11)
  1249.         LD H,(IY+#15)
  1250.         CALL NEGHL
  1251.         LD (IY+#11),L
  1252.         LD (IY+#15),H
  1253.         POP HL
  1254. portUP  OR A
  1255.         SBC HL,DE
  1256.         LD (IY+#16),L
  1257.         LD (IY+#17),H
  1258.         RET
  1259. edcom
  1260.         LD A,(IX+1)
  1261.         AND #F
  1262.         LD (EstCNT),A
  1263.         LD (EiniCNT),A
  1264.         LD L,(IX+2)
  1265.         ld H,0
  1266.         LD (Estep),HL
  1267.         RET
  1268. eucom
  1269.         CALL edcom
  1270.         CALL NEGHL
  1271.         LD (Estep),HL
  1272.         RET
  1273.        IF gs
  1274. gscom
  1275. ;"8snn"
  1276.         LD A,(IX+1)
  1277.         AND #F ;smp
  1278.         OUT (GSDAT),A
  1279.        ;SC #39
  1280.        ;WC
  1281.        ;SC #80
  1282.         LD A,LY
  1283.         SUB Achan&0xff
  1284.         jr Z,$+9
  1285.          SUB Bchan-Achan
  1286.          jr Z,$+4
  1287.           LD A,1
  1288.          INC A
  1289.         ADD A,#98 ;play FX
  1290.         OUT (GSCOM),A
  1291.         WC
  1292.         LD A,(IX+2)
  1293.         OUT (GSDAT),A ;note
  1294.         WD
  1295.         SD #40 ;vol
  1296.         WD
  1297.         RET
  1298.        ENDIF
  1299. ;2:TSTNQ,EPENT(nu)
  1300. PLNOTE
  1301.        IF ts
  1302.         LD A,(tson)
  1303.         OR A
  1304.         jr Z,PLnotsP
  1305.        ;LD A,#FE
  1306.         CALL SWPAYPP
  1307.         CALL PLNOTPP
  1308.        ;LD A,#FF
  1309.         CALL SWPAYPP
  1310. PLnotsP
  1311.        ENDIF
  1312.         CALL PLNOTPP
  1313. PLNOTE0 CALL HALTER
  1314.         CALL OUT4
  1315.        IF ts
  1316.         LD A,(tson)
  1317.         OR A
  1318.         jr Z,PLnotsP2
  1319.        ;LD A,#FE
  1320.         CALL SWPAYPP
  1321.         CALL PLnOUT
  1322.        ;LD A,#FF
  1323.         CALL SWPAYPP
  1324. PLnotsP2
  1325.        ENDIF
  1326.         CALL PLnOUT
  1327.         call isnotepressed ;NZ=pressed
  1328.         jr NZ,PLNOTE0 ;нажато что-то (кроме CS,SS,Space) - держим ноту
  1329. PIAN2AY
  1330.        IF ts
  1331.         LD A,(tson)
  1332.         OR A
  1333.         JP Z,PIANAY
  1334.        ;LD A,#FE
  1335.         CALL SWPAYPP
  1336.         CALL PIANAY
  1337.        ;LD A,#FF
  1338.         CALL SWPAYPP
  1339.        ENDIF
  1340.         JP PIANAY
  1341. ;2 тут
  1342. PLNOTPP
  1343.         LD A,(NOTENV)
  1344.         LD (env),A
  1345.         XOR A
  1346.         LD (Acom),A
  1347.         LD (Bcom),A
  1348.         LD (Ccom),A
  1349.         CPL
  1350.         LD (Achan),A
  1351.         LD (Bchan),A
  1352.         LD (Cchan),A
  1353.         JP PLREAD
  1354. FILLATR
  1355.       ;EI
  1356.       ;RET
  1357.         DI
  1358.         LD HL,LINESon
  1359.         LD A,(PATLEN)
  1360.         LD C,A
  1361.         INC C
  1362.         LD DE,#FF00 ;;;
  1363.         LD A,(CURY)
  1364.         LD B,PATTOPLINES;4
  1365.         SUB B
  1366. FATR0   OR A
  1367.         JP P,FATR0Q
  1368.         LD (HL),D
  1369.         INC HL
  1370.         INC A
  1371.         DJNZ FATR0
  1372.         JR FATR1Q
  1373. FATR0Q   LD (HL),E
  1374.          INC HL
  1375.         DJNZ $-2
  1376. FATR1Q  INC HL
  1377.         LD B,PATBOTTOMLINES;4
  1378.         LD A,(CURY)
  1379. FATR2   INC A
  1380.         CP C
  1381.         jr Z,FATR2Q
  1382.         LD (HL),E
  1383.         INC HL
  1384.         DJNZ FATR2
  1385.         JR FATR3Q
  1386. FATR2Q   LD (HL),D
  1387.          INC HL
  1388.         DJNZ $-2
  1389. FATR3Q  LD (FATRSP),SP
  1390.         LD IX,PATVIEWTOPATTR;#59FF
  1391.         LD IY,LINESon
  1392.         LD A,PATVIEWLINES;9
  1393. FATRFIL ex af,af'
  1394. col1=$+1
  1395.        LD HL,#606
  1396. col2=$+1
  1397.        LD DE,#707
  1398.        LD BC,#744
  1399.        LD A,(IY)
  1400.        CP #7F
  1401.        jr Z,FATRNO
  1402.        OR A
  1403.        jr Z,FATRPUS
  1404.        LD HL,0
  1405.        LD D,L
  1406.        ld E,L
  1407.        LD C,L
  1408. FATRPUS LD SP,IX
  1409.        PUSH HL
  1410.        DEC SP
  1411.        PUSH HL,HL
  1412.        DEC SP
  1413.        PUSH HL
  1414.        DEC SP
  1415.        PUSH HL,HL
  1416.        DEC SP
  1417.        PUSH HL
  1418.        DEC SP
  1419.        PUSH HL,HL
  1420.        DEC SP
  1421.        PUSH DE,HL
  1422.        DEC SP
  1423.        PUSH BC
  1424. FATRNO  INC IY
  1425.        LD BC,32
  1426.        ADD IX,BC
  1427.        ex af,af'
  1428.         DEC A
  1429.         jr NZ,FATRFIL
  1430. FATRSP=$+1
  1431.         LD SP,0
  1432.         ;LD IY,23610
  1433.         EI
  1434.         RET
  1435. PLnOUT
  1436.         XOR A
  1437.         LD (mix),A
  1438.         LD IY,Achan
  1439.         LD A,(IY)
  1440.         INC A
  1441.         jr Z,PLnAres
  1442.         CALL iSMPORN
  1443.         LD DE,(Adfrq)
  1444.         ADD HL,DE
  1445.         LD (frqA),HL
  1446.         CALL ADDVOL
  1447.         LD A,B
  1448.         CALL GLOVOL1
  1449. PLoffA=$+1
  1450.         AND -1
  1451. PLnAres LD (volA),A
  1452.         CALL PLcoms
  1453.         LD IY,Bchan
  1454.         LD A,(IY)
  1455.         INC A
  1456.         jr Z,PLnBres
  1457.         CALL iSMPORN
  1458.         LD DE,(Bdfrq)
  1459.         ADD HL,DE
  1460.         LD (frqB),HL
  1461.         CALL ADDVOL
  1462.         RLC B
  1463.         CALL GLOVOL
  1464. PLoffB=$+1
  1465.         AND -1
  1466. PLnBres LD (volB),A
  1467.         CALL PLcoms
  1468.         LD IY,Cchan
  1469.         LD A,(IY)
  1470.         INC A
  1471.         jr Z,PLnCres
  1472.         CALL iSMPORN
  1473.         LD DE,(Cdfrq)
  1474.         ADD HL,DE
  1475.         LD (frqC),HL
  1476.         CALL ADDVOL
  1477.         RLC B
  1478.         rlc B
  1479.         CALL GLOVOL
  1480. PLoffC=$+1
  1481.         AND -1
  1482. PLnCres LD (volC),A
  1483.         CALL PLcoms
  1484.         LD HL,(BASENV)
  1485.         LD A,(Edfrq)
  1486.         ADD A,L
  1487.         LD L,A
  1488.         LD DE,(Efrq)
  1489.         ADD HL,DE
  1490.         LD (frqE),HL
  1491.         LD A,(EstCNT)
  1492.         DEC A
  1493.         JP M,EstOFF
  1494.         jr NZ,EstNZ
  1495.         LD HL,(Estep)
  1496.         ADD HL,DE
  1497.         LD (Efrq),HL
  1498.         LD A,(EiniCNT)
  1499. EstNZ   LD (EstCNT),A
  1500. EstOFF  XOR A
  1501.         LD (Edfrq),A
  1502.         ;LD IY,23610
  1503.         JP OUTAY
  1504. GLOVOL
  1505.         LD A,(mix)
  1506.         OR B
  1507. GLOVOL1 LD (mix),A
  1508.         LD H,TVOL/256
  1509.         ld L,(IY+#C)
  1510.         ADD HL,DE
  1511.         LD E,(HL)
  1512. glovol=$+1
  1513.         LD L,#F0
  1514.         ADD HL,DE
  1515.         LD A,(HL)
  1516.         OR C
  1517.         AND (IY+#D)
  1518.         RET
  1519.  
  1520. PLcoms  LD A,(IY+#E)
  1521.         DEC A
  1522.         RET M
  1523.         jr NZ,PLcomNG
  1524.         DEC (IY+#10)
  1525.         RET NZ
  1526. PLcomG  LD A,(IY+#F)
  1527.         ld (IY+#10),A
  1528.         LD L,(IY+#13)
  1529.         LD H,(IY+#14)
  1530.         LD E,(IY+#11)
  1531.         LD D,(IY+#15)
  1532.         ADD HL,DE
  1533.         LD (IY+#13),L
  1534.         LD (IY+#14),H
  1535.         RET
  1536.  
  1537. PLcomNG DEC A
  1538.         jr NZ,PLcomNP
  1539.         DEC (IY+#10)
  1540.         RET NZ
  1541.         CALL PLcomG
  1542.         LD A,D
  1543.         ex de,hl
  1544.         LD L,(IY+#16)
  1545.         LD H,(IY+#17)
  1546.         RLA
  1547.         jr NC,PLportA
  1548.         ADD HL,DE
  1549.         add HL,DE
  1550. PLportA SBC HL,DE
  1551.         INC H
  1552.         RET NZ
  1553.         LD A,(IY+#12)
  1554.         ld (IY+#B),A
  1555.         XOR A
  1556.         LD (IY+#E),A
  1557.         LD (IY+#13),A
  1558.         LD (IY+#14),A
  1559.         RET
  1560.  
  1561. PLcomNP DEC A
  1562.         RET NZ
  1563.         DEC (IY+#10)
  1564.         RET NZ
  1565.         LD A,(IY)
  1566.         XOR -1
  1567.         LD (IY),A
  1568.         LD A,(IY+#16)
  1569.         jr Z,$+5
  1570.          LD A,(IY+#17)
  1571.         LD (IY+#10),A
  1572.         RET
  1573. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1574. COPcur
  1575.         LD A,(CURY)
  1576.         ld (beg2),A
  1577.         XOR A
  1578.         CALL IBEG2q
  1579.         LD A,(EPAT)
  1580.         CALL iPAT2q
  1581.         CALL XPP2
  1582.         LD A,C
  1583.         CALL ICHN2Q
  1584.         LD HL,TSTNROL
  1585.         PUSH HL
  1586. COPY
  1587.         CALL FROMSZ
  1588.         LD DE,(pat2)
  1589.         ld D,A
  1590.         LD HL,(beg1)
  1591. beg2=$+1
  1592.         LD H,0
  1593.         CALL CHN1PP
  1594. chn2=$+1
  1595.         LD A,1
  1596.         LD B,3
  1597.         DEC A
  1598.         jr Z,COP2X
  1599.         LD B,8
  1600.         DEC A
  1601.         jr Z,$+4
  1602.          LD B,13
  1603. COP2X   LD A,(pat1)
  1604.        IF opcompl
  1605.         SCF
  1606.        ENDIF
  1607. COPYU
  1608. ;A=patfrom
  1609. ;D=lines
  1610. ;E=patto
  1611. ;B=chnto(3/8/13)
  1612. ;C=chnfrom
  1613. ;H=lineto
  1614. ;L=linefrom
  1615.        IF opcompl
  1616.         PUSH AF
  1617.        ENDIF
  1618.         PUSH DE
  1619.         push DE
  1620.         push HL
  1621.         PUSH BC
  1622.         CALL PATtoBUF ;делает OUT7
  1623.         POP BC
  1624.         LD A,C
  1625.         ADD A,3
  1626.         LD (DISPc1),A
  1627.         LD A,B
  1628.         INC A
  1629.         LD (DISPc2),A
  1630.         POP HL
  1631.         LD A,H
  1632.         ADD HL,HL
  1633.         LD H,TLINES/256
  1634.         LD E,(HL)
  1635.         INC L
  1636.         LD D,(HL)
  1637.         LD HL,BUF
  1638.         ADD HL,DE
  1639.         LD E,C
  1640.         ld D,0
  1641.         LD C,A
  1642.         LD A,(chnall)
  1643.         OR A
  1644.         jr NZ,noall1
  1645.         ADD HL,DE
  1646. noall1
  1647.         EX (SP),HL
  1648.         LD A,L
  1649.         CALL AtoPAT ;DE
  1650.         LD L,C
  1651.         ADD HL,HL
  1652.         LD H,TLINES/256
  1653.         LD A,(HL)
  1654.         INC L
  1655.         LD H,(HL)
  1656.         ld L,A
  1657.         ADD HL,DE
  1658.         LD A,(chnall)
  1659.         OR A
  1660.         jr NZ,noall2
  1661.         LD E,B
  1662.         ld D,0
  1663.         ADD HL,DE
  1664. noall2
  1665.         LD A,64
  1666.         SUB C
  1667.         POP DE
  1668.         ex de,hl
  1669.         LD C,A
  1670.         POP AF
  1671.         CP C
  1672.         jr C,$+3
  1673.          LD A,C
  1674. chnall=$+1
  1675.         LD C,0 ;не0=все каналы
  1676.         INC C
  1677.         DEC C
  1678.         jr Z,COPSCF
  1679. ;копирование всех каналов
  1680. COPYAL0 LD BC,18
  1681.         LDIR
  1682.         DEC A
  1683.         jr NZ,COPYAL0
  1684.         JR COPYALQ
  1685. ;копирование 1 канала
  1686. ;1
  1687. COPSCF  SCF ;NC=9 on
  1688. COPY0
  1689.         PUSH HL
  1690.         push DE
  1691.         jr C,COPyN
  1692.         ex af,af'
  1693.        LD A,(HL)
  1694.        AND #7F
  1695.        jr Z,COPnN
  1696. COPyN   PUSH DE
  1697.        push HL
  1698.        LDI
  1699.        INC HL
  1700.        inc DE
  1701.        INC HL
  1702.        inc DE
  1703.        LDI
  1704.        LDI
  1705.        POP HL
  1706.        pop DE
  1707. COPnN
  1708.        INC HL
  1709.        inc DE
  1710.        jr C,COPyC
  1711.        LD A,(HL)
  1712.        AND #F0
  1713.        jr Z,COPnC
  1714.        ex af,af'
  1715. COPyC   ex af,af'
  1716.        LDI
  1717.        LDD
  1718. COPnC
  1719.        INC HL
  1720.        inc HL
  1721.        LD A,(HL)
  1722.        AND #F
  1723.        jr Z,COPnE
  1724.        XOR #F
  1725.        jr Z,COPnE
  1726. DISPc2=$+1
  1727.        LD BC,0
  1728.        ex de,hl
  1729.        SBC HL,BC
  1730.        ex de,hl
  1731. DISPc1=$+1
  1732.        LD C,0
  1733.        SBC HL,BC
  1734.        LDI
  1735.        LDI
  1736. COPnE
  1737.        POP HL
  1738.        LD BC,18;B портится
  1739.        ADD HL,BC
  1740.        ex de,hl
  1741.        POP HL
  1742.        ADD HL,BC
  1743.        ex af,af'
  1744.         DEC A
  1745.         jr NZ,COPY0
  1746. COPYALQ
  1747.        IF opcompl
  1748.         POP AF
  1749.         CALL C,PROK
  1750.        ENDIF
  1751. COPQJP
  1752.         JP PRPATU
  1753. FROMSZ
  1754. fromEND=$+1
  1755.         LD A,63
  1756. beg1=$+1
  1757.         LD C,0
  1758.         SUB C
  1759.         INC A
  1760.         RET NC
  1761.         POP AF
  1762.        IF opcompl
  1763. PRERR   LD HL,TERROR
  1764.         JR PROKU
  1765.        ELSE
  1766.         RET
  1767.        ENDIF
  1768. ;5
  1769. PROK
  1770.        IF opcompl
  1771.         LD HL,TCOMPLE
  1772. PROKU
  1773.         LD (PROKHL),HL
  1774.        ENDIF
  1775.         LD BC,mOK
  1776.         CALL WINDUM
  1777. PROKHL=$+1
  1778.         LD HL,TCOMPLE
  1779.         LD DE,0
  1780.         CALL PRMENU
  1781.         CALL DOWNMER
  1782.         CALL WAITNOK
  1783.          YIELD;HALT
  1784.          XOR A
  1785.          CALL checkmarginkeys ;a=0 ;out: NC=pressed
  1786.         jr C,$-5
  1787.         JP CLOSWIN
  1788. CLEARS
  1789.         XOR A
  1790.         LD (patcled),A
  1791.         LD HL,CLEACOO
  1792.         LD DE,CLEAUSE
  1793.         LD BC,mCLEAR
  1794.         CALL WINDOW
  1795.         LD HL,tCLEAR
  1796.         LD DE,0
  1797.         CALL PRMENU
  1798. CLELOOP
  1799.         CALL HALTER
  1800.         CALL JPITEM
  1801.         CALL TSTFIRE
  1802.         jr NC,CLELOOP
  1803. CLEARSQ CALL CLOSWIN
  1804.         CALL POSFON
  1805. patcled=$+1
  1806.         LD A,0
  1807.         OR A
  1808.         CALL NZ,PRPAT
  1809.         RET
  1810. clPAT
  1811.         CALL SURE
  1812.         DEC A
  1813.         jr Z,clPATS
  1814.         LD A,(EPAT)
  1815.         CALL CLPAT
  1816.         LD A,-1
  1817.         LD (patcled),A
  1818.         JR clQ
  1819.  
  1820. clSONG  CALL SURE
  1821.         CALL CLORNSM
  1822. clPATS  CALL CLPATS
  1823.         CALL CLPOS
  1824.         XOR A
  1825.         LD (LOOP),A
  1826.         LD (POS),A
  1827.         LD (EPAT),A
  1828.         INC A
  1829.         LD (LENG),A
  1830.         LD A,63
  1831.        ;LD BC,PATS-1
  1832.        ;LD DE,TPATSZ+1
  1833.        ;LD H,D,L,B
  1834.        ;LD (HL),A
  1835.        ;LDIR
  1836.         CALL FILLENS
  1837.         LD (patcled),A
  1838.         LD (PATLEN),A
  1839. clQ     POP HL
  1840.         JR CLEARSQ
  1841.  
  1842. clPOS   CALL SURE
  1843.         CALL CLPOS
  1844.         XOR A
  1845.         LD (LOOP),A
  1846.         JR clQ
  1847.  
  1848. clSMP   CALL SURE
  1849.         DEC A
  1850.         CALL Z,CLSMPS
  1851.         LD A,(smp)
  1852.         CALL CLSMP
  1853.         JR clQ
  1854.  
  1855. clORN   CALL SURE
  1856.         DEC A
  1857.         CALL Z,CLORNS
  1858.         LD A,(ORN)
  1859.         CALL CLORN
  1860.         JR clQ
  1861.  
  1862. SURE    LD HL,SURECOO
  1863.         LD DE,SUREUSE
  1864.         LD BC,mSURE
  1865.         CALL WINDOW
  1866.         LD HL,tSURE
  1867.         LD DE,0
  1868.         CALL PRMENU
  1869. SURE0
  1870.         CALL HALTER
  1871.         CALL JPITEM
  1872.         CALL TSTFIRE
  1873.         jr NC,SURE0
  1874.         LD C,1
  1875. SUREQ   CALL CLOSWIN
  1876.         LD A,C
  1877.         DEC A
  1878.         RET NZ
  1879.         POP AF
  1880.         JP clQ
  1881. YES
  1882.         LD A,(ITEM)
  1883.         DEC A
  1884.         LD C,A
  1885.         POP HL
  1886.         JR SUREQ
  1887. TRANSP
  1888.         CALL TransPP
  1889. TRNS0   LD A,(HL)
  1890.         AND #80
  1891.         LD D,A
  1892.         XOR (HL)
  1893.         jr Z,TRNSNO
  1894.         CP 97
  1895.         jr Z,TRNSNO
  1896.         DEC A
  1897.         ADD A,C
  1898.         CP 96
  1899.         jr C,$+3
  1900.          SUB C
  1901.         INC A
  1902. TRNSNO  OR D
  1903.         LD (HL),A
  1904.         LD DE,18
  1905.         ADD HL,DE
  1906.         DJNZ TRNS0
  1907. PRPATO  CALL PROK
  1908.         JP PRPATU
  1909. TRANVOL
  1910.         CALL TransPP
  1911.         INC HL
  1912.         inc HL
  1913.         inc HL
  1914.         inc HL
  1915. TRNV0   LD A,(HL)
  1916.         AND #F0
  1917.         LD D,A
  1918.         XOR (HL)
  1919.         jr Z,TRNVNO
  1920.         ADD A,C
  1921.         jr Z,TRNV1
  1922.         CP 16
  1923.         jr C,TRNVNO
  1924.         CPL     ;
  1925.         RLA     ;
  1926.         SBC A,A ;будет
  1927.         AND #0F ;F
  1928. TRNV1   OR 1    ;или 1
  1929. TRNVNO  OR D
  1930.         LD (HL),A
  1931.         LD DE,18
  1932.         ADD HL,DE
  1933.         DJNZ TRNV0
  1934.         JR PRPATO
  1935. TransPP
  1936.         CALL FROMSZ
  1937.         PUSH AF
  1938.         LD A,(pat1)
  1939.         CALL AtoPAT
  1940.         CALL CHN1PP
  1941.         LD A,(beg1)
  1942.         ADD A,A
  1943.         LD L,A
  1944.         ld H,TLINES/256
  1945.         LD A,(HL)
  1946.         INC L
  1947.         LD H,(HL)
  1948.         ld L,A
  1949.         ADD HL,DE
  1950.         add HL,BC
  1951.         POP BC
  1952. transp=$+1
  1953.         LD C,0
  1954.         RET
  1955. ;edsmp/orn
  1956. PIANO
  1957.         XOR A
  1958.         LD H,A
  1959.         ld L,A
  1960.         LD (piCURv),HL
  1961.         LD (piCURv+2),HL
  1962.         LD (mix),A
  1963.         LD (DNOIS),A
  1964.         LD HL,piaSMP
  1965.         LD D,(HL)
  1966.         ld (HL),A
  1967.         LD (piSLIN),A
  1968.         LD (piOLIN),A
  1969.         LD A,D
  1970.         ADD A,SMPS/256
  1971.         INC HL
  1972.         LD (HL),A
  1973.         LD A,(piaORN)
  1974.         CALL HLOR3
  1975.         LD (piaORN),HL
  1976.         CALL NOTEKEY
  1977.         LD A,D
  1978.         DEC A
  1979.         CP 24
  1980.         RET NC
  1981. pIANO0
  1982.         push de
  1983.         CALL NotOct ;D(NOTEKEY) -> D
  1984.         DEC A
  1985.         LD L,A
  1986.         LD IY,pianRG
  1987.         LD DE,(piaORN)
  1988.         ld (ORNADR),DE
  1989.         LD BC,(piOLIN)
  1990.         LD A,C
  1991.         INC A
  1992.         CP B
  1993.         jr C,$+5
  1994.          LD A,(piOLOOP)
  1995.         LD (piOLIN),A
  1996.         LD IX,(piaSMP)
  1997.         LD A,(piSEND)
  1998.         ld B,A
  1999.         LD A,(piSLIN)
  2000.         ld E,A
  2001.         INC A
  2002.         CP B
  2003.         jr C,$+5
  2004.          LD A,(piSLOOP)
  2005.         LD (piSLIN),A
  2006.         LD A,E
  2007.         ld B,0
  2008.         CALL SAMPLER
  2009.         LD (frqB),HL
  2010.         CALL ADDVOL
  2011.         LD (volB),A
  2012.         LD A,B
  2013.         RLCA
  2014.         LD (mix),A
  2015.         CALL OUTAY
  2016.         ;LD IY,23610
  2017.         ;LD (IY-52),1 ;???
  2018.         ;LD (IY-56),1 ;???
  2019.         CALL RESHALT ;???
  2020.         ;CALL NOTEKEY
  2021.         ;LD A,D
  2022.         ;DEC A
  2023.         ;CP 24
  2024.         call isnotepressed ;NZ=pressed
  2025.         pop de
  2026.         jr nz,pIANO0 ;нажато что-то (кроме CS,SS,Space) - держим ноту
  2027. ;6
  2028. PIANAY
  2029.         LD HL,pianRG
  2030.         JR $+5
  2031. ;2
  2032. OUTAY    LD HL,frqA
  2033.         LD DE,#00BF
  2034.         LD A,#D
  2035. OUTAY0  LD BC,-3
  2036.         OUT (C),D
  2037.         LD B,E
  2038.         OUTI
  2039.         INC D
  2040.         DEC A
  2041.         jr NZ,OUTAY0
  2042.         LD B,-1
  2043.         OUT (C),D
  2044.         LD B,E
  2045.         LD D,(HL)
  2046.         CP D
  2047.         LD (env),A
  2048.         RET Z
  2049.         OUT (C),D
  2050.         RET
  2051. NOTEKEY
  2052.         CALL BIT5
  2053.         jr Z,NOTEKYQ
  2054.        cp 'A'
  2055.        jr c,notekey_nocaps
  2056.        cp 'Z'+1
  2057.        jr nc,notekey_nocaps
  2058.        or 0x20
  2059. notekey_nocaps
  2060.         LD BC,TNOTEKE-TNOTEKY
  2061.         PUSH HL
  2062.         LD HL,TNOTEKY
  2063.         CPIR
  2064.         POP HL
  2065.         LD D,C
  2066.         RET Z
  2067.         LD D,97
  2068.         CP kR;'R'
  2069.         RET Z
  2070.         INC D
  2071.         CP kssL
  2072.         RET Z
  2073.         INC D
  2074.         CP kK
  2075.         RET Z
  2076. NOTEKYQ LD D,-1
  2077.         RET
  2078. ADDVOL
  2079.         ADD A,(IY+#18)
  2080.         JP P,$+6
  2081.          XOR A
  2082.          JR PLnAv
  2083.         CP 16
  2084.         jr C,$+4
  2085.          LD A,#F
  2086. PLnAv   LD D,0
  2087.         ld E,A
  2088.         RET
  2089. iSMPORN
  2090.         LD E,(IY+1)
  2091.         LD D,(IY+2)
  2092.         LD (ORNADR),DE
  2093.         LD B,(IY+3) ;len
  2094.         LD A,(IY+4) ;pos
  2095.         LD C,A
  2096.         INC A
  2097.         CP B
  2098.         jr C,$+5
  2099.          LD A,(IY+5) ;loop
  2100.         LD (IY+4),A
  2101.         LD L,(IY+6) ;
  2102.         LD H,(IY+7) ;smpadr
  2103.         PUSH HL
  2104.         POP IX
  2105.         LD B,(IY+8) ;len
  2106.         LD A,(IY+9)
  2107.         ld E,A
  2108.         INC A
  2109.         CP B
  2110.         jr C,$+5
  2111.          LD A,(IY+10) ;loop
  2112.         LD (IY+9),A ;pos
  2113.         LD A,E ;oldpos
  2114.         LD L,(IY+11) ;note
  2115. SAMPLER
  2116. ;L=note
  2117. ;C=posinORN
  2118. ;A=posinSMP
  2119.         ADD A,A
  2120.         add A,A
  2121.         LD LX,A ;+smpadr
  2122.         CALL OUT4
  2123.         LD A,(IX+2)
  2124.         ld E,A
  2125.         LD B,8
  2126.         AND #40
  2127.         jr NZ,NOnois
  2128.         LD B,A
  2129.         LD A,(IX+2)
  2130.         ADD A,(IY+#1B)
  2131.         BIT 4,(IX+3)
  2132.         jr Z,$+5
  2133.          LD (IY+#1B),A
  2134.         LD D,A
  2135.         LD A,(DNOIS)
  2136.         ADD A,D
  2137.         LD (nois),A
  2138.         JR NOdenv
  2139. NOnois  LD A,(Edfrq)
  2140.         ld H,A
  2141.         LD A,(IX+2)
  2142.         AND 31
  2143.         CP 16
  2144.         jr C,$+4
  2145.          OR #F0
  2146.         ADD A,(IY+#1C)
  2147.         BIT 4,(IX+3)
  2148.         jr Z,$+5
  2149.          LD (IY+#1C),A
  2150.         ADD A,H
  2151.         LD (Edfrq),A
  2152. NOdenv  LD A,E
  2153.         AND #80
  2154.         jr Z,$+4
  2155.          SET 0,B
  2156.         LD A,E
  2157.         AND #20
  2158.         LD E,C
  2159.         ld D,0
  2160.         LD C,16
  2161.         jr Z,$+3
  2162.          LD C,D
  2163.         LD A,L ;note
  2164. ORNADR=$+1
  2165.         LD HL,0
  2166.         ADD HL,DE
  2167.         ADD A,(HL)
  2168.         add A,A
  2169.         jr NC,$+3
  2170.          XOR A
  2171.         LD HL,FrTab
  2172.         LD E,A
  2173.         ADD HL,DE
  2174.         LD A,(HL)
  2175.         INC HL
  2176.         LD H,(HL)
  2177.         ld L,A
  2178.         LD D,(IX+1)
  2179.         LD E,(IX)   ;shift в smp
  2180.         BIT 5,(IX+3)
  2181.         jr Z,NOdfrq
  2182.         PUSH HL
  2183.         LD L,(IY+#19)
  2184.         LD H,(IY+#1A)
  2185.         ADD HL,DE
  2186.         LD (IY+#19),L
  2187.         LD (IY+#1A),H ;shift
  2188.         LD DE,0
  2189.         POP HL
  2190. NOdfrq  ADD HL,DE
  2191.         LD E,(IY+#19)
  2192.         LD D,(IY+#1A) ;shift
  2193.         ADD HL,DE
  2194.         LD A,(IX+3)
  2195.         ld D,A
  2196.         AND #80
  2197.         jr Z,NOdvol
  2198.         LD A,D
  2199.         AND #40
  2200.         CPL
  2201.         jr Z,$+4
  2202.          LD A,1
  2203.         ADD A,(IY+#18)
  2204.         CP 16
  2205.         jr Z,YEdvol
  2206.         INC A
  2207.         CP -17
  2208.         jr Z,$+3
  2209. YEdvol   DEC A
  2210.         LD (IY+#18),A
  2211. NOdvol  LD A,D
  2212.         AND #F
  2213.         RET
  2214.  
  2215. ;4
  2216. ;Z=NOTE
  2217. XPPSCF
  2218.         SCF
  2219. ;2
  2220. ;Z=SMP
  2221. XPP
  2222.         LD A,(CURX)
  2223.         ADC A,-7
  2224.         LD BC,#C04
  2225.         RET Z
  2226.        RET NC
  2227.         SUB 9
  2228.        RET C
  2229.         LD BC,#1609
  2230.        SCF
  2231.         RET Z
  2232.         SUB 9
  2233.        RET C
  2234.         LD BC,#200E
  2235.        SCF
  2236.         RET Z
  2237.        SUB 9
  2238.         RET
  2239. ;4
  2240. XPP2
  2241.         LD A,(CURX)
  2242.         LD C,1
  2243.         SUB 11+4
  2244.         RET C
  2245.         INC C
  2246.         SUB 5+4
  2247.         RET C
  2248.         INC C
  2249.         RET
  2250.