Difference between revisions of "PROTRACKER372 PTCMPV8 H"

From MSX MUSIC WIKI
Jump to: navigation, search
(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...")
(Tags: Mobile edit, Mobile web edit)
 
(Tags: Mobile edit, Mobile web edit)
 
Line 1: Line 1:
PTCMPv8 C��·Б�В√Ц        MAIN "",#C6
+
PTCMPv8 C��·Б�В√Ц         
CMbuf  DB -1 ;USED ORNS+SMPS
+
MAIN "",#C6
        DS 16+31
+
CMbuf  DB -1 ;USED ORNS+SMPS
t1buf  DB -1,-1,-1,-1,0
+
        DS 16+31
 
+
t1buf  DB -1,-1,-1,-1,0
        MACRO IYAi
+
        LD (IY),A
+
        MACRO IYAi
        INC IY
+
        LD (IY),A
        ENDM  
+
        INC IY
 
+
        ENDM  
        MACRO IYNi
+
        LD (IY),\0
+
        MACRO IYNi
        INC IY
+
        LD (IY),\0
        ENDM  
+
        INC IY
 
+
        ENDM  
        MACRO IYLi
+
        LD (IY),L
+
        MACRO IYLi
        INC IY
+
        LD (IY),L
        ENDM  
+
        INC IY
 
+
        ENDM  
        MACRO IYHi
+
        LD (IY),H
+
        MACRO IYHi
        INC IY
+
        LD (IY),H
        ENDM  
+
        INC IY
PatDisp
+
        ENDM  
        LD A,(IX-0) ;-8
+
PatDisp
patdisp=$-1
+
        LD A,(IX-0) ;-8
        IYAi
+
patdisp=$-1
        LD A,(IX-0) ;-7
+
        IYAi
patdisp1=$-1
+
        LD A,(IX-0) ;-7
         IYAi
+
patdisp1=$-1
         RET  
+
        IYAi
PUTIY
+
        RET
         PUSH AF
+
PUTIY
         CALL OUT7
+
        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
 
         PUSH HL
        LD HL,(pnter)
+
         LD DE,BUF
        LD A,LY
+
         LD B,3
        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  
 
         LDIR  
        LD DE,l5b00+1
+
         LD HL,BUF
        LD H,D,L,B
+
         POP DE
        LD C,250
+
         LD B,3
        LD (HL),L
+
CMPRE60
        LDIR
+
         LD A,(CMPlst)
        CALL OUT7
+
         PUSH DE
         LD HL,TPROTR
+
  CMPRE61
        LD DE,mod
+
         LDI
        LD C,99
+
         INC BC
        LDIR
+
         LDI
        LD H,D,L,E
+
         INC BC
         INC DE
+
         INC DE,DE,DE,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
 
         DEC A
         JP P,CMPmax
+
         JNZ CMPRE61
CMPmaxQ INC A
+
        POP DE
        LD (CMPlst),A
+
        INC DE,DE
        LD B,A
+
        DJNZ CMPRE60
      ADD A,A
+
        IFN process
      ADD A,B
+
        JP CMPQ
      LD L,A,H,0
+
        ELSE  
      ADD HL,HL
+
        RET  
      ;LD DE,6
+
        ENDIF  
      ;LD H,D,L,D
+
CMPP
      ;ADD HL,DE
+
        PUSH BC
      ;DJNZ $-1
+
        LD L,A,H,'TPATSZ
sngCUR=$+1
+
        LD A,(HL),(CMPPlen),A
        LD DE,0
+
        LD A,L
        ADD HL,DE
+
        CALL PATtoBUF ;делает OUT7
        LD (sngE),HL
+
        LD IY,(sngE)
      PUSH DE
+
        IFN portres
      LD B,3
+
        LD A,97
CMP00  XOR A
+
        LD (t1not),A
      ;PUSH DE
+
        LD (po2not),A
CMP0
+
        ENDIF  
      IFN portres
+
        POP AF ;3/8/13
        LD (CMporeA),A
+
        CALL CMt
      ENDIF
+
        LD (sngE),IY
        PUSH AF
+
        RET  
      PUSH BC
+
CMt
        CALL CMPP
+
        LD IX,BUF
      POP BC
+
        LD C,A,B,0
        POP AF
+
        ADD IX,BC
        INC A
+
        NEG  
CMPlst=$+1
+
        LD (patdisp),A
        CP 0
+
        INC A
      IFN process
+
        LD (patdisp1),A
        JZ CMP0Q
+
        SUB -8+1
      ;PUSH AF
+
        JZ $+4
      PUSH BC
+
        LD A,DJt1Nn
      BIT 0,B
+
        LD (CMisb-1),A
    ;A<>0: bar увеличивается на 1
+
      CALL Z,PROBAR
+
        LD (CMt2IY),IY  ;начало трека
      POP BC
+
        PUSH IX
      ;POP AF
+
        LD HL,t1buf+4
      ;LD L,A
+
        XOR A
        JR CMP0
+
;LD (CMoldT),A
      ELSE
+
        LD (CMoldN),A
        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
 
         LD (HL),A
 
         DEC HL
 
         DEC HL
      DEC A
+
        LD (HL),A
        LD (HL),A
+
        DEC HL
        DEC HL
+
        DEC A
        LD (HL),A
+
        LD (HL),A
        DEC HL
+
        DEC HL
        LD (HL),A
+
        LD (HL),A
CMPPlen=$+1
+
        DEC HL
        LD A,0
+
        LD (HL),A
        INC A
+
CMPPlen=$+1
CMt10  EXA  
+
        LD A,0
        LD A,(t1not)
+
        INC A
        CP 96
+
CMt10  EXA  
        JNC $+5
+
        LD A,(t1not)
        LD (po2not),A
+
        CP 96
        LD HL,t1buf
+
        JNC $+5
         LD A,(IX)
+
        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 C,A
        AND #7F
+
        LD A,(IX+4)
        JNZ CMt1NZ
+
        AND #F0
        LD A,97,(t1not),A
+
        CP C
        JP CMt1IG
+
        JZ CMt1Nt1
CMt1NZ
+
        RRCA  
        DEC A
+
        RRCA  
        LD (t1not),A
+
        RRCA  
      SLA C
+
        RRCA  
        LD A,(IX+3)
+
        CP (HL)
        RRA
+
        JZ CMt1No1
        RRA
+
        LD (HL),A
        RRA
+
        INC C
        RRA
+
        DEC C
        AND 31
+
        JNZ CMseFx
        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)
 
         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
 
         IYAi
        SUB #10
