?login_element?

Subversion Repositories NedoOS

Rev

Rev 682 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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