Difference between revisions of "PROTRACKER372 PT5 371 H"

From MSX MUSIC WIKI
Jump to: navigation, search
(Created page with "pt5_371 C��VМ�НNщ MAIN "",#C6 AUTOS LD HL,AUTO1 LD A,4 LD DE,#E0A CALL EDTXT AUTOSu LD HL,AUTO1 LD DE,AUTO2 LD...")
(Tags: Mobile edit, Mobile web edit)
 
(Tags: Mobile edit, Mobile web edit)
 
Line 1: Line 1:
pt5_371 C��VМ�НNщ        MAIN "",#C6
+
pt5_371 C��VМ�НNщ         
AUTOS
+
MAIN "",#C6
        LD HL,AUTO1
+
AUTOS
        LD A,4
+
        LD HL,AUTO1
        LD DE,#E0A
+
        LD A,4
        CALL EDTXT
+
        LD DE,#E0A
AUTOSu  LD HL,AUTO1
+
        CALL EDTXT
         LD DE,AUTO2
+
AUTOSu  LD HL,AUTO1
 +
        LD DE,AUTO2
 +
        LD A,(HL)
 +
        CP "G
 +
        JC AUT0s
 +
        CP "W
 +
        JNC AUT0s
 +
        SUB "G
 +
        OR #80
 +
        LD (DE),A
 +
        INC DE,HL
 +
        JR AUTO0-2
 +
AUT0s  CALL D0TO_
 +
        LD (DE),A
 +
        INC DE,HL
 +
        LD B,3
 +
AUTO0  CALL D0TO_
 +
        LD (DE),A
 +
        INC DE,HL
 +
        DJNZ AUTO0
 +
        LD HL,AUTO1
 +
        LD DE,#E0A
 +
        LD B,4
 +
        JP PRTXADD
 +
BYS
 +
        LD HL,TAUTHOR,DE,#60D
 +
        JR $+8
 +
TITLES
 +
        LD HL,TTITLE,DE,#60C
 +
        LD A,#20
 +
        JP EDTXT
 +
COPYSMP
 +
        CALL OUT4
 +
SMP2=$+1
 +
smp=$+2
 +
        LD BC,#101
 +
        LD A,B
 +
        ADD A,'SMPS
 +
        LD H,A
 +
        SUB B
 +
        ADD A,C
 +
        LD D,A
 +
        PUSH BC
 +
        LD BC,256
 +
        LD L,C,E,C
 +
        LDIR
 +
        POP BC
 +
        LD A,B
 +
        ADD A,A
 +
        LD L,A,H,'TSMPSZ
 +
        LD E,(HL)
 +
        INC L
 +
        LD D,(HL)
 +
        LD A,C
 +
        ADD A,A
 +
        LD L,A
 +
        LD (HL),E
 +
        INC L
 +
        LD (HL),D
 +
        JP PROK
 +
DECSMP
 +
        LD A,31
 +
        JR $+4
 +
INCSMP
 +
        LD A,1
 +
ONCSMP  LD HL,smp
 +
        LD DE,#2F06
 +
        LD B,A
 +
        ADD A,(HL)
 +
        AND 31
 +
        JNZ $+3
 +
        ADD A,B
 +
        LD (HL),A
 +
        CALL D2HEX
 +
        LD A,(digit),(EDSMPN),A
 +
        RET
 +
DECSMP2
 +
        LD A,31
 +
        JR $+4
 +
INCSMP2
 +
        LD A,1
 +
ONCSMP2 LD HL,SMP2
 +
        LD DE,#3906
 +
        LD B,A
 +
        ADD A,(HL)
 +
        AND 31
 +
        JR IORN2U
 +
DECORN
 +
        LD A,15
 +
        JR $+4
 +
INCORN
 +
        LD A,1
 +
ONCORN  LD HL,ORN
 +
        LD DE,#2F07
 +
        LD B,A
 +
        ADD A,(HL)
 +
        AND 15
 +
        JNZ $+3
 +
        ADD A,B
 +
        LD (HL),A
 +
        CALL D2HEX
 +
digit=$+1
 +
        LD A,"1
 +
        LD (EDORNN),A
 +
        RET
 +
DECORN2
 +
        LD A,15
 +
        JR $+4
 +
INCORN2
 +
        LD A,1
 +
ONCORN2 LD HL,ORN2
 +
        LD DE,#3907
 +
        LD B,A
 +
        ADD A,(HL)
 +
        AND 15
 +
IORN2U  JNZ $+3
 +
        ADD A,B
 +
        LD (HL),A
 +
        JP D2HEX
 +
COPYORN
 +
        CALL OUT4
 +
        CALL HLORN
 +
        LD D,A
 +
        PUSH HL
 +
ORN2=$+1
 +
        LD A,0
 +
        CALL HLOR3
 +
        LD E,A
 +
        EXD
 +
        EX (SP),HL
 +
        LD BC,64
 +
        LDIR
 +
        POP BC
 +
        LD L,B,H,'TORNSZ
 +
        LD E,(HL)
 +
        INC L
 +
        LD D,(HL)
 +
        LD L,C
 +
        LD (HL),E
 +
        INC L
 +
        LD (HL),D
 +
        JP PROK
 +
         IFN about
 +
ABOUT
 +
        CALL PIANAY
 +
        LD BC,mABOUT
 +
        CALL WINDUM
 +
        LD HL,tABOUT
 +
        LD DE,0
 +
        CALL PRMENU
 +
        CALL TSTFIRH
 +
        JNC $-3
 +
        JP CLOSWIN
 +
        ENDIF
 +
HOMEtra
 +
        XOR A
 +
        JZ ITRAQ
 +
INCTRA
 +
        LD A,(transp)
 +
        INC A
 +
ITRAQ  LD C,0
 +
        JP P,$+7
 +
        NEG
 +
        LD C,-1
 +
        AND #3F
 +
        LD B,A
 +
        INC C
 +
        JNZ $+4
 +
        NEG
 +
        LD (transp),A
 +
        DEC C
 +
        LD A,"+
 +
        JZ $+4
 +
        LD A,"-
 +
        LD DE,#360D
 +
        CALL PRADD
 +
        LD A,B
 +
        INC D
 +
        JP toOO
 +
DECTRA  LD A,(transp)
 +
        DEC A
 +
        JR ITRAQ
 +
 +
pat1=$+1
 +
INCPAT1 LD A,0
 +
        INC A
 +
        LD B,0
 +
IPAT1Q  CP PATS
 +
        JC $+3
 +
        LD A,B
 +
iPATq  LD (pat1),A
 +
        LD DE,#4937
 +
        JP PRF8
 +
DECPAT1 LD A,(pat1)
 +
        LD B,PATS-1
 +
        DEC A
 +
        JR IPAT1Q
 +
 +
pat2=$+1
 +
INCPAT2 LD A,0
 +
        INC A
 +
        LD B,0
 +
IPAT2Q  CP PATS
 +
        JC $+3
 +
        LD A,B
 +
iPAT2q  LD (pat2),A
 +
        LD DE,#493C
 +
        JP PRF8
 +
DECPAT2 LD A,(pat2)
 +
        LD B,PATS-1
 +
        DEC A
 +
        JR IPAT2Q
 +
HOMEcop
 +
        XOR A
 +
        LD (beg1),A
 +
        CALL IBEGq
 +
        XOR A
 +
        LD (beg2),A
 +
        CALL IBEG2q
 +
        LD A,63
 +
        JR IENDQ
 +
ENDcur
 +
        LD A,(CURY)
 +
        JR IENDQ
 +
INCEND
 +
        LD A,(fromEND)
 +
        INC A
 +
IENDQ  AND 63
 +
        LD (fromEND),A
 +
        LD DE,#2E0C
 +
        JP toOO
 +
DECEND
 +
        LD A,(fromEND)
 +
        DEC A
 +
        JR IENDQ
 +
PLSONG
 +
POS=$+1
 +
        LD DE,TPOSS
 +
        LD A,(DE),(EPAT),A
 +
        LD E,A
 +
        INC D
 +
        LD A,(DE),(PATLEN),A
 +
        LD A,-1
 +
PLPaSo LD HL,ESNGon
 +
        LD B,(HL)
 +
        PUSH BC,HL
 +
        LD (HL),A
 +
        CALL PATFON ;для PLPAT не надо,но можно
 +
        CALL PRPAT
 +
        LD HL,PLEXT,(PLJP),HL
 +
        CALL INICHAN
 +
        IFN pttfc
 +
        LD A,pttfc
 +
        CALL OUTME
 +
        LD HL,tfmmuz
 +
        CALL tfmini
 +
        CALL tfm ;первый фрейм пуст
 +
        LD A,1
 +
        LD (tfcplayon),A
 +
        ENDIF
 +
        CALL PLAYER
 +
        IFN pttfc
 +
        XOR A
 +
        LD (tfcplayon),A
 +
        LD A,pttfc
 +
        CALL OUTME
 +
        CALL tfmshut
 +
        ENDIF
 +
        POP HL,BC
 +
        LD (HL),B
 +
        RET
 +
PLPAT
 +
        XOR A
 +
        JR PLPaSo
 +
;1(PRPAT)
 +
INITPLY
 +
        LD A,#F
 +
        LD (Avol),A
 +
        LD (Bvol),A
 +
        LD (Cvol),A
 +
        LD A,#F0
 +
        LD (Avol2),A
 +
        LD (Bvol2),A
 +
        LD (Cvol2),A
 +
        LD HL,ORNS
 +
        LD (Aorn),HL
 +
        LD (Born),HL
 +
        LD (Corn),HL
 +
        IFN ts
 +
        LD HL,ayblock
 +
        LD DE,ayblock2
 +
        LD BC,szayblock
 +
        LDIR
 +
        ENDIF
 +
;3(EPENT,PLPAT,PLSONG)
 +
INICHAN LD A,-1
 +
        LD (Achan),A
 +
        LD (Bchan),A
 +
        LD (Cchan),A
 +
        IFN ts
 +
        LD (Achan+szayblock),A
 +
        LD (Bchan+szayblock),A
 +
        LD (Cchan+szayblock),A
 +
        ENDIF
 +
        RET
 +
PATLENS
 +
        LD A,(PATLEN)
 +
        CALL FILLENS
 +
        CALL PROK
 +
PRPAT
 +
        XOR A
 +
        LD (CURY),A
 +
PRPATU
 +
        CALL PIANAY
 +
        CALL INITPLY
 +
PRPATUU
 +
        CALL CHKTS ;3.7
 +
        LD A,(CURY)
 +
        LD HL,PATLEN
 +
        CP (HL)
 +
        JC $+3
 
         LD A,(HL)
 
         LD A,(HL)
        CP "G
+
         LD (CURY),A
        JC AUT0s
+
        PUSH AF
        CP "W
+
        CALL PRCU7
        JNC AUT0s
+
         LD A,(POS)
        SUB "G
+
         EXA
        OR #80
+
        LD HL,(EPAT)
         LD (DE),A
+
        LD B,L
        INC DE,HL
+
        LD H,'TPATSZ
        JR AUTO0-2
+
        LD C,(HL) ;0..63
AUT0s  CALL D0TO_
+
        POP AF ;line#
         LD (DE),A
+
patSUB=$+1
         INC DE,HL
+
        LD E,4 ;5 для UPROLL
        LD B,3
+
      IFN 1 ;см IFN ниже
AUTO0  CALL D0TO_
+
          SUB E
        LD (DE),A
+
          JNC $+3
        INC DE,HL
+
          ADC A,C
        DJNZ AUTO0
+
      ELSE
        LD HL,AUTO1
+
;глючит печать 0-й позиции, т.к.идем на посл.поз., потом на LOOP
        LD DE,#E0A
+
                                                  ;а надо на 0-ю
        LD B,4
+
;т.е. на средней строке надо вспоминать тек. позицию
        JP PRTXADD
+
PRPATu0
BYS
+
        DEC A
        LD HL,TAUTHOR,DE,#60D
+
        JP P,PRPATuY
        JR $+8
+
        LD A,(ESNGon)
TITLES
+
        OR A
        LD HL,TTITLE,DE,#60C
+
        JZ PRPATuP
        LD A,#20
+
        PUSH DE
        JP EDTXT
+
         EXA ;A=pos
COPYSMP
+
        CALL ROLprPO ;будет A'=pos
         CALL OUT4
+
        LD B,E ;pat ;глючит при ssQ !!!???
SMP2=$+1
+
        LD A,(DE) ;patsz
smp=$+2
+
        LD C,A ;0..63
        LD BC,#101
+
        POP DE
        LD A,B
+
PRPATuP LD A,C
        ADD A,'SMPS
+
PRPATuY DEC E
        LD H,A
+
        JNZ PRPATu0
        SUB B
+
      ENDIF
         ADD A,C
+
;A=line#
 +
;B=pat
 +
        INC C
 +
;C=patsz 1..64
 +
         EXA
 
         LD D,A
 
         LD D,A
         PUSH BC
+
         EXA
        LD BC,256
+
;D=POS
        LD L,C,E,C
+
patHGT=$+1
        LDIR
+
        LD L,9
        POP BC
+
        LD E,#F
        LD A,B
+
PRPAT0  PUSH HL,DE
        ADD A,A
+
        CALL STROKA
         LD L,A,H,'TSMPSZ
+
        POP DE
         LD E,(HL)
+
        INC E,A
         INC L
+
        POP HL
        LD D,(HL)
+
        CP C
        LD A,C
+
        JNZ PRPATNE
        ADD A,A
+
        LD A,(ESNGon)
 +
        INC A
 +
        JNZ PRPATE
 +
      IFN 1 ;см IFN выше
 +
        LD A,E
 +
        CP #14
 +
        JC PRPATE
 +
      ENDIF
 +
         LD B,E
 +
        LD A,D
 +
        CALL GETnPAA
 +
        LD D,E
 +
         LD E,B
 +
        LD B,A
 +
         LD A,L
 +
        LD L,B
 +
        LD H,'TPATSZ
 +
        LD C,(HL)
 +
        INC C
 
         LD L,A
 
         LD L,A
        LD (HL),E
+
PRPATE  XOR A
        INC L
+
PRPATNE
        LD (HL),D
+
        DEC L
        JP PROK
+
        JNZ PRPAT0
DECSMP
+
        CALL FILLATR
        LD A,31
+
        JP PLREAD
        JR $+4
+
CLPATS
INCSMP
+
        XOR A
        LD A,1
+
CLPATS0 PUSH AF
ONCSMP LD HL,smp
+
        CALL CLPAT
         LD DE,#2F06
+
        POP AF
         LD B,A
+
        INC A
        ADD A,(HL)
+
        CP PATS
         AND 31
+
        JNZ CLPATS0
        JNZ $+3
+
        RET
        ADD A,B
+
EDSONGCS
 +
        CALL 8026
 +
        JP NC,ONOFFTS
 +
  EDSONG
 +
        CALL MELINV
 +
         LD HL,ESNGon
 +
         LD A,(HL)
 +
         CPL
 
         LD (HL),A
 
         LD (HL),A
        CALL D2HEX
+
        LD A,(POS)
        LD A,(digit),(EDSMPN),A
+
        LD E,A,D,'TPOSS
         RET  
+
        LD A,(DE),(EPAT),A
DECSMP2
+
        LD E,A
        LD A,31
+
        INC D
        JR $+4
+
        LD A,(DE),(PATLEN),A
INCSMP2
+
        CALL PATFON
        LD A,1
+
         CALL PRPATU
ONCSMP2 LD HL,SMP2
+
        LD A,(editON)
        LD DE,#3906
+
        OR A ;0=не редактируем
        LD B,A
+
        RET NZ ;редактируем
        ADD A,(HL)
+
        JP EDPATu ;включаем редактирование
        AND 31
+
        JR IORN2U
+
curfla=$+1
DECORN
+
FLACUR  LD A,1
        LD A,15
+
        DEC A
        JR $+4
+
        RET NZ
INCORN
+
curon=$+1
        LD A,1
+
PRCUR  LD A,0
ONCORN LD HL,ORN
+
        CPL
        LD DE,#2F07
+
        LD (curon),A
        LD B,A
+
        LD A,(CURX)
        ADD A,(HL)
+
        CP 6
         AND 15
+
        JZ CUR2
         JNZ $+3
+
        CP 11+4
        ADD A,B
+
        JZ CUR2
 +
        CP 16+8
 +
        JZ CUR2
 +
        LD HL,TEDCURX
 +
        ADD A,L
 +
        LD L,A
 +
        LD A,(HL)
 +
lineX=$+1
 +
        ADD A,0
 +
        SRL A
 +
        LD C,#F0
 +
        JNC $+4
 +
        LD C,#F
 +
        LD D,A,E,#13
 +
        CALL DE2SCR
 +
        LD B,8
 +
        LD A,(HL)
 +
        XOR C
 +
        LD (HL),A
 +
        INC H
 +
        DJNZ $-4
 +
CURQ    LD A,6
 +
        RET
 +
 +
CUR2    LD HL,TEDCURX
 +
        ADD A,L
 +
        LD L,A
 +
        LD A,(HL)
 +
        RRA
 +
        LD D,A,E,#13
 +
        CALL DE2SCR
 +
        LD BC,#8F0
 +
cUR3    LD A,(HL)
 +
        CPL
 +
        LD (HL),A
 +
        INC L
 +
        LD A,(HL)
 +
        XOR C
 +
        LD (HL),A
 +
        DEC L
 +
        INC H
 +
        DJNZ cUR3
 +
        JR CURQ
 +
 +
PRCU7  LD A,(curon)
 +
        OR A
 +
        RET Z
 +
        JR PRCUR
 +
 +
EDPATQ  CALL JPITEM
 +
        LD A,#6F
 +
        LD (DOWNM),A
 +
        JR EDPAT0
 +
INCROLL
 +
roll=$+1
 +
        LD A,0
 +
        INC A
 +
        CP 9
 +
        JC $+3
 +
        XOR A
 +
  IROLQ  LD (roll),A
 +
        LD DE,#D09
 +
        JP PRBCD
 +
DECROLL LD A,(roll)
 +
        DEC A
 +
        JP P,IROLQ
 +
        LD A,8
 +
        JR IROLQ
 +
 +
EPss    LD A,C
 +
        JR IROLQ
 +
 +
EPDOWN
 +
        CALL PRCU7
 +
        LD L,1
 +
        CALL ROLLPATFON
 +
EPDQ    JP SHOLK
 +
 +
EPEXT
 +
        CALL PRCU7
 +
        XOR A
 +
        LD (editON),A
 +
         LD HL,ESNGon
 +
         CP (HL)
 
         LD (HL),A
 
         LD (HL),A
         CALL D2HEX
+
         CALL NZ,MELINV
digit=$+1
+
        POP AF
        LD A,"1
+
        JP WAITNOK
        LD (EDORNN),A
+
EPUP
        RET
+
        CALL PRCU7
DECORN2
+
        LD L,1
        LD A,15
+
        CALL UPROLL
        JR $+4
+
        JR EPDQ
INCORN2
+
;3(ini,NLOOP,MENUUSE)
        LD A,1
+
EDPAT
ONCORN2 LD HL,ORN2
+
editON=$+1
        LD DE,#3907
+
        LD A,0
        LD B,A
+
        OR A
        ADD A,(HL)
+
;если не редактировали(0), то входим на EDPATu
        AND 15
+
        JZ EDPATu
IORN2U  JNZ $+3
+
;иначе
        ADD A,B
+
;если был EDSONG, то на EDSONG
        LD (HL),A
+
        LD A,(ESNGon)
        JP D2HEX
+
        INC A
COPYORN
+
        JP Z,EDSONG
        CALL OUT4
+
        RET
        CALL HLORN
+
EDPATu  LD A,-1
        LD D,A
+
        LD (editON),A
        PUSH HL
+
        XOR A
ORN2=$+1
+
        LD (CURY),A
        LD A,0
+
        CALL PRPAT
        CALL HLOR3
+
EDPAT0
        LD E,A
+
        CALL RESHALT
        EXD
+
        CALL FLACUR
        EX (SP),HL
+
        LD HL,EDPATQ
         LD BC,64
+
        PUSH HL
         LDIR
+
        LD (curfla),A
        POP BC
+
        CALL BIT5
        LD L,B,H,'TORNSZ
+
        RET Z
        LD E,(HL)
+
        LD HL,tSS
        INC L
+
        LD BC,9
        LD D,(HL)
+
        CPIR
         LD L,C