+
         LD A,(HL)
      ;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
 
         DEC L
CMt1IG INC L
+
        SUB -#40
        LD A,(IX+3)
+
        JR CMt1G
      ;INC L
+
  CMseFx
         AND #F
+
        DEC L
      LD C,A
+
        LD (HL),#F
      JZ CMt1INE
+
        SUB -#F0
      ;JZ CMt1INo
+
        IYAi
      ;DEC L
+
        LD A,(t1smp)
         CP #F
+
        SUB -#30
         JNZ $+5
+
        ADD A,A
        CP (HL)
+
        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 CMt1INE
         LD (HL),A
+
         ;JZ CMt1INo
        INC A
+
        ;DEC L
        AND #F
+
        CP #F
        SUB -#B0
+
        JNZ $+5
        IYAi
+
        CP (HL)
        SUB #B0
+
        JZ CMt1INE
      ;JZ CMt1INE ;B0
+
        LD (HL),A
;Bx,Henv,Lenv
+
        INC A
      CALL NZ,PatDisp
+
        AND #F
CMt1INE INC L
+
        SUB -#B0
        LD A,(IX+4)
+
        IYAi
        AND #F0
+
        SUB #B0
      CP C
+
        ;JZ CMt1INE ;B0
      JZ CMt1INo
+
;Bx,Henv,Lenv
        RRCA
+
        CALL NZ,PatDisp
        RRCA
+
CMt1INE INC L
        RRCA
+
        LD A,(IX+4)
        RRCA
+
        AND #F0
        CP (HL)
+
        CP C
 
         JZ CMt1INo
 
         JZ CMt1INo
        LD (HL),A
+
        RRCA
        SUB -#40
+
        RRCA
CMt1Yo2 IYAi
+
        RRCA
CMt1INo INC L
+
        RRCA
        LD A,(IX+4)
+
        CP (HL)
        AND #F
+
        JZ CMt1INo
        JZ CMt1Nv
+
        LD (HL),A
        CP (HL)
+
        SUB -#40
        JZ CMt1Nv
+
CMt1Yo2 IYAi
        LD (HL),A
+
CMt1INo INC L
        SUB 64
+
        LD A,(IX+4)
        IYAi
+
        AND #F
CMt1Nv  INC L
+
        JZ CMt1Nv
      JR CMt1Nn
+
        CP (HL)
CMisb
+
        JZ CMt1Nv
        LD A,(IX-6)
+
        LD (HL),A
        AND 31
+
        SUB 64
        CP (HL)
+
        IYAi
        JZ CMt1Nn
+
CMt1Nv  INC L
        LD (HL),A
+
        JR CMt1Nn
        SUB -#20
+
CMisb
        IYAi
+
        LD A,(IX-6)
DJt1Nn=$-CMisb
+
        AND 31
CMt1Nn  LD A,(IX+1)
+
        CP (HL)
        AND #F0
+
        JZ CMt1Nn
        CALL NZ,CMcom
+
        LD (HL),A
        CALL CMt1PP
+
        SUB -#20
        LD A,C
+
        IYAi
CMoldN=$+1
+
DJt1Nn=$-CMisb
        CP 0
+
CMt1Nn  LD A,(IX+1)
        JZ CMt1Nb
+
        AND #F0
        IYNi #B1
+
        CALL NZ,CMcom
        LD (CMoldN),A
+
        CALL CMt1PP
        IYAi
+
        LD A,C
CMt1Nb  CALL CMnot
+
CMoldN=$+1
CMt1Q  LD H,'CMbuf
+
        CP 0
        LD A,(t1buf+2)
+
        JZ CMt1Nb
        LD L,A
+
        IYNi #B1
        RLA  
+
        LD (CMoldN),A
        JC $+4
+
        IYAi
        LD (HL),-1
+
CMt1Nb  CALL CMnot
        LD A,(t1buf)
+
CMt1Q  LD H,'CMbuf
        ADD A,16
+
        LD A,(t1buf+2)
        JC $+5
+
        LD L,A
        LD L,A
+
        RLA  
        LD (HL),-1
+
        JC $+4
        EXA  
+
        LD (HL),-1
        OR A
+
        LD A,(t1buf)
        JP NZ,CMt10
+
        ADD A,16
        IYAi      ;#0=end of track
+
        JC $+5
        POP IX
+
        LD L,A
 
+
        LD (HL),-1
        PUSH IY
+
        EXA  
;CMPcnt=$+1
+
        OR A
      LD A,(CMPcnt)
+
        JP NZ,CMt10
        OR A
+
        IYAi      ;#0=end of track
        JZ CMt2Q
+
        POP IX
      ;LD (CMt2L),A ;кол-во сделанных треков
+
      ;LD IX,lce88  ;начало треков
+
        PUSH IY
      ;LD E,(IX)
+
;CMPcnt=$+1
      ;LD D,(IX+1)
+
        LD A,(CMPcnt)
      ;LD HL,mod
+
        OR A
      ;ADD HL,DE
+
        JZ CMt2Q
      ;PUSH HL
+
        ;LD (CMt2L),A ;кол-во сделанных треков
      ;POP IX
+
        ;LD IX,lce88  ;начало треков
      LD IX,(lce88)
+
        ;LD E,(IX)
      LD DE,mod
+
        ;LD D,(IX+1)
      ADD IX,DE
+
        ;LD HL,mod
      ;LD IY,(CMt2IY)  ;начало текущего трека
+
        ;ADD HL,DE
        XOR A
+
        ;PUSH HL
CMt20  LD E,A
+
        ;POP IX
        ADD A,A
+
        LD IX,(lce88)
        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
 
         LD DE,mod
         ADD HL,DE
+
         ADD IX,DE
      ;PUSH IY
+
        ;LD IY,(CMt2IY)  ;начало текущего трека
      ;POP DE  ;начало текущего трека
+
        XOR A
      LD DE,(CMt2IY)  ;начало текущего трека
+
CMt20  LD E,A
        LD A,B
+
        ADD A,A
        OR C
