PROTRACKER372 PT5 371 H

From MSX MUSIC WIKI
Revision as of 23:24, 14 February 2020 by Kumokosi (talk | contribs) (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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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