+
        JZ EPss
        LD (HL),E
+
        CP "W
         INC L
+
        JP Z,EDSONGCS
         LD (HL),D
+
         IFN bemol
         JP PROK
+
        CP kBEM
      IFN about
+
        JP Z,EPbem
ABOUT
+
         ENDIF
        CALL PIANAY
+
        CP kssA
        LD BC,mABOUT
+
        JP Z,SSA
        CALL WINDUM
+
        CP kssR
        LD HL,tABOUT
+
        JP Z,EPssr
        LD DE,0
+
        CP kIns
        CALL PRMENU
+
        JP Z,EPins
      CALL TSTFIRH
+
        CP kssE
      JNC $-3
+
        JP Z,EPsse
        JP CLOSWIN
+
        CP kDelLn
      ENDIF
+
        JP Z,EPdelln
HOMEtra
+
        CP kHom
        XOR A
+
        JZ EPGRA
        JZ ITRAQ
+
        CP kEnd
INCTRA
+
        JZ EPEND
        LD A,(transp)
+
         IFN tab
        INC A
+
        CP kTab
ITRAQ  LD C,0
+
        JP Z,JCUR
        JP P,$+7
+
        CP kTabL
        NEG
+
        JP Z,JCURL
        LD C,-1
+
         ENDIF
        AND #3F
+
         IFN ts
         LD B,A
+
        CP kChip
         INC C
+
        JP Z,SWPSONG
         JNZ $+4
+
         ENDIF
         NEG
+
        CP kSmp
        LD (transp),A
+
        JP Z,EDSMP
        DEC C
+
        CP kOrn
        LD A,"+
+
        JP Z,EDORN
 +
        SUB 4
 +
        JP Z,DECPOSU
 +
        DEC A
 +
        JP Z,INCPOSU
 +
        SUB 3
 +
        JZ LCUR
 +
        DEC A
 +
        JZ RCUR
 +
        DEC A
 +
        JP Z,EPDOWN
 +
        DEC A
 +
        JP Z,EPUP
 +
        DEC A,A
 +
        JP Z,EPENT
 +
        DEC A
 +
        JP Z,EPEXT
 +
        CALL 8026
 +
        JC NCAPCOM
 +
        LD A,(23560)
 +
        CP kAON
 +
        JP Z,AUTOON
 +
        CP kEON
 +
        JP Z,ENVON
 +
        CP kTRA
 +
        JP Z,TRANSP
 +
        CP kBEG
 +
        JP Z,BEGcur
 +
        CP kEND
 +
        JP Z,ENDcur
 +
        CP kCOP
 +
        JP Z,COPcur
 +
        CP kORD
 +
        JP Z,POSEDIT
 +
NCAPCOM CALL TSTNOTE
 +
        CALL XPPSCF
 +
        JP Z,TSTOCT
 +
        RET
 +
EPGRA
 +
        XOR A
 +
         LD HL,CURY
 +
         CP (HL)
 +
         JNZ ePGQ
 +
         DEC H
 +
EPEND
 +
        LD HL,(EPAT)
 +
        LD H,'TPATSZ
 +
        LD A,(HL)
 
         JZ $+4
 
         JZ $+4
        LD A,"-
 
        LD DE,#360D
 
        CALL PRADD
 
        LD A,B
 
        INC D
 
        JP toOO
 
DECTRA  LD A,(transp)
 
        DEC A
 
        JR ITRAQ
 
 
pat1=$+1
 
INCPAT1 LD A,0
 
 
         INC A
 
         INC A
         LD B,0
+
         RRA
IPAT1Q CP PATS
+
  ePGQ    LD (CURY),A
        JC $+3
+
        JP PRPATU
        LD A,B
+
LCUR
iPATq  LD (pat1),A
+
        CALL PRCU7
        LD DE,#4937
+
CURX=$+1
        JP PRF8
+
        LD A,6
DECPAT1 LD A,(pat1)
+
        DEC A
        LD B,PATS-1
+
        JP P,LCURQM3
        DEC A
+
        LD A,20+12
        JR IPAT1Q
+
        JP LCURQM3
 
+
  RCUR
pat2=$+1
+
        CALL PRCU7
INCPAT2 LD A,0
+
        LD A,(CURX)
        INC A
+
        INC A
        LD B,0
+
        CP 21+12
IPAT2Q  CP PATS
+
        JC $+3
        JC $+3
+
        XOR A
        LD A,B
+
LCURQM3 LD (CURX),A
iPAT2q LD (pat2),A
+
LCURQ  CALL PRCUR
        LD DE,#493C
+
        JP SHOLK
        JP PRF8
+
EPENT
DECPAT2 LD A,(pat2)
+
playon=$+1
        LD B,PATS-1
+
          LD A,-1
        DEC A
+
          OR A
        JR IPAT2Q
+
          JP NZ,EPENTi
HOMEcop
+
          LD A,(CURX)
        XOR A
+
          CP 6
        LD (beg1),A
+
          JZ EPENTi
        CALL IBEGq
+
          CP 11
        XOR A
+
          JZ EPENTi
        LD (beg2),A
+
          CP 16
        CALL IBEG2q
+
          JP NZ,PLNOTE
        LD A,63
+
EPENTi  LD A,(NOTENV)
        JR IENDQ
+
        LD (env),A
ENDcur
+
        LD HL,PLCANC
        LD A,(CURY)
+
        LD (PLJP),HL
        JR IENDQ
+
        CALL INICHAN
INCEND
+
        JP PLAYER
        LD A,(fromEND)
+
         IFN tab
        INC A
+
JCUR
IENDQ  AND 63
+
        CALL PRCU7
        LD (fromEND),A
+
        LD BC,TJP
        LD DE,#2E0C
+
        JR JCUROK
        JP toOO
+
JCURL
DECEND
+
        CALL PRCU7
        LD A,(fromEND)
+
        LD BC,TJPLEFT
        DEC A
+
JCUROK  LD HL,(CURX),H,0
        JR IENDQ
+
        ADD HL,BC
PLSONG
+
        LD A,(HL)
POS=$+1
+
        JP LCURQM3
        LD DE,TPOSS
+
         ENDIF
        LD A,(DE),(EPAT),A
+
ROLLPATFON
        LD E,A
+
        CALL ROLL
        INC D
+
        JP PATFON
        LD A,(DE),(PATLEN),A
+
;3
      LD A,-1
+
ROLL
PLPaSo LD HL,ESNGon
+
;L=на сколько строк (для autoscroll)
      LD B,(HL)
+
        PUSH HL
      PUSH BC,HL
+
        CALL PRCU7
        LD (HL),A
+
ROLnRE  LD A,(EPAT)
        CALL PATFON ;для PLPAT не надо,но можно
+
        LD (nPAT),A
        CALL PRPAT
+
        POP HL
        LD HL,PLEXT,(PLJP),HL
+
ROL0
         CALL INICHAN
+
;идем на строчку вниз
      IFN pttfc
+
        LD A,(PATLEN)
        LD A,pttfc
+
        INC A
        CALL OUTME
+
        LD C,A
        LD HL,tfmmuz
+
        LD A,(CURY)
        CALL tfmini
+
        INC A
        CALL tfm ;первый фрейм пуст
+
        CP C
        LD A,1
+
        JNZ ROLNZ
        LD (tfcplayon),A
+
        LD A,(ESNGon)
      ENDIF
+
        OR A
        CALL PLAYER
+
        CALL NZ,ROLnxPO ;C тоже корректируется
      IFN pttfc
+
        XOR A
        XOR A
+
ROLNZ  LD (CURY),A
        LD (tfcplayon),A
+
;ищем +4-ю строчку
        LD A,pttfc
+
       EXA
        CALL OUTME
 
        CALL tfmshut
 
      ENDIF
 
      POP HL,BC
 
        LD (HL),B
 
         RET
 
PLPAT
 
        XOR A
 
        JR PLPaSo
 
;1(PRPAT)
 
INITPLY
 
        LD A,#F
 
        LD (Avol),A
 
        LD (Bvol),A
 
        LD (Cvol),A
 
        LD A,#F0
 
        LD (Avol2),A
 
        LD (Bvol2),A
 
        LD (Cvol2),A
 
        LD HL,ORNS
 
        LD (Aorn),HL
 
        LD (Born),HL
 
        LD (Corn),HL
 
      IFN ts
 
        LD HL,ayblock
 
        LD DE,ayblock2
 
        LD BC,szayblock
 
        LDIR
 
      ENDIF
 
;3(EPENT,PLPAT,PLSONG)
 
INICHAN LD A,-1
 
        LD (Achan),A
 
        LD (Bchan),A
 
        LD (Cchan),A
 
      IFN ts
 
        LD (Achan+szayblock),A
 
        LD (Bchan+szayblock),A
 
        LD (Cchan+szayblock),A
 
      ENDIF
 
        RET
 
PATLENS
 
        LD A,(PATLEN)
 
        CALL FILLENS
 
        CALL PROK
 
PRPAT
 
        XOR A
 
        LD (CURY),A
 
PRPATU
 
        CALL PIANAY
 
        CALL INITPLY
 
PRPATUU
 
      CALL CHKTS ;3.7
 
        LD A,(CURY)
 
      LD HL,PATLEN
 
      CP (HL)
 
      JC $+3
 
       LD A,(HL)
 
      LD (CURY),A
 
        PUSH AF
 
        CALL PRCU7
 
 
       LD A,(POS)
 
       LD A,(POS)
 
       EXA  
 
       EXA  
        LD HL,(EPAT)
+
        LD B,4
        LD B,L
+
ROLnx0  INC A
        LD H,'TPATSZ
+
        CP C ;patsz=1..64
        LD C,(HL) ;0..63
+
        JNZ ROLnx4
        POP AF ;line#
+
ESNGon=$+1
patSUB=$+1
+
        LD A,0
        LD E,4 ;5 для UPROLL
+
        OR A
      IFN 1 ;см IFN ниже
+
         JZ ROLnxY
        SUB E
+
       EXA  
        JNC $+3
+
        CALL GETnPAA;T ;(DE)->A->(nPAT)
        ADC A,C
 
      ELSE
 
;глючит печать 0-й позиции, т.к.идем на посл.поз., потом на LOOP
 
                                                  ;а надо на 0-ю
 
;т.е. на средней строке надо вспоминать тек. позицию
 
PRPATu0
 
        DEC A
 
        JP P,PRPATuY
 
        LD A,(ESNGon)
 
        OR A
 
         JZ PRPATuP
 
        PUSH DE
 
       EXA ;A=pos
 
        CALL ROLprPO ;будет A'=pos
 
        LD B,E ;pat ;глючит при ssQ !!!???
 
        LD A,(DE) ;patsz
 
        LD C,A ;0..63
 
        POP DE
 
PRPATuP LD A,C
 
PRPATuY DEC E
 
        JNZ PRPATu0
 
      ENDIF
 
;A=line#
 
;B=pat
 
        INC C
 
;C=patsz 1..64
 
 
       EXA  
 
       EXA  
       LD D,A
+
       LD A,E
 
       EXA  
 
       EXA  
;D=POS
+
       LD E,A
patHGT=$+1
+
       INC D ;TPATSZ
        LD L,9
+
       LD A,(DE)
        LD E,#F
 
PRPAT0  PUSH HL,DE
 
        CALL STROKA
 
        POP DE
 
        INC E,A
 
        POP HL
 
        CP C
 
        JNZ PRPATNE
 
        LD A,(ESNGon)
 
        INC A
 
        JNZ PRPATE
 
      IFN 1 ;см IFN выше
 
        LD A,E
 
        CP #14
 
        JC PRPATE
 
      ENDIF
 
      LD B,E
 
        LD A,D
 
        CALL GETnPAA
 
        LD D,E
 
       LD E,B
 
        LD B,A
 
      LD A,L
 
        LD L,B
 
        LD H,'TPATSZ
 
        LD C,(HL)
 
        INC C
 
      LD L,A
 
PRPATE  XOR A
 
PRPATNE
 
        DEC L
 
        JNZ PRPAT0
 
        CALL FILLATR
 
        JP PLREAD
 
CLPATS
 
        XOR A
 
CLPATS0 PUSH AF
 
        CALL CLPAT
 
        POP AF
 
        INC A
 
        CP PATS
 
        JNZ CLPATS0
 
        RET
 
EDSONGCS
 
        CALL 8026
 
        JP NC,ONOFFTS
 
EDSONG
 
        CALL MELINV
 
       LD HL,ESNGon
 
      LD A,(HL)
 
      CPL
 
      LD (HL),A
 
        LD A,(POS)
 
        LD E,A,D,'TPOSS
 
        LD A,(DE),(EPAT),A
 
        LD E,A
 
        INC D
 
        LD A,(DE),(PATLEN),A
 
        CALL PATFON
 
      CALL PRPATU
 
        LD A,(editON)
 
        OR A ;0=не редактируем
 
        RET NZ ;редактируем
 
       JP EDPATu ;включаем редактирование
 
 
 
curfla=$+1
 
FLACUR  LD A,1
 
        DEC A
 
        RET NZ
 
curon=$+1
 
PRCUR  LD A,0
 
        CPL
 
        LD (curon),A
 
        LD A,(CURX)
 
        CP 6
 
        JZ CUR2
 
        CP 11+4
 
        JZ CUR2
 
        CP 16+8
 
        JZ CUR2
 
        LD HL,TEDCURX
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
lineX=$+1
 
        ADD A,0
 
        SRL A
 
        LD C,#F0
 
        JNC $+4
 
        LD C,#F
 
        LD D,A,E,#13
 
        CALL DE2SCR
 
        LD B,8
 
        LD A,(HL)
 
        XOR C
 
        LD (HL),A
 
        INC H
 
        DJNZ $-4
 
CURQ    LD A,6
 
        RET
 
 
 
CUR2    LD HL,TEDCURX
 
        ADD A,L
 
        LD L,A
 
        LD A,(HL)
 
        RRA
 
        LD D,A,E,#13
 
        CALL DE2SCR
 
        LD BC,#8F0
 
cUR3    LD A,(HL)
 
        CPL
 
        LD (HL),A
 
        INC L
 
        LD A,(HL)
 
        XOR C
 
        LD (HL),A
 
        DEC L
 
        INC H
 
        DJNZ cUR3
 
        JR CURQ
 
 
 
PRCU7  LD A,(curon)
 
        OR A
 
        RET Z
 
        JR PRCUR
 
 
 
EDPATQ  CALL JPITEM
 
        LD A,#6F
 
        LD (DOWNM),A
 
        JR EDPAT0
 
INCROLL
 
roll=$+1
 
        LD A,0
 
        INC A
 
        CP 9
 
        JC $+3
 
        XOR A
 
IROLQ  LD (roll),A
 
        LD DE,#D09
 
        JP PRBCD
 
DECROLL LD A,(roll)
 
        DEC A
 
        JP P,IROLQ
 
        LD A,8
 
        JR IROLQ
 
 
 
EPss    LD A,C
 
        JR IROLQ
 
 
 
EPDOWN
 
        CALL PRCU7
 
        LD L,1
 
        CALL ROLLPATFON
 
EPDQ    JP SHOLK
 
 
 
EPEXT
 
        CALL PRCU7
 
        XOR A
 
        LD (editON),A
 
      LD HL,ESNGon
 
      CP (HL)
 
      LD (HL),A
 
      CALL NZ,MELINV
 
      POP AF
 
        JP WAITNOK
 
EPUP
 
        CALL PRCU7
 
        LD L,1
 
        CALL UPROLL
 
        JR EPDQ
 
;3(ini,NLOOP,MENUUSE)
 
EDPAT
 
editON=$+1
 
        LD A,0
 
        OR A
 
;если не редактировали(0), то входим на EDPATu
 
        JZ EDPATu
 
;иначе
 
;если был EDSONG, то на EDSONG
 
        LD A,(ESNGon)
 
        INC A
 
        JP Z,EDSONG
 
        RET
 
EDPATu  LD A,-1
 
        LD (editON),A
 
        XOR A
 
        LD (CURY),A
 
        CALL PRPAT
 
EDPAT0
 
        CALL RESHALT
 
        CALL FLACUR
 
        LD HL,EDPATQ
 
        PUSH HL
 
        LD (curfla),A
 
        CALL BIT5
 
        RET Z
 
        LD HL,tSS
 
        LD BC,9
 
        CPIR
 
        JZ EPss
 
        CP "W
 
        JP Z,EDSONGCS
 
      IFN bemol
 
        CP kBEM
 
        JP Z,EPbem
 
      ENDIF
 
        CP kssA
 
        JP Z,SSA
 
        CP kssR
 
        JP Z,EPssr
 
        CP kIns
 
        JP Z,EPins
 
        CP kssE
 
        JP Z,EPsse
 
        CP kDelLn
 
        JP Z,EPdelln
 
        CP kHom
 
        JZ EPGRA
 
        CP kEnd
 
        JZ EPEND
 
      IFN tab
 
        CP kTab
 
        JP Z,JCUR
 
        CP kTabL
 
        JP Z,JCURL
 
      ENDIF
 
      IFN ts
 
        CP kChip
 
        JP Z,SWPSONG
 
      ENDIF
 
        CP kSmp
 
        JP Z,EDSMP
 
        CP kOrn
 
        JP Z,EDORN
 
        SUB 4
 
        JP Z,DECPOSU
 
        DEC A
 
        JP Z,INCPOSU
 
        SUB 3
 
        JZ LCUR
 
        DEC A
 
        JZ RCUR
 
        DEC A
 
        JP Z,EPDOWN
 
        DEC A
 
        JP Z,EPUP
 
        DEC A,A
 
        JP Z,EPENT
 
        DEC A
 
        JP Z,EPEXT
 
        CALL 8026
 
        JC NCAPCOM
 
        LD A,(23560)
 
        CP kAON
 
        JP Z,AUTOON
 
        CP kEON
 
        JP Z,ENVON
 
        CP kTRA
 
        JP Z,TRANSP
 
        CP kBEG
 
        JP Z,BEGcur
 
        CP kEND
 
        JP Z,ENDcur
 
        CP kCOP
 
        JP Z,COPcur
 
        CP kORD
 
        JP Z,POSEDIT
 
NCAPCOM CALL TSTNOTE
 
        CALL XPPSCF
 
        JP Z,TSTOCT
 
        RET
 
EPGRA
 
        XOR A
 
      LD HL,CURY
 
      CP (HL)
 
      JNZ ePGQ
 
      DEC H
 
EPEND
 
        LD HL,(EPAT)
 
        LD H,'TPATSZ
 
        LD A,(HL)
 
      JZ $+4
 
 
       INC A
 
       INC A
       RRA
+
       LD C,A
ePGQ    LD (CURY),A
+
ROLnxY  XOR A
        JP PRPATU
+
ROLnx4  DJNZ ROLnx0
LCUR
+
;печатаем +4-ю строчку
        CALL PRCU7
+
        PUSH HL
CURX=$+1
+
        CALL scrolST ;DI;не портит регистры
        LD A,6
+
      LD HL,(POS)
        DEC A
+
      PUSH HL
        JP P,LCURQM3
+
      EXA
        LD A,20+12
+
      LD (POS),A
        JP LCURQM3
+
      EXA
RCUR
+
nPAT=$+1
        CALL PRCU7
+
        LD B,0
        LD A,(CURX)
+
        LD E,#17
        INC A
+
        CALL STROKA ;A=line#,E=scrY
        CP 21+12
+
      POP HL
        JC $+3
+
      LD (POS),HL
        XOR A
+
        POP HL
LCURQM3 LD (CURX),A
+
        DEC L
LCURQ   CALL PRCUR
+
        JNZ ROL0
         JP SHOLK
+
rOLQ    JP   FILLATR ;DI;EI
EPENT
+
         ;JP PATFON ;3000t
playon=$+1
+
UPROLL
         LD A,-1
+
        CALL PRCU7
 +
PATLEN=$+1
 +
UPRnRE  LD C,63
 +
         LD A,(CURY)
 +
        DEC A
 +
        CP C
 +
        JC UPRNZ
 +
        LD A,(ESNGon)
 
         OR A
 
         OR A
         JP NZ,EPENTi
+
         JNZ UPRnxPO
         LD A,(CURX)
+
         LD A,C
         CP 6
+
UPRNZ  LD (CURY),A
         JZ EPENTi
+
        LD B,4
         CP 11
+
UPRnx4  DEC A
         JZ EPENTi