+
        LD L,A
        JZ CMt2Ncp
+
        LD H,'l5b00
CMt2cp  LD A,(DE)
+
        LD C,(HL)
        CP (HL)
+
        INC L
        JNZ CMt2Ncp
+
        LD B,(HL) ;длина старого трека
        INC HL,DE
+
        LD A,E
        DEC BC
+
        EXA
        LD A,B
+
        LD L,(IX)
        OR C
+
        INC IX
        JNZ CMt2cp
+
        LD H,(IX)
CMt2Ycp POP HL  ;бывший IY
+
        LD (CMt2HL),HL ;смещ. старого трека
CMt2HL=$+1
+
        INC IX
        LD DE,0  ;смещ. старого трека (к-й такой же, как новый)
+
        LD DE,mod
        LD HL,CMPcnt
+
        ADD HL,DE
        INC (HL)
+
        ;PUSH IY
        LD HL,(sngCUR)
+
        ;POP DE  ;начало текущего трека
        LD (HL),E
+
        LD DE,(CMt2IY)  ;начало текущего трека
        INC HL
+
        LD A,B
        LD (HL),D
+
        OR C
        INC HL
+
        JZ CMt2Ncp
    ;INC HL,HL,HL,HL
+
CMt2cp  LD A,(DE)
        LD (sngCUR),HL
+
        CP (HL)
CMt2IY=$+2
+
        JNZ CMt2Ncp
        LD IY,0  ;как было до компиляции трека
+
        INC HL,DE
        RET  
+
        DEC BC
CMt2Ncp
+
        LD A,B
        BIT 7,D
+
        OR C
      JNZ CMtNeMEM
+
        JNZ CMt2cp
      LD A,6
+
CMt2Ycp POP HL  ;бывший IY
      OUT (-2),A
+
CMt2HL=$+1
      JR CMt2Ycp ;память кончилась
+
        LD DE,0  ;смещ. старого трека (к-й такой же, как новый)
CMtNeMEM
+
        LD HL,CMPcnt
        EXA  
+
        INC (HL)
        INC A
+
        LD HL,(sngCUR)
CMPcnt=$+1
+
        LD (HL),E
        CP 0  ;кол-во сделанных треков
+
        INC HL
        JNZ CMt20
+
        LD (HL),D
CMt2Q  LD HL,CMPcnt
+
        INC HL
        LD B,(HL)
+
    ;INC HL,HL,HL,HL
        INC (HL) ;кол-во сделанных треков
+
        LD (sngCUR),HL
        LD HL,(CMt2IY)
+
CMt2IY=$+2
      PUSH HL
+
        LD IY,0  ;как было до компиляции трека
        LD DE,-mod
+
        RET  
        ADD HL,DE
+
CMt2Ncp
        EXD
+
        BIT 7,D
        LD HL,(sngCUR)
+
        JNZ CMtNeMEM
        LD (HL),E
+
        LD A,6
        INC HL
+
        OUT (-2),A
        LD (HL),D
+
        JR CMt2Ycp ;память кончилась
        INC HL
+
CMtNeMEM
    ;INC HL,HL,HL,HL
+
        EXA  
        LD (sngCUR),HL
+
        INC A
      POP DE  ;начало текущего трека
+
CMPcnt=$+1
        POP HL  ;бывший IY=после конца трека
+
        CP 0  ;кол-во сделанных треков
 +
        JNZ CMt20
 +
CMt2Q  LD HL,CMPcnt
 +
        LD B,(HL)
 +
        INC (HL) ;кол-во сделанных треков
 +
        LD HL,(CMt2IY)
 
         PUSH HL
 
         PUSH HL
         POP IY
+
        LD DE,-mod
        OR A
+
        ADD HL,DE
        SBC HL,DE
+
        EXD
        EXD  
+
        LD HL,(sngCUR)
        LD L,B ;кол-во сделанных треков
+
        LD (HL),E
        ADD HL,HL
+
        INC HL
        LD H,'l5b00
+
        LD (HL),D
        LD (HL),E
+
        INC HL
        INC L
+
    ;INC HL,HL,HL,HL
        LD (HL),D ;длина трека
+
        LD (sngCUR),HL
        RET  
+
         POP DE  ;начало текущего трека
CMPso
+
        POP HL  ;бывший IY=после конца трека
        LD HL,lce8a
+
        PUSH HL
        LD (pnter),HL
+
        POP IY
        LD IY,(sngE)
+
        OR A
        XOR A
+
        SBC HL,DE
CMPs    PUSH AF
+
        EXD  
        CALL CMPsmp
+
        LD L,B ;кол-во сделанных треков
        POP AF
+
        ADD HL,HL
        INC A
+
        LD H,'l5b00
        AND 31
+
        LD (HL),E
        JNZ CMPs
+
        INC L
        LD HL,lceca
+
        LD (HL),D ;длина трека
        LD (pnter),HL
+
        RET  
CMPo    PUSH AF
+
CMPso
        CALL CMPorn
+
        LD HL,lce8a
        POP AF
+
        LD (pnter),HL
        INC A
+
        LD IY,(sngE)
        AND 15
+
        XOR A
        JNZ CMPo
+
CMPs    PUSH AF
        LD (sngE),IY
+
        CALL CMPsmp
        RET  
+
        POP AF
CMPsmp
+
        INC A
        LD L,0
+
        AND 31
        PUSH AF
+
        JNZ CMPs
        ADD A,'SMPS
+
        LD HL,lceca
        LD H,A
+
        LD (pnter),HL
        CALL OUT4
+
CMPo    PUSH AF
        LD DE,BUF
+
        CALL CMPorn
        PUSH DE
+
        POP AF
        POP IX
+
        INC A
        LD BC,256
+
        AND 15
        LDIR  
+
        JNZ CMPo
        POP AF
+
        LD (sngE),IY
        LD B,A
+
        RET  
        ADD A,16
+
CMPsmp
        LD H,'CMbuf
+
        LD L,0
        LD L,A
+
        PUSH AF
        LD A,(HL)
+
        ADD A,'SMPS
        LD L,B
+
        LD H,A
        ADD HL,HL
+
        CALL OUT4
        LD H,'TSMPSZ
+
        LD DE,BUF
        OR A
+
        PUSH DE
        JNZ CMsmpU
