Subversion Repositories NedoOS

Rev

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