+
         CP C
         CP 16
+
         JC $+3
         JP NZ,PLNOTE
+
         LD A,C
EPENTi LD A,(NOTENV)
+
        DJNZ UPRnx4
        LD (env),A
+
         LD E,#F
        LD HL,PLCANC
+
         LD BC,(EPAT-1)
        LD (PLJP),HL
+
         CALL scrol2 ;не портит регистры,не DI
         CALL INICHAN
+
        CALL STROKA
         JP PLAYER
+
uPRQ    JR rOLQ
      IFN tab
+
  UPRnxPO
JCUR
+
        PUSH AF
        CALL PRCU7
+
        LD A,(POS)
        LD BC,TJP
+
        CALL ROLprPO
        JR JCUROK
+
        LD (EPAT),A
JCURL
+
        EXA
        CALL PRCU7
+
        LD (POS),A
        LD BC,TJPLEFT
+
         POP AF
JCUROK  LD HL,(CURX),H,0
+
         RET C;pgUp
         ADD HL,BC
+
        LD A,(DE)
        LD A,(HL)
+
        LD (PATLEN),A
         JP LCURQM3
+
      LD (CURY),A
      ENDIF
+
      ; PUSH AF ;!
ROLLPATFON
+
      ; LD A,5
         CALL ROLL
+
         ;LD (patHGT),A
        JP PATFON
+
      ; LD (patSUB),A
;3
+
         ;CALL scrol2 ;не портит регистры,не DI
ROLL
+
        CALL PRPATU ;PRPAT
;L=на сколько строк (для autoscroll)
+
         CALL POSFON ;3+699
        PUSH HL
+
      ; POP AF
        CALL PRCU7
+
      ; LD (CURY),A
ROLnRE  LD A,(EPAT)
+
      ; LD A,4,(patSUB),A
         LD (nPAT),A
+
         ;LD A,9,(patHGT),A
        POP HL
+
        JR uPRQ
ROL0
+
PLAYER
;идем на строчку вниз
+
        IFN hidearr
        LD A,(PATLEN)
+
        LD A,1
        INC A
+
        LD (ARROWt),A
         LD C,A
+
         ENDIF
        LD A,(CURY)
+
        LD A,18,(options),A
        INC A
+
        LD A,(TEMPO)
        CP C
+
        LD (temp1),A
        JNZ ROLNZ
+
        LD (tempCNT),A
        LD A,(ESNGon)
+
        XOR A
        OR A
+
        LD (Acom),A
        CALL NZ,ROLnxPO ;C тоже корректируется
+
        LD (Bcom),A
        XOR A
+
        LD (Ccom),A
ROLNZ  LD (CURY),A
+
        CALL PLREAD
;ищем +4-ю строчку
+
         IFN ts
      EXA
+
  ;5
      LD A,(POS)
+
tson=$+1
      EXA
 
         LD B,4
 
ROLnx0 INC A
 
        CP C ;patsz=1..64
 
        JNZ ROLnx4
 
ESNGon=$+1
 
 
         LD A,0
 
         LD A,0
 
         OR A
 
         OR A
      JZ ROLnxY
+
        JZ PLnots1
      EXA
+
         LD A,#FE
        CALL GETnPAA;T ;(DE)->A->(nPAT)
+
         CALL SWPAYPP
      EXA
 
      LD A,E
 
      EXA
 
      LD E,A
 
      INC D ;TPATSZ
 
      LD A,(DE)
 
      INC A
 
      LD C,A
 
ROLnxY  XOR A
 
ROLnx4  DJNZ ROLnx0
 
;печатаем +4-ю строчку
 
        PUSH HL
 
        CALL scrolST ;DI;не портит регистры
 
      LD HL,(POS)
 
      PUSH HL
 
      EXA
 
      LD (POS),A
 
      EXA
 
nPAT=$+1
 
        LD B,0
 
         LD E,#17
 
        CALL STROKA ;A=line#,E=scrY
 
      POP HL
 
      LD (POS),HL
 
        POP HL
 
        DEC L
 
        JNZ ROL0
 
rOLQ    JP  FILLATR ;DI;EI
 
      ;JP PATFON ;3000t
 
UPROLL
 
        CALL PRCU7
 
PATLEN=$+1
 
UPRnRE  LD C,63
 
        LD A,(CURY)
 
        DEC A
 
        CP C
 
        JC UPRNZ
 
        LD A,(ESNGon)
 
        OR A
 
        JNZ UPRnxPO
 
        LD A,C
 
UPRNZ  LD (CURY),A
 
        LD B,4
 
UPRnx4  DEC A
 
        CP C
 
        JC $+3
 
        LD A,C
 
        DJNZ UPRnx4
 
        LD E,#F
 
        LD BC,(EPAT-1)
 
        CALL scrol2 ;не портит регистры,не DI
 
        CALL STROKA
 
uPRQ    JR rOLQ
 
UPRnxPO
 
      PUSH AF
 
        LD A,(POS)
 
        CALL ROLprPO
 
        LD (EPAT),A
 
        EXA
 
        LD (POS),A
 
      POP AF
 
      RET C;pgUp
 
        LD A,(DE)
 
         LD (PATLEN),A
 
    LD (CURY),A
 
      ; PUSH AF ;!
 
      ; LD A,5
 
      ;LD (patHGT),A
 
      ; LD (patSUB),A
 
      ;CALL scrol2 ;не портит регистры,не DI
 
        CALL PRPATU ;PRPAT
 
      CALL POSFON ;3+699
 
      ; POP AF
 
      ; LD (CURY),A
 
      ; LD A,4,(patSUB),A
 
      ;LD A,9,(patHGT),A
 
        JR uPRQ
 
PLAYER
 
      IFN hidearr
 
        LD A,1
 
        LD (ARROWt),A
 
      ENDIF
 
        LD A,18,(options),A
 
        LD A,(TEMPO)
 
        LD (temp1),A
 
        LD (tempCNT),A
 
 
         XOR A
 
         XOR A
 
         LD (Acom),A
 
         LD (Acom),A
Line 839: Line 853:
 
         LD (Ccom),A
 
         LD (Ccom),A
 
         CALL PLREAD
 
         CALL PLREAD
      IFN ts
+
        LD A,#FF
;5
+
        CALL SWPAYPP
tson=$+1
+
PLnots1
      LD A,0
+
        ENDIF  
      OR A
+
        CALL ARROW    ;1700
      JZ PLnots1
+
        LD A,(temp1)
      LD A,#FE
+
        LD (tempCNT),A ;иначе игнорит темп на 1-й строке
      CALL SWPAYPP
+
PLAYER0
      XOR A
 
      LD (Acom),A
 
      LD (Bcom),A
 
      LD (Ccom),A
 
      CALL PLREAD
 
      LD A,#FF
 
      CALL SWPAYPP
 
PLnots1
 
      ENDIF  
 
      CALL ARROW    ;1700
 
        LD A,(temp1)
 
        LD (tempCNT),A ;иначе игнорит темп на 1-й строке
 
PLAYER0
 
      LD A,(tempCNT)
 
      DEC A
 
      LD L,1
 
      CALL Z,ROLL  ;35500
 
        CALL HALTnAR ;10000
 
        CALL JPITEM ;стрелка выкл.
 
    CALL PATFON      ;3000
 
      ;при выходе после перекл.POS будет сначала READ,потом ROLL
 
      CALL ARROW    ;1700
 
        CALL OUT4      ;100
 
        CALL PLnOUT  ;5400
 
      IFN ts
 
      LD A,(tson)
 
      OR A
 
      JZ PLnots2
 
 
         LD A,(tempCNT)
 
         LD A,(tempCNT)
 
         DEC A
 
         DEC A
         CALL Z,PLREAD ;2100
+
        LD L,1
      LD A,#FE
+
         CALL Z,ROLL  ;35500
      CALL SWPAYPP  ;7700;6881
+
        CALL HALTnAR ;10000
        CALL OUT4      ;100
+
        CALL JPITEM ;стрелка выкл.
      CALL PLnOUT    ;5400
+
      CALL PATFON      ;3000
PLnots2
+
      ;при выходе после перекл.POS будет сначала READ,потом ROLL
      ENDIF  
+
        CALL ARROW    ;1700
tempCNT=$+1
+
        CALL OUT4      ;100
        LD A,0
+
        CALL PLnOUT  ;5400
        DEC A
+
        IFN ts
        JNZ PLnoNL
+
        LD A,(tson)
        CALL PLREAD  ;2100
+
        OR A
temp1=$+1
+
        JZ PLnots2
        LD A,0
+
        LD A,(tempCNT)
PLnoNL  LD (tempCNT),A
+
        DEC A
      IFN ts
+
        CALL Z,PLREAD ;2100
      LD A,(tson)
+
        LD A,#FE
      OR A
+
        CALL SWPAYPP  ;7700;6881
      LD A,#FF
+
        CALL OUT4      ;100
      CALL NZ,SWPAYPP;7700;6881
+
        CALL PLnOUT    ;5400
      ENDIF
+
PLnots2
      ;CALL RE        ;1000
+
        ENDIF  
      ;CALL JPITEM
+
tempCNT=$+1
      IFN pttfc
+
        LD A,0
tfcplayon=$+1
+
        DEC A
        LD A,0
+
        JNZ PLnoNL
 +
        CALL PLREAD  ;2100
 +
temp1=$+1
 +
        LD A,0
 +
PLnoNL  LD (tempCNT),A
 +
        IFN ts
 +
        LD A,(tson)
 
         OR A
 
         OR A
         JZ tfcplayno
+
         LD A,#FF
        LD A,pttfc
+
        CALL NZ,SWPAYPP;7700;6881
        CALL OUTME
+
        ENDIF
        CALL tfm
+
      ;CALL RE        ;1000
tfcplayno
+
        ;CALL JPITEM
      ENDIF  
+
        IFN pttfc
PLJP=$+1
+
tfcplayon=$+1
        JP PLCANC ;or PLEXT (ed.song)
+
        LD A,0
PLCANC
+
        OR A
        CALL CANCEL
+
        JZ tfcplayno
        JNC PLAYER0
+
        LD A,pttfc
        JR PLQ
+
        CALL OUTME
PLEXT
+
        CALL tfm
        CALL CANCEL2
+
tfcplayno
        JNC PLQ
+
        ENDIF  
        CALL 8026
+
PLJP=$+1
        JC PLAYER0
+
        JP PLCANC ;or PLEXT (ed.song)
        CALL 8020
+
PLCANC
        RRA  
+
        CALL CANCEL
        JC PLAYER0
+
        JNC PLAYER0
PLQ    LD A,mains
+
        JR PLQ
        LD (options),A
+
PLEXT
      CALL RE        ;1000
+
        CALL CANCEL2
      CALL PIAN2AY
+
        JNC PLQ
        JP WAITNOK
+
        CALL 8026
PLREAD
+
        JC PLAYER0
        LD A,(CURY),C,A
+
        CALL 8020
        LD A,(EPAT),B,A
+
        RRA  
        CALL GETnADR
+
        JC PLAYER0
        LD A,(HL),(ENV+1),A
+
PLQ    LD A,mains
        INC HL
+
        LD (options),A
        LD A,(HL),(ENV),A
+
        CALL RE        ;1000
        INC HL
+
        CALL PIAN2AY
        LD A,(HL),(DNOIS),A
+
        JP WAITNOK
        INC HL
+
PLREAD
        PUSH HL
+
        LD A,(CURY),C,A
        POP IX
+
        LD A,(EPAT),B,A
        LD IY,Achan
+
        CALL GETnADR
        CALL USEchan
+
        LD A,(HL),(ENV+1),A
        LD BC,5
+
        INC HL
        ADD IX,BC
+
        LD A,(HL),(ENV),A
        LD IY,Bchan
+
        INC HL
        CALL USEchan
+
        LD A,(HL),(DNOIS),A
        LD BC,5
+
        INC HL
        ADD IX,BC
+
        PUSH HL
        LD IY,Cchan
+
        POP IX
        CALL USEchan
+
        LD IY,Achan
        LD IY,iy
+
        CALL USEchan
        RET  
+
        LD BC,5
USEchan
+
        ADD IX,BC
        LD C,(IX+3)
+
        LD IY,Bchan
        LD A,(IX)
+
        CALL USEchan
        AND #7F
+
        LD BC,5
        DEC A
+
        ADD IX,BC
        JP M,USEbl
+
        LD IY,Cchan
        CP 96
+
        CALL USEchan
        JNZ USEnR