+
        POP IX
        OR (HL)
+
        LD BC,256
        JNZ CMsmpU0
+
        LDIR  
        INC A
+
        POP AF
        INC HL
+
        LD B,A
        SUB (HL)
+
        ADD A,16
        DEC HL
+
        LD H,'CMbuf
        JNZ CMsmpU0
+
        LD L,A
        LD A,(IX+2)
+
        LD A,(HL)
        XOR 64
+
        LD L,B
        OR (IX)
+
        ADD HL,HL
        OR (IX+1)
+
        LD H,'TSMPSZ
        JNZ CMsmpU0
+
        OR A
        LD A,(IX+3)
+
        JNZ CMsmpU
        CP 15
+
        OR (HL)
CMsmpU0 JZ pntii ;
+
        JNZ CMsmpU0
CMsmpU
+
        INC A
        CALL PUTIY
+
        INC HL
        LD A,(HL)
+
        SUB (HL)
        IYAi
+
        DEC HL
        INC HL
+
        JNZ CMsmpU0
        LD A,(HL)
+
        LD A,(IX+2)
        IYAi
+
        XOR 64
        LD B,A
+
        OR (IX)
CMPS0  LD A,(IX+2)
+
        OR (IX+1)
        LD C,A
+
        JNZ CMsmpU0
        AND 31
+
        LD A,(IX+3)
        RLCA  
+
        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 D,A
        LD A,C
+
        LD A,(IX+3)
        AND #20
+
        AND #C0
        JZ $+4
 
        LD A,1
 
 
         OR D
 
         OR D
      LD D,A
+
        IYAi
        LD A,(IX+3)
+
        LD A,C
        AND #C0
+
        RLCA
      OR D
+
        AND #80
         IYAi
+
        LD D,A
         LD A,C
+
        LD A,C
         RLCA
+
        RRCA
         AND #80
+
        RRCA
         LD D,A
+
        RRCA
         LD A,C
+
        AND #10
        RRCA  
+
        OR D
        RRCA  
+
        LD D,A
        RRCA  
+
        LD A,(IX+3)
        AND #10
+
        LD E,A
        OR D
+
        AND #F
        LD D,A
+
        OR D
        LD A,(IX+3)
+
        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
 
         LD E,A
         AND #F
+
         JZ CMisn0x
        OR D
+
        ;JZ CMisnNE
        LD D,A
+
        CP #F
        LD A,E
+
        JNZ CMisnoQ
        RLCA
+
        DEC L
        AND #60
+
        CP (HL)
         OR D
+
        JNZ CMisnoQ
         IYAi
+
CMisn0x LD A,(IX+4)
        LD A,(IX)
+
        AND #F0
        IYAi
+
         CP E
        LD A,(IX+1)
+
         JZ CMisnNE
        IYAi
+
        RRCA
        LD DE,4
+
        RRCA
        ADD IX,DE
+
        RRCA
        DJNZ CMPS0
+
        RRCA
        RET  
+
        INC L
pnter=$+1
+
        CP (HL)
pntii
+
        JNZ CMisnoQ
        LD HL,0
+
CMisnNE LD A,(IX+4)
        INC HL,HL
+
        INC L
        LD (pnter),HL
+
        AND #F
        RET
+
        JZ $+5
CMPorn
+
        CP (HL)
         PUSH AF
+
        JNZ CMisnoQ
        CALL HLOR3
+
        INC L
        CALL OUT4
+
        LD A,(CMisb-1)
        LD DE,BUF
+
        OR A
        LD BC,64
+
        JNZ CMisnNQ
        LDIR
+
        LD A,(IX-6)
        POP AF
+
        CP (HL)
        LD L,A,H,'CMbuf
+
        JNZ CMisnoQ
        LD C,(HL)
+
CMisnNQ INC C
        LD HL,TORNSZ
+
        DJNZ CMisno0
        ADD A,A
+
CMisnoQ EXA
        ADD A,L
+
        SUB C
        LD L,A
+
        EXA
        LD A,C
+
        RET  
        OR A
+
LDPT3PP
        JNZ CMornU
+
        CALL 8026 ;CS=merge
        OR (HL)
+
        JNC PT3PP2
        JNZ CMornU0
+
        CALL CLPATS
        INC A
+
        CALL CLORNSM
        INC HL
+
        LD DE,TPATSZ+1
        SUB (HL)
+
        LD BC,PATS-1
        DEC HL
+
        LD H,D,L,B
        JNZ CMornU0
+
        LD (HL),63
        LD A,(BUF)
+
        LDIR
        OR A
+
PT3PP2
CMornU0 JZ pntii ;
+
         ;DI
CMornU
+
        CALL OUT7
        CALL PUTIY
+
        LD A,(lce84),(FRQn),A
        PUSH IY
+
        LD A,(lce85),(TEMPO),A
        POP DE
+
        LD A,(lce87),(LOOP),A
      LDI
+
        LD H,'l5b00
      INC BC
+
        LD BC,PATS*256
         LD A,(HL)
+
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
 
         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 E
         INC IX
+
         JNZ $-2
        DJNZ PT3POS
+
        LD HL,lce3f
      XOR A
+
        LD DE,TTITLE
      LD (DE),A
+
        LD C,32
      INC E
+
        LDIR  
      JNZ $-2
+
        LD HL,lce63
        LD HL,lce3f
+
        LD DE,TAUTHOR
        LD DE,TTITLE
+
        LD C,33;32 ;3.7 for TS
        LD C,32
+
        LDIR  
        LDIR  
+
        CALL PT3PATS
        LD HL,lce63
+
        CALL PT3SMP
        LD DE,TAUTHOR
+
        CALL PT3ORN
        LD C,33;32 ;3.7 for TS
+
        JP GETPATLEN
        LDIR  
+
        ;LD HL,(TPOSS),H,'TPATSZ
        CALL PT3PATS
+
        ;LD A,(HL),(PATLEN),A
        CALL PT3SMP
+
      ;IF process
        CALL PT3ORN
+
      ;LD IY,iy
      JP GETPATLEN
+
      ;ENDIF
      ;LD HL,(TPOSS),H,'TPATSZ
+
        ;RET
      ;LD A,(HL),(PATLEN),A
+
        IFN process
      ;IF process
+
PROCESS
      ;LD IY,iy
+
        LD A,201,(MHEXFNT+2),A
      ;ENDIF
+
        XOR A
      ;RET
+
        LD (PROBARX),A
      IFN process
+
        LD BC,mPROCES
PROCESS
+
        CALL WINDUM
        LD A,201,(MHEXFNT+2),A
+
        LD HL,tPROCES
        XOR A
+
        JP PRMENU
        LD (PROBARX),A
+
mPROCES DB 4,#C,#1C,#10,#47
        LD BC,mPROCES
+
tPROCES DB 6,#11,0,"PROCESSIN",#C7
        CALL WINDUM
+
CMPQ
        LD HL,tPROCES
+
        XOR A
        JP PRMENU
+
;2
mPROCES DB 4,#C,#1C,#10,#47
+
PROBAR
tPROCES DB 6,#11,0,"PROCESSIN",#C7
+
        PUSH AF
CMPQ
+
PROBARY=$+1
        XOR A
+
PROBARX=$+2
;2
+
        LD DE,1
PROBAR
+
        OR A    ;A=0: 100%
        PUSH AF
+
        LD B,1
PROBARY=$+1
+
        JNZ PROBAR0
PROBARX=$+2
+
        LD A,#2A ;?
        LD DE,1
+
        SUB D
        OR A    ;A=0: 100%
+
        JC PROBARQ
        LD B,1
+
        JZ PROBARQ
        JNZ PROBAR0
+
        LD B,A
        LD A,#2A ;?
+
PROBAR0 LD A,"0"
        SUB D
+
        CALL PRADD
        JC PROBARQ
+
        INC D
      JZ PROBARQ
+
        DJNZ PROBAR0
        LD B,A
+
        LD (PROBARY),DE
PROBAR0 LD A,"0"
+
PROBARQ POP AF
        CALL PRADD
+
        RET  
        INC D
+
        ENDIF  
        DJNZ PROBAR0
+
        IFN portres
        LD (PROBARY),DE
+
CMpores
PROBARQ POP AF
+
CMporeA=$+1
        RET  
+
        LD A,0
      ENDIF  
+
        LD HL,TPOSS
      IFN portres
+
        LD B,(HL)
CMpores
+
        INC L
CMporeA=$+1
+
cMpore0 CP (HL)
        LD A,0
+
        JZ $+6
        LD HL,TPOSS
+
        LD B,(HL)
        LD B,(HL)
+
        INC L
        INC L
+
        JNZ cMpore0
cMpore0 CP (HL)
+
        LD A,B ;пред.паттерн
        JZ $+6
+
        CALL AtoPAT
        LD B,(HL)
+
        LD HL,(patdisp),H,0
        INC L
+
        ADD HL,DE
        JNZ cMpore0
+
        LD B,#40
        LD A,B ;пред.паттерн
+
        LD DE,18
      CALL AtoPAT
+
        LD A,(HL)
        LD HL,(patdisp),H,0
+
        AND #7F
        ADD HL,DE
+
        DEC A
        LD B,#40
+
        LD C,A
        LD DE,18
+
cMpore1 LD A,(HL)
        LD A,(HL)
+
        AND #7F
        AND #7F
+
        JZ cMpore2
        DEC A
+
        DEC A
        LD C,A
+
        CP 96
cMpore1 LD A,(HL)
+
        JZ $+3
        AND #7F
+
        LD C,A
        JZ cMpore2
+
cMpore2 ADD HL,DE
        DEC A
+
        DJNZ cMpore1
        CP 96
+
        CALL OUT7
        JZ $+3
+
        LD A,C
        LD C,A
+
        RET  
cMpore2 ADD HL,DE
+
        ENDIF  
        DJNZ cMpore1
+
LDPT2PP
        CALL OUT7
+
        LD A,32
        LD A,C
+
        LD (ts48),A
        RET  
+
        LD A,1,(FRQn),A
      ENDIF  
+
        CALL CLPATS
LDPT2PP
+
        CALL CLSMPS ;DICLos? CLORNSM?
      LD A,32
+
        CALL CLORNS
      LD (ts48),A
+
        LD DE,TPATSZ+1
        LD A,1,(FRQn),A
+
        LD BC,PATS-1
        CALL CLPATS
+
        LD H,D,L,B
        CALL CLSMPS ;DICLos? CLORNSM?
+
        LD (HL),63
        CALL CLORNS
+
        LDIR  
        LD DE,TPATSZ+1
+
        CALL PT2PP2
        LD BC,PATS-1
+
        XOR A
        LD H,D,L,B
+
        LD (POS),A
        LD (HL),63
+
        RET
        LDIR  
+
PT2PP2
        CALL 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
 
         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
 
         LD (DE),A
         INC DE
+
         INC E
         LD (DE),A
+
         JNZ $-2
        LD HL,TAUTHOR
+
        CALL PT2SMP
        LD DE,TAUTHOR+1
+
        CALL PT2ORN
        LD (HL),A
+
        CALL PT2PATS
        LD C,31
+
GETPATLEN
        LDIR
+
        LD HL,(TPOSS),H,'TPATSZ
        POP AF
+
        LD A,(HL),(PATLEN),A
        LD C,A
+
        RET
        LD HL,_cea4
+
PT3PATS
        LD DE,TPOSS
+
        CALL OUT7
        LDIR
+
        LD B,PATS-1
      XOR A
+
PT3P0  LD HL,TPOSS
      LD (DE),A
+
PT3P1  LD A,(HL)
      INC E
+
        CP B
      JNZ $-2
+
        JZ PT3P0Q
        CALL PT2SMP
+
        INC L
        CALL PT2ORN
+
        JNZ PT3P1
        CALL PT2PATS
+
        DJNZ PT3P0
GETPATLEN
+
PT3P0Q  LD A,B,(PT3Plst),A
        LD HL,(TPOSS),H,'TPATSZ
+
        LD HL,(lce88)
         LD A,(HL),(PATLEN),A
+
        LD DE,mod
        RET
+
        ADD HL,DE
PT3PATS
+
        XOR A
        CALL OUT7
+
PT3P2  PUSH AF
        LD B,PATS-1
+
         CALL KILLBUF
PT3P0  LD HL,TPOSS
+
        LD E,(HL)
PT3P1  LD A,(HL)
+
        INC HL
        CP B
