PROTRACKER372 PTCMPV8 H

From MSX MUSIC WIKI
Revision as of 23:26, 14 February 2020 by Kumokosi (talk | contribs) (Created page with "PTCMPv8 C��·Б�В√Ц MAIN "",#C6 CMbuf DB -1 ;USED ORNS+SMPS DS 16+31 t1buf DB -1,-1,-1,-1,0 MACRO IYAi LD (IY),A INC IY...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

PTCMPv8 C��·Б�В√Ц MAIN "",#C6 CMbuf DB -1 ;USED ORNS+SMPS

       DS 16+31

t1buf DB -1,-1,-1,-1,0

       MACRO IYAi
       LD (IY),A
       INC IY
       ENDM 
       MACRO IYNi
       LD (IY),\0
       INC IY
       ENDM 
       MACRO IYLi
       LD (IY),L
       INC IY
       ENDM 
       MACRO IYHi
       LD (IY),H
       INC IY
       ENDM 

PatDisp

       LD A,(IX-0) ;-8

patdisp=$-1

       IYAi
       LD A,(IX-0) ;-7

patdisp1=$-1

       IYAi
       RET 

PUTIY

       PUSH AF
       CALL OUT7
       PUSH HL
       LD HL,(pnter)
       LD A,LY
       SUB mod
       LD (HL),A
       INC HL
       LD A,HY
       SBC A,'mod
       LD (HL),A
       INC HL
       LD (pnter),HL
       POP HL
       POP AF
       RET 

cMPILE

       LD (CMsmpU0),A
       LD (CMornU0),A
       XOR A
       LD (CMPcnt),A
       DI 
       CALL CMPIL
       CALL CMPso
       LD IY,iy
       EI 
      IFN process
       CALL CLOSWIN
       LD A,205,(MHEXFNT+2),A
       CALL OUT7
      ENDIF 

sngE=$+1

       LD HL,lce84
       LD DE,mod
      ;OR A
       SBC HL,DE
       EXD 
       RET 
1

CMPIL

      IFN process
       CALL PROCESS
      ENDIF 
      IF0 portres
      LD A,97
      LD (t1not),A
      LD (po2not),A
      ENDIF 
      ;DI
       LD HL,CMbuf+1
       LD DE,CMbuf+2
       LD BC,16+31-1
       LD (HL),B
       LDIR 
       LD DE,l5b00+1
       LD H,D,L,B
       LD C,250
       LD (HL),L
       LDIR 
       CALL OUT7
       LD HL,TPROTR
       LD DE,mod
       LD C,99
       LDIR 
       LD H,D,L,E
       INC DE
       LD (HL),B
      LD B,3 ;на всякий случ trks
       LDIR 
       LD A,(FRQn)
       LD (lce84),A
       LD A,(TEMPO)
       LD (lce85),A
       LD A,(LENG)
       LD (lce86),A
       LD B,A
       LD A,(LOOP)
       CP B
       JC $+3
       XOR A
       LD (lce87),A
       LD HL,TPOSS
       LD DE,lceea

CMPpos LD A,(HL)

       ADD A,A
       ADD A,(HL)
       LD (DE),A
       INC L
       INC DE
       DJNZ CMPpos
       LD A,-1
       LD (DE),A
       INC DE
       EXD 
       LD (sngCUR),HL
       LD DE,-mod
       ADD HL,DE
       LD (lce88),HL
       LD A,(LENG)
       LD C,A
       LD A,PATS-1

CMPmax LD B,C

       LD HL,TPOSS
       CP (HL)
       JZ CMPmaxQ
       INC L
       DJNZ $-4
       DEC A
       JP P,CMPmax

CMPmaxQ INC A

       LD (CMPlst),A
       LD B,A
      ADD A,A
      ADD A,B
      LD L,A,H,0
      ADD HL,HL
      ;LD DE,6
      ;LD H,D,L,D
      ;ADD HL,DE
      ;DJNZ $-1

sngCUR=$+1

       LD DE,0
       ADD HL,DE
       LD (sngE),HL
      PUSH DE
      LD B,3

CMP00 XOR A

     ;PUSH DE

CMP0

      IFN portres
       LD (CMporeA),A
      ENDIF 
       PUSH AF
      PUSH BC
       CALL CMPP
      POP BC
       POP AF
       INC A

CMPlst=$+1

       CP 0
      IFN process
       JZ CMP0Q
      ;PUSH AF
      PUSH BC
      BIT 0,B
    ;A<>0: bar увеличивается на 1
      CALL Z,PROBAR
      POP BC
      ;POP AF
      ;LD L,A
       JR CMP0
      ELSE 
       JNZ CMP0
      ENDIF 

CMP0Q

     ;POP HL
     ;INC HL,HL
     ;LD (sngCUR),HL
     ;EXD
      LD A,B
      ADD A,5
      LD B,A
      CP 13+5
      JC CMP00
      POP HL
      PUSH HL
      LD DE,BUF
      LD B,3
      LDIR 
      LD HL,BUF
      POP DE
      LD B,3

CMPRE60

      LD A,(CMPlst)
      PUSH DE

CMPRE61

      LDI 
      INC BC
      LDI 
      INC BC
      INC DE,DE,DE,DE
      DEC A
      JNZ CMPRE61
      POP DE
      INC DE,DE
      DJNZ CMPRE60
      IFN process
       JP CMPQ
      ELSE 
       RET 
      ENDIF 

CMPP

      PUSH BC
       LD L,A,H,'TPATSZ
       LD A,(HL),(CMPPlen),A
       LD A,L
      CALL PATtoBUF ;делает OUT7
       LD IY,(sngE)
      IFN portres
      LD A,97
      LD (t1not),A
      LD (po2not),A
      ENDIF 
      POP AF ;3/8/13
       CALL CMt
       LD (sngE),IY
       RET 

CMt

      LD IX,BUF
      LD C,A,B,0
      ADD IX,BC
       NEG 
       LD (patdisp),A
       INC A
       LD (patdisp1),A
      SUB -8+1
      JZ $+4
      LD A,DJt1Nn
      LD (CMisb-1),A
       LD (CMt2IY),IY  ;начало трека
       PUSH IX
       LD HL,t1buf+4
       XOR A
LD (CMoldT),A
       LD (CMoldN),A
      LD (HL),A
      DEC HL
       LD (HL),A
       DEC HL
      DEC A
       LD (HL),A
       DEC HL
       LD (HL),A
       DEC HL
       LD (HL),A

CMPPlen=$+1

       LD A,0
       INC A

CMt10 EXA

       LD A,(t1not)
       CP 96
       JNC $+5
       LD (po2not),A
       LD HL,t1buf
       LD A,(IX)
       LD C,A
       AND #7F
       JNZ CMt1NZ
       LD A,97,(t1not),A
       JP CMt1IG

CMt1NZ

       DEC A
       LD (t1not),A
      SLA C
       LD A,(IX+3)
       RRA 
       RRA 
       RRA 
       RRA 
       AND 31
       JZ $+3
       CP (HL)
       JZ CMt1IG
       LD (HL),A
       SUB -#D0
       LD (t1smp),A
       INC L,L
       LD A,(IX+3)
       AND #F
      ;JZ CMt1Nt1
      LD C,A
       LD A,(IX+4)
       AND #F0
      CP C
      JZ CMt1Nt1
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       CP (HL)
       JZ CMt1No1
       LD (HL),A
      INC C
      DEC C
      JNZ CMseFx
      LD A,(t1smp)
      IYAi
      LD A,(HL)
      DEC L
      SUB -#40
      JR CMt1G

CMseFx

       DEC L
       LD (HL),#F
       SUB -#F0
       IYAi
       LD A,(t1smp)
       SUB -#30
       ADD A,A
       JR CMt1G

CMt1No1

       DEC L
       LD A,C
       OR A
       JZ CMt1Nt2
       CP #F
       JNZ CMt1Yt
       CP (HL)
       JZ CMt1Nt2
       LD (HL),A
       XOR A
       JR $+3

CMt1Yt LD (HL),A

       SUB -#10
       IYAi
       SUB #10
      ;JZ CMt1NE1
      CALL NZ,PatDisp

CMt1NE1 LD A,(t1smp)

       SUB -#30
       ADD A,A
       IYAi
       JR CMt1INE

CMt1Nt1

       LD A,(t1smp)
       JR CMt1Yo2

t1smp=$+1 CMt1Nt2

       LD A,0

CMt1G IYAi

       DEC L

CMt1IG INC L

       LD A,(IX+3)
      ;INC L
       AND #F
      LD C,A
      JZ CMt1INE
      ;JZ CMt1INo
      ;DEC L
       CP #F
       JNZ $+5
       CP (HL)
       JZ CMt1INE
       LD (HL),A
       INC A
       AND #F
       SUB -#B0
       IYAi
       SUB #B0
      ;JZ CMt1INE ;B0
Bx,Henv,Lenv
      CALL NZ,PatDisp

CMt1INE INC L

       LD A,(IX+4)
       AND #F0
      CP C
      JZ CMt1INo
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       CP (HL)
       JZ CMt1INo
       LD (HL),A
       SUB -#40

CMt1Yo2 IYAi CMt1INo INC L

       LD A,(IX+4)
       AND #F
       JZ CMt1Nv
       CP (HL)
       JZ CMt1Nv
       LD (HL),A
       SUB 64
       IYAi

CMt1Nv INC L

      JR CMt1Nn

CMisb

       LD A,(IX-6)
       AND 31
       CP (HL)
       JZ CMt1Nn
       LD (HL),A
       SUB -#20
       IYAi

DJt1Nn=$-CMisb CMt1Nn LD A,(IX+1)

       AND #F0
       CALL NZ,CMcom
       CALL CMt1PP
       LD A,C

CMoldN=$+1

       CP 0
       JZ CMt1Nb
       IYNi #B1
       LD (CMoldN),A
       IYAi

CMt1Nb CALL CMnot CMt1Q LD H,'CMbuf

       LD A,(t1buf+2)
       LD L,A
       RLA 
       JC $+4
       LD (HL),-1
       LD A,(t1buf)
       ADD A,16
       JC $+5
       LD L,A
       LD (HL),-1
       EXA 
       OR A
       JP NZ,CMt10
       IYAi       ;#0=end of track
       POP IX
       PUSH IY
CMPcnt=$+1
      LD A,(CMPcnt)
       OR A
       JZ CMt2Q
      ;LD (CMt2L),A ;кол-во сделанных треков
      ;LD IX,lce88  ;начало треков
      ;LD E,(IX)
      ;LD D,(IX+1)
      ;LD HL,mod
      ;ADD HL,DE
      ;PUSH HL
      ;POP IX
      LD IX,(lce88)
      LD DE,mod
      ADD IX,DE
      ;LD IY,(CMt2IY)  ;начало текущего трека
       XOR A

CMt20 LD E,A

       ADD A,A
       LD L,A
       LD H,'l5b00
       LD C,(HL)
       INC L
       LD B,(HL) ;длина старого трека
       LD A,E
       EXA 
       LD L,(IX)
       INC IX
       LD H,(IX)
       LD (CMt2HL),HL ;смещ. старого трека
       INC IX
       LD DE,mod
       ADD HL,DE
      ;PUSH IY
      ;POP DE  ;начало текущего трека
      LD DE,(CMt2IY)  ;начало текущего трека
       LD A,B
       OR C
       JZ CMt2Ncp

CMt2cp LD A,(DE)

       CP (HL)
       JNZ CMt2Ncp
       INC HL,DE
       DEC BC
       LD A,B
       OR C
       JNZ CMt2cp

CMt2Ycp POP HL  ;бывший IY CMt2HL=$+1

       LD DE,0  ;смещ. старого трека (к-й такой же, как новый)
       LD HL,CMPcnt
       INC (HL)
       LD HL,(sngCUR)
       LD (HL),E
       INC HL
       LD (HL),D
       INC HL
   ;INC HL,HL,HL,HL
       LD (sngCUR),HL

CMt2IY=$+2

       LD IY,0  ;как было до компиляции трека
       RET 

CMt2Ncp

       BIT 7,D
      JNZ CMtNeMEM
      LD A,6
      OUT (-2),A
      JR CMt2Ycp ;память кончилась

CMtNeMEM

       EXA 
       INC A

CMPcnt=$+1

       CP 0  ;кол-во сделанных треков
       JNZ CMt20

CMt2Q LD HL,CMPcnt

       LD B,(HL)
       INC (HL) ;кол-во сделанных треков
       LD HL,(CMt2IY)
      PUSH HL
       LD DE,-mod
       ADD HL,DE
       EXD 
       LD HL,(sngCUR)
       LD (HL),E
       INC HL
       LD (HL),D
       INC HL
   ;INC HL,HL,HL,HL
       LD (sngCUR),HL
      POP DE  ;начало текущего трека
       POP HL  ;бывший IY=после конца трека
       PUSH HL
       POP IY
       OR A
       SBC HL,DE
       EXD 
       LD L,B ;кол-во сделанных треков
       ADD HL,HL
       LD H,'l5b00
       LD (HL),E
       INC L
       LD (HL),D ;длина трека
       RET 

CMPso

       LD HL,lce8a
       LD (pnter),HL
       LD IY,(sngE)
       XOR A

CMPs PUSH AF

       CALL CMPsmp
       POP AF
       INC A
       AND 31
       JNZ CMPs
       LD HL,lceca
       LD (pnter),HL

CMPo PUSH AF

       CALL CMPorn
       POP AF
       INC A
       AND 15
       JNZ CMPo
       LD (sngE),IY
       RET 

CMPsmp

       LD L,0
       PUSH AF
       ADD A,'SMPS
       LD H,A
       CALL OUT4
       LD DE,BUF
       PUSH DE
       POP IX
       LD BC,256
       LDIR 
       POP AF
       LD B,A
       ADD A,16
       LD H,'CMbuf
       LD L,A
       LD A,(HL)
       LD L,B
       ADD HL,HL
       LD H,'TSMPSZ
       OR A
       JNZ CMsmpU
       OR (HL)
       JNZ CMsmpU0
       INC A
       INC HL
       SUB (HL)
       DEC HL
       JNZ CMsmpU0
       LD A,(IX+2)
       XOR 64
       OR (IX)
       OR (IX+1)
       JNZ CMsmpU0
       LD A,(IX+3)
       CP 15

CMsmpU0 JZ pntii ; CMsmpU

       CALL PUTIY
       LD A,(HL)
       IYAi
       INC HL
       LD A,(HL)
       IYAi
       LD B,A

CMPS0 LD A,(IX+2)

       LD C,A
       AND 31
       RLCA 
       LD D,A
       LD A,C
       AND #20
       JZ $+4
       LD A,1
       OR D
      LD D,A
       LD A,(IX+3)
       AND #C0
      OR D
       IYAi
       LD A,C
       RLCA 
       AND #80
       LD D,A
       LD A,C
       RRCA 
       RRCA 
       RRCA 
       AND #10
       OR D
       LD D,A
       LD A,(IX+3)
       LD E,A
       AND #F
       OR D
       LD D,A
       LD A,E
       RLCA 
       AND #60
       OR D
       IYAi
       LD A,(IX)
       IYAi
       LD A,(IX+1)
       IYAi
       LD DE,4
       ADD IX,DE
       DJNZ CMPS0
       RET 

pnter=$+1 pntii

       LD HL,0
       INC HL,HL
       LD (pnter),HL
       RET 

CMPorn

       PUSH AF
       CALL HLOR3
       CALL OUT4
       LD DE,BUF
       LD BC,64
       LDIR 
       POP AF
       LD L,A,H,'CMbuf
       LD C,(HL)
       LD HL,TORNSZ
       ADD A,A
       ADD A,L
       LD L,A
       LD A,C
       OR A
       JNZ CMornU
       OR (HL)
       JNZ CMornU0
       INC A
       INC HL
       SUB (HL)
       DEC HL
       JNZ CMornU0
       LD A,(BUF)
       OR A

CMornU0 JZ pntii ; CMornU

       CALL PUTIY
       PUSH IY
       POP DE
      LDI 
      INC BC
       LD A,(HL)
       LD (DE),A
       INC DE
       LD C,A
       LD HL,BUF
       LDIR 
       PUSH DE
       POP IY
       RET 

t1not=$+1 CMnot

       LD A,0
      LD H,#D0
       CP 97
       JZ CMnotQ
      LD H,#C0
       CP 96
       JZ CMnotQ
       SUB #B0
      LD H,A

CMnotQ IYHi

       PUSH IX

CMnotIX=$+2

       LD IX,0

CMjp=$+1

       CALL CMret
       LD HL,CMret,(CMjp),HL
       POP IX

CMret RET CMcom

       LD C,16
       SUB C
       JZ CMglD
       SUB C
       JZ CMglU
       SUB C
       JZ CMpor
       SUB C
       JP Z,CMso
       SUB C
       JP Z,CMoo
       SUB C
       JP Z,CMvib
       SUB 48
       JZ CMenD
       SUB C
       JZ CMenU
       SUB C
       RET NZ
       LD A,(IX+2)
CMoldT=$+1
CP 0
RET Z
       OR A
       RET Z
       LD A,9
       LD HL,CMtm2
       JR CMenDQ

CMglD

       LD HL,CMgD2
       JR $+5

CMglU

       LD HL,CMgU2
       LD A,1
       JR CMenDQ

CMgD2

       LD A,(IX+1)
       AND #F
       LD H,A
       JR CMpoQ

CMgU2

       LD A,(IX+1)
       AND #F
       LD H,A
       SCF 
       JR CMpoQ

CMenU

       LD HL,CMgU2
       JR $+5

CMenD

       LD HL,CMgD2
       LD A,8

CMenDQ IYAi

       LD (CMjp),HL
       RET 

CMpor

      IFN portres
       LD A,(po2not)
       CP 96
       CALL NC,CMpores
       LD (po2not),A
      ENDIF 
       LD A,(t1not)
       CP 96
       RET NC

po2not=$+1

      CP 0
      RET Z
       LD A,2
       LD HL,CMpo2
       JR CMenDQ

CMpo2

       LD A,(IX+1)
       AND #F
       IYAi
       LD A,(po2not)
       LD HL,FrTab
       ADD A,A
      ADD A,L
       LD L,A
       LD E,(HL)
       INC L
       LD D,(HL)
       LD A,(t1not)
       ADD A,A
      ADD A,FrTab
       LD L,A
       LD A,(HL)
       INC L
       LD H,(HL)
       LD L,A
       SBC HL,DE
       PUSH AF
       CALL C,NEGHL
       POP AF
       IYLi

CMpoQ

       IYHi
       LD L,(IX+2),H,0
       CALL C,NEGHL
       IYLi
       IYHi
       RET 

CMoo

       LD A,4
       JR CMsoQ

CMso

       LD A,3

CMsoQ LD HL,CMof

       JR CMenDQ

CMvib

       LD A,5
       LD HL,CMv2
       JR CMenDQ

CMof

       LD A,(IX+2)
       AND 63
       IYAi
       RET 

CMtm2

       LD A,(IX+2)
LD (CMoldT),A
       IYAi
       RET 

CMv2

       LD A,(IX+2)
       LD C,A
       AND #F0
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       IYAi
       LD A,C
       AND #F
       IYAi
       RET 

CMt1PP

       LD (CMnotIX),IX
       EXA 
       LD B,A
       EXA 
       DJNZ CMisnot
       EXA 
       DEC A
       EXA 
       LD A,(CMoldN)
       DEC A
       JZ CMt1PPQ
       IYNi #B1
       IYNi 1

CMt1PPQ CALL CMnot

       POP HL
       JP CMt1Q
COUNT blS

CMisnot

       LD C,1

CMisno0 LD DE,18

       ADD IX,DE
       LD HL,t1buf+1
       LD A,(IX)
       AND #7F
       JNZ CMisnoQ
       LD A,(IX+1)
       AND #F0
       JNZ CMisnoQ
       INC L
       LD A,(IX+3)
       AND #F
      LD E,A
      JZ CMisn0x
      ;JZ CMisnNE
       CP #F
       JNZ CMisnoQ
       DEC L
       CP (HL)
       JNZ CMisnoQ

CMisn0x LD A,(IX+4)

       AND #F0
      CP E
      JZ CMisnNE
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       INC L
       CP (HL)
       JNZ CMisnoQ

CMisnNE LD A,(IX+4)

       INC L
       AND #F
       JZ $+5
       CP (HL)
       JNZ CMisnoQ
       INC L
       LD A,(CMisb-1)
       OR A
       JNZ CMisnNQ
       LD A,(IX-6)
       CP (HL)
       JNZ CMisnoQ

CMisnNQ INC C

       DJNZ CMisno0

CMisnoQ EXA

       SUB C
       EXA 
       RET 

LDPT3PP

       CALL 8026 ;CS=merge
       JNC PT3PP2
       CALL CLPATS
       CALL CLORNSM
       LD DE,TPATSZ+1
       LD BC,PATS-1
       LD H,D,L,B
       LD (HL),63
       LDIR 

PT3PP2

      ;DI
       CALL OUT7
       LD A,(lce84),(FRQn),A
       LD A,(lce85),(TEMPO),A
       LD A,(lce87),(LOOP),A
       LD H,'l5b00
       LD BC,PATS*256

Mdiv3 LD A,C

       ADD A,A,A,C
       LD L,A
       LD (HL),C
       INC C
       DJNZ Mdiv3
       CALL CLPOS
       LD A,(lce86),(LENG),A
       LD B,A
       LD IX,lceea
       LD H,'l5b00
       LD DE,TPOSS

PT3POS LD L,(IX)

       LD A,(HL),(DE),A
       INC E
       INC IX
       DJNZ PT3POS
      XOR A
      LD (DE),A
      INC E
      JNZ $-2
       LD HL,lce3f
       LD DE,TTITLE
       LD C,32
       LDIR 
       LD HL,lce63
       LD DE,TAUTHOR
       LD C,33;32 ;3.7 for TS
       LDIR 
       CALL PT3PATS
       CALL PT3SMP
       CALL PT3ORN
      JP GETPATLEN
      ;LD HL,(TPOSS),H,'TPATSZ
      ;LD A,(HL),(PATLEN),A
     ;IF process
     ;LD IY,iy
     ;ENDIF
      ;RET
      IFN process

PROCESS

       LD A,201,(MHEXFNT+2),A
       XOR A
       LD (PROBARX),A
       LD BC,mPROCES
       CALL WINDUM
       LD HL,tPROCES
       JP PRMENU

mPROCES DB 4,#C,#1C,#10,#47 tPROCES DB 6,#11,0,"PROCESSIN",#C7 CMPQ

       XOR A
2

PROBAR

       PUSH AF

PROBARY=$+1 PROBARX=$+2

       LD DE,1
       OR A     ;A=0: 100%
       LD B,1
       JNZ PROBAR0
       LD A,#2A ;?
       SUB D
       JC PROBARQ
      JZ PROBARQ
       LD B,A

PROBAR0 LD A,"0"

       CALL PRADD
       INC D
       DJNZ PROBAR0
       LD (PROBARY),DE

PROBARQ POP AF

       RET 
      ENDIF 
      IFN portres

CMpores CMporeA=$+1

       LD A,0
       LD HL,TPOSS
       LD B,(HL)
       INC L

cMpore0 CP (HL)

       JZ $+6
       LD B,(HL)
       INC L
       JNZ cMpore0
       LD A,B ;пред.паттерн
      CALL AtoPAT
       LD HL,(patdisp),H,0
       ADD HL,DE
       LD B,#40
       LD DE,18
       LD A,(HL)
       AND #7F
       DEC A
       LD C,A

cMpore1 LD A,(HL)

       AND #7F
       JZ cMpore2
       DEC A
       CP 96
       JZ $+3
       LD C,A

cMpore2 ADD HL,DE

       DJNZ cMpore1
       CALL OUT7
       LD A,C
       RET 
      ENDIF 

LDPT2PP

      LD A,32
      LD (ts48),A
       LD A,1,(FRQn),A
       CALL CLPATS
       CALL CLSMPS ;DICLos? CLORNSM?
       CALL CLORNS
       LD DE,TPATSZ+1
       LD BC,PATS-1
       LD H,D,L,B
       LD (HL),63
       LDIR 
       CALL PT2PP2
       XOR A
       LD (POS),A
       RET 

PT2PP2

       CALL OUT7
       LD HL,mod
       LD A,(HL),(TEMPO),A
       INC HL
       LD A,(HL),(LENG),A
       INC HL
       PUSH AF
       LD A,(HL),(LOOP),A
       LD HL,_ce86
       LD DE,TTITLE
       LD BC,30
       LDIR 
       LD A," "
       LD (DE),A
       INC DE
       LD (DE),A
       LD HL,TAUTHOR
       LD DE,TAUTHOR+1
       LD (HL),A
       LD C,31
       LDIR 
       POP AF
       LD C,A
       LD HL,_cea4
       LD DE,TPOSS
       LDIR 
      XOR A
      LD (DE),A
      INC E
      JNZ $-2
       CALL PT2SMP
       CALL PT2ORN
       CALL PT2PATS

GETPATLEN

       LD HL,(TPOSS),H,'TPATSZ
       LD A,(HL),(PATLEN),A
       RET 

PT3PATS

       CALL OUT7
       LD B,PATS-1

PT3P0 LD HL,TPOSS PT3P1 LD A,(HL)

       CP B
       JZ PT3P0Q
       INC L
       JNZ PT3P1
       DJNZ PT3P0

PT3P0Q LD A,B,(PT3Plst),A

       LD HL,(lce88)
       LD DE,mod
       ADD HL,DE
       XOR A

PT3P2 PUSH AF

      CALL KILLBUF
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
        LD A,3,(PT3Edsp),A
       LD IX,BUF+3
       CALL PT3PAPP
       POP HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
        LD A,8,(PT3Edsp),A
      ;LD (PT3putN+1),A ;noise ON
       LD IX,BUF+8
       CALL PT3PAPP
       POP HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
      ;XOR A
      ;LD (PT3putN+1),A ;noise OFF
        LD A,13,(PT3Edsp),A
       LD IX,BUF+13
       CALL PT3PAPP
       POP HL
       POP AF
D=patlen-1
      CALL PATfrBUF

PT3Plst=$+1

       CP 0
       RET Z
       INC A
       JR PT3P2
на 99% совпадает с PT3PATS

PT2PATS

       CALL OUT7
       LD B,31

PT2P0 LD HL,TPOSS PT2P1 LD A,(HL)

       CP B
       JZ PT2P0Q
       INC L
       JNZ PT2P1
       DJNZ PT2P0

PT2P0Q LD A,B,(PT2Plst),A

       LD HL,(_ce84)
       LD DE,mod
       ADD HL,DE
       XOR A

PT2P2 PUSH AF

      CALL KILLBUF
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
       LD A,3
       LD IX,BUF+3
       CALL PT2PAPP
       POP HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
       LD A,8
       LD IX,BUF+8
       CALL PT2PAPP
       POP HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       PUSH HL
       LD A,13
       LD IX,BUF+13
       CALL PT2PAPP
       POP HL
       POP AF
      CALL PATfrBUF

PT2Plst=$+1

       CP 0
       RET Z
       INC A
       JR PT2P2

PT3PAPP

       EXD 
       LD DE,mod
       ADD HL,DE
       XOR A
       LD (PT3orN),A
       LD (PT3n),A
       LD D,A

PT3PAP0 LD BC,#1020

       LD A,(HL)
       INC HL
       OR A
       RET Z
       ADD A,B
       JC PT3orn
       ADD A,C
       JC PT3smp
       ADD A,B
       JP C,PT3vol
       ADD A,B
       JP C,PT3Et
       ADD A,96
       JC PT3note
       ADD A,B
       JP C,PT3newO
       ADD A,C
       JP C,PT3nois
       ADD A,B
       JP C,PT3Etyp
       ADD A,B
       JP PT3com

PT3blN

       LD A,(HL)
       INC HL
       DEC A
       LD (PT3bls),A
       JR PT3PAP0

PT3bls=$+1 PT3blQ

       LD A,0
       OR A
       JZ PT3PAP0
       LD E,A
       LD BC,18

PT3bl0 INC D

       CALL PT3putN
       ADD IX,BC
       DEC E
       JNZ PT3bl0
       JR PT3PAP0

PT3note

       INC D
       INC A
       LD B,A
       LD A,(IX)
       AND #80
       OR B
       LD (IX),A
       CALL PT3putN
       CALL PT3cU
       LD BC,18
       ADD IX,BC
       JR PT3blQ

PT3orn

Fx,smp*2
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       LD (PT3orN),A
       OR (IX+4)
       LD (IX+4),A
       LD A,#F
      ;LD (PT3typ),A
       LD (IX+3),A

PT3oQ LD A,(HL)

       INC HL
       RLCA 
       RLCA 
       LD B,A
       AND #80
       LD (IX),A
       LD A,B
       RLA 
       OR (IX+3)
       LD (IX+3),A
       JP PT3PAP0

PT3smp

       JZ PT3bl ;end of note
       CP 16
       JC $+6
       SET 7,(IX)
       AND #F
       RLCA 
       RLCA 
       RLCA 
       RLCA 
       OR (IX+3)
       LD (IX+3),A
       JP PT3PAP0

PT3bl

       INC D
       CALL PT3putN
       CALL PT3cU
       LD BC,18
       ADD IX,BC
       JP PT3blQ

PT3vol

       JZ PT3res
       OR (IX+4)
       LD (IX+4),A
       JP PT3PAP0

PT3res

       LD A,(IX)
       AND #80
       OR 97
       LD (IX),A
       CALL PT3putN
       CALL PT3cU
       LD BC,18
       ADD IX,BC
       INC D
       JP PT3blQ

PT3Et

       JNZ PT3nEof
B0=envoff
       LD A,#F
      ;LD (PT3typ),A
       OR (IX+3)
       LD (IX+3),A
       JP PT3eQ

PT3nEof DEC A

       JP Z,PT3blN
      ;LD (PT3typ),A
       LD B,A
       LD A,(IX+3)
       AND #F0
       OR B
       LD (IX+3),A
       CALL PT3env

PT3orN=$+1 PT3eQ LD A,0

       OR (IX+4)
       LD (IX+4),A
       JP PT3PAP0

PT3env

       PUSH HL
       PUSH IX
       POP HL

PT3Edsp=$+1

       LD BC,0
       OR A
       SBC HL,BC
       LD B,H
       LD C,L
       POP HL
       LD A,(HL)
       INC HL
       LD (BC),A
       INC BC
       LD A,(HL)
       INC HL
       LD (BC),A
       RET 

PT3newO

       RLCA 
       RLCA 
       RLCA 
       RLCA 
       LD (PT3orN),A
       LD B,A
       JNZ PT3nXF0X
       LD A,(IX+3)
       AND #F
       JNZ PT3nXF0X
       LD A,(IX+3)
       OR #F
       LD (IX+3),A

PT3nXF0X

       LD A,(IX+4)
       AND #F
       OR B
       LD (IX+4),A
PT3typ=$+1
      ;LD A,0
      ;OR (IX+3)
      ;LD (IX+3),A
       JP PT3PAP0

PT3nois

       LD (PT3n),A
       JP PT3PAP0
4

PT3putN

      ;LD A,0
      ;OR A
      ;RET Z
      LD A,LX ;проверяем channel=B
      RRA 
      RET C
       LD (IX-6),0

PT3n=$-1

       RET 

PT3Etyp

       JNZ PT3EnO
       LD A,#F
      ;LD (PT3typ),A
       OR (IX+3)
       LD (IX+3),A
       JR PT3EtyQ

PT3EnO ;LD (PT3typ),A

       OR (IX+3)
       LD (IX+3),A
       CALL PT3env

PT3EtyQ LD A,(PT3orN)

       OR (IX+4)
       LD (IX+4),A
       JP PT3oQ

PT3jp=$+1 PT3cU

       CALL PT3ret
       PUSH HL
       LD HL,PT3ret
       LD (PT3jp),HL
       POP HL

PT3ret RET PT3com

       PUSH HL
       DEC A
       LD HL,PT3glis
       JZ PT3cQ
       DEC A
       LD HL,PT3port
       JZ PT3cQ
       DEC A
       LD HL,PT3so
       JZ PT3cQ
       DEC A
       LD HL,PT3oo
       JZ PT3cQ
       DEC A
       LD HL,PT3vib
       JZ PT3cQ
       SUB 3
       LD HL,PT3egl
       JZ $+5
       LD HL,PT3tmp

PT3cQ LD (PT3jp),HL

       POP HL
       JP PT3PAP0

PT3tmp

       LD A,(HL)
       INC HL
       LD (IX+2),A
       LD (IX+1),#B0
       RET 

PT3port

       LD A,(HL)
       OR #30
       LD (IX+1),A
       INC HL,HL,HL
       PUSH DE
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       EXD 
       LD A,H
       OR A
      ;JP P,$+6
       CALL M,NEGHL

XIX2EPOP

       EXD 
      IFN goodpak
       LD (IX+2),E
       POP DE
       RET 
      ELSE 
       LD A,E
       POP DE

IX2A LD (IX+2),A

       RET 
      ENDIF 

PT3so

       LD A,(HL)
       INC HL
       LD (IX+1),#40
      IFN goodpak
       LD (IX+2),A
       RET 
      ELSE 
       JR IX2A
      ENDIF 

PT3oo

       LD A,(HL)
       INC HL
       LD (IX+1),#50
      IFN goodpak
       LD (IX+2),A
       RET 
      ELSE 
       JR IX2A
      ENDIF 

PT3vib

       LD A,(HL)
       RRCA 
       RRCA 
       RRCA 
       RRCA 
       INC HL
       OR (HL)
       INC HL
       LD (IX+1),#60
      IFN goodpak
       LD (IX+2),A
       RET 
      ELSE 
       JR IX2A
      ENDIF 

PT3glis

       PUSH DE
       LD A,(HL)
       OR #10
       LD C,A
       INC HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       EXD 
      ;LD A,H
      ;OR A
       LD (IX+1),C
      BIT 7,H
      JZ PT3gl1
      ;JP P,PT3gl1
       CALL NEGHL
       LD A,C
       AND #F
       OR #20
       LD (IX+1),A

PT3gl1 EXD

       LD (IX+2),E
       POP DE
       RET 

PT3egl

       PUSH DE
       LD A,(HL)
       OR #90
       LD C,A
       INC HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       EXD 
      ;LD A,H
      ;OR A
       LD (IX+1),C
      BIT 7,H
      JZ PT3egl9
      ;JP P,PT3egl9
       CALL NEGHL
       LD A,C
       AND #F
       OR #A0
       LD (IX+1),A

PT3egl9

      IFN goodpak
       EXD 
       LD (IX+2),E
       POP DE
       RET 
      ELSE 
       JR XIX2EPOP
      ENDIF 

PT2orn

       RLCA 
       RLCA 
       RLCA 
       RLCA 
       LD (PT2orN),A
       LD B,A
       LD A,(IX+4)
       AND #F
       OR B
       LD (IX+4),A

PT2typ=$+1

       LD A,0
       OR (IX+3)
       LD (IX+3),A
       JR PT2PAP0

PT2blN

       LD (PT2bls),A
       JR PT2PAP0

PT2vol

       OR (IX+4)
       LD (IX+4),A
       JR PT2PAP0

PT2tmp

       LD (IX+1),#B0
       LD A,(HL)
       JR IX2P2P

PT2port

       LD (IX+1),#31
       LD A,(HL)
       INC HL
       INC HL
       OR A
       JP P,IX2P2P
       NEG 
       JR IX2P2P

PT2glis

       LD (IX+1),#11
       LD A,(HL)
       BIT 7,A
       JZ $+8
       LD (IX+1),#21
       NEG 

IX2P2P LD (IX+2),A

       INC HL
       JR PT2PAP0

PT2PAPP

       LD (PT2Edsp),A
       EXD 
       LD DE,mod
       ADD HL,DE
       XOR A
       LD (PT2typ),A
       LD (PT2orN),A
       LD D,A

PT2PAP0 LD C,16

       LD A,(HL)
       INC HL
       OR A
       RET Z
       ADD A,32
       JC PT2smp
       ADD A,96
       JC PT2note
       ADD A,C
       JP C,PT2env
       ADD A,C
       JC PT2orn
       ADD A,64
       JC PT2blN
       ADD A,C
       JC PT2vol
       INC A
       JZ PT2tmp
       INC A
       JZ PT2glis
       INC A
       JZ PT2port
       INC A
       JZ PT2PAP0
       LD A,(HL)
       INC HL
       PUSH HL
       LD BC,(PT2Edsp)
       DEC BC,BC
       PUSH IX
       POP HL
       SBC HL,BC

PT2NOI LD (HL),A ;noise

      LD BC,18
      ADD HL,BC
      LD BC,BUF+#480
      SBC HL,BC
      ADD HL,BC
      JC PT2NOI
       POP HL
       JR PT2PAP0

PT2smp

       JZ PT2res
       CP 16
       JC $+6
       SET 7,(IX)
       AND #F
       RLCA 
       RLCA 
       RLCA 
       RLCA 
       OR (IX+3)
       LD (IX+3),A
       JR PT2PAP0

PT2res

       LD A,96

PT2note INC A

       LD B,A
       LD A,(IX)
       AND #80
       OR B
       LD (IX),A

PT2bl INC D

       LD BC,18
       ADD IX,BC

PT2bls=$+1

       LD A,0
       OR A
       JZ PT2PAP0
       INC D
       ADD IX,BC
       DEC A
       JNZ $-4
       JR PT2PAP0

PT2env

       JZ PT2bl
       CP #F
       LD (PT2typ),A
       JNZ PT2norn
       OR (IX+3)
       LD (IX+3),A
       JR PT2eQ

PT2norn OR (IX+3)

       LD (IX+3),A
       PUSH HL
       PUSH IX
       POP HL

PT2Edsp=$+1

       LD BC,0
       OR A
       SBC HL,BC
       LD B,H,C,L
       INC BC
       POP HL
       LD A,(HL)
       INC HL
       LD (BC),A
       DEC BC
       LD A,(HL)
       INC HL
       LD (BC),A

PT2orN=$+1 PT2eQ LD A,0

      OR (IX+4)
      LD (IX+4),A
       JP PT2PAP0

PT3SMP

       LD A,1
       LD HL,lce8a+2

PT3SMP0 PUSH AF

       CALL OUT7
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
      EX (SP),HL
      PUSH HL ;AF
       LD A,E
       OR D
       JZ PT3SMPQ
       LD HL,mod
       ADD HL,DE
       LD DE,BUF
       PUSH DE
       POP IX
       LD B,2;BC,258
       LDIR 
        POP AF
        PUSH AF
       ADD A,A
       LD L,A,H,'TSMPSZ
       LD A,(IX),(HL),A
       INC L
       LD B,(IX+1),(HL),B
        POP AF
        PUSH AF
       ADD A,'SMPS
       LD H,A
       XOR A
       LD L,A
    CP B
    JZ PT3SMPQ
       CALL OUT4

PT3SMP1 LD A,(IX+2+2),(HL),A

       INC HL
       LD A,(IX+3+2),(HL),A
       INC HL
       LD A,(IX+0+2),D,A
       AND #3F
       RRA ;SRL A
       JNC $+4
       OR #20
       LD C,A
       LD A,(IX+1+2),E,A
       AND #F
       INC HL
       LD (HL),A
       LD A,D;(IX+0+2)
       AND #C0
       OR (HL)
       LD (HL),A
       LD A,E
       AND #80
       RRCA 
       OR C
       LD C,A
       LD A,E
       AND #10
       RLCA 
       RLCA 
       RLCA 
       OR C
       DEC HL
       LD (HL),A
       INC HL
       LD A,E
       RRCA 
       AND #30
       OR (HL)
       LD (HL),A
       INC HL
       LD DE,4
       ADD IX,DE
       DJNZ PT3SMP1

PT3SMPQ POP AF

      POP HL
       INC A
       AND 31
       JNZ PT3SMP0
       RET 

PT2SMP

       LD A,1
       LD HL,_ce26

PT2SMP0 PUSH AF

       CALL OUT7
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
      EX (SP),HL
      PUSH HL ;AF
       LD A,E
       OR D
       JZ PT2SMPQ
       LD HL,mod
       ADD HL,DE
       LD DE,BUF
       PUSH DE
       POP IX
       LD B,2;BC,#C6
       LDIR 
        POP AF
        PUSH AF
       ADD A,A
       LD L,A,H,'TSMPSZ
       LD A,(IX+1),(HL),A
       INC L
       LD B,(IX),(HL),B
        POP AF
        PUSH AF
       ADD A,'SMPS
       LD H,A
       XOR A
       LD L,A
       CALL OUT4

PT2SMP1 LD A,(IX+0+2)

      LD C,A
       RRCA 
       RRCA 
       RRCA 
       AND 31
       INC HL,HL
       LD (HL),A
      BIT 1,C;(IX+0+2)
       JZ $+4
       SET 7,(HL)
       LD A,(IX+1+2)
       ;AND #F0
       ;RRCA
       ;RRCA
       ;RRCA
       ;RRCA
       INC HL
       LD (HL),A
      XOR A
      RRD 
       ;LD A,(IX+1+2)
       ;AND #F
      LD D,A ;(IX+1+2)&#0F
       DEC HL
      BIT 0,C;(IX+0+2)
       JZ PT2SMPN
       LD A,(HL)
       OR #40
       AND #E0
       LD (HL),A

PT2SMPN LD E,(IX+2+2)

      ;LD A,(IX+1+2)
      ;AND #F
      ;LD H,A
      BIT 2,C;(IX+0+2)
       EXD 
       CALL Z,NEGHL
       EXD 
       DEC HL,HL
       LD (HL),E
       INC HL
       LD (HL),D
       LD DE,3
       ADD IX,DE
       ADD HL,DE
       DJNZ PT2SMP1

PT2SMPQ POP AF

      POP HL
       INC A
       AND 31
       JNZ PT2SMP0
       RET 

PT2ORN

       LD HL,_ce66
       SCF 
       JR PT23ORN

PT3ORN

       LD HL,lceca+2
       OR A

PT23ORN LD A,1 PT3ORN0 PUSH AF

       CALL OUT7
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
      EX (SP),HL
      PUSH HL ;AF
       LD A,D
       OR E
       JZ PT3ORNQ
       LD HL,mod
       ADD HL,DE
       LD DE,BUF
       PUSH DE
       LD B,2;BC,66
       LDIR 
       POP DE
        POP AF
        PUSH AF
       CALL HLOR3
       EXD 
       LD C,A,B,'TORNSZ
       CALL OUT4
        POP AF
        PUSH AF
        JNC PT3ORN3
       INC L
       LD A,(HL),(BC),A
       DEC L
       LD A,(HL)
       INC L
       JR $+6

PT3ORN3 LD A,(HL),(BC),A

        INC L
        LD A,(HL)
       INC C
       LD (BC),A
       INC L
       LD C,A,B,0
       LDIR 

PT3ORNQ POP AF

      POP HL
       INC A
       BIT 4,A
       JZ PT3ORN0
       RET