+
        LD IY,iy
        LD (IY+#E),0
+
        RET  
        LD A,-1
+
USEchan
        JR uSEnNOT
+
        LD C,(IX+3)
USEnR  LD B,(IY+#B)
+
        LD A,(IX)
        LD (IY+#B),A
+
        AND #7F
        LD (IY+#12),B
+
        DEC A
        XOR A
+
        JP M,USEbl
        LD (IY+#1C),A
+
        CP 96
        LD (IY+#18),A
+
        JNZ USEnR
        LD (IY+#19),A ;
+
        LD (IY+#E),0
        LD (IY+#1A),A ;shift
+
        LD A,-1
        LD (IY+#1B),A
+
        JR uSEnNOT
        LD (IY+#E),A
+
USEnR  LD B,(IY+#B)
      LD L,(IY+#13)
+
        LD (IY+#B),A
      LD H,(IY+#14)
+
        LD (IY+#12),B
      LD (usedisp),HL
+
        XOR A
        LD (IY+#13),A
+
        LD (IY+#1C),A
        LD (IY+#14),A
+
        LD (IY+#18),A
        LD (IY+4),A
+
        LD (IY+#19),A ;
        LD (IY+9),A
+
        LD (IY+#1A),A ;shift
uSEnNOT LD (IY),A
+
        LD (IY+#1B),A
        LD A,(IX)
+
        LD (IY+#E),A
        RLA  
+
        LD L,(IY+#13)
        LD A,C
+
        LD H,(IY+#14)
        RRA  
+
        LD (usedisp),HL
        RRA  
+
        LD (IY+#13),A
        RRA  
+
        LD (IY+#14),A
        RRA  
+
        LD (IY+4),A
        AND 31
+
        LD (IY+9),A
        JZ USEbl
+
uSEnNOT LD (IY),A
        LD L,A
+
        LD A,(IX)
        ADD HL,HL
+
        RLA  
        LD H,'TSMPSZ
+
        LD A,C
        LD B,(HL)
+
        RRA  
        LD (IY+#A),B
+
        RRA  
        INC L
+
        RRA  
        LD B,(HL)
+
        RRA  
        LD (IY+8),B
+
        AND 31
        LD (IY+6),0
+
        JZ USEbl
        ADD A,'SMPS
+
        LD L,A
        LD (IY+7),A
+
        ADD HL,HL
USEbl  LD A,C
+
        LD H,'TSMPSZ
        LD B,#F
+
        LD B,(HL)
        AND B
+
        LD (IY+#A),B
      LD C,A
+
        INC L
;FX:B=F
+
        LD B,(HL)
;?X:B=1F
+
        LD (IY+8),B
;0X:не менять
+
        LD (IY+6),0
      JZ USE0x
+
        ADD A,'SMPS
      ;JZ USEoldE
+
        LD (IY+7),A
        CP B
+
USEbl  LD A,C
        JZ USEnE
+
        LD B,#F
        LD (NOTENV),A
+
        AND B
        LD (env),A
+
        LD C,A
        XOR A
+
;FX:B=F
        LD L,A,H,A
+
;?X:B=1F
        LD (Efrq),HL
+
;0X:не менять
        LD (EstCNT),A
+
        JZ USE0x
        LD HL,(ENV),(BASENV),HL
+
        ;JZ USEoldE
        LD B,31
+
        CP B
USEnE
+
        JZ USEnE
        LD (IY+#D),B ;vol|envmask
+
        LD (NOTENV),A
USE0x
+
        LD (env),A
        LD A,(IX+4)
+
        XOR A
        AND #F0
+
        LD L,A,H,A
      CP C
+
        LD (Efrq),HL
      JZ USEoldE
+
        LD (EstCNT),A
        RRCA  
+
        LD HL,(ENV),(BASENV),HL
        RRCA  
+
        LD B,31
        RRCA  
+
USEnE
        RRCA  
+
        LD (IY+#D),B ;vol|envmask
        CALL HLOR3
+
USE0x
        LD (IY+4),0
+
        LD A,(IX+4)
        LD (IY+1),L
+
        AND #F0
        LD (IY+2),H
+
        CP C
        LD L,A,H,'TORNSZ
+
        JZ USEoldE
        LD A,(HL),(IY+5),A
+
        RRCA  
        INC L
+
        RRCA  
        LD A,(HL),(IY+3),A
+
        RRCA  
USEoldE LD A,(IX+4)
+
        RRCA  
        AND #F
+
        CALL HLOR3
        JZ USEnV
+
        LD (IY+4),0
        ADD A,A,A,A,A,A,A,A
+
        LD (IY+1),L
        LD (IY+#C),A
+
        LD (IY+2),H
USEnV  LD A,(IX+1)
+
        LD L,A,H,'TORNSZ
        AND #F0
+
        LD A,(HL),(IY+5),A
        RET Z
+
        INC L
        LD C,16
+
        LD A,(HL),(IY+3),A
        SUB C
+
USEoldE LD A,(IX+4)
        JZ dncom
+
        AND #F
        SUB C
+
        JZ USEnV
        JZ upcom
+
        ADD A,A,A,A,A,A,A,A
        SUB C
+
        LD (IY+#C),A
        JZ portcom
+
USEnV  LD A,(IX+1)
        SUB C
+
        AND #F0
        JZ smpcom
+
        RET Z
        SUB C
+
        LD C,16
        JZ orncom
+
        SUB C
        SUB C
+
        JZ dncom
        JP Z,vibcom
+
        SUB C
        SUB C
+
        JZ upcom
        RET Z
+
        SUB C
        SUB C
+
        JZ portcom
        RET Z
+
        SUB C
        SUB C
+
        JZ smpcom
        JP Z,edcom
+
        SUB C
        SUB C
+
        JZ orncom
        JP Z,eucom
+
        SUB C
        SUB C
+
        JP Z,vibcom
        RET NZ
+
        SUB C
        LD A,(IX+2)
+
        RET Z
        CP 1
+
        SUB C
        RET C
+
        RET Z
      ;LD (tempCNT),A  ;v3+698
+
        SUB C
        LD (temp1),A
+
        JP Z,edcom
        RET  
+
        SUB C
upcom
+
        JP Z,eucom
        LD A,(IX+1)
+
        SUB C
        AND #F
+
        RET NZ
upcomQ  LD (IY+#F),A ;delay
+
        LD A,(IX+2)
        LD (IY+#E),1 ;com.type
+
        CP 1
        LD (IY+#10),A ;count
+
        RET C
    IFN fixtoENV
+
        ;LD (tempCNT),A  ;v3+698
      PUSH AF
+
        LD (temp1),A
    ENDIF  
+
        RET  
        LD L,(IX+2)
+
upcom
        LD H,0
+
        LD A,(IX+1)
        CALL NC,NEGHL
+
        AND #F
        LD (IY+#11),L
+
upcomQ  LD (IY+#F),A ;delay
        LD (IY+#15),H
+
        LD (IY+#E),1 ;com.type
    IFN fixtoENV
+
        LD (IY+#10),A ;count
      POP AF
+
      IFN fixtoENV
      RET NZ
+
      PUSH AF
    OR H,L
+
      ENDIF  
    RET Z ;3!699(глючили 1000,2000)
+
        LD L,(IX+2)
      LD (IY+#13),L
+
        LD H,0
      LD (IY+#14),H
+
        CALL NC,NEGHL
    ENDIF
+
        LD (IY+#11),L
        RET
+
        LD (IY+#15),H
dncom
+
      IFN fixtoENV
        LD A,(IX+1)
+
      POP AF
        AND #F
+
      RET NZ
        SCF
+
      OR H,L
        JR upcomQ
+
      RET Z ;3!699(глючили 1000,2000)
smpcom
 
        LD A,(IX+2),(IY+9),A
 
        RET
 
orncom
 
        LD A,(IX+2),(IY+4),A
 
        RET
 
vibcom
 
        LD (IY+#E),3
 
        LD A,(IX+2),B,A
 
        AND #F
 
        LD (IY+#17),A
 
        LD A,B
 
        AND #F0
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD (IY+#16),A
 
        LD (IY+#10),A
 
        RET
 
portcom
 
        LD A,(IX)
 
        AND #7F
 
        DEC A
 
        CP 96
 
        RET NC
 
        LD A,(IX+1)
 
        AND #F
 
        LD (IY+#F),A
 
        LD (IY+#10),A
 
        LD A,(IX+2)
 
        LD (IY+#11),A
 
        LD (IY+#15),0
 
        LD (IY+#E),2
 
        LD A,(IY+#12),C,A
 
        LD HL,FrTab
 
        ADD A,A
 
        ADD A,L
 
        LD L,A
 
        LD E,(HL)
 
        INC L
 
        LD D,(HL)
 
      PUSH DE
 
      LD HL,(usedisp)
 
 
       LD (IY+#13),L
 
       LD (IY+#13),L
 
       LD (IY+#14),H
 
       LD (IY+#14),H
      ADD HL,DE
+
      ENDIF
      EXD
+
        RET
        LD A,(IY+#B)
+
dncom
        LD (IY+#12),A
+
        LD A,(IX+1)
        LD (IY+#B),C
+
        AND #F
        LD HL,FrTab
+
        SCF
        ADD A,A
+
        JR upcomQ
        ADD A,L
+
smpcom
        LD L,A
+
        LD A,(IX+2),(IY+9),A
        LD A,(HL)
+
        RET
        INC L
+
orncom
        LD H,(HL),L,A
+
        LD A,(IX+2),(IY+4),A
      PUSH HL
+
        RET
      ;OR A
+
vibcom
      SBC HL,DE
+
        LD (IY+#E),3
      POP HL
+
        LD A,(IX+2),B,A
      POP DE
+
        AND #F
        JNC portUP
+
        LD (IY+#17),A
 +
        LD A,B
 +
        AND #F0
 +
        RRCA
 +
        RRCA
 +
        RRCA
 +
        RRCA
 +
        LD (IY+#16),A
 +
        LD (IY+#10),A
 +
        RET
 +
portcom
 +
        LD A,(IX)
 +
        AND #7F
 +
        DEC A
 +
        CP 96
 +
        RET NC
 +
        LD A,(IX+1)
 +
        AND #F
 +
        LD (IY+#F),A
 +
        LD (IY+#10),A
 +
        LD A,(IX+2)
 +
        LD (IY+#11),A
 +
        LD (IY+#15),0
 +
        LD (IY+#E),2
 +
        LD A,(IY+#12),C,A
 +
        LD HL,FrTab
 +
        ADD A,A
 +
        ADD A,L
 +
        LD L,A
 +
        LD E,(HL)
 +
        INC L
 +
        LD D,(HL)
 +
        PUSH DE
 +
        LD HL,(usedisp)
 +
        LD (IY+#13),L
 +
        LD (IY+#14),H
 +
        ADD HL,DE
 
         EXD  
 
         EXD  
 +
        LD A,(IY+#B)
 +
        LD (IY+#12),A
 +
        LD (IY+#B),C
 +
        LD HL,FrTab
 +
        ADD A,A
 +
        ADD A,L
 +
        LD L,A
 +
        LD A,(HL)
 +
        INC L
 +
        LD H,(HL),L,A
 
         PUSH HL
 
         PUSH HL
        LD L,(IY+#11)
+
      ;OR A
        LD H,(IY+#15)
+
         SBC HL,DE
        CALL NEGHL
 
        LD (IY+#11),L
 
         LD (IY+#15),H
 
 
         POP HL
 
         POP HL
portUP  OR A
+
        POP DE
        SBC HL,DE
+
        JNC portUP
        LD (IY+#16),L
+
        EXD
        LD (IY+#17),H
+
        PUSH HL
        RET  
+
        LD L,(IY+#11)
edcom
+
        LD H,(IY+#15)
        LD A,(IX+1)
+
        CALL NEGHL
        AND #F
+
        LD (IY+#11),L
        LD (EstCNT),A
+
        LD (IY+#15),H
        LD (EiniCNT),A
+
        POP HL
        LD L,(IX+2),H,0
+
portUP  OR A
        LD (Estep),HL
+
        SBC HL,DE
        RET  
+
        LD (IY+#16),L
eucom
+
        LD (IY+#17),H
        CALL edcom
+
        RET  
        CALL NEGHL
+
edcom
        LD (Estep),HL
+
        LD A,(IX+1)
        RET  
+
        AND #F
;2:TSTNQ,EPENT(nu)
+
        LD (EstCNT),A
PLNOTE
+
        LD (EiniCNT),A
      IFN ts
+
        LD L,(IX+2),H,0
      LD A,(tson)
+
        LD (Estep),HL
      OR A
+
        RET  
      JZ PLnotsP
+
eucom
      LD A,#FE
+
        CALL edcom
      CALL SWPAYPP
+
        CALL NEGHL
      CALL PLNOTPP
+
        LD (Estep),HL
      LD A,#FF
+
        RET  
      CALL SWPAYPP
+
;2:TSTNQ,EPENT(nu)
PLnotsP
+
PLNOTE
      ENDIF
+
        IFN ts
 +
        LD A,(tson)
 +
        OR A
 +
        JZ PLnotsP
 +
        LD A,#FE
 +
        CALL SWPAYPP
 
         CALL PLNOTPP
 
         CALL PLNOTPP
PLNOTE0 CALL HALTER
+
        LD A,#FF
        CALL OUT4
+
        CALL SWPAYPP
      IFN ts
+
PLnotsP
      LD A,(tson)
+
        ENDIF
      OR A
+
        CALL PLNOTPP
      JZ PLnotsP2
+
PLNOTE0 CALL HALTER
      LD A,#FE
+
        CALL OUT4
      CALL SWPAYPP
+
        IFN ts
      CALL PLnOUT
+
        LD A,(tson)
      LD A,#FF
+
        OR A
      CALL SWPAYPP
+
        JZ PLnotsP2
PLnotsP2
+
        LD A,#FE
      ENDIF
+
        CALL SWPAYPP
 
         CALL PLnOUT
 
         CALL PLnOUT
         LD A,#81
+
         LD A,#FF
        IN A,(-2)
+
        CALL SWPAYPP
        CPL  
+
PLnotsP2
        AND 31
+
        ENDIF
        JNZ PLNOTE0
+
        CALL PLnOUT
        CALL 8020
+
        LD A,#81
        CPL  
+
        IN A,(-2)
        AND 14
+
        CPL  
        JNZ PLNOTE0
+
        AND 31
        CALL 8026
+
        JNZ PLNOTE0
        CPL  
+
        CALL 8020
        AND 15
+
        CPL  
        JNZ PLNOTE0
+
        AND 14
PIAN2AY
+
        JNZ PLNOTE0
      IFN ts
+
        CALL 8026
      LD A,#FE
+
        CPL  
      CALL SWPAYPP
+
        AND 15
      CALL PIANAY
+
        JNZ PLNOTE0
      LD A,#FF
+
PIAN2AY
      CALL SWPAYPP
+
        IFN ts
      ENDIF  
+
        LD A,#FE
        JP PIANAY
+
        CALL SWPAYPP
;2 тут
+
        CALL PIANAY
PLNOTPP
+
        LD A,#FF
         LD A,(NOTENV)
+
        CALL SWPAYPP
         LD (env),A
+
        ENDIF  
 +
        JP PIANAY
 +
;2 тут
 +
PLNOTPP
 +
        LD A,(NOTENV)
 +
        LD (env),A
 +
        XOR A
 +
        LD (Acom),A
 +
        LD (Bcom),A
 +
        LD (Ccom),A
 +
        CPL
 +
        LD (Achan),A
 +
        LD (Bchan),A
 +
        LD (Cchan),A
 +
        JP PLREAD
 +
FILLATR
 +
        DI
 +
        LD HL,LINESon
 +
        LD A,(PATLEN)
 +
        LD C,A
 +
        INC C
 +
        LD DE,#FF00 ;;;
 +
        LD A,(CURY)
 +
        LD B,4
 +
        SUB B
 +
FATR0  OR A
 +
        JP P,FATR0Q
 +
        LD (HL),D
 +
        INC HL
 +
        INC A
 +
        DJNZ FATR0
 +
        JR FATR1Q
 +
FATR0Q  LD (HL),E
 +
        INC HL
 +
        DJNZ $-2
 +
FATR1Q  INC HL
 +
        LD B,4
 +
        LD A,(CURY)
 +
FATR2  INC A
 +
        CP C
 +
        JZ FATR2Q
 +
        LD (HL),E
 +
        INC HL
 +
        DJNZ FATR2
 +
        JR FATR3Q
 +
FATR2Q  LD (HL),D
 +
        INC HL
 +
        DJNZ $-2
 +
FATR3Q  LD (FATRSP),SP
 +
        LD IX,#59FF
 +
        LD IY,LINESon
 +
        LD A,9
 +
FATRFIL EXA
 +
col1=$+1
 +
        LD HL,#606
 +
col2=$+1
 +
        LD DE,#707
 +
        LD BC,#744
 +
        LD A,(IY)
 +
        CP #7F
 +
        JZ FATRNO
 +
        OR A
 +
        JZ FATRPUS
 +
        LD HL,0
 +
        LD D,L,E,L
 +
        LD C,L
 +
FATRPUS LD SP,IX
 +
        PUSH HL
 +
        DEC SP
 +
        PUSH HL,HL
 +
        DEC SP
 +
        PUSH HL
 +
        DEC SP
 +
        PUSH HL,HL
 +
        DEC SP
 +
        PUSH HL
 +
        DEC SP
 +
        PUSH HL,HL
 +
        DEC SP
 +
        PUSH DE,HL
 +
        DEC SP
 +
        PUSH BC
 +
FATRNO  INC IY
 +
        LD BC,32
 +
        ADD IX,BC
 +
        EXA
 +
        DEC A
 +
        JNZ FATRFIL
 +
FATRSP=$+1
 +
        LD SP,0
 +
        LD IY,iy
 +
        EI
 +
        RET
 +
PLnOUT
 +
        XOR A
 +
        LD (mix),A
 +
        LD IY,Achan
 +
        LD A,(IY)
 +
        INC A
 +
        JZ PLnAres
 +
        CALL iSMPORN
 +
        LD DE,(Adfrq)
 +
        ADD HL,DE
 +
        LD (frqA),HL
 +
        CALL ADDVOL
 +
        LD A,B
 +
        CALL GLOVOL1
 +
PLoffA=$+1
 +
        AND -1
 +
PLnAres LD (volA),A
 +
        CALL PLcoms
 +
        LD IY,Bchan
 +
        LD A,(IY)
 +
        INC A
 +
        JZ PLnBres
 +
        CALL iSMPORN
 +
        LD DE,(Bdfrq)
 +
        ADD HL,DE
 +
        LD (frqB),HL
 +
        CALL ADDVOL
 +
        RLC B
 +
        CALL GLOVOL
 +
PLoffB=$+1
 +
        AND -1
 +
PLnBres LD (volB),A
 +
        CALL PLcoms
 +
        LD IY,Cchan
 +
        LD A,(IY)
 +
        INC A
 +
        JZ PLnCres
 +
        CALL iSMPORN
 +
        LD DE,(Cdfrq)
 +
        ADD HL,DE
 +
        LD (frqC),HL
 +
        CALL ADDVOL
 +
        RLC B,B
 +
        CALL GLOVOL
 +
PLoffC=$+1
 +
        AND -1
 +
PLnCres LD (volC),A
 +
        CALL PLcoms
 +
        LD HL,(BASENV)
 +
        LD A,(Edfrq)
 +
        ADD A,L
 +
        LD L,A
 +
        LD DE,(Efrq)
 +
        ADD HL,DE
 +
        LD (frqE),HL
 +
        LD A,(EstCNT)
 +
        DEC A
 +
        JP M,EstOFF
 +
        JNZ EstNZ
 +
        LD HL,(Estep)
 +
        ADD HL,DE
 +
        LD (Efrq),HL
 +
        LD A,(EiniCNT)
 +
EstNZ  LD (EstCNT),A
 +
EstOFF  XOR A
 +
        LD (Edfrq),A
 +
        LD IY,iy
 +
        JP OUTAY
 +
GLOVOL
 +
        LD A,(mix)
 +
        OR B
 +
GLOVOL1 LD (mix),A
 +
        LD H,'TVOL,L,(IY+#C)
 +
        ADD HL,DE
 +
        LD E,(HL)
 +
glovol=$+1
 +
        LD L,#F0
 +
        ADD HL,DE
 +
        LD A,(HL)
 +
        OR C
 +
        AND (IY+#D)
 +
        RET
 +
 +
PLcoms  LD A,(IY+#E)
 +
        DEC A
 +
        RET M
 +
        JNZ PLcomNG
 +
        DEC (IY+#10)
 +
        RET NZ
 +
PLcomG  LD A,(IY+#F),(IY+#10),A
 +
        LD L,(IY+#13)
 +
        LD H,(IY+#14)
 +
        LD E,(IY+#11)
 +
        LD D,(IY+#15)
 +
        ADD HL,DE
 +
        LD (IY+#13),L
 +
        LD (IY+#14),H
 +
        RET
 +
 +
PLcomNG DEC A
 +
        JNZ PLcomNP
 +
        DEC (IY+#10)
 +
        RET NZ
 +
        CALL PLcomG
 +
         LD A,D
 +
        EXD
 +
        LD L,(IY+#16)
 +
        LD H,(IY+#17)
 +
         RLA
 +
        JNC PLportA
 +
        ADD HL,DE,HL,DE
 +
PLportA SBC HL,DE
 +
        INC H
 +
        RET NZ
 +
        LD A,(IY+#12),(IY+#B),A
 +
        XOR A
 +
        LD (IY+#E),A
 +
        LD (IY+#13),A
 +
        LD (IY+#14),A
 +
        RET
 +
 +
PLcomNP DEC A
 +
        RET NZ
 +
        DEC (IY+#10)
 +
        RET NZ
 +
        LD A,(IY)
 +
        XOR -1
 +
        LD (IY),A
 +
        LD A,(IY+#16)
 +
        JZ $+5
 +
        LD A,(IY+#17)
 +
        LD (IY+#10),A
 +
        RET
 +
COPcur
 +
        LD A,(CURY),(beg2),A
 
         XOR A
 
         XOR A
        LD (Acom),A
+
        CALL IBEG2q
        LD (Bcom),A
+
        LD A,(EPAT)
        LD (Ccom),A
+
        CALL iPAT2q
        CPL
+
         CALL XPP2
        LD (Achan),A
+
         LD A,C
        LD (Bchan),A
+
        CALL ICHN2Q
        LD (Cchan),A
+
         LD HL,TSTNROL
        JP PLREAD
 
FILLATR
 
        DI
 
        LD HL,LINESon
 
        LD A,(PATLEN)
 
        LD C,A
 
        INC C
 
        LD DE,#FF00 ;;;
 
        LD A,(CURY)
 
        LD B,4
 
        SUB B
 
FATR0  OR A
 
        JP P,FATR0Q
 
        LD (HL),D
 
        INC HL
 
        INC A
 
        DJNZ FATR0
 
        JR FATR1Q
 
FATR0Q  LD (HL),E
 
        INC HL
 
        DJNZ $-2
 
FATR1Q  INC HL
 
         LD B,4
 
         LD A,(CURY)
 
FATR2  INC A
 
        CP C
 
        JZ FATR2Q
 
        LD (HL),E
 
        INC HL
 
        DJNZ FATR2
 
        JR FATR3Q
 
FATR2Q  LD (HL),D
 
        INC HL
 
        DJNZ $-2
 
FATR3Q  LD (FATRSP),SP
 
        LD IX,#59FF
 
        LD IY,LINESon
 
        LD A,9
 
FATRFIL EXA
 
col1=$+1
 
        LD HL,#606
 
col2=$+1
 
        LD DE,#707
 
        LD BC,#744
 
        LD A,(IY)
 
        CP #7F
 
        JZ FATRNO
 
        OR A
 
        JZ FATRPUS
 
        LD HL,0
 
        LD D,L,E,L
 
         LD C,L
 
FATRPUS LD SP,IX
 
        PUSH HL
 
        DEC SP
 
        PUSH HL,HL
 
        DEC SP
 
 
         PUSH HL
 
         PUSH HL
        DEC SP
+
COPY
        PUSH HL,HL
+
        CALL FROMSZ
        DEC SP
+
        LD DE,(pat2),D,A
         PUSH HL
+
        LD HL,(beg1)
         DEC SP
+
beg2=$+1
         PUSH HL,HL
+
        LD H,0
         DEC SP
+
        CALL CHN1PP
        PUSH DE,HL
+
chn2=$+1
        DEC SP
+
        LD A,1
 +
        LD B,3
 +
        DEC A
 +
        JZ COP2X
 +
        LD B,8
 +
        DEC A
 +
        JZ $+4
 +
        LD B,13
 +
COP2X  LD A,(pat1)
 +
         IFN opcompl
 +
        SCF
 +
         ENDIF
 +
COPYU
 +
;A=patfrom
 +
;D=lines
 +
;E=patto
 +
;B=chnto(3/8/13)
 +
;C=chnfrom
 +
;H=lineto
 +
;L=linefrom
 +
         IFN opcompl
 +
        PUSH AF
 +
         ENDIF
 +
        PUSH DE,DE,HL
 
         PUSH BC
 
         PUSH BC
FATRNO INC IY
+
        CALL PATtoBUF ;делает OUT7
         LD BC,32
+
        POP BC
         ADD IX,BC
+
        LD A,C
 +
        ADD A,3
 +
        LD (DISPc1),A
 +
        LD A,B
 +
        INC A
 +
        LD (DISPc2),A
 +
        POP HL
 +
        LD A,H
 +
        ADD HL,HL
 +
        LD H,'TLINES
 +
        LD E,(HL)
 +
        INC L
 +
        LD D,(HL)
 +
        LD HL,BUF
 +
        ADD HL,DE
 +
        LD E,C,D,0
 +
          LD C,A
 +
        LD A,(chnall)
 +
        OR A
 +
        JNZ noall1
 +
        ADD HL,DE
 +
  noall1
 +
        EX (SP),HL
 +
        LD A,L
 +
        CALL AtoPAT ;DE
 +
          LD L,C
 +
        ADD HL,HL
 +
        LD H,'TLINES
 +
        LD A,(HL)
 +
        INC L
 +
        LD H,(HL),L,A
 +
        ADD HL,DE
 +
         LD A,(chnall)
 +
        OR A
 +
        JNZ noall2
 +
        LD E,B,D,0
 +
        ADD HL,DE
 +
noall2
 +
        LD A,64
 +
        SUB C
 +
        POP DE
 +
        EXD
 +
        LD C,A
 +
        POP AF
 +
        CP C
 +
        JC $+3
 +
        LD A,C
 +
chnall=$+1
 +
        LD C,0 ;не0=все каналы
 +
        INC C
 +
        DEC C
 +
        JZ COPSCF
 +
;копирование всех каналов
 +
COPYAL0 LD BC,18
 +
        LDIR
 +
        DEC A
 +
        JNZ COPYAL0
 +
        JR COPYALQ
 +
;копирование 1 канала
 +
;1
 +
COPSCF  SCF ;NC=9 on
 +
COPY0
 +
        PUSH HL,DE
 +
        JC COPyN
 +
        EXA
 +
        LD A,(HL)
 +
        AND #7F
 +
        JZ COPnN
 +
COPyN  PUSH DE,HL
 +
        LDI
 +
        INC HL,DE
 +
        INC HL,DE
 +
        LDI
 +
        LDI
 +
        POP HL,DE
 +
COPnN
 +
        INC HL,DE
 +
        JC COPyC
 +
        LD A,(HL)
 +
        AND #F0
 +
        JZ COPnC
 +
         EXA
 +
COPyC  EXA
 +
        LDI
 +
        LDD
 +
COPnC
 +
        INC HL,HL
 +
        LD A,(HL)
 +
        AND #F
 +
        JZ COPnE
 +
        XOR #F
 +
        JZ COPnE
 +
DISPc2=$+1
 +
        LD BC,0
 +
        EXD
 +
        SBC HL,BC
 +
        EXD
 +
DISPc1=$+1
 +
        LD C,0
 +
        SBC HL,BC
 +
        LDI
 +
        LDI
 +
COPnE
 +
        POP HL
 +
        LD BC,18;B портится
 +
        ADD HL,BC
 +
        EXD
 +
        POP HL
 +
        ADD HL,BC
 
         EXA  
 
         EXA  
        DEC A
+
        DEC A
         JNZ FATRFIL
+
        JNZ COPY0
FATRSP=$+1
+
COPYALQ
        LD SP,0
+
         IFN opcompl
         LD IY,iy
+
        POP AF
         EI
+
        CALL C,PROK
         RET
+
        ENDIF
PLnOUT
+
COPQJP
 +
        JP PRPATU
 +
FROMSZ
 +
fromEND=$+1
 +
        LD A,63
 +
beg1=$+1
 +
        LD C,0
 +
        SUB C
 +
        INC A
 +
        RET NC
 +
        POP AF
 +
         IFN opcompl
 +
PRERR  LD HL,TERROR
 +
        JR PROKU
 +
         ELSE
 +
        RET
 +
         ENDIF
 +
;5
 +
PROK
 +
        IFN opcompl
 +
        LD HL,TCOMPLE
 +
PROKU
 +
        LD (PROKHL),HL
 +
        ENDIF
 +
        LD BC,mOK
 +
        CALL WINDUM
 +
PROKHL=$+1
 +
        LD HL,TCOMPLE
 +
        LD DE,0
 +
        CALL PRMENU
 +
      CALL DOWNMER
 +
        CALL WAITNOK
 +
        HALT
 
         XOR A
 
         XOR A
         LD (mix),A
+
         CALL CANCEL+2
         LD IY,Achan
+
         JC $-5
        LD A,(IY)
+
        JP CLOSWIN
        INC A
+
CLEARS
        JZ PLnAres
+
        XOR A
        CALL iSMPORN
+
        LD (patcled),A
        LD DE,(Adfrq)
+
        LD HL,CLEACOO
        ADD HL,DE
+
        LD DE,CLEAUSE
        LD (frqA),HL
+
        LD BC,mCLEAR
      CALL ADDVOL
+
        CALL WINDOW
        LD A,B
+
        LD HL,tCLEAR
      CALL GLOVOL1
+
        LD DE,0
PLoffA=$+1
+
        CALL PRMENU
        AND -1
+
CLELOOP
PLnAres LD (volA),A
+
         CALL HALTER
        CALL PLcoms
+
        CALL JPITEM
        LD IY,Bchan
+
        CALL TSTFIRE
        LD A,(IY)
+
        JNC CLELOOP
        INC A
+
CLEARSQ CALL CLOSWIN
        JZ PLnBres
+
        CALL POSFON
         CALL iSMPORN
+
patcled=$+1
        LD DE,(Bdfrq)
+
        LD A,0
        ADD HL,DE
+
        OR A
        LD (frqB),HL
+
        CALL NZ,PRPAT
      CALL ADDVOL
+
        RET
        RLC B
+
clPAT
      CALL GLOVOL
+
        CALL SURE
PLoffB=$+1
+
        DEC A
        AND -1
+
        JZ clPATS
PLnBres LD (volB),A
+
        LD A,(EPAT)
        CALL PLcoms
+
        CALL CLPAT
        LD IY,Cchan
+
        LD A,-1
        LD A,(IY)
+
        LD (patcled),A
        INC A
+
        JR clQ
        JZ PLnCres
+
        CALL iSMPORN
+
clSONG  CALL SURE
        LD DE,(Cdfrq)
+
        CALL CLORNSM
        ADD HL,DE
+
clPATS  CALL CLPATS
        LD (frqC),HL
+
        CALL CLPOS
      CALL ADDVOL
+
        XOR A
        RLC B,B
+
        LD (LOOP),A
      CALL GLOVOL
+
        LD (POS),A
PLoffC=$+1
+
        LD (EPAT),A
        AND -1
+
        INC A
PLnCres LD (volC),A
+
        LD (LENG),A
        CALL PLcoms
+
        LD A,63
        LD HL,(BASENV)
+
         ;LD BC,PATS-1
        LD A,(Edfrq)
+
         ;LD DE,TPATSZ+1
        ADD A,L
+
         ;LD H,D,L,B
        LD L,A
+
         ;LD (HL),A
        LD DE,(Efrq)
+
         ;LDIR
        ADD HL,DE
+
         CALL FILLENS
        LD (frqE),HL
+
        LD (patcled),A
        LD A,(EstCNT)
+
        LD (PATLEN),A
        DEC A
+
clQ    POP HL
        JP M,EstOFF
+
        JR CLEARSQ
        JNZ EstNZ
+
        LD HL,(Estep)
+
clPOS  CALL SURE
        ADD HL,DE
+
        CALL CLPOS
        LD (Efrq),HL
+
        XOR A
        LD A,(EiniCNT)
+
        LD (LOOP),A
EstNZ  LD (EstCNT),A
+
        JR clQ
EstOFF  XOR A
+
        LD (Edfrq),A
+
clSMP  CALL SURE
        LD IY,iy
+
        DEC A
        JP OUTAY
+
        CALL Z,CLSMPS
GLOVOL
+
        LD A,(smp)
        LD A,(mix)
+
        CALL CLSMP
        OR B
+
        JR clQ
GLOVOL1 LD (mix),A
+
        LD H,'TVOL,L,(IY+#C)
+
clORN  CALL SURE
        ADD HL,DE
+
        DEC A
        LD E,(HL)
+
        CALL Z,CLORNS
glovol=$+1
+
        LD A,(ORN)
        LD L,#F0
+
        CALL CLORN
        ADD HL,DE
+
        JR clQ
        LD A,(HL)
+
        OR C
+
SURE    LD HL,SURECOO
        AND (IY+#D)
+
        LD DE,SUREUSE
        RET
+
        LD BC,mSURE
 
+
        CALL WINDOW
PLcoms  LD A,(IY+#E)
+
        LD HL,tSURE
         DEC A
+
        LD DE,0
        RET M
+
        CALL PRMENU
        JNZ PLcomNG
+
SURE0
        DEC (IY+#10)
+
         CALL HALTER
        RET NZ
+
        CALL JPITEM
PLcomG  LD A,(IY+#F),(IY+#10),A
+
        CALL TSTFIRE
         LD L,(IY+#13)
+
        JNC SURE0
         LD H,(IY+#14)
+
        LD C,1
        LD E,(IY+#11)
+
SUREQ  CALL CLOSWIN
        LD D,(IY+#15)
+
        LD A,C
        ADD HL,DE
+
        DEC A
         LD (IY+#13),L
+
        RET NZ
        LD (IY+#14),H
+
        POP AF
        RET
+
        JP clQ
 
+
YES
PLcomNG DEC A
+
        LD A,(ITEM)
         JNZ PLcomNP
+
        DEC A
        DEC (IY+#10)
 
        RET NZ
 
         CALL PLcomG
 
      LD A,D
 
        EXD
 
        LD L,(IY+#16)
 
        LD H,(IY+#17)
 
      RLA
 
      JNC PLportA
 
        ADD HL,DE,HL,DE
 
PLportA SBC HL,DE
 
        INC H
 
        RET NZ
 
        LD A,(IY+#12),(IY+#B),A
 
        XOR A
 
        LD (IY+#E),A
 
        LD (IY+#13),A
 
        LD (IY+#14),A
 
        RET
 
 
 
PLcomNP DEC A
 
        RET NZ
 
        DEC (IY+#10)
 
        RET NZ
 
        LD A,(IY)
 
        XOR -1
 
        LD (IY),A
 
        LD A,(IY+#16)
 
        JZ $+5
 
        LD A,(IY+#17)
 
        LD (IY+#10),A
 
        RET
 
COPcur
 
        LD A,(CURY),(beg2),A
 
      XOR A
 
        CALL IBEG2q
 
        LD A,(EPAT)
 
        CALL iPAT2q
 
      CALL XPP2
 
      LD A,C
 
        CALL ICHN2Q
 
      LD HL,TSTNROL
 
      PUSH HL
 
COPY
 
        CALL FROMSZ
 
        LD DE,(pat2),D,A
 
        LD HL,(beg1)
 
beg2=$+1
 
        LD H,0
 
        CALL CHN1PP
 
chn2=$+1
 
        LD A,1
 
        LD B,3
 
        DEC A
 
        JZ COP2X
 
         LD B,8
 
        DEC A
 
        JZ $+4
 
        LD B,13
 
COP2X  LD A,(pat1)
 
      IFN opcompl
 
        SCF
 
      ENDIF
 
COPYU
 
;A=patfrom
 
;D=lines
 
;E=patto
 
;B=chnto(3/8/13)
 
;C=chnfrom
 
;H=lineto
 
;L=linefrom
 
      IFN opcompl
 
        PUSH AF
 
      ENDIF
 
        PUSH DE,DE,HL
 
      PUSH BC
 
      CALL PATtoBUF ;делает OUT7
 
      POP BC
 
        LD A,C
 
        ADD A,3
 
        LD (DISPc1),A
 
        LD A,B
 
        INC A
 
        LD (DISPc2),A
 
        POP HL
 
        LD A,H
 
        ADD HL,HL
 
        LD H,'TLINES
 
        LD E,(HL)
 
        INC L
 
        LD D,(HL)
 
        LD HL,BUF
 
        ADD HL,DE
 
        LD E,C,D,0
 
 
         LD C,A
 
         LD C,A
      LD A,(chnall)
+
        POP HL
      OR A
+
        JR SUREQ
      JNZ noall1
+
TRANSP
        ADD HL,DE
+
        CALL TransPP
noall1
+
TRNS0  LD A,(HL)
        EX (SP),HL
+
        AND #80
        LD A,L
+
        LD D,A
      CALL AtoPAT ;DE
+
        XOR (HL)
         LD L,C
+
        JZ TRNSNO
        ADD HL,HL
+
        CP 97
        LD H,'TLINES
+
        JZ TRNSNO
        LD A,(HL)
+
        DEC A
        INC L
+
        ADD A,C
        LD H,(HL),L,A
+
        CP 96
        ADD HL,DE
+
        JC $+3
      LD A,(chnall)
+
        SUB C
      OR A
+
        INC A
      JNZ noall2
+
TRNSNO  OR D
        LD E,B,D,0
+
        LD (HL),A
        ADD HL,DE
+
        LD DE,18
noall2
+
        ADD HL,DE
        LD A,64
+
        DJNZ TRNS0
        SUB C
+
PRPATO  CALL PROK
        POP DE
+
        JP PRPATU
        EXD
+
TRANVOL
        LD C,A
+
        CALL TransPP
        POP AF
+
          INC HL,HL,HL,HL
        CP C
+
TRNV0  LD A,(HL)
        JC $+3
+
        AND #F0
        LD A,C
+
        LD D,A
chnall=$+1
+
        XOR (HL)
      LD C,0 ;не0=все каналы
+
        JZ TRNVNO
      INC C
+
        ADD A,C
      DEC C
+
        JZ TRNV1
      JZ COPSCF
+
        CP 16
;копирование всех каналов
+
        JC TRNVNO
COPYAL0 LD BC,18
+
        CPL    ;
        LDIR
+
        RLA    ;
 +
        SBC A,A ;будет
 +
        AND #0F ;F
 +
TRNV1  OR 1    ;или 1
 +
TRNVNO  OR D
 +
        LD (HL),A
 +
        LD DE,18
 +
        ADD HL,DE
 +
        DJNZ TRNV0
 +
        JR PRPATO
 +
TransPP
 +
        CALL FROMSZ
 +
        PUSH AF
 +
        LD A,(pat1)
 +
        CALL AtoPAT
 +
        CALL CHN1PP
 +
         LD A,(beg1)
 +
        ADD A,A
 +
        LD L,A,H,'TLINES
 +
        LD A,(HL)
 +
        INC L
 +
        LD H,(HL),L,A
 +
        ADD HL,DE,HL,BC
 +
        POP BC
 +
transp=$+1
 +
        LD C,0
 +
        RET
 +
;edsmp/orn
 +
PIANO
 +
        XOR A
 +
        LD H,A,L,A
 +
        LD (piCURv),HL
 +
        LD (piCURv+2),HL
 +
        LD (mix),A
 +
        LD (DNOIS),A
 +
        LD HL,piaSMP
 +
        LD D,(HL),(HL),A
 +
        LD (piSLIN),A
 +
        LD (piOLIN),A
 +
        LD A,D
 +
        ADD A,'SMPS
 +
        INC HL
 +
        LD (HL),A
 +
        LD A,(piaORN)
 +
        CALL HLOR3
 +
        LD (piaORN),HL
 +
        CALL NOTEKEY
 +
        LD A,D
 
         DEC A
 
         DEC A
        JNZ COPYAL0
+
        CP 24
        JR COPYALQ
 
;копирование 1 канала
 
;1
 
COPSCF  SCF ;NC=9 on
 
COPY0
 
        PUSH HL,DE
 
      JC COPyN
 
      EXA
 
        LD A,(HL)
 
        AND #7F
 
        JZ COPnN
 
COPyN  PUSH DE,HL
 
        LDI
 
        INC HL,DE
 
        INC HL,DE
 
        LDI
 
        LDI
 
      POP HL,DE
 
COPnN
 
        INC HL,DE
 
      JC COPyC
 
        LD A,(HL)
 
        AND #F0
 
        JZ COPnC
 
      EXA
 
COPyC  EXA
 
        LDI
 
        LDD
 
COPnC
 
        INC HL,HL
 
        LD A,(HL)
 
        AND #F
 
        JZ COPnE
 
        XOR #F
 
        JZ COPnE
 
DISPc2=$+1
 
        LD BC,0
 
        EXD
 
        SBC HL,BC
 
        EXD
 
DISPc1=$+1
 
        LD C,0
 
        SBC HL,BC
 
        LDI
 
        LDI
 
COPnE
 
        POP HL
 
        LD BC,18;B портится
 
        ADD HL,BC
 
        EXD
 
        POP HL
 
        ADD HL,BC
 
      EXA
 
        DEC A
 
        JNZ COPY0
 
COPYALQ
 
      IFN opcompl
 
        POP AF
 
        CALL C,PROK
 
      ENDIF
 
COPQJP
 
        JP PRPATU
 
FROMSZ
 
fromEND=$+1
 
        LD A,63
 
beg1=$+1
 
        LD C,0
 
        SUB C
 
        INC A
 
 
         RET NC
 
         RET NC
        POP AF
+
pIANO0
      IFN opcompl
+
         CALL NotOct
PRERR  LD HL,TERROR
 
        JR PROKU
 
      ELSE
 
        RET
 
      ENDIF
 
;5
 
PROK
 
      IFN opcompl
 
        LD HL,TCOMPLE
 
PROKU
 
        LD (PROKHL),HL
 
      ENDIF
 
        LD BC,mOK
 
        CALL WINDUM
 
PROKHL=$+1
 
        LD HL,TCOMPLE
 
        LD DE,0
 
        CALL PRMENU
 
      CALL DOWNMER
 
        CALL WAITNOK
 
      HALT
 
      XOR A
 
      CALL CANCEL+2
 
      JC $-5
 
        JP CLOSWIN
 
CLEARS
 
        XOR A
 
        LD (patcled),A
 
        LD HL,CLEACOO
 
        LD DE,CLEAUSE
 
        LD BC,mCLEAR
 
        CALL WINDOW
 
        LD HL,tCLEAR
 
        LD DE,0
 
        CALL PRMENU
 
CLELOOP
 
      CALL HALTER
 
        CALL JPITEM
 
        CALL TSTFIRE
 
        JNC CLELOOP
 
CLEARSQ CALL CLOSWIN
 
        CALL POSFON
 
patcled=$+1
 
        LD A,0
 
        OR A
 
        CALL NZ,PRPAT
 
        RET
 
clPAT
 
         CALL SURE
 
 
         DEC A
 
         DEC A
        JZ clPATS
+
        LD L,A
        LD A,(EPAT)
+
        LD IY,pianRG
        CALL CLPAT
+
        LD DE,(piaORN),(ORNADR),DE
        LD A,-1
+
        LD BC,(piOLIN)
        LD (patcled),A
+
        LD A,C
        JR clQ
+
        INC A
 
+
        CP B
clSONG  CALL SURE
+
        JC $+5
        CALL CLORNSM
+
        LD A,(piOLOOP)
clPATS  CALL CLPATS
+
        LD (piOLIN),A
        CALL CLPOS
+
        LD IX,(piaSMP)
        XOR A
+
        LD A,(piSEND),B,A
        LD (LOOP),A
+
        LD A,(piSLIN),E,A
        LD (POS),A
+
        INC A
        LD (EPAT),A
+
        CP B
        INC A
+
        JC $+5
        LD (LENG),A
+
        LD A,(piSLOOP)
        LD A,63
+
        LD (piSLIN),A
      ;LD BC,PATS-1
+
        LD A,E,B,0
      ;LD DE,TPATSZ+1
+
        CALL SAMPLER
      ;LD H,D,L,B
+
        LD (frqB),HL
      ;LD (HL),A
+
        CALL ADDVOL
      ;LDIR
+
        LD (volB),A
      CALL FILLENS
+
        LD A,B
         LD (patcled),A
+
        RLCA
         LD (PATLEN),A
+
        LD (mix),A
clQ    POP HL
+
        CALL OUTAY
         JR CLEARSQ
+
        LD IY,iy
 
+
         LD (IY-52),1
clPOS  CALL SURE
+
         LD (IY-56),1
        CALL CLPOS
+
         CALL RESHALT
        XOR A
+
        CALL NOTEKEY
        LD (LOOP),A
+
        LD A,D
        JR clQ
 
 
 
clSMP  CALL SURE
 
 
         DEC A
 
         DEC A
        CALL Z,CLSMPS
+
        CP 24
        LD A,(smp)
+
        JC pIANO0
        CALL CLSMP
+
;6
        JR clQ
+
PIANAY
 
+
        LD HL,pianRG
clORN  CALL SURE
+
        JR $+5
        DEC A
+
;2
        CALL Z,CLORNS
+
OUTAY  LD HL,frqA
        LD A,(ORN)
+
        LD DE,#00BF
        CALL CLORN
+
        LD A,#D
        JR clQ
+
OUTAY0  LD BC,-3
 
+
        OUT (C),D
SURE    LD HL,SURECOO
+
        LD B,E
        LD DE,SUREUSE
+
        OUTI
        LD BC,mSURE
+
        INC D
        CALL WINDOW
+
        DEC A
        LD HL,tSURE
+
        JNZ OUTAY0
        LD DE,0
+
        LD B,-1
        CALL PRMENU
+
        OUT (C),D
SURE0
+
        LD B,E
      CALL HALTER
+
        LD D,(HL)
        CALL JPITEM
+
        CP D
        CALL TSTFIRE
+
        LD (env),A
        JNC SURE0
+
        RET Z
        LD C,1
+
        OUT (C),D
SUREQ  CALL CLOSWIN
+
        RET
        LD A,C
+
NOTEKEY
        DEC A
+
        CALL BIT5
        RET NZ
+
        JZ NOTEKYQ
        POP AF
+
        LD BC,TNOTEKE-TNOTEKY
        JP clQ
+
        PUSH HL
YES
+
        LD HL,TNOTEKY
        LD A,(ITEM)
+
        CPIR
        DEC A
+
        POP HL
        LD C,A
+
        LD D,C
         POP HL
+
        RET Z
        JR SUREQ
+
        LD D,97
TRANSP
+
        CP "R
         CALL TransPP
+
        RET Z
TRNS0  LD A,(HL)
+
        INC D
        AND #80
+
        CP kssL
 +
        RET Z
 +
        INC D
 +
        CP kK
 +
        RET Z
 +
NOTEKYQ LD D,-1
 +
        RET
 +
ADDVOL
 +
        ADD A,(IY+#18)
 +
        JP P,$+6
 +
        XOR A
 +
        JR PLnAv
 +
        CP 16
 +
        JC $+4
 +
        LD A,#F
 +
PLnAv  LD D,0,E,A
 +
        RET
 +
iSMPORN
 +
        LD E,(IY+1)
 +
        LD D,(IY+2)
 +
        LD (ORNADR),DE
 +
        LD B,(IY+3) ;len
 +
        LD A,(IY+4) ;pos
 +
        LD C,A
 +
        INC A
 +
        CP B
 +
        JC $+5
 +
        LD A,(IY+5) ;loop
 +
        LD (IY+4),A
 +
        LD L,(IY+6) ;
 +
        LD H,(IY+7) ;smpadr
 +
        PUSH HL
 +
        POP IX
 +
        LD B,(IY+8) ;len
 +
        LD A,(IY+9),E,A
 +
        INC A
 +
        CP B
 +
        JC $+5
 +
        LD A,(IY+10) ;loop
 +
        LD (IY+9),A ;pos
 +
        LD A,E ;oldpos
 +
        LD L,(IY+11) ;note
 +
         ;JP SAMPLER
 +
SAMPLER
 +
;L=note
 +
;C=posinORN
 +
;A=posinSMP
 +
        ADD A,A,A,A
 +
        LD LX,A ;+smpadr
 +
         CALL OUT4
 +
        LD A,(IX+2),E,A
 +
        LD B,8
 +
        AND #40
 +
        JNZ NOnois
 +
        LD B,A
 +
        LD A,(IX+2)
 +
        ADD A,(IY+#1B)
 +
        BIT 4,(IX+3)
 +
        JZ $+5
 +
        LD (IY+#1B),A
 
         LD D,A
 
         LD D,A
        XOR (HL)
+
         LD A,(DNOIS)
        JZ TRNSNO
+
  ;DNOIS=$+1
        CP 97
+
        ADD A,D
        JZ TRNSNO
+
        LD (nois),A
        DEC A
+
        JR NOdenv
        ADD A,C
+
NOnois  LD A,(Edfrq),H,A
        CP 96
+
        LD A,(IX+2)
        JC $+3
+
        AND 31
        SUB C
+
        CP 16
        INC A
+
        JC $+4
TRNSNO  OR D
+
        OR #F0
        LD (HL),A
+
        ADD A,(IY+#1C)
        LD DE,18
+
        BIT 4,(IX+3)
        ADD HL,DE
+
        JZ $+5
        DJNZ TRNS0
+
        LD (IY+#1C),A
PRPATO  CALL PROK
+
        ADD A,H
        JP PRPATU
+
        LD (Edfrq),A
TRANVOL
+
NOdenv  LD A,E
        CALL TransPP
+
        AND #80
        INC HL,HL,HL,HL
+
        JZ $+4
TRNV0  LD A,(HL)
+
        SET 0,B
        AND #F0
+
        LD A,E
         LD D,A
+
        AND #20
        XOR (HL)
+
        LD E,C,D,0
        JZ TRNVNO
+
        LD C,16
        ADD A,C
+
        JZ $+3
        JZ TRNV1
+
        LD C,D
        CP 16
+
        LD A,L ;note
        JC TRNVNO
+
ORNADR=$+1
        CPL    ;
+
        LD HL,0
        RLA    ;
+
        ADD HL,DE
        SBC A,A ;будет
+
        ADD A,(HL),A,A
        AND #0F ;F
+
      JNC $+3
TRNV1  OR 1    ;или 1
+
      XOR A
TRNVNO  OR D
+
        LD HL,FrTab
        LD (HL),A
+
        LD E,A
        LD DE,18
+
        ADD HL,DE
        ADD HL,DE
+
        LD A,(HL)
        DJNZ TRNV0
+
        INC HL
        JR PRPATO
+
        LD H,(HL),L,A
TransPP
+
        LD D,(IX+1)
        CALL FROMSZ
+
        LD E,(IX)  ;shift в сэмпле
        PUSH AF
+
        BIT 5,(IX+3)
        LD A,(pat1)
+
        JZ NOdfrq
      CALL AtoPAT
+
        PUSH HL
        CALL CHN1PP
+
        LD L,(IY+#19)
        LD A,(beg1)
+
        LD H,(IY+#1A)
        ADD A,A
+
        ADD HL,DE
        LD L,A,H,'TLINES
+
        LD (IY+#19),L
        LD A,(HL)
+
        LD (IY+#1A),H ;shift
        INC L
+
        LD DE,0
        LD H,(HL),L,A
+
        POP HL
        ADD HL,DE,HL,BC
+
NOdfrq  ADD HL,DE
        POP BC
+
        LD E,(IY+#19)
transp=$+1
+
        LD D,(IY+#1A) ;shift
        LD C,0
+
        ADD HL,DE
        RET
+
        LD A,(IX+3),D,A
;edsmp/orn
+
        AND #80
PIANO
+
        JZ NOdvol
        XOR A
+
        LD A,D
        LD H,A,L,A
+
        AND #40
        LD (piCURv),HL
+
        CPL  
        LD (piCURv+2),HL
+
        JZ $+4
        LD (mix),A
+
        LD A,1
        LD (DNOIS),A
+
        ADD A,(IY+#18)
        LD HL,piaSMP
+
        CP 16
        LD D,(HL),(HL),A
+
        JZ YEdvol
        LD (piSLIN),A
+
        INC A
        LD (piOLIN),A
+
        CP -17
        LD A,D
+
        JZ $+3
        ADD A,'SMPS
+
YEdvol  DEC A
        INC HL
+
        LD (IY+#18),A
        LD (HL),A
+
NOdvol  LD A,D
        LD A,(piaORN)
+
        AND #F
        CALL HLOR3
+
        RET  
        LD (piaORN),HL
+
        CALL NOTEKEY
+
;4
        LD A,D
+
;Z=NOTE
      DEC A
+
XPPSCF
        CP 24
+
        SCF
      RET NC
+
;2
pIANO0
+
;Z=SMP
      CALL NotOct
+
XPP
      DEC A
+
        LD A,(CURX)
        LD L,A
+
        ADC A,-7
        LD IY,pianRG
+
        LD BC,#C04
        LD DE,(piaORN),(ORNADR),DE
+
        RET Z
        LD BC,(piOLIN)
+
        RET NC
        LD A,C
+
        SUB 9
        INC A
+
        RET C
        CP B
+
        LD BC,#1609
        JC $+5
+
        SCF
        LD A,(piOLOOP)
+
        RET Z
        LD (piOLIN),A
+
        SUB 9
        LD IX,(piaSMP)
+
        RET C
        LD A,(piSEND),B,A
+
        LD BC,#200E
        LD A,(piSLIN),E,A
 
        INC A
 
        CP B
 
        JC $+5
 
        LD A,(piSLOOP)
 
        LD (piSLIN),A
 
        LD A,E,B,0
 
        CALL SAMPLER
 
        LD (frqB),HL
 
      CALL ADDVOL
 
        LD (volB),A
 
        LD A,B
 
        RLCA
 
        LD (mix),A
 
        CALL OUTAY
 
        LD IY,iy
 
      LD (IY-52),1
 
      LD (IY-56),1
 
      CALL RESHALT
 
        CALL NOTEKEY
 
        LD A,D
 
      DEC A
 
        CP 24
 
        JC pIANO0
 
;6
 
PIANAY
 
        LD HL,pianRG
 
        JR $+5
 
;2
 
OUTAY  LD HL,frqA
 
        LD DE,#00BF
 
        LD A,#D
 
OUTAY0 LD BC,-3
 
        OUT (C),D
 
        LD B,E
 
        OUTI
 
        INC D
 
        DEC A
 
        JNZ OUTAY0
 
        LD B,-1
 
        OUT (C),D
 
        LD B,E
 
        LD D,(HL)
 
        CP D
 
        LD (env),A
 
        RET Z
 
        OUT (C),D
 
        RET
 
NOTEKEY
 
        CALL BIT5
 
        JZ NOTEKYQ
 
        LD BC,TNOTEKE-TNOTEKY
 
        PUSH HL
 
        LD HL,TNOTEKY
 
        CPIR
 
        POP HL
 
        LD D,C
 
        RET Z
 
        LD D,97
 
        CP "R
 
        RET Z
 
        INC D
 
        CP kssL
 
        RET Z
 
        INC D
 
        CP kK
 
        RET Z
 
NOTEKYQ LD D,-1
 
        RET
 
ADDVOL
 
        ADD A,(IY+#18)
 
        JP P,$+6
 
        XOR A
 
        JR PLnAv
 
        CP 16
 
        JC $+4
 
        LD A,#F
 
PLnAv  LD D,0,E,A
 
        RET
 
iSMPORN
 
        LD E,(IY+1)
 
        LD D,(IY+2)
 
        LD (ORNADR),DE
 
        LD B,(IY+3) ;len
 
        LD A,(IY+4) ;pos
 
        LD C,A
 
        INC A
 
        CP B
 
        JC $+5
 
        LD A,(IY+5) ;loop
 
        LD (IY+4),A
 
        LD L,(IY+6) ;
 
        LD H,(IY+7) ;smpadr
 
        PUSH HL
 
        POP IX
 
        LD B,(IY+8) ;len
 
        LD A,(IY+9),E,A
 
        INC A
 
        CP B
 
        JC $+5
 
        LD A,(IY+10) ;loop
 
        LD (IY+9),A ;pos
 
        LD A,E ;oldpos
 
        LD L,(IY+11) ;note
 
      ;JP SAMPLER
 
SAMPLER
 
;L=note
 
;C=posinORN
 
;A=posinSMP
 
        ADD A,A,A,A
 
        LD LX,A ;+smpadr
 
      CALL OUT4
 
        LD A,(IX+2),E,A
 
        LD B,8
 
        AND #40
 
        JNZ NOnois
 
        LD B,A
 
        LD A,(IX+2)
 
        ADD A,(IY+#1B)
 
        BIT 4,(IX+3)
 
        JZ $+5
 
        LD (IY+#1B),A
 
      LD D,A
 
      LD A,(DNOIS)
 
;DNOIS=$+1
 
      ADD A,D
 
        LD (nois),A
 
        JR NOdenv
 
NOnois  LD A,(Edfrq),H,A
 
        LD A,(IX+2)
 
        AND 31
 
        CP 16
 
        JC $+4
 
        OR #F0
 
        ADD A,(IY+#1C)
 
        BIT 4,(IX+3)
 
        JZ $+5
 
        LD (IY+#1C),A
 
        ADD A,H
 
        LD (Edfrq),A
 
NOdenv  LD A,E
 
        AND #80
 
        JZ $+4
 
        SET 0,B
 
        LD A,E
 
        AND #20
 
        LD E,C,D,0
 
        LD C,16
 
        JZ $+3
 
        LD C,D
 
        LD A,L ;note
 
ORNADR=$+1
 
        LD HL,0
 
        ADD HL,DE
 
        ADD A,(HL),A,A
 
      JNC $+3
 
      XOR A
 
        LD HL,FrTab
 
        LD E,A
 
        ADD HL,DE
 
        LD A,(HL)
 
        INC HL
 
        LD H,(HL),L,A
 
        LD D,(IX+1)
 
        LD E,(IX)  ;shift в сэмпле
 
        BIT 5,(IX+3)
 
        JZ NOdfrq
 
        PUSH HL
 
        LD L,(IY+#19)
 
        LD H,(IY+#1A)
 
        ADD HL,DE
 
        LD (IY+#19),L
 
        LD (IY+#1A),H ;shift
 
        LD DE,0
 
        POP HL
 
NOdfrq  ADD HL,DE
 
        LD E,(IY+#19)
 
        LD D,(IY+#1A) ;shift
 
        ADD HL,DE
 
        LD A,(IX+3),D,A
 
        AND #80
 
        JZ NOdvol
 
        LD A,D
 
        AND #40
 
        CPL  
 
        JZ $+4
 
        LD A,1
 
        ADD A,(IY+#18)
 
        CP 16
 
        JZ YEdvol
 
        INC A
 
        CP -17
 
        JZ $+3
 
YEdvol  DEC A
 
        LD (IY+#18),A
 
NOdvol  LD A,D
 
        AND #F
 
        RET  
 
 
 
;4
 
;Z=NOTE
 
XPPSCF
 
 
         SCF  
 
         SCF  
;2
+
        RET Z
;Z=SMP
 
XPP
 
        LD A,(CURX)
 
        ADC A,-7
 
        LD BC,#C04
 
        RET Z
 
      RET NC
 
 
         SUB 9
 
         SUB 9
      RET C
+
        RET  
        LD BC,#1609
+
;4
      SCF
+
XPP2
        RET Z
+
        LD A,(CURX)
        SUB 9
+
        LD C,1
      RET C
+
        SUB 11+4
        LD BC,#200E
+
        RET C
      SCF
+
        INC C
        RET Z
+
        SUB 5+4
      SUB 9
+
        RET C
        RET  
+
        INC C
;4
+
        RET  
XPP2
+
IT5
        LD A,(CURX)
+
        JZ NOTEKYQ
        LD C,1
+
        LD BC,TNOTEKE-TNOTEKY
        SUB 11+4
+
        PUSH HL
        RET C
+
        LD HL,TNOTEKY
        INC C
+
        CPIR  
        SUB 5+4
+
        POP HL
        RET C
+
        LD D,C
        INC C
+
        RET Z
        RET  
+
        LD D,97
IT5
 
        JZ NOTEKYQ
 
        LD BC,TNOTEKE-TNOTEKY
 
        PUSH HL
 
        LD HL,TNOTEKY
 
        CPIR  
 
        POP HL
 
        LD D,C
 
        RET Z
 
        LD D,97
 

Latest revision as of 20:32, 8 March 2020

pt5_371 C��VМ�НNщ

MAIN "",#C6
AUTOS
        LD HL,AUTO1
        LD A,4
        LD DE,#E0A
        CALL EDTXT
AUTOSu  LD HL,AUTO1
        LD DE,AUTO2
        LD A,(HL)
        CP "G
        JC AUT0s
        CP "W
        JNC AUT0s
        SUB "G
        OR #80
        LD (DE),A
        INC DE,HL
        JR AUTO0-2
AUT0s   CALL D0TO_
        LD (DE),A
        INC DE,HL
        LD B,3
AUTO0   CALL D0TO_
        LD (DE),A
        INC DE,HL
        DJNZ AUTO0
        LD HL,AUTO1
        LD DE,#E0A
        LD B,4
        JP PRTXADD
BYS
        LD HL,TAUTHOR,DE,#60D
        JR $+8
TITLES
        LD HL,TTITLE,DE,#60C
        LD A,#20
        JP EDTXT
COPYSMP
        CALL OUT4
SMP2=$+1
smp=$+2
        LD BC,#101
        LD A,B
        ADD A,'SMPS
        LD H,A
        SUB B
        ADD A,C
        LD D,A
        PUSH BC
        LD BC,256
        LD L,C,E,C
        LDIR 
        POP BC
        LD A,B
        ADD A,A
        LD L,A,H,'TSMPSZ
        LD E,(HL)
        INC L
        LD D,(HL)
        LD A,C
        ADD A,A
        LD L,A
        LD (HL),E
        INC L
        LD (HL),D
        JP PROK
DECSMP
        LD A,31
        JR $+4
INCSMP
        LD A,1
ONCSMP  LD HL,smp
        LD DE,#2F06
        LD B,A
        ADD A,(HL)
        AND 31
        JNZ $+3
        ADD A,B
        LD (HL),A
        CALL D2HEX
        LD A,(digit),(EDSMPN),A
        RET 
DECSMP2
        LD A,31
        JR $+4
INCSMP2
        LD A,1
ONCSMP2 LD HL,SMP2
        LD DE,#3906
        LD B,A
        ADD A,(HL)
        AND 31
        JR IORN2U
DECORN
        LD A,15
        JR $+4
INCORN
        LD A,1
ONCORN  LD HL,ORN
        LD DE,#2F07
        LD B,A
        ADD A,(HL)
        AND 15
        JNZ $+3
        ADD A,B
        LD (HL),A
        CALL D2HEX
digit=$+1
        LD A,"1
        LD (EDORNN),A
        RET 
DECORN2
        LD A,15
        JR $+4
INCORN2
        LD A,1
ONCORN2 LD HL,ORN2
        LD DE,#3907
        LD B,A
        ADD A,(HL)
        AND 15
IORN2U  JNZ $+3
        ADD A,B
        LD (HL),A
        JP D2HEX
COPYORN
        CALL OUT4
        CALL HLORN
        LD D,A
        PUSH HL
ORN2=$+1
        LD A,0
        CALL HLOR3
        LD E,A
        EXD 
        EX (SP),HL
        LD BC,64
        LDIR 
        POP BC
        LD L,B,H,'TORNSZ
        LD E,(HL)
        INC L
        LD D,(HL)
        LD L,C
        LD (HL),E
        INC L
        LD (HL),D
        JP PROK
       IFN about
ABOUT
        CALL PIANAY
        LD BC,mABOUT
        CALL WINDUM
        LD HL,tABOUT
        LD DE,0
        CALL PRMENU
       CALL TSTFIRH
       JNC $-3
        JP CLOSWIN
       ENDIF 
HOMEtra
        XOR A
        JZ ITRAQ
INCTRA
        LD A,(transp)
        INC A
ITRAQ   LD C,0
        JP P,$+7
        NEG 
        LD C,-1
        AND #3F
        LD B,A
        INC C
        JNZ $+4
        NEG 
        LD (transp),A
        DEC C
        LD A,"+
        JZ $+4
        LD A,"-
        LD DE,#360D
        CALL PRADD
        LD A,B
        INC D
        JP toOO
DECTRA  LD A,(transp)
        DEC A
        JR ITRAQ

pat1=$+1
INCPAT1 LD A,0
        INC A
        LD B,0
IPAT1Q  CP PATS
        JC $+3
        LD A,B
iPATq   LD (pat1),A
        LD DE,#4937
        JP PRF8
DECPAT1 LD A,(pat1)
        LD B,PATS-1
        DEC A
        JR IPAT1Q

pat2=$+1
INCPAT2 LD A,0
        INC A
        LD B,0
IPAT2Q  CP PATS
        JC $+3
        LD A,B
iPAT2q  LD (pat2),A
        LD DE,#493C
        JP PRF8
DECPAT2 LD A,(pat2)
        LD B,PATS-1
        DEC A
        JR IPAT2Q
HOMEcop
        XOR A
        LD (beg1),A
        CALL IBEGq
        XOR A
        LD (beg2),A
        CALL IBEG2q
        LD A,63
        JR IENDQ
ENDcur
        LD A,(CURY)
        JR IENDQ
INCEND
        LD A,(fromEND)
        INC A
IENDQ   AND 63
        LD (fromEND),A
        LD DE,#2E0C
        JP toOO
DECEND
        LD A,(fromEND)
        DEC A
        JR IENDQ
PLSONG
POS=$+1
        LD DE,TPOSS
        LD A,(DE),(EPAT),A
        LD E,A
        INC D
        LD A,(DE),(PATLEN),A
       LD A,-1
PLPaSo LD HL,ESNGon
       LD B,(HL)
       PUSH BC,HL
        LD (HL),A
        CALL PATFON ;для PLPAT не надо,но можно
        CALL PRPAT
        LD HL,PLEXT,(PLJP),HL
        CALL INICHAN
       IFN pttfc
        LD A,pttfc
        CALL OUTME
        LD HL,tfmmuz
        CALL tfmini
        CALL tfm ;первый фрейм пуст
        LD A,1
        LD (tfcplayon),A
       ENDIF 
        CALL PLAYER
       IFN pttfc
        XOR A
        LD (tfcplayon),A
        LD A,pttfc
        CALL OUTME
        CALL tfmshut
       ENDIF 
       POP HL,BC
        LD (HL),B
        RET 
PLPAT
        XOR A
        JR PLPaSo
;1(PRPAT)
INITPLY
        LD A,#F
        LD (Avol),A
        LD (Bvol),A
        LD (Cvol),A
        LD A,#F0
        LD (Avol2),A
        LD (Bvol2),A
        LD (Cvol2),A
        LD HL,ORNS
        LD (Aorn),HL
        LD (Born),HL
        LD (Corn),HL
       IFN ts
        LD HL,ayblock
        LD DE,ayblock2
        LD BC,szayblock
        LDIR 
       ENDIF 
;3(EPENT,PLPAT,PLSONG)
INICHAN LD A,-1
        LD (Achan),A
        LD (Bchan),A
        LD (Cchan),A
       IFN ts
        LD (Achan+szayblock),A
        LD (Bchan+szayblock),A
        LD (Cchan+szayblock),A
       ENDIF 
        RET 
PATLENS
        LD A,(PATLEN)
        CALL FILLENS
        CALL PROK
PRPAT
        XOR A
        LD (CURY),A
PRPATU
        CALL PIANAY
        CALL INITPLY
PRPATUU
       CALL CHKTS ;3.7
        LD A,(CURY)
       LD HL,PATLEN
       CP (HL)
       JC $+3
       LD A,(HL)
       LD (CURY),A
        PUSH AF
        CALL PRCU7
       LD A,(POS)
       EXA 
        LD HL,(EPAT)
        LD B,L
        LD H,'TPATSZ
        LD C,(HL) ;0..63
        POP AF ;line#
patSUB=$+1
        LD E,4 ;5 для UPROLL
      IFN 1 ;см IFN ниже
         SUB E
         JNC $+3
         ADC A,C
      ELSE 
;глючит печать 0-й позиции, т.к.идем на посл.поз., потом на LOOP
                                                  ;а надо на 0-ю
;т.е. на средней строке надо вспоминать тек. позицию
PRPATu0
        DEC A
        JP P,PRPATuY
        LD A,(ESNGon)
        OR A
        JZ PRPATuP
        PUSH DE
       EXA ;A=pos
        CALL ROLprPO ;будет A'=pos
        LD B,E ;pat ;глючит при ssQ !!!???
        LD A,(DE) ;patsz
        LD C,A ;0..63
        POP DE
PRPATuP LD A,C
PRPATuY DEC E
        JNZ PRPATu0
      ENDIF 
;A=line#
;B=pat
        INC C
;C=patsz 1..64
       EXA 
       LD D,A
       EXA 
;D=POS
patHGT=$+1
        LD L,9
        LD E,#F
PRPAT0  PUSH HL,DE
        CALL STROKA
        POP DE
        INC E,A
        POP HL
        CP C
        JNZ PRPATNE
        LD A,(ESNGon)
        INC A
        JNZ PRPATE
      IFN 1 ;см IFN выше
        LD A,E
        CP #14
        JC PRPATE
      ENDIF 
       LD B,E
        LD A,D
        CALL GETnPAA
        LD D,E
       LD E,B
        LD B,A
       LD A,L
        LD L,B
        LD H,'TPATSZ
        LD C,(HL)
        INC C
       LD L,A
PRPATE  XOR A
PRPATNE
        DEC L
        JNZ PRPAT0
        CALL FILLATR
        JP PLREAD
CLPATS
        XOR A
CLPATS0 PUSH AF
        CALL CLPAT
        POP AF
        INC A
        CP PATS
        JNZ CLPATS0
        RET 
EDSONGCS
        CALL 8026
        JP NC,ONOFFTS
EDSONG
        CALL MELINV
       LD HL,ESNGon
       LD A,(HL)
       CPL 
       LD (HL),A
        LD A,(POS)
        LD E,A,D,'TPOSS
        LD A,(DE),(EPAT),A
        LD E,A
        INC D
        LD A,(DE),(PATLEN),A
        CALL PATFON
       CALL PRPATU
        LD A,(editON)
        OR A ;0=не редактируем
        RET NZ ;редактируем
       JP EDPATu ;включаем редактирование

curfla=$+1
FLACUR  LD A,1
        DEC A
        RET NZ
curon=$+1
PRCUR   LD A,0
        CPL 
        LD (curon),A
        LD A,(CURX)
        CP 6
        JZ CUR2
        CP 11+4
        JZ CUR2
        CP 16+8
        JZ CUR2
        LD HL,TEDCURX
        ADD A,L
        LD L,A
        LD A,(HL)
lineX=$+1
        ADD A,0
        SRL A
        LD C,#F0
        JNC $+4
        LD C,#F
        LD D,A,E,#13
        CALL DE2SCR
        LD B,8
        LD A,(HL)
        XOR C
        LD (HL),A
        INC H
        DJNZ $-4
CURQ    LD A,6
        RET 

CUR2    LD HL,TEDCURX
        ADD A,L
        LD L,A
        LD A,(HL)
        RRA 
        LD D,A,E,#13
        CALL DE2SCR
        LD BC,#8F0
cUR3    LD A,(HL)
        CPL 
        LD (HL),A
        INC L
        LD A,(HL)
        XOR C
        LD (HL),A
        DEC L
        INC H
        DJNZ cUR3
        JR CURQ

PRCU7   LD A,(curon)
        OR A
        RET Z
        JR PRCUR

EDPATQ  CALL JPITEM
        LD A,#6F
        LD (DOWNM),A
        JR EDPAT0
INCROLL
roll=$+1
        LD A,0
        INC A
        CP 9
        JC $+3
        XOR A
IROLQ   LD (roll),A
        LD DE,#D09
        JP PRBCD
DECROLL LD A,(roll)
        DEC A
        JP P,IROLQ
        LD A,8
        JR IROLQ

EPss    LD A,C
        JR IROLQ

EPDOWN
        CALL PRCU7
        LD L,1
        CALL ROLLPATFON
EPDQ    JP SHOLK

EPEXT
        CALL PRCU7
        XOR A
        LD (editON),A
       LD HL,ESNGon
       CP (HL)
       LD (HL),A
       CALL NZ,MELINV
       POP AF
        JP WAITNOK
EPUP
        CALL PRCU7
        LD L,1
        CALL UPROLL
        JR EPDQ
;3(ini,NLOOP,MENUUSE)
EDPAT
editON=$+1
        LD A,0
        OR A
;если не редактировали(0), то входим на EDPATu
        JZ EDPATu
;иначе
;если был EDSONG, то на EDSONG
        LD A,(ESNGon)
        INC A
        JP Z,EDSONG
        RET 
EDPATu  LD A,-1
        LD (editON),A
        XOR A
        LD (CURY),A
        CALL PRPAT
EDPAT0
        CALL RESHALT
        CALL FLACUR
        LD HL,EDPATQ
        PUSH HL
        LD (curfla),A
        CALL BIT5
        RET Z
        LD HL,tSS
        LD BC,9
        CPIR 
        JZ EPss
        CP "W
        JP Z,EDSONGCS
       IFN bemol
        CP kBEM
        JP Z,EPbem
       ENDIF 
        CP kssA
        JP Z,SSA
        CP kssR
        JP Z,EPssr
        CP kIns
        JP Z,EPins
        CP kssE
        JP Z,EPsse
        CP kDelLn
        JP Z,EPdelln
        CP kHom
        JZ EPGRA
        CP kEnd
        JZ EPEND
       IFN tab
        CP kTab
        JP Z,JCUR
        CP kTabL
        JP Z,JCURL
       ENDIF 
       IFN ts
        CP kChip
        JP Z,SWPSONG
       ENDIF 
        CP kSmp
        JP Z,EDSMP
        CP kOrn
        JP Z,EDORN
        SUB 4
        JP Z,DECPOSU
        DEC A
        JP Z,INCPOSU
        SUB 3
        JZ LCUR
        DEC A
        JZ RCUR
        DEC A
        JP Z,EPDOWN
        DEC A
        JP Z,EPUP
        DEC A,A
        JP Z,EPENT
        DEC A
        JP Z,EPEXT
        CALL 8026
        JC NCAPCOM
        LD A,(23560)
        CP kAON
        JP Z,AUTOON
        CP kEON
        JP Z,ENVON
        CP kTRA
        JP Z,TRANSP
        CP kBEG
        JP Z,BEGcur
        CP kEND
        JP Z,ENDcur
        CP kCOP
        JP Z,COPcur
        CP kORD
        JP Z,POSEDIT
NCAPCOM CALL TSTNOTE
        CALL XPPSCF
        JP Z,TSTOCT
        RET 
EPGRA
        XOR A
       LD HL,CURY
       CP (HL)
       JNZ ePGQ
       DEC H
EPEND
        LD HL,(EPAT)
        LD H,'TPATSZ
        LD A,(HL)
       JZ $+4
       INC A
       RRA 
ePGQ    LD (CURY),A
        JP PRPATU
LCUR
        CALL PRCU7
CURX=$+1
        LD A,6
        DEC A
        JP P,LCURQM3
        LD A,20+12
        JP LCURQM3
RCUR
        CALL PRCU7
        LD A,(CURX)
        INC A
        CP 21+12
        JC $+3
        XOR A
LCURQM3 LD (CURX),A
LCURQ   CALL PRCUR
        JP SHOLK
EPENT
playon=$+1
         LD A,-1
         OR A
         JP NZ,EPENTi
         LD A,(CURX)
         CP 6
         JZ EPENTi
         CP 11
         JZ EPENTi
         CP 16
         JP NZ,PLNOTE
EPENTi  LD A,(NOTENV)
        LD (env),A
        LD HL,PLCANC
        LD (PLJP),HL
        CALL INICHAN
        JP PLAYER
       IFN tab
JCUR
        CALL PRCU7
        LD BC,TJP
        JR JCUROK
JCURL
        CALL PRCU7
        LD BC,TJPLEFT
JCUROK  LD HL,(CURX),H,0
        ADD HL,BC
        LD A,(HL)
        JP LCURQM3
       ENDIF 
ROLLPATFON
        CALL ROLL
        JP PATFON
;3
ROLL
;L=на сколько строк (для autoscroll)
        PUSH HL
        CALL PRCU7
ROLnRE  LD A,(EPAT)
        LD (nPAT),A
        POP HL
ROL0
;идем на строчку вниз
        LD A,(PATLEN)
        INC A
        LD C,A
        LD A,(CURY)
        INC A
        CP C
        JNZ ROLNZ
        LD A,(ESNGon)
        OR A
        CALL NZ,ROLnxPO ;C тоже корректируется
        XOR A
ROLNZ   LD (CURY),A
;ищем +4-ю строчку
      EXA 
      LD A,(POS)
      EXA 
        LD B,4
ROLnx0  INC A
        CP C ;patsz=1..64
        JNZ ROLnx4
ESNGon=$+1
        LD A,0
        OR A
       JZ ROLnxY
      EXA 
        CALL GETnPAA;T ;(DE)->A->(nPAT)
      EXA 
      LD A,E
      EXA 
      LD E,A
      INC D ;TPATSZ
      LD A,(DE)
      INC A
      LD C,A
ROLnxY  XOR A
ROLnx4  DJNZ ROLnx0
;печатаем +4-ю строчку
        PUSH HL
        CALL scrolST ;DI;не портит регистры
      LD HL,(POS)
      PUSH HL
      EXA 
      LD (POS),A
      EXA 
nPAT=$+1
        LD B,0
        LD E,#17
        CALL STROKA ;A=line#,E=scrY
      POP HL
      LD (POS),HL
        POP HL
        DEC L
        JNZ ROL0
rOLQ    JP   FILLATR ;DI;EI
       ;JP PATFON ;3000t
UPROLL
        CALL PRCU7
PATLEN=$+1
UPRnRE  LD C,63
        LD A,(CURY)
        DEC A
        CP C
        JC UPRNZ
        LD A,(ESNGon)
        OR A
        JNZ UPRnxPO
        LD A,C
UPRNZ   LD (CURY),A
        LD B,4
UPRnx4  DEC A
        CP C
        JC $+3
        LD A,C
        DJNZ UPRnx4
        LD E,#F
        LD BC,(EPAT-1)
        CALL scrol2 ;не портит регистры,не DI
        CALL STROKA
uPRQ    JR rOLQ
UPRnxPO
       PUSH AF
        LD A,(POS)
        CALL ROLprPO
        LD (EPAT),A
        EXA 
        LD (POS),A
       POP AF
       RET C;pgUp
        LD A,(DE)
        LD (PATLEN),A
     LD (CURY),A
      ; PUSH AF ;!
      ; LD A,5
       ;LD (patHGT),A
      ; LD (patSUB),A
       ;CALL scrol2 ;не портит регистры,не DI
        CALL PRPATU ;PRPAT
       CALL POSFON ;3+699
      ; POP AF
      ; LD (CURY),A
      ; LD A,4,(patSUB),A
       ;LD A,9,(patHGT),A
        JR uPRQ
PLAYER
       IFN hidearr
        LD A,1
        LD (ARROWt),A
       ENDIF 
        LD A,18,(options),A
        LD A,(TEMPO)
        LD (temp1),A
        LD (tempCNT),A
        XOR A
        LD (Acom),A
        LD (Bcom),A
        LD (Ccom),A
        CALL PLREAD
       IFN ts
;5
tson=$+1
       LD A,0
       OR A
       JZ PLnots1
       LD A,#FE
       CALL SWPAYPP
       XOR A
       LD (Acom),A
       LD (Bcom),A
       LD (Ccom),A
       CALL PLREAD
       LD A,#FF
       CALL SWPAYPP
PLnots1
       ENDIF 
       CALL ARROW     ;1700
        LD A,(temp1)
        LD (tempCNT),A ;иначе игнорит темп на 1-й строке
PLAYER0
       LD A,(tempCNT)
       DEC A
       LD L,1
       CALL Z,ROLL   ;35500
        CALL HALTnAR ;10000
        CALL JPITEM ;стрелка выкл.
     CALL PATFON      ;3000
      ;при выходе после перекл.POS будет сначала READ,потом ROLL
       CALL ARROW     ;1700
        CALL OUT4      ;100
        CALL PLnOUT   ;5400
       IFN ts
       LD A,(tson)
       OR A
       JZ PLnots2
        LD A,(tempCNT)
        DEC A
        CALL Z,PLREAD ;2100
       LD A,#FE
       CALL SWPAYPP   ;7700;6881
        CALL OUT4      ;100
       CALL PLnOUT    ;5400
PLnots2
       ENDIF 
tempCNT=$+1
        LD A,0
        DEC A
        JNZ PLnoNL
        CALL PLREAD   ;2100
temp1=$+1
        LD A,0
PLnoNL  LD (tempCNT),A
       IFN ts
       LD A,(tson)
       OR A
       LD A,#FF
       CALL NZ,SWPAYPP;7700;6881
       ENDIF 
      ;CALL RE        ;1000
       ;CALL JPITEM
       IFN pttfc
tfcplayon=$+1
        LD A,0
        OR A
        JZ tfcplayno
        LD A,pttfc
        CALL OUTME
        CALL tfm
tfcplayno
       ENDIF 
PLJP=$+1
        JP PLCANC ;or PLEXT (ed.song)
PLCANC
        CALL CANCEL
        JNC PLAYER0
        JR PLQ
PLEXT
        CALL CANCEL2
        JNC PLQ
        CALL 8026
        JC PLAYER0
        CALL 8020
        RRA 
        JC PLAYER0
PLQ     LD A,mains
        LD (options),A
       CALL RE        ;1000
       CALL PIAN2AY
        JP WAITNOK
PLREAD
        LD A,(CURY),C,A
        LD A,(EPAT),B,A
        CALL GETnADR
        LD A,(HL),(ENV+1),A
        INC HL
        LD A,(HL),(ENV),A
        INC HL
        LD A,(HL),(DNOIS),A
        INC HL
        PUSH HL
        POP IX
        LD IY,Achan
        CALL USEchan
        LD BC,5
        ADD IX,BC
        LD IY,Bchan
        CALL USEchan
        LD BC,5
        ADD IX,BC
        LD IY,Cchan
        CALL USEchan
        LD IY,iy
        RET 
USEchan
        LD C,(IX+3)
        LD A,(IX)
        AND #7F
        DEC A
        JP M,USEbl
        CP 96
        JNZ USEnR
        LD (IY+#E),0
        LD A,-1
        JR uSEnNOT
USEnR   LD B,(IY+#B)
        LD (IY+#B),A
        LD (IY+#12),B
        XOR A
        LD (IY+#1C),A
        LD (IY+#18),A
        LD (IY+#19),A ;
        LD (IY+#1A),A ;shift
        LD (IY+#1B),A
        LD (IY+#E),A
       LD L,(IY+#13)
       LD H,(IY+#14)
       LD (usedisp),HL
        LD (IY+#13),A
        LD (IY+#14),A
        LD (IY+4),A
        LD (IY+9),A
uSEnNOT LD (IY),A
        LD A,(IX)
        RLA 
        LD A,C
        RRA 
        RRA 
        RRA 
        RRA 
        AND 31
        JZ USEbl
        LD L,A
        ADD HL,HL
        LD H,'TSMPSZ
        LD B,(HL)
        LD (IY+#A),B
        INC L
        LD B,(HL)
        LD (IY+8),B
        LD (IY+6),0
        ADD A,'SMPS
        LD (IY+7),A
USEbl   LD A,C
        LD B,#F
        AND B
       LD C,A
;FX:B=F
;?X:B=1F
;0X:не менять
       JZ USE0x
       ;JZ USEoldE
        CP B
        JZ USEnE
        LD (NOTENV),A
        LD (env),A
        XOR A
        LD L,A,H,A
        LD (Efrq),HL
        LD (EstCNT),A
        LD HL,(ENV),(BASENV),HL
        LD B,31
USEnE
        LD (IY+#D),B ;vol|envmask
USE0x
        LD A,(IX+4)
        AND #F0
       CP C
       JZ USEoldE
        RRCA 
        RRCA 
        RRCA 
        RRCA 
        CALL HLOR3
        LD (IY+4),0
        LD (IY+1),L
        LD (IY+2),H
        LD L,A,H,'TORNSZ
        LD A,(HL),(IY+5),A
        INC L
        LD A,(HL),(IY+3),A
USEoldE LD A,(IX+4)
        AND #F
        JZ USEnV
        ADD A,A,A,A,A,A,A,A
        LD (IY+#C),A
USEnV   LD A,(IX+1)
        AND #F0
        RET Z
        LD C,16
        SUB C
        JZ dncom
        SUB C
        JZ upcom
        SUB C
        JZ portcom
        SUB C
        JZ smpcom
        SUB C
        JZ orncom
        SUB C
        JP Z,vibcom
        SUB C
        RET Z
        SUB C
        RET Z
        SUB C
        JP Z,edcom
        SUB C
        JP Z,eucom
        SUB C
        RET NZ
        LD A,(IX+2)
        CP 1
        RET C
       ;LD (tempCNT),A  ;v3+698
        LD (temp1),A
        RET 
upcom
        LD A,(IX+1)
        AND #F
upcomQ  LD (IY+#F),A ;delay
        LD (IY+#E),1 ;com.type
        LD (IY+#10),A ;count
     IFN fixtoENV
      PUSH AF
     ENDIF 
        LD L,(IX+2)
        LD H,0
        CALL NC,NEGHL
        LD (IY+#11),L
        LD (IY+#15),H
     IFN fixtoENV
      POP AF
      RET NZ
     OR H,L
     RET Z ;3!699(глючили 1000,2000)
      LD (IY+#13),L
      LD (IY+#14),H
     ENDIF 
        RET 
dncom
        LD A,(IX+1)
        AND #F
        SCF 
        JR upcomQ
smpcom
        LD A,(IX+2),(IY+9),A
        RET 
orncom
        LD A,(IX+2),(IY+4),A
        RET 
vibcom
        LD (IY+#E),3
        LD A,(IX+2),B,A
        AND #F
        LD (IY+#17),A
        LD A,B
        AND #F0
        RRCA 
        RRCA 
        RRCA 
        RRCA 
        LD (IY+#16),A
        LD (IY+#10),A
        RET 
portcom
        LD A,(IX)
        AND #7F
        DEC A
        CP 96
        RET NC
        LD A,(IX+1)
        AND #F
        LD (IY+#F),A
        LD (IY+#10),A
        LD A,(IX+2)
        LD (IY+#11),A
        LD (IY+#15),0
        LD (IY+#E),2
        LD A,(IY+#12),C,A
        LD HL,FrTab
        ADD A,A
        ADD A,L
        LD L,A
        LD E,(HL)
        INC L
        LD D,(HL)
       PUSH DE
       LD HL,(usedisp)
       LD (IY+#13),L
       LD (IY+#14),H
       ADD HL,DE
       EXD 
        LD A,(IY+#B)
        LD (IY+#12),A
        LD (IY+#B),C
        LD HL,FrTab
        ADD A,A
        ADD A,L
        LD L,A
        LD A,(HL)
        INC L
        LD H,(HL),L,A
       PUSH HL
      ;OR A
       SBC HL,DE
       POP HL
       POP DE
        JNC portUP
        EXD 
        PUSH HL
        LD L,(IY+#11)
        LD H,(IY+#15)
        CALL NEGHL
        LD (IY+#11),L
        LD (IY+#15),H
        POP HL
portUP  OR A
        SBC HL,DE
        LD (IY+#16),L
        LD (IY+#17),H
        RET 
edcom
        LD A,(IX+1)
        AND #F
        LD (EstCNT),A
        LD (EiniCNT),A
        LD L,(IX+2),H,0
        LD (Estep),HL
        RET 
eucom
        CALL edcom
        CALL NEGHL
        LD (Estep),HL
        RET 
;2:TSTNQ,EPENT(nu)
PLNOTE
       IFN ts
       LD A,(tson)
       OR A
       JZ PLnotsP
       LD A,#FE
       CALL SWPAYPP
       CALL PLNOTPP
       LD A,#FF
       CALL SWPAYPP
PLnotsP
       ENDIF 
        CALL PLNOTPP
PLNOTE0 CALL HALTER
        CALL OUT4
       IFN ts
       LD A,(tson)
       OR A
       JZ PLnotsP2
       LD A,#FE
       CALL SWPAYPP
       CALL PLnOUT
       LD A,#FF
       CALL SWPAYPP
PLnotsP2
       ENDIF 
        CALL PLnOUT
        LD A,#81
        IN A,(-2)
        CPL 
        AND 31
        JNZ PLNOTE0
        CALL 8020
        CPL 
        AND 14
        JNZ PLNOTE0
        CALL 8026
        CPL 
        AND 15
        JNZ PLNOTE0
PIAN2AY
       IFN ts
       LD A,#FE
       CALL SWPAYPP
       CALL PIANAY
       LD A,#FF
       CALL SWPAYPP
       ENDIF 
        JP PIANAY
;2 тут
PLNOTPP
        LD A,(NOTENV)
        LD (env),A
        XOR A
        LD (Acom),A
        LD (Bcom),A
        LD (Ccom),A
        CPL 
        LD (Achan),A
        LD (Bchan),A
        LD (Cchan),A
        JP PLREAD
FILLATR
        DI 
        LD HL,LINESon
        LD A,(PATLEN)
        LD C,A
        INC C
        LD DE,#FF00 ;;;
        LD A,(CURY)
        LD B,4
        SUB B
FATR0   OR A
        JP P,FATR0Q
        LD (HL),D
        INC HL
        INC A
        DJNZ FATR0
        JR FATR1Q
FATR0Q  LD (HL),E
        INC HL
        DJNZ $-2
FATR1Q  INC HL
        LD B,4
        LD A,(CURY)
FATR2   INC A
        CP C
        JZ FATR2Q
        LD (HL),E
        INC HL
        DJNZ FATR2
        JR FATR3Q
FATR2Q  LD (HL),D
        INC HL
        DJNZ $-2
FATR3Q  LD (FATRSP),SP
        LD IX,#59FF
        LD IY,LINESon
        LD A,9
FATRFIL EXA 
col1=$+1
        LD HL,#606
col2=$+1
        LD DE,#707
        LD BC,#744
        LD A,(IY)
        CP #7F
        JZ FATRNO
        OR A
        JZ FATRPUS
        LD HL,0
        LD D,L,E,L
        LD C,L
FATRPUS LD SP,IX
        PUSH HL
        DEC SP
        PUSH HL,HL
        DEC SP
        PUSH HL
        DEC SP
        PUSH HL,HL
        DEC SP
        PUSH HL
        DEC SP
        PUSH HL,HL
        DEC SP
        PUSH DE,HL
        DEC SP
        PUSH BC
FATRNO  INC IY
        LD BC,32
        ADD IX,BC
        EXA 
        DEC A
        JNZ FATRFIL
FATRSP=$+1
        LD SP,0
        LD IY,iy
        EI 
        RET 
PLnOUT
        XOR A
        LD (mix),A
        LD IY,Achan
        LD A,(IY)
        INC A
        JZ PLnAres
        CALL iSMPORN
        LD DE,(Adfrq)
        ADD HL,DE
        LD (frqA),HL
       CALL ADDVOL
        LD A,B
       CALL GLOVOL1
PLoffA=$+1
        AND -1
PLnAres LD (volA),A
        CALL PLcoms
        LD IY,Bchan
        LD A,(IY)
        INC A
        JZ PLnBres
        CALL iSMPORN
        LD DE,(Bdfrq)
        ADD HL,DE
        LD (frqB),HL
       CALL ADDVOL
        RLC B
       CALL GLOVOL
PLoffB=$+1
        AND -1
PLnBres LD (volB),A
        CALL PLcoms
        LD IY,Cchan
        LD A,(IY)
        INC A
        JZ PLnCres
        CALL iSMPORN
        LD DE,(Cdfrq)
        ADD HL,DE
        LD (frqC),HL
       CALL ADDVOL
        RLC B,B
       CALL GLOVOL
PLoffC=$+1
        AND -1
PLnCres LD (volC),A
        CALL PLcoms
        LD HL,(BASENV)
        LD A,(Edfrq)
        ADD A,L
        LD L,A
        LD DE,(Efrq)
        ADD HL,DE
        LD (frqE),HL
        LD A,(EstCNT)
        DEC A
        JP M,EstOFF
        JNZ EstNZ
        LD HL,(Estep)
        ADD HL,DE
        LD (Efrq),HL
        LD A,(EiniCNT)
EstNZ   LD (EstCNT),A
EstOFF  XOR A
        LD (Edfrq),A
        LD IY,iy
        JP OUTAY
GLOVOL
        LD A,(mix)
        OR B
GLOVOL1 LD (mix),A
        LD H,'TVOL,L,(IY+#C)
        ADD HL,DE
        LD E,(HL)
glovol=$+1
        LD L,#F0
        ADD HL,DE
        LD A,(HL)
        OR C
        AND (IY+#D)
        RET 

PLcoms  LD A,(IY+#E)
        DEC A
        RET M
        JNZ PLcomNG
        DEC (IY+#10)
        RET NZ
PLcomG  LD A,(IY+#F),(IY+#10),A
        LD L,(IY+#13)
        LD H,(IY+#14)
        LD E,(IY+#11)
        LD D,(IY+#15)
        ADD HL,DE
        LD (IY+#13),L
        LD (IY+#14),H
        RET 

PLcomNG DEC A
        JNZ PLcomNP
        DEC (IY+#10)
        RET NZ
        CALL PLcomG
       LD A,D
        EXD 
        LD L,(IY+#16)
        LD H,(IY+#17)
       RLA 
       JNC PLportA
        ADD HL,DE,HL,DE
PLportA SBC HL,DE
        INC H
        RET NZ
        LD A,(IY+#12),(IY+#B),A
        XOR A
        LD (IY+#E),A
        LD (IY+#13),A
        LD (IY+#14),A
        RET 

PLcomNP DEC A
        RET NZ
        DEC (IY+#10)
        RET NZ
        LD A,(IY)
        XOR -1
        LD (IY),A
        LD A,(IY+#16)
        JZ $+5
        LD A,(IY+#17)
        LD (IY+#10),A
        RET 
COPcur
        LD A,(CURY),(beg2),A
       XOR A
        CALL IBEG2q
        LD A,(EPAT)
        CALL iPAT2q
       CALL XPP2
       LD A,C
        CALL ICHN2Q
       LD HL,TSTNROL
       PUSH HL
COPY
        CALL FROMSZ
        LD DE,(pat2),D,A
        LD HL,(beg1)
beg2=$+1
        LD H,0
        CALL CHN1PP
chn2=$+1
        LD A,1
        LD B,3
        DEC A
        JZ COP2X
        LD B,8
        DEC A
        JZ $+4
        LD B,13
COP2X   LD A,(pat1)
       IFN opcompl
        SCF 
       ENDIF 
COPYU
;A=patfrom
;D=lines
;E=patto
;B=chnto(3/8/13)
;C=chnfrom
;H=lineto
;L=linefrom
       IFN opcompl
        PUSH AF
       ENDIF 
        PUSH DE,DE,HL
       PUSH BC
       CALL PATtoBUF ;делает OUT7
       POP BC
        LD A,C
        ADD A,3
        LD (DISPc1),A
        LD A,B
        INC A
        LD (DISPc2),A
        POP HL
        LD A,H
        ADD HL,HL
        LD H,'TLINES
        LD E,(HL)
        INC L
        LD D,(HL)
        LD HL,BUF
        ADD HL,DE
        LD E,C,D,0
         LD C,A
       LD A,(chnall)
       OR A
       JNZ noall1
        ADD HL,DE
noall1
        EX (SP),HL
        LD A,L
       CALL AtoPAT ;DE
         LD L,C
        ADD HL,HL
        LD H,'TLINES
        LD A,(HL)
        INC L
        LD H,(HL),L,A
        ADD HL,DE
       LD A,(chnall)
       OR A
       JNZ noall2
        LD E,B,D,0
        ADD HL,DE
noall2
        LD A,64
        SUB C
        POP DE
        EXD 
        LD C,A
        POP AF
        CP C
        JC $+3
        LD A,C
chnall=$+1
       LD C,0 ;не0=все каналы
       INC C
       DEC C
       JZ COPSCF
;копирование всех каналов
COPYAL0 LD BC,18
        LDIR 
        DEC A
        JNZ COPYAL0
        JR COPYALQ
;копирование 1 канала
;1
COPSCF  SCF ;NC=9 on
COPY0
        PUSH HL,DE
       JC COPyN
       EXA 
        LD A,(HL)
        AND #7F
        JZ COPnN
COPyN  PUSH DE,HL
        LDI 
        INC HL,DE
        INC HL,DE
        LDI 
        LDI 
       POP HL,DE
COPnN
        INC HL,DE
       JC COPyC
        LD A,(HL)
        AND #F0
        JZ COPnC
       EXA 
COPyC  EXA 
        LDI 
        LDD 
COPnC
        INC HL,HL
        LD A,(HL)
        AND #F
        JZ COPnE
        XOR #F
        JZ COPnE
DISPc2=$+1
        LD BC,0
        EXD 
        SBC HL,BC
        EXD 
DISPc1=$+1
        LD C,0
        SBC HL,BC
        LDI 
        LDI 
COPnE
        POP HL
        LD BC,18;B портится
        ADD HL,BC
        EXD 
        POP HL
        ADD HL,BC
       EXA 
        DEC A
        JNZ COPY0
COPYALQ
       IFN opcompl
        POP AF
        CALL C,PROK
       ENDIF 
COPQJP
        JP PRPATU
FROMSZ
fromEND=$+1
        LD A,63
beg1=$+1
        LD C,0
        SUB C
        INC A
        RET NC
        POP AF
       IFN opcompl
PRERR   LD HL,TERROR
        JR PROKU
       ELSE 
        RET 
       ENDIF 
;5
PROK
       IFN opcompl
        LD HL,TCOMPLE
PROKU
        LD (PROKHL),HL
       ENDIF 
        LD BC,mOK
        CALL WINDUM
PROKHL=$+1
        LD HL,TCOMPLE
        LD DE,0
        CALL PRMENU
      CALL DOWNMER
        CALL WAITNOK
       HALT 
       XOR A
       CALL CANCEL+2
       JC $-5
        JP CLOSWIN
CLEARS
        XOR A
        LD (patcled),A
        LD HL,CLEACOO
        LD DE,CLEAUSE
        LD BC,mCLEAR
        CALL WINDOW
        LD HL,tCLEAR
        LD DE,0
        CALL PRMENU
CLELOOP
       CALL HALTER
        CALL JPITEM
        CALL TSTFIRE
        JNC CLELOOP
CLEARSQ CALL CLOSWIN
        CALL POSFON
patcled=$+1
        LD A,0
        OR A
        CALL NZ,PRPAT
        RET 
clPAT
        CALL SURE
        DEC A
        JZ clPATS
        LD A,(EPAT)
        CALL CLPAT
        LD A,-1
        LD (patcled),A
        JR clQ

clSONG  CALL SURE
        CALL CLORNSM
clPATS  CALL CLPATS
        CALL CLPOS
        XOR A
        LD (LOOP),A
        LD (POS),A
        LD (EPAT),A
        INC A
        LD (LENG),A
        LD A,63
       ;LD BC,PATS-1
       ;LD DE,TPATSZ+1
       ;LD H,D,L,B
       ;LD (HL),A
       ;LDIR
       CALL FILLENS
        LD (patcled),A
        LD (PATLEN),A
clQ     POP HL
        JR CLEARSQ

clPOS   CALL SURE
        CALL CLPOS
        XOR A
        LD (LOOP),A
        JR clQ

clSMP   CALL SURE
        DEC A
        CALL Z,CLSMPS
        LD A,(smp)
        CALL CLSMP
        JR clQ

clORN   CALL SURE
        DEC A
        CALL Z,CLORNS
        LD A,(ORN)
        CALL CLORN
        JR clQ

SURE    LD HL,SURECOO
        LD DE,SUREUSE
        LD BC,mSURE
        CALL WINDOW
        LD HL,tSURE
        LD DE,0
        CALL PRMENU
SURE0
       CALL HALTER
        CALL JPITEM
        CALL TSTFIRE
        JNC SURE0
        LD C,1
SUREQ   CALL CLOSWIN
        LD A,C
        DEC A
        RET NZ
        POP AF
        JP clQ
YES
        LD A,(ITEM)
        DEC A
        LD C,A
        POP HL
        JR SUREQ
TRANSP
        CALL TransPP
TRNS0   LD A,(HL)
        AND #80
        LD D,A
        XOR (HL)
        JZ TRNSNO
        CP 97
        JZ TRNSNO
        DEC A
        ADD A,C
        CP 96
        JC $+3
        SUB C
        INC A
TRNSNO  OR D
        LD (HL),A
        LD DE,18
        ADD HL,DE
        DJNZ TRNS0
PRPATO  CALL PROK
        JP PRPATU
TRANVOL
        CALL TransPP
         INC HL,HL,HL,HL
TRNV0   LD A,(HL)
        AND #F0
        LD D,A
        XOR (HL)
        JZ TRNVNO
        ADD A,C
        JZ TRNV1
        CP 16
        JC TRNVNO
        CPL     ;
        RLA     ;
        SBC A,A ;будет
        AND #0F ;F
TRNV1   OR 1    ;или 1
TRNVNO  OR D
        LD (HL),A
        LD DE,18
        ADD HL,DE
        DJNZ TRNV0
        JR PRPATO
TransPP
        CALL FROMSZ
        PUSH AF
        LD A,(pat1)
       CALL AtoPAT
        CALL CHN1PP
        LD A,(beg1)
        ADD A,A
        LD L,A,H,'TLINES
        LD A,(HL)
        INC L
        LD H,(HL),L,A
        ADD HL,DE,HL,BC
        POP BC
transp=$+1
        LD C,0
        RET 
;edsmp/orn
PIANO
        XOR A
        LD H,A,L,A
        LD (piCURv),HL
        LD (piCURv+2),HL
        LD (mix),A
        LD (DNOIS),A
        LD HL,piaSMP
        LD D,(HL),(HL),A
        LD (piSLIN),A
        LD (piOLIN),A
        LD A,D
        ADD A,'SMPS
        INC HL
        LD (HL),A
        LD A,(piaORN)
        CALL HLOR3
        LD (piaORN),HL
        CALL NOTEKEY
        LD A,D
       DEC A
        CP 24
       RET NC
pIANO0
       CALL NotOct
       DEC A
        LD L,A
        LD IY,pianRG
        LD DE,(piaORN),(ORNADR),DE
        LD BC,(piOLIN)
        LD A,C
        INC A
        CP B
        JC $+5
        LD A,(piOLOOP)
        LD (piOLIN),A
        LD IX,(piaSMP)
        LD A,(piSEND),B,A
        LD A,(piSLIN),E,A
        INC A
        CP B
        JC $+5
        LD A,(piSLOOP)
        LD (piSLIN),A
        LD A,E,B,0
        CALL SAMPLER
        LD (frqB),HL
       CALL ADDVOL
        LD (volB),A
        LD A,B
        RLCA 
        LD (mix),A
        CALL OUTAY
        LD IY,iy
       LD (IY-52),1
       LD (IY-56),1
       CALL RESHALT
        CALL NOTEKEY
        LD A,D
       DEC A
        CP 24
        JC pIANO0
;6
PIANAY
        LD HL,pianRG
        JR $+5
;2
OUTAY   LD HL,frqA
        LD DE,#00BF
        LD A,#D
OUTAY0  LD BC,-3
        OUT (C),D
        LD B,E
        OUTI 
        INC D
        DEC A
        JNZ OUTAY0
        LD B,-1
        OUT (C),D
        LD B,E
        LD D,(HL)
        CP D
        LD (env),A
        RET Z
        OUT (C),D
        RET 
NOTEKEY
        CALL BIT5
        JZ NOTEKYQ
        LD BC,TNOTEKE-TNOTEKY
        PUSH HL
        LD HL,TNOTEKY
        CPIR 
        POP HL
        LD D,C
        RET Z
        LD D,97
        CP "R
        RET Z
        INC D
        CP kssL
        RET Z
        INC D
        CP kK
        RET Z
NOTEKYQ LD D,-1
        RET 
ADDVOL
        ADD A,(IY+#18)
        JP P,$+6
        XOR A
        JR PLnAv
        CP 16
        JC $+4
        LD A,#F
PLnAv   LD D,0,E,A
        RET 
iSMPORN
        LD E,(IY+1)
        LD D,(IY+2)
        LD (ORNADR),DE
        LD B,(IY+3) ;len
        LD A,(IY+4) ;pos
        LD C,A
        INC A
        CP B
        JC $+5
        LD A,(IY+5) ;loop
        LD (IY+4),A
        LD L,(IY+6) ;
        LD H,(IY+7) ;smpadr
        PUSH HL
        POP IX
        LD B,(IY+8) ;len
        LD A,(IY+9),E,A
        INC A
        CP B
        JC $+5
        LD A,(IY+10) ;loop
        LD (IY+9),A ;pos
        LD A,E ;oldpos
        LD L,(IY+11) ;note
       ;JP SAMPLER
SAMPLER
;L=note
;C=posinORN
;A=posinSMP
        ADD A,A,A,A
        LD LX,A ;+smpadr
       CALL OUT4
        LD A,(IX+2),E,A
        LD B,8
        AND #40
        JNZ NOnois
        LD B,A
        LD A,(IX+2)
        ADD A,(IY+#1B)
        BIT 4,(IX+3)
        JZ $+5
        LD (IY+#1B),A
       LD D,A
       LD A,(DNOIS)
;DNOIS=$+1
       ADD A,D
        LD (nois),A
        JR NOdenv
NOnois  LD A,(Edfrq),H,A
        LD A,(IX+2)
        AND 31
        CP 16
        JC $+4
        OR #F0
        ADD A,(IY+#1C)
        BIT 4,(IX+3)
        JZ $+5
        LD (IY+#1C),A
        ADD A,H
        LD (Edfrq),A
NOdenv  LD A,E
        AND #80
        JZ $+4
        SET 0,B
        LD A,E
        AND #20
        LD E,C,D,0
        LD C,16
        JZ $+3
        LD C,D
        LD A,L ;note
ORNADR=$+1
        LD HL,0
        ADD HL,DE
        ADD A,(HL),A,A
      JNC $+3
      XOR A
        LD HL,FrTab
        LD E,A
        ADD HL,DE
        LD A,(HL)
        INC HL
        LD H,(HL),L,A
        LD D,(IX+1)
        LD E,(IX)   ;shift в сэмпле
        BIT 5,(IX+3)
        JZ NOdfrq
        PUSH HL
        LD L,(IY+#19)
        LD H,(IY+#1A)
        ADD HL,DE
        LD (IY+#19),L
        LD (IY+#1A),H ;shift
        LD DE,0
        POP HL
NOdfrq  ADD HL,DE
        LD E,(IY+#19)
        LD D,(IY+#1A) ;shift
        ADD HL,DE
        LD A,(IX+3),D,A
        AND #80
        JZ NOdvol
        LD A,D
        AND #40
        CPL 
        JZ $+4
        LD A,1
        ADD A,(IY+#18)
        CP 16
        JZ YEdvol
        INC A
        CP -17
        JZ $+3
YEdvol  DEC A
        LD (IY+#18),A
NOdvol  LD A,D
        AND #F
        RET 

;4
;Z=NOTE
XPPSCF
        SCF 
;2
;Z=SMP
XPP
        LD A,(CURX)
        ADC A,-7
        LD BC,#C04
        RET Z
       RET NC
        SUB 9
       RET C
        LD BC,#1609
       SCF 
        RET Z
        SUB 9
       RET C
        LD BC,#200E
       SCF 
        RET Z
       SUB 9
        RET 
;4
XPP2
        LD A,(CURX)
        LD C,1
        SUB 11+4
        RET C
        INC C
        SUB 5+4
        RET C
        INC C
        RET 
IT5
        JZ NOTEKYQ
        LD BC,TNOTEKE-TNOTEKY
        PUSH HL
        LD HL,TNOTEKY
        CPIR 
        POP HL
        LD D,C
        RET Z
        LD D,97