+
        LD D,(HL)
        JZ PT3P0Q
+
        INC HL
        INC L
+
        PUSH HL
        JNZ PT3P1
+
          LD A,3,(PT3Edsp),A
        DJNZ PT3P0
+
        LD IX,BUF+3
PT3P0Q  LD A,B,(PT3Plst),A
+
        CALL PT3PAPP
        LD HL,(lce88)
+
        POP HL
        LD DE,mod
+
        LD E,(HL)
        ADD HL,DE
+
        INC HL
        XOR A
+
        LD D,(HL)
PT3P2  PUSH AF
+
        INC HL
      CALL KILLBUF
+
        PUSH HL
        LD E,(HL)
+
          LD A,8,(PT3Edsp),A
         INC HL
+
         ;LD (PT3putN+1),A ;noise ON
        LD D,(HL)
+
        LD IX,BUF+8
        INC HL
+
        CALL PT3PAPP
        PUSH HL
+
        POP HL
         LD A,3,(PT3Edsp),A
+
         LD E,(HL)
        LD IX,BUF+3
+
        INC HL
        CALL PT3PAPP
+
        LD D,(HL)
        POP HL
+
        INC HL
        LD E,(HL)
+
        PUSH HL
        INC HL
+
         ;XOR A
        LD D,(HL)
+
         ;LD (PT3putN+1),A ;noise OFF
         INC HL
+
          LD A,13,(PT3Edsp),A
         PUSH HL
+
        LD IX,BUF+13
        LD A,8,(PT3Edsp),A
+
        CALL PT3PAPP
      ;LD (PT3putN+1),A ;noise ON
+
        POP HL
        LD IX,BUF+8
+
        POP AF
        CALL PT3PAPP
+
;D=patlen-1
        POP HL
+
         CALL PATfrBUF
        LD E,(HL)
+
PT3Plst=$+1
        INC HL
+
        CP 0
        LD D,(HL)
+
        RET Z
         INC HL
+
         INC A
        PUSH HL
+
        JR PT3P2
      ;XOR A
+
      ;LD (PT3putN+1),A ;noise OFF
+
;на 99% совпадает с PT3PATS
         LD A,13,(PT3Edsp),A
+
PT2PATS
        LD IX,BUF+13
+
        CALL OUT7
        CALL PT3PAPP
+
        LD B,31
        POP HL
+
PT2P0  LD HL,TPOSS
        POP AF
+
PT2P1  LD A,(HL)
;D=patlen-1
+
        CP B
      CALL PATfrBUF
+
        JZ PT2P0Q
PT3Plst=$+1
+
        INC L
        CP 0
+
        JNZ PT2P1
        RET Z
+
        DJNZ PT2P0
        INC A
+
PT2P0Q  LD A,B,(PT2Plst),A
        JR PT3P2
+
        LD HL,(_ce84)
 
+
        LD DE,mod
;на 99% совпадает с PT3PATS
+
        ADD HL,DE
PT2PATS
+
        XOR A
        CALL OUT7
+
PT2P2  PUSH AF
        LD B,31
+
         CALL KILLBUF
PT2P0  LD HL,TPOSS
+
        LD E,(HL)
PT2P1  LD A,(HL)
+
        INC HL
        CP B
+
        LD D,(HL)
        JZ PT2P0Q
+
        INC HL
         INC L
+
        PUSH HL
        JNZ PT2P1
+
        LD A,3
        DJNZ PT2P0
+
        LD IX,BUF+3
PT2P0Q  LD A,B,(PT2Plst),A
+
        CALL PT2PAPP
        LD HL,(_ce84)
+
        POP HL
        LD DE,mod
+
        LD E,(HL)
        ADD HL,DE
+
        INC HL
        XOR A
+
        LD D,(HL)
PT2P2  PUSH AF
+
        INC HL
      CALL KILLBUF
+
        PUSH HL
        LD E,(HL)
+
        LD A,8
        INC HL
+
        LD IX,BUF+8
        LD D,(HL)
+
        CALL PT2PAPP
        INC HL
+
        POP HL
        PUSH HL
+
        LD E,(HL)
        LD A,3
+
        INC HL
        LD IX,BUF+3
+
        LD D,(HL)
        CALL PT2PAPP
+
        INC HL
        POP HL
+
        PUSH HL
        LD E,(HL)
+
        LD A,13
        INC HL
+
        LD IX,BUF+13
        LD D,(HL)
+
        CALL PT2PAPP
        INC HL
+
        POP HL
        PUSH HL
+
        POP AF
        LD A,8
+
         CALL PATfrBUF
        LD IX,BUF+8
+
PT2Plst=$+1
        CALL PT2PAPP
+
        CP 0
        POP HL
+
        RET Z
        LD E,(HL)
+
        INC A
         INC HL
+
        JR PT2P2
        LD D,(HL)
+
PT3PAPP
        INC HL
+
        EXD
        PUSH HL
+
        LD DE,mod
        LD A,13
+
        ADD HL,DE
        LD IX,BUF+13
+
        XOR A
        CALL PT2PAPP
+
        LD (PT3orN),A
        POP HL
+
        LD (PT3n),A
        POP AF
+
        LD D,A
      CALL PATfrBUF
+
PT3PAP0 LD BC,#1020
PT2Plst=$+1
+
        LD A,(HL)
        CP 0
+
        INC HL
        RET Z
+
        OR A
        INC A
+
        RET Z
        JR PT2P2
+
        ADD A,B
PT3PAPP
+
        JC PT3orn
        EXD
+
        ADD A,C
        LD DE,mod
+
        JC PT3smp
        ADD HL,DE
+
        ADD A,B
        XOR A
+
        JP C,PT3vol
        LD (PT3orN),A
+
        ADD A,B
        LD (PT3n),A
+
        JP C,PT3Et
        LD D,A
+
        ADD A,96
PT3PAP0 LD BC,#1020
+
        JC PT3note
        LD A,(HL)
+
        ADD A,B
        INC HL
+
        JP C,PT3newO
        OR A
+
        ADD A,C
        RET Z
+
        JP C,PT3nois
        ADD A,B
+
        ADD A,B
        JC PT3orn
+
        JP C,PT3Etyp
        ADD A,C
+
        ADD A,B
        JC PT3smp
+
        JP PT3com
        ADD A,B
+
PT3blN
        JP C,PT3vol
+
        LD A,(HL)
        ADD A,B
+
        INC HL
        JP C,PT3Et
+
        DEC A
        ADD A,96
+
        LD (PT3bls),A
        JC PT3note
+
        JR PT3PAP0
        ADD A,B
+
        JP C,PT3newO
+
PT3bls=$+1
        ADD A,C
+
PT3blQ
        JP C,PT3nois
+
        LD A,0
        ADD A,B
+
        OR A
        JP C,PT3Etyp
+
        JZ PT3PAP0
        ADD A,B
+
        LD E,A
        JP PT3com
+
        LD BC,18
PT3blN
+
PT3bl0  INC D
        LD A,(HL)
+
        CALL PT3putN
        INC HL
+
        ADD IX,BC
        DEC A
+
        DEC E
        LD (PT3bls),A
+
        JNZ PT3bl0
        JR PT3PAP0
+
        JR PT3PAP0
 
+
PT3note
PT3bls=$+1
+
        INC D
PT3blQ
+
        INC A
        LD A,0
+
        LD B,A
        OR A
+
        LD A,(IX)
        JZ PT3PAP0
+
        AND #80
        LD E,A
+
        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
 
         LD BC,18
PT3bl0  INC D
+
         ADD HL,BC
        CALL PT3putN
+
         LD BC,BUF+#480
         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
 
         SBC HL,BC
         LD B,H
+
         ADD HL,BC
         LD C,L
+
         JC PT2NOI
        POP HL
+
        POP HL
        LD A,(HL)
+
        JR PT2PAP0
        INC HL
+
PT2smp
        LD (BC),A
+
        JZ PT2res
        INC BC
+
        CP 16
        LD A,(HL)
+
        JC $+6
        INC HL
+
        SET 7,(IX)
        LD (BC),A
+
        AND #F
        RET
+
        RLCA  
PT3newO
+
        RLCA  
        RLCA  
+
        RLCA  
        RLCA  
+
        RLCA  
        RLCA  
+
        OR (IX+3)
        RLCA  
+
        LD (IX+3),A
        LD (PT3orN),A
+
        JR PT2PAP0
        LD B,A
+
PT2res
        JNZ PT3nXF0X
+
        LD A,96
        LD A,(IX+3)
+
PT2note INC A
        AND #F
+
        LD B,A
        JNZ PT3nXF0X
+
        LD A,(IX)
        LD A,(IX+3)
+
        AND #80
        OR #F
+
        OR B
        LD (IX+3),A
+
        LD (IX),A
PT3nXF0X
+
PT2bl  INC D
        LD A,(IX+4)
+
        LD BC,18
        AND #F
+
        ADD IX,BC
        OR B
+
PT2bls=$+1
        LD (IX+4),A
+
        LD A,0
;PT3typ=$+1
+
        OR A
      ;LD A,0
+
        JZ PT2PAP0
      ;OR (IX+3)
+
        INC D
      ;LD (IX+3),A
+
        ADD IX,BC
        JP PT3PAP0
+
        DEC A
PT3nois
+
        JNZ $-4
        LD (PT3n),A
+
        JR PT2PAP0
        JP PT3PAP0
+
PT2env
;4
+
        JZ PT2bl
PT3putN
+
        CP #F
      ;LD A,0
+
        LD (PT2typ),A
      ;OR A
+
        JNZ PT2norn
      ;RET Z
+
        OR (IX+3)
      LD A,LX ;проверяем channel=B
+
        LD (IX+3),A
      RRA
+
        JR PT2eQ
      RET C
+
PT2norn OR (IX+3)
        LD (IX-6),0
+
        LD (IX+3),A
PT3n=$-1
+
        PUSH HL
        RET
+
        PUSH IX
PT3Etyp
+
        POP HL
        JNZ PT3EnO
+
PT2Edsp=$+1
        LD A,#F
+
        LD BC,0
      ;LD (PT3typ),A
+
        OR A
        OR (IX+3)
+
        SBC HL,BC
        LD (IX+3),A
+
        LD B,H,C,L
        JR PT3EtyQ
+
        INC BC
 
+
        POP HL
PT3EnO ;LD (PT3typ),A
+
        LD A,(HL)
        OR (IX+3)
+
        INC HL
        LD (IX+3),A
+
        LD (BC),A
        CALL PT3env
+
        DEC BC
PT3EtyQ LD A,(PT3orN)
+
        LD A,(HL)
 +
        INC HL
 +
        LD (BC),A
 +
PT2orN=$+1
 +
PT2eQ  LD A,0
 
         OR (IX+4)
 
         OR (IX+4)
 
         LD (IX+4),A
 
         LD (IX+4),A
        JP PT3oQ
+
        JP PT2PAP0
 
+
PT3SMP
PT3jp=$+1
+
        LD A,1
PT3cU
+
        LD HL,lce8a+2
         CALL PT3ret
+
PT3SMP0  PUSH AF
         PUSH HL
+
        CALL OUT7
        LD HL,PT3ret
+
        LD E,(HL)
        LD (PT3jp),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
 
         POP HL
PT3ret  RET
+
        INC A
PT3com
+
        AND 31
        PUSH HL
+
        JNZ PT3SMP0
        DEC A
+
        RET
        LD HL,PT3glis
+
        JZ PT3cQ
+
PT2SMP
        DEC A
+
        LD A,1
        LD HL,PT3port
+
        LD HL,_ce26
        JZ PT3cQ
+
PT2SMP0  PUSH AF
        DEC A
+
        CALL OUT7
        LD HL,PT3so
+
        LD E,(HL)
        JZ PT3cQ
+
        INC HL
        DEC A
+
        LD D,(HL)
        LD HL,PT3oo
+
        INC HL
        JZ PT3cQ
+
         EX (SP),HL
        DEC A
+
         PUSH HL ;AF
        LD HL,PT3vib
+
        LD A,E
        JZ PT3cQ
+
        OR D
        SUB 3
+
        JZ PT2SMPQ
        LD HL,PT3egl
+
        LD HL,mod
        JZ $+5
+
        ADD HL,DE
        LD HL,PT3tmp
+
        LD DE,BUF
PT3cQ  LD (PT3jp),HL
+
        PUSH DE
        POP HL
+
        POP IX
        JP PT3PAP0
+
        LD B,2;BC,#C6
PT3tmp
+
        LDIR
        LD A,(HL)
+
          POP AF
        INC HL
+
          PUSH AF
         LD (IX+2),A
+
        ADD A,A
         LD (IX+1),#B0
+
        LD L,A,H,'TSMPSZ
        RET
+
        LD A,(IX+1),(HL),A
PT3port
+
        INC L
        LD A,(HL)
+
        LD B,(IX),(HL),B
        OR #30
+
          POP AF
        LD (IX+1),A
+
          PUSH AF
        INC HL,HL,HL
+
        ADD A,'SMPS
        PUSH DE
+
        LD H,A
        LD E,(HL)
+
        XOR A
        INC HL
+
        LD L,A
        LD D,(HL)
+
        CALL OUT4
        INC HL
+
PT2SMP1 LD A,(IX+0+2)
        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
 
         LD C,A
        INC HL
+
        RRCA
        LD E,(HL)
+
        RRCA
        INC HL
+
        RRCA
        LD D,(HL)
+
        AND 31
        INC HL
+
        INC HL,HL
        EXD
+
        LD (HL),A
      ;LD A,H
+
         BIT 1,C;(IX+0+2)
      ;OR A
+
        JZ $+4
        LD (IX+1),C
+
        SET 7,(HL)
      BIT 7,H
+
      JZ PT3gl1
+
        LD A,(IX+1+2)
      ;JP P,PT3gl1
+
        ;AND #F0
        CALL NEGHL
+
        ;RRCA
        LD A,C
+
        ;RRCA
        AND #F
+
        ;RRCA
        OR #20
+
        ;RRCA
        LD (IX+1),A
+
        INC HL
PT3gl1  EXD
+
        LD (HL),A
        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
 
         XOR A
         LD (PT2typ),A
+
         RRD
        LD (PT2orN),A
+
        ;LD A,(IX+1+2)
        LD D,A
+
        ;AND #F
PT2PAP0 LD C,16
+
         LD D,A ;(IX+1+2)&#0F
        LD A,(HL)
+
        INC HL
+
        DEC HL
        OR A
+
         BIT 0,C;(IX+0+2)
        RET Z
+
        JZ PT2SMPN
        ADD A,32
+
         LD A,(HL)
        JC PT2smp
+
         OR #40
        ADD A,96
+
        AND #E0
        JC PT2note
+
        LD (HL),A
        ADD A,C
+
  PT2SMPN LD E,(IX+2+2)
        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)
 
         ;LD A,(IX+1+2)
 
         ;AND #F
 
         ;AND #F
      LD D,A ;(IX+1+2)&#0F
+
         ;LD H,A
 
+
        BIT 2,C;(IX+0+2)
        DEC HL
+
        EXD  
      BIT 0,C;(IX+0+2)
+
        CALL Z,NEGHL
        JZ PT2SMPN
+
        EXD  
        LD A,(HL)
+
        DEC HL,HL
        OR #40
+
        LD (HL),E
         AND #E0
+
        INC HL
        LD (HL),A
+
        LD (HL),D
PT2SMPN LD E,(IX+2+2)
+
        LD DE,3
      ;LD A,(IX+1+2)
+
        ADD IX,DE
      ;AND #F
+
        ADD HL,DE
      ;LD H,A
+
        DJNZ PT2SMP1
      BIT 2,C;(IX+0+2)
+
PT2SMPQ  POP AF
        EXD  
+
        POP HL
        CALL Z,NEGHL
+
        INC A
        EXD  
+
        AND 31
        DEC HL,HL
+
        JNZ PT2SMP0
        LD (HL),E
+
        RET  
        INC HL
+
        LD (HL),D
+
PT2ORN
        LD DE,3
+
        LD HL,_ce66
        ADD IX,DE
+
        SCF  
        ADD HL,DE
+
        JR PT23ORN
        DJNZ PT2SMP1
+
PT3ORN
PT2SMPQ  POP AF
+
        LD HL,lceca+2
      POP HL
+
        OR A
        INC A
+
PT23ORN LD A,1
        AND 31
+
PT3ORN0  PUSH AF
        JNZ PT2SMP0
+
        CALL OUT7
        RET  
+
        LD E,(HL)
 
+
        INC HL
PT2ORN
+
        LD D,(HL)
        LD HL,_ce66
+
        INC HL
        SCF  
+
        EX (SP),HL
        JR PT23ORN
+
        PUSH HL ;AF
PT3ORN
+
        LD A,D
        LD HL,lceca+2
+
        OR E
        OR A
+
        JZ PT3ORNQ
PT23ORN LD A,1
+
        LD HL,mod
PT3ORN0  PUSH AF
+
        ADD HL,DE
        CALL OUT7
+
        LD DE,BUF
        LD E,(HL)
+
        PUSH DE
        INC HL
+
        LD B,2;BC,66
        LD D,(HL)
+
        LDIR  
        INC HL
+
        POP DE
      EX (SP),HL
+
          POP AF
      PUSH HL ;AF
+
          PUSH AF
        LD A,D
+
        CALL HLOR3
        OR E
+
        EXD  
        JZ PT3ORNQ
+
        LD C,A,B,'TORNSZ
        LD HL,mod
+
        CALL OUT4
        ADD HL,DE
+
          POP AF
        LD DE,BUF
+
          PUSH AF
        PUSH DE
+
          JNC PT3ORN3
        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
 
         INC L
 +
        LD A,(HL),(BC),A
 +
        DEC L
 
         LD A,(HL)
 
         LD A,(HL)
        INC C
+
        INC L
        LD (BC),A
+
        JR $+6
        INC L
+
PT3ORN3  LD A,(HL),(BC),A
        LD C,A,B,0
+
          INC L
        LDIR  
+
          LD A,(HL)
PT3ORNQ  POP AF
+
        INC C
      POP HL
+
        LD (BC),A
        INC A
+
        INC L
        BIT 4,A
+
        LD C,A,B,0
        JZ PT3ORN0
+
        LDIR  
        RET
+
PT3ORNQ  POP AF
 +
        POP HL
 +
        INC A
 +
        BIT 4,A
 +
        JZ PT3ORN0
 +
        RET

Latest revision as of 21:41, 8 March 2020

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