Difference between revisions of "PROTRACKER372 PTU367 H"

From MSX MUSIC WIKI
Jump to: navigation, search
(Created page with "PTU367 C��╔Ы�ЬЕ COLOUR=5 zwet=1 CATHGT=22 HGT EQU 24 WINCOL EQU 7 TITLCOL EQU 56 FD EQU 32765 EMSTACK EQU #5F00 SYSBUF EQU #6800 LDIRKA EQU #BB80 CURSC...")
(Tags: Mobile edit, Mobile web edit)
 
(Tags: Mobile edit, Mobile web edit)
 
Line 1: Line 1:
PTU367  C��╔Ы�ЬЕ COLOUR=5
+
PTU367  C��╔Ы�ЬЕ  
zwet=1
+
COLOUR=5
CATHGT=22
+
zwet=1
HGT    EQU 24
+
CATHGT=22
WINCOL  EQU 7
+
HGT    EQU 24
TITLCOL EQU 56
+
WINCOL  EQU 7
FD      EQU 32765
+
TITLCOL EQU 56
EMSTACK EQU #5F00
+
FD      EQU 32765
SYSBUF  EQU #6800
+
EMSTACK EQU #5F00
LDIRKA  EQU #BB80
+
SYSBUF  EQU #6800
CURSCOL EQU 56
+
LDIRKA  EQU #BB80
SECBUF  EQU #B700
+
CURSCOL EQU 56
;TEXT=SECBUF+1
+
SECBUF  EQU #B700
LINBUF  EQU #BE00
+
;TEXT=SECBUF+1
WINBUF  EQU #BF00
+
LINBUF  EQU #BE00
FILENAM EQU #5CDD
+
WINBUF  EQU #BF00
FNEXT  EQU FILENAM+8
+
FILENAM EQU #5CDD
MUZ=#C000
+
FNEXT  EQU FILENAM+8
        ORG #8000
+
MUZ=#C000
begin
+
        ORG #8000
FONTS
+
begin
        INCBIN "42>>
+
FONTS
GO
+
        INCBIN "42>>
        LD SP,#6000
+
GO
        OUT (-2),A
+
        LD SP,#6000
        INC A
+
        OUT (-2),A
        LD (IY-48),A
+
        INC A
        LD (IY+48),A
+
        LD (IY-48),A
        LD (IY+1),#CC
+
        LD (IY+48),A
        LD (IY+14),COLOUR
+
        LD (IY+1),#CC
        LD (IY-49),16
+
        LD (IY+14),COLOUR
        CALL OLDRV
+
        LD (IY-49),16
        LD (23798),A
+
        CALL OLDRV
        LD HL,ONERROR
+
        LD (23798),A
        LD (23747),HL
+
        LD HL,ONERROR
        CALL CLS
+
        LD (23747),HL
ST
+
        CALL CLS
        CALL PRMENU
+
ST
STC
+
        CALL PRMENU
        LD C,0
+
STC
        CALL RULILKA
+
        LD C,0
        LD A,C
+
        CALL RULILKA
        LD (STC+1),A
+
        LD A,C
        LD DE,QUIT
+
        LD (STC+1),A
        CALL 8020
+
        LD DE,QUIT
        JR NC,STPUSH
+
        CALL 8020
        LD B,0
+
        JR NC,STPUSH
        LD HL,JPS
+
        LD B,0
        ADD HL,BC,HL,BC
+
        LD HL,JPS
        LD E,(HL)
+
        ADD HL,BC,HL,BC
        INC HL
+
        LD E,(HL)
        LD D,(HL)
+
        INC HL
STPUSH  LD HL,ST
+
        LD D,(HL)
        PUSH HL,DE
+
STPUSH  LD HL,ST
        RET  
+
        PUSH HL,DE
JPS
+
        RET  
        DW PLOAD
+
JPS
        DW PPLAY
+
        DW PLOAD
        DW PSAVE
+
        DW PPLAY
        DW PCOM
+
        DW PSAVE
        DW PSWAP
+
        DW PCOM
        DW PREN
+
        DW PSWAP
        DW PSORT
+
        DW PREN
        DW PHELP
+
        DW PSORT
        DW QUIT
+
        DW PHELP
PLOAD
+
        DW QUIT
        LD HL,TLOAD
+
PLOAD
        CALL PRCAT
+
        LD HL,TLOAD
      JP NC,PLOADQ
+
        CALL PRCAT
        LD (LENGTH),HL
+
        JP NC,PLOADQ
        PUSH BC
+
        LD (LENGTH),HL
        PUSH DE
+
        PUSH BC
        CALL CLS
+
        PUSH DE
        LD HL,MUZ
+
        CALL CLS
        PUSH HL
+
        LD HL,MUZ
        LD DE,MUZ+1
+
        PUSH HL
        LD B,#40
+
        LD DE,MUZ+1
        LD (HL),L
+
        LD B,#40
        LDIR  
+
        LD (HL),L
        POP HL
+
        LDIR  
        POP DE
+
        POP HL
        POP BC
+
        POP DE
        LD (ERRSP+1),SP
+
        POP BC
        PUSH HL
+
        LD (ERRSP+1),SP
        LD A,64
+
        PUSH HL
        CP B
+
        LD A,64
        JR NC,$+3
+
        CP B
        LD B,A
+
        JR NC,$+3
        CALL EM15635
+
        LD B,A
PLDCPU  CALL DEPKFNT
+
        CALL EM15635
        POP HL
+
PLDCPU  CALL DEPKFNT
        LD BC,#4000
+
        POP HL
PLOADCP LD DE,TDISTIN
+
        LD BC,#4000
        LD A,(DE)
+
PLOADCP LD DE,TDISTIN
        CPIR  
+
        LD A,(DE)
        JR NZ,PLDBUGL
+
        CPIR  
        LD (PLDOK+1),HL
+
        JR NZ,PLDBUGL
PLDCP0  INC DE
+
        LD (PLDOK+1),HL
        LD A,(DE)
+
PLDCP0  INC DE
        OR A
+
        LD A,(DE)
        JR Z,PLDOK
+
        OR A
        CP (HL)
+
        JR Z,PLDOK
        INC HL
+
        CP (HL)
        DEC BC
+
        INC HL
        JR Z,PLDCP0
+
        DEC BC
        JR PLOADCP
+
        JR Z,PLDCP0
PLDOK  LD HL,0
+
        JR PLOADCP
      LD BC,-14-1
+
PLDOK  LD HL,0
      ADD HL,BC
+
        LD BC,-14-1
 +
        ADD HL,BC
 +
        LD DE,MUZ
 +
        LD BC,#4000
 +
        LDIR
 
         LD DE,MUZ
 
         LD DE,MUZ
         LD BC,#4000
+
         CALL deinit+3
        LDIR
+
        LD D,0
      LD DE,MUZ
+
        LD HL,MUZ+105
      CALL deinit+3
+
        LD A,48
      LD D,0
+
PLDOKM0 LD C,(HL)
        LD HL,MUZ+105
+
        INC HL
        LD A,48
+
        LD B,(HL)
PLDOKM0 LD C,(HL)
+
        INC HL
        INC HL
+
        EX DE,HL
        LD B,(HL)
+
        OR A
        INC HL
+
        SBC HL,BC
        EX DE,HL
+
        ADD HL,BC
        OR A
+
        EX DE,HL
        SBC HL,BC
+
        JR NC,$+4
        ADD HL,BC
+
        LD D,B
        EX DE,HL
+
        LD E,C
        JR NC,$+4
+
        DEC A
        LD D,B
+
        JR NZ,PLDOKM0
        LD E,C
+
        LD HL,MUZ+1
        DEC A
+
        ADD HL,DE
        JR NZ,PLDOKM0
+
        LD C,(HL)
        LD HL,MUZ+1
+
        LD B,0
        ADD HL,DE
+
        INC HL
        LD C,(HL)
+
        ADD HL,BC
        LD B,0
+
        LD DE,-MUZ
        INC HL
+
        ADD HL,DE
        ADD HL,BC
+
        LD (LENGTH),HL
        LD DE,-MUZ
+
        LD A,183
        ADD HL,DE
+
        LD (MODOK),A
        LD (LENGTH),HL
+
PLOADQ
        LD A,183
+
        JP CLS
        LD (MODOK),A
+
PLOADQ
+
PLDBUGL LD A,(MUZ)
        JP CLS
+
        CP 243
 
+
        JR NZ,PLDBUG
PLDBUGL LD A,(MUZ)
+
PLDBGL0 LD HL,TDEPKYN
        CP 243
+
        LD DE,#4040
        JR NZ,PLDBUG
+
        CALL PRTEXT
PLDBGL0 LD HL,TDEPKYN
+
        CALL IYKEY
        LD DE,#4040
+
        CP "n
        CALL PRTEXT
+
        JR Z,PLDBUG
        CALL IYKEY
+
        CP "y
        CP "n
+
        JR NZ,PLDBGL0
        JR Z,PLDBUG
+
        LD HL,MUZ
        CP "y
+
        PUSH HL
        JR NZ,PLDBGL0
+
        LD DE,(STADR+1)
        LD HL,MUZ
+
        LD BC,(LENGTH)
        PUSH HL
+
        LDIR  
        LD DE,(STADR+1)
+
STADR  CALL 0
        LD BC,(LENGTH)
+
        EI  
        LDIR  
+
        JP PLDCPU
STADR  CALL 0
+
PLDBUG
        EI  
+
        LD HL,TLDBUG
        JP PLDCPU
+
        LD DE,#4060
PLDBUG
+
        CALL PRTEXT
        LD HL,TLDBUG
+
        CALL IYKEY
        LD DE,#4060
+
        LD A,55
        CALL PRTEXT
+
        LD (MODOK),A
        CALL IYKEY
+
        JR PLOADQ
        LD A,55
+
        LD (MODOK),A
+
TLDBUG  DB "INVALID MODULE!",0
        JR PLOADQ
+
TDEPKYN DB "DEPACK (Y/N)?",0
 
+
TDISTIN DB " compilation of ",0
TLDBUG  DB "INVALID MODULE!",0
+
COPYTAB
TDEPKYN DB "DEPACK (Y/N)?",0
+
        LD A,(MUZ+99)
TDISTIN DB " compilation of ",0
+
        LD L,A
COPYTAB
+
        ADD A,A
        LD A,(MUZ+99)
+
        ADD A,L
        LD L,A
+
        LD L,0
        ADD A,A
+
        RRA  
        ADD A,L
+
        RR L
        LD L,0
+
        RRA  
        RRA  
+
        RR L
        RR L
+
        ADD A,'TABS
        RRA  
+
        LD H,A
        RR L
+
        LD DE,tab_frq
        ADD A,'TABS
+
        LD BC,#C0
 +
        LDIR
 +
        RET
 +
PPLAY
 +
MODOK  SCF
 +
        JR C,PLDBUG
 +
        CALL COPYTAB
 +
        CALL initia
 +
PPLAY0
 +
        RES 5,(IY+1)
 +
        HALT
 +
        CALL play
 +
        BIT 5,(IY+1)
 +
        JR Z,PPLAY0
 +
        LD A,(23560)
 +
        OR #20
 +
        CP "f
 +
        JR NZ,stop
 +
        CALL play,play
 +
        JR PPLAY0
 +
stop
 +
        CALL deinit
 +
AYOFF
 +
        LD DE,#E00
 +
OFF0    LD BC,-3
 +
        DEC D
 +
        OUT (C),D
 +
        LD B,#BF
 +
        OUT (C),E
 +
        JR NZ,OFF0
 +
        RET
 +
 +
PSAVE
 +
        LD A,(MODOK)
 +
        RLA
 +
        JP NC,PLDBUG
 +
        LD A,"m
 +
        LD (FNEXT),A
 +
        CALL SAVE
 +
        JP CLS
 +
 +
PREN
 +
        LD A,(MODOK)
 +
        RLA
 +
        JP NC,PLDBUG
 +
 +
        LD HL,MUZ
 +
        LD DE,LINBUF
 +
        LD BC,256
 +
        LDIR
 +
        LD LX,20
 +
PRENST
 +
        PUSH BC
 +
        CALL PRBY
 +
        POP BC
 +
        PUSH BC
 +
        LD A,LX
 +
        CALL 3742
 +
        INC L
 +
        LD A,C
 +
        ADD A,6
 +
        CALL PRCU
 +
        POP BC
 +
        LD HL,MUZ+#1E
 +
        LD A,LX
 +
        RRA
 +
        JR NC,$+5
 +
        LD HL,MUZ+#42
 +
        LD B,0
 +
        ADD HL,BC
 +
        CALL IYKEY
 +
        JP NC,PRENNO
 +
        ADD A,-13
 +
        JR Z,PRENQQ
 +
        LD DE,PRENST
 +
        PUSH DE
 +
        LD DE,#1F20
 +
        DEC A
 +
        JR Z,PRENEXT
 +
        DEC A
 +
        JR Z,PRENGR
 +
        ADD A,3
 +
        JP Z,WORKDEL
 +
        ADD A,2
 +
        JR NC,PRENNUD
 +
        LD A,LX
 +
        XOR 1
 +
        LD LX,A
 +
        RET
 +
PRENNUD INC A
 +
        JR Z,PRENIC
 +
        INC A
 +
        JP Z,WORKDC
 +
        INC A
 +
        RET Z
 +
        INC A
 +
        JP Z,CAPLNT
 +
        SUB 193
 +
        RET Z
 +
        DEC A
 +
        RET Z
 +
        DEC A
 +
        RET Z
 +
        SUB 55
 +
        CP 172
 +
        RET Z
 +
        CP E
 +
        RET C
 +
        PUSH BC
 +
        CALL RECODE-1
 +
        LD (HL),B
 +
        POP BC
 +
PRENIC  JP WORKIC
 +
PRENGR  LD A,D
 +
        INC A
 +
        SUB C
 +
        PUSH BC
 +
        LD C,A
 +
        LD B,0
 +
        LD D,H
 +
        LD E,L
 +
        INC HL
 +
        LDIR
 +
        DEC DE
 +
        LD A,32
 +
        LD (DE),A
 +
        POP BC
 +
        RET
 +
PRENEXT LD A,D
 +
        INC A
 +
        SUB C
 +
        LD B,A
 +
        LD E,32
 +
PRENEX0 LD A,(HL)
 +
        LD (HL),E
 +
        LD E,A
 +
        INC HL
 +
        DJNZ PRENEX0
 +
        RET
 +
PRENQQ
 +
        RET
 +
PRENNO
 +
        LD DE,MUZ
 +
        LD HL,LINBUF
 +
        LD BC,256
 +
        LDIR
 +
        RET
 +
CAPLNT
 +
        LD A,(23658)
 +
        XOR 8
 +
        LD (23658),A
 +
        RET
 +
 +
TLEN    DB "Compiled length=",0
 +
T_ENT  DB "Press <ENTER>",0
 +
TENSTAD DB "Enter start address=#C000",0
 +
TEDSTAD EQU $-5
 +
 +
PCOM
 +
        LD A,(MODOK)
 +
        RLA
 +
        JP NC,PLDBUG
 +
        CALL CLS
 +
        CALL COPYTAB
 +
        LD HL,-1-LENP
 +
        LD DE,-1
 +
        LD BC,-MUZ-LENP
 +
        LDDR
 +
        LD BC,LENP
 +
        LD HL,(LENGTH)
 +
        ADD HL,BC
 +
        LD (LENGTH),HL
 +
        PUSH HL
 +
        ;LD HL,ENDP-1
 +
        ;LDDR
 +
        LD HL,T_ENT
 +
        LD DE,#48EA
 +
        CALL PRTEXT
 +
        LD HL,TLEN
 +
        LD DE,#4863
 +
        CALL PRTEXT
 +
        POP HL
 +
        PUSH HL
 +
        INC E
 +
        CALL PRNUM
 +
        POP HL
 +
        CALL PRNUMH
 +
        LD BC,0
 +
PCOMIN  PUSH BC
 +
        LD HL,TENSTAD
 +
        LD DE,#48A5
 +
        PUSH DE
 +
        CALL PRTEXT
 +
        POP HL
 +
        INC L
 +
        POP BC
 +
        LD A,C
 +
        ADD A,TEDSTAD-TENSTAD
 +
        CALL PRCU
 +
        CALL IYKEY
 +
        JR NC,PCOMQQ
 +
        CP 13
 +
        JR Z,PCOMOK
 +
        LD E,A
 +
        SUB "0
 +
        RES 5,A
 +
        CP "G"-"0
 +
        JR NC,PCOMIN
 +
        CP "A"-"0
 +
        JR NC,PCOMSB
 +
        CP 10
 +
        JR NC,PCOMIN
 +
        JR $+4
 +
PCOMSB  SUB "A"-":
 +
PCOMDG  LD HL,TEDSTAD
 +
        ADD HL,BC
 +
        LD (HL),E
 +
        LD DE,PCOMOK+1-TEDSTAD
 +
        ADD HL,DE
 +
        LD (HL),A
 +
        LD A,C
 +
        XOR 1
 +
        LD C,A
 +
        JR PCOMIN
 +
PCOMOK  LD HL,#C000
 +
        LD A,H
 +
        DB "))))
 +
        OR L
 
         LD H,A
 
         LD H,A
        LD DE,tab_frq
+
        LD L,0
        LD BC,#C0
+
        LD (CADDR+1),HL
        LDIR
+
        LD DE,LENP
        RET
+
        ADD HL,DE
PPLAY
+
         SUB 'PLAYER
MODOK  SCF
 
        JR C,PLDBUG
 
        CALL COPYTAB
 
      CALL initia
 
PPLAY0
 
        RES 5,(IY+1)
 
        HALT
 
        CALL play
 
        BIT 5,(IY+1)
 
        JR Z,PPLAY0
 
        LD A,(23560)
 
      OR #20
 
        CP "f
 
        JR NZ,stop
 
        CALL play,play
 
        JR PPLAY0
 
stop
 
      CALL deinit
 
AYOFF
 
        LD DE,#E00
 
OFF0    LD BC,-3
 
        DEC D
 
        OUT (C),D
 
        LD B,#BF
 
        OUT (C),E
 
        JR NZ,OFF0
 
        RET
 
 
 
PSAVE
 
        LD A,(MODOK)
 
        RLA
 
        JP NC,PLDBUG
 
        LD A,"m
 
        LD (FNEXT),A
 
        CALL SAVE
 
        JP CLS
 
 
 
PREN
 
        LD A,(MODOK)
 
        RLA
 
        JP NC,PLDBUG
 
 
 
        LD HL,MUZ
 
        LD DE,LINBUF
 
        LD BC,256
 
        LDIR
 
        LD LX,20
 
PRENST
 
        PUSH BC
 
        CALL PRBY
 
        POP BC
 
        PUSH BC
 
        LD A,LX
 
        CALL 3742
 
        INC L
 
        LD A,C
 
        ADD A,6
 
        CALL PRCU
 
        POP BC
 
        LD HL,MUZ+#1E
 
        LD A,LX
 
        RRA
 
        JR NC,$+5
 
        LD HL,MUZ+#42
 
        LD B,0
 
        ADD HL,BC
 
        CALL IYKEY
 
        JP NC,PRENNO
 
        ADD A,-13
 
        JR Z,PRENQQ
 
        LD DE,PRENST
 
        PUSH DE
 
        LD DE,#1F20
 
        DEC A
 
        JR Z,PRENEXT
 
        DEC A
 
        JR Z,PRENGR
 
        ADD A,3
 
         JP Z,WORKDEL
 
        ADD A,2
 
        JR NC,PRENNUD
 
        LD A,LX
 
        XOR 1
 
 
         LD LX,A
 
         LD LX,A
         RET
+
         ;LD (MUZ+1),HL
PRENNUD INC A
+
         EX DE,HL
        JR Z,PRENIC
+
  ;сонг лежит в MUZ+LENP
        INC A
+
  ;пересчитываем его,как будто он в DE
        JP Z,WORKDC
+
         LD B,D,C,E
        INC A
+
         LD DE,MUZ+LENP
        RET Z
+
         CALL initia3
        INC A
+
        CALL PCOMCH
        JP Z,CAPLNT
+
         LD HL,PLAYER
        SUB 193
 
        RET Z
 
        DEC A
 
        RET Z
 
        DEC A
 
        RET Z
 
        SUB 55
 
        CP 172
 
        RET Z
 
        CP E
 
        RET C
 
        PUSH BC
 
        CALL RECODE-1
 
        LD (HL),B
 
         POP BC
 
PRENIC JP WORKIC
 
PRENGR LD A,D
 
        INC A
 
        SUB C
 
        PUSH BC
 
        LD C,A
 
         LD B,0
 
        LD D,H
 
        LD E,L
 
        INC HL
 
        LDIR
 
        DEC DE
 
         LD A,32
 
        LD (DE),A
 
         POP BC
 
        RET
 
PRENEXT LD A,D
 
        INC A
 
        SUB C
 
         LD B,A
 
        LD E,32
 
PRENEX0 LD A,(HL)
 
        LD (HL),E
 
        LD E,A
 
        INC HL
 
        DJNZ PRENEX0
 
        RET
 
PRENQQ
 
        RET
 
PRENNO
 
 
         LD DE,MUZ
 
         LD DE,MUZ
        LD HL,LINBUF
 
        LD BC,256
 
        LDIR
 
        RET
 
CAPLNT
 
        LD A,(23658)
 
        XOR 8
 
        LD (23658),A
 
        RET
 
 
TLEN    DB "Compiled length=",0
 
T_ENT  DB "Press <ENTER>",0
 
TENSTAD DB "Enter start address=#C000",0
 
TEDSTAD EQU $-5
 
 
PCOM
 
        LD A,(MODOK)
 
        RLA
 
        JP NC,PLDBUG
 
        CALL CLS
 
        CALL COPYTAB
 
        LD HL,-1-LENP
 
        LD DE,-1
 
        LD BC,-MUZ-LENP
 
        LDDR
 
 
         LD BC,LENP
 
         LD BC,LENP
        LD HL,(LENGTH)
 
        ADD HL,BC
 
        LD (LENGTH),HL
 
        PUSH HL
 
      ;LD HL,ENDP-1
 
      ;LDDR
 
        LD HL,T_ENT
 
        LD DE,#48EA
 
        CALL PRTEXT
 
        LD HL,TLEN
 
        LD DE,#4863
 
        CALL PRTEXT
 
        POP HL
 
        PUSH HL
 
        INC E
 
        CALL PRNUM
 
        POP HL
 
        CALL PRNUMH
 
        LD BC,0
 
PCOMIN  PUSH BC
 
        LD HL,TENSTAD
 
        LD DE,#48A5
 
        PUSH DE
 
        CALL PRTEXT
 
        POP HL
 
        INC L
 
        POP BC
 
        LD A,C
 
        ADD A,TEDSTAD-TENSTAD
 
        CALL PRCU
 
        CALL IYKEY
 
        JR NC,PCOMQQ
 
        CP 13
 
        JR Z,PCOMOK
 
        LD E,A
 
        SUB "0
 
        RES 5,A
 
        CP "G"-"0
 
        JR NC,PCOMIN
 
        CP "A"-"0
 
        JR NC,PCOMSB
 
        CP 10
 
        JR NC,PCOMIN
 
        JR $+4
 
PCOMSB  SUB "A"-":
 
PCOMDG  LD HL,TEDSTAD
 
        ADD HL,BC
 
        LD (HL),E
 
        LD DE,PCOMOK+1-TEDSTAD
 
        ADD HL,DE
 
        LD (HL),A
 
        LD A,C
 
        XOR 1
 
        LD C,A
 
        JR PCOMIN
 
PCOMOK  LD HL,#C000
 
        LD A,H
 
        DB "))))
 
        OR L
 
      LD H,A
 
        LD L,0
 
        LD (CADDR+1),HL
 
        LD DE,LENP
 
        ADD HL,DE
 
      SUB 'PLAYER
 
      LD LX,A
 
      ;LD (MUZ+1),HL
 
      EX DE,HL
 
;сонг лежит в MUZ+LENP
 
;пересчитываем его,как будто он в DE
 
      LD B,D,C,E
 
      LD DE,MUZ+LENP
 
      CALL initia3
 
        CALL PCOMCH
 
      LD HL,PLAYER
 
      LD DE,MUZ
 
      LD BC,LENP
 
      LDIR
 
      XOR A
 
      SUB LX
 
      LD LX,A
 
      CALL PCOMCH
 
 
CADDR  LD HL,#C000
 
        LD (SSTART+1),HL
 
        LD A,"C
 
        LD (FNEXT),A
 
        CALL SAVE
 
        LD HL,0
 
        LD (SSTART+1),HL
 
PCOMQQ
 
        LD HL,MUZ
 
        PUSH HL
 
        JP PLDCPU
 
PCOMCH
 
        LD HL,TABC
 
        LD BC,LTABC
 
PCOMCH0 LD E,(HL)
 
        INC HL
 
      LD A,(HL)
 
      SUB #C0-'PLAYER
 
      LD D,A
 
        INC HL
 
        LD A,(DE)
 
        ADD A,LX
 
        LD (DE),A
 
        DEC BC
 
        LD A,B
 
        OR C
 
        JR NZ,PCOMCH0
 
        RET
 
PHELP
 
        CALL CLS
 
      IFN 0
 
        DI
 
        LD (PHELPE+1),SP
 
        LD HL,-1-LENP
 
        LD DE,-1
 
        LD BC,-MUZ-LENP
 
        LDDR
 
        LD HL,#5FFF
 
        INC B
 
        LDDR
 
        LD HL,PHELPE
 
        LD (#5E33),HL
 
        LD HL,TEXT
 
        LD (#5D64),HL
 
        LD HL,PAKHELP+6
 
        JP #5D5A
 
 
PHELPE  LD SP,0
 
      XOR A
 
      LD (DE),A
 
      LD (TEXT-1),A
 
        LD HL,MUZ+LENP-1
 
        LD DE,#5FFF
 
        LD BC,256
 
        LDDR
 
        EI
 
      ENDIF
 
        CALL LISTER
 
      IFN 0
 
        LD HL,MUZ+LENP
 
        LD DE,MUZ
 
        LD B,64
 
        LDIR
 
      ENDIF
 
        JP CLS
 
 
PSORT
 
        LD A,(MODOK)
 
        RLA
 
        JP NC,PLDBUG
 
 
 
        LD DE,MUZ+201 ;POS
 
 
        LD C,0 ;CURR.PAT
 
PSORT0
 
        LD A,(DE)
 
        CP -1
 
        JR Z,POK
 
        LD B,A
 
        CP C
 
        JR C,PSORTOK
 
        LD H,D
 
        LD L,E
 
PSORT1  LD A,(HL)
 
        CP -1
 
        JR Z,PSORT1Q
 
        CP B
 
        LD (HL),C
 
        JR Z,PSORT1E
 
        CP C
 
        LD (HL),B
 
        JR Z,$+3
 
        LD (HL),A
 
PSORT1E INC HL
 
        JR PSORT1
 
PSORT1Q
 
        LD A,B
 
        PUSH BC
 
        PUSH DE
 
        LD HL,(MUZ+103)
 
        SLA C
 
        LD B,'MUZ
 
        ADD HL,BC
 
        EX DE,HL
 
        LD HL,(MUZ+103)
 
        ADD A,A
 
        LD C,A
 
        ADD HL,BC
 
        LD B,6
 
PSORT2  LD A,(DE)
 
        LD C,(HL)
 
        LD (HL),A
 
        LD A,C
 
        LD (DE),A
 
        INC HL
 
        INC DE
 
        DJNZ PSORT2
 
        POP DE
 
        POP BC
 
        INC C,C,C
 
PSORTOK
 
        INC DE
 
        JR PSORT0
 
 
POK
 
        LD HL,#58E0
 
        LD DE,#58E1
 
        LD BC,31
 
        LD (HL),#44
 
 
         LDIR  
 
         LDIR  
        LD HL,TOK
 
        LD DE,#40E6
 
        CALL PRTEXT
 
        CALL IYKEY
 
        JP CLS
 
 
TPOSS  DB "POSITIONS:",0
 
        DB "PATTERNS:",0
 
        DB "TRACKS:",0
 
 
        DB "SAMPLES:",0
 
        DB "ORNAMENTS:",0
 
 
TOK    DB "OPERATION COMPLETED OK.",0
 
 
TA_B    DB " -> 1. A<>B",0
 
TB_C    DB "2. B<>C",0
 
 
PSWAP
 
        LD A,(MODOK)
 
        RLA
 
        JP NC,PLDBUG
 
        LD HL,TA_B
 
        LD DE,#4895
 
        CALL PRTEXT
 
        INC HL
 
        LD DE,#48B8
 
        CALL PRTEXT
 
 
PSWAPK  CALL IYKEY
 
        JP NC,CLS
 
        CP "2
 
        JR Z,ACB
 
        CP "1
 
        JR NZ,PSWAPK
 
        LD A,197
 
        LD (ACBX1),A
 
        LD A,193
 
        LD (ACBX2),A
 
ACB    LD HL,MUZ
 
        DI
 
        LD (Sav_SP0+1),SP
 
        LD D,H
 
        LD E,L
 
        LD BC,100
 
        ADD HL,BC
 
        INC HL
 
        LD SP,HL
 
        ADD HL,BC
 
 
         XOR A
 
         XOR A
ACBMAX  LD C,(HL)
+
         SUB LX
        INC C
+
         LD LX,A
        JR Z,ACBMAXQ
+
         CALL PCOMCH
        DEC C
+
        INC HL
+
CADDR  LD HL,#C000
        CP C
+
        LD (SSTART+1),HL
        JR NC,ACBMAX
+
        LD A,"C
        LD A,C
+
        LD (FNEXT),A
        JR ACBMAX
+
        CALL SAVE
ACBMAXQ POP HL;AF
+
        LD HL,0
        POP HL
+
        LD (SSTART+1),HL
        ADD HL,DE
+
PCOMQQ
 
+
        LD HL,MUZ
        LD SP,HL
+
        PUSH HL
ACB0    POP BC
+
        JP PLDCPU
        POP DE
+
PCOMCH
ACBX1  POP HL    ;PUSH BC
+
        LD HL,TABC
        PUSH DE
+
        LD BC,LTABC
ACBX2  PUSH HL  ;POP BC
+
PCOMCH0 LD E,(HL)
        POP DE
+
        INC HL
        POP HL
 
         SUB 3
 
        JR NC,ACB0
 
         LD A,225
 
        LD (ACBX1),A
 
         LD A,229
 
        LD (ACBX2),A
 
Sav_SP0 LD SP,0
 
        EI
 
        JP POK
 
PRMENU
 
        CALL DEPKFNT
 
        LD HL,#5800
 
        LD DE,#5801
 
        LD BC,31
 
        LD (HL),6
 
        LDIR
 
        LD HL,#5A40
 
        LD DE,#5A41
 
        LD C,128
 
        LD (HL),7
 
        LDIR
 
        LD C,63
 
        LD (HL),6
 
        LDIR
 
        LD HL,TPTUTIL
 
        LD DE,#4004
 
        CALL PRTEXT
 
        LD HL,TBY
 
        LD DE,#50E3
 
        CALL PRTEXT
 
        LD HL,TMENU
 
        LD DE,#4809
 
        PUSH DE
 
        LD LX,0
 
PRMENU0 PUSH DE
 
        INC LX
 
        LD C,0
 
PRMENU2 LD A,(HL)
 
        INC HL
 
        CP 32
 
        JR C,$+7
 
        CALL PRSYM
 
        JR PRMENU2
 
        POP DE
 
        CALL NXTLINE
 
        XOR A
 
        OR (HL)
 
        JR NZ,PRMENU0
 
        LD A,(MODOK)
 
        RLA
 
        JR NC,PRMENNN
 
        CALL PRBY
 
        CALL PRNS
 
        LD HL,(LENGTH)
 
        LD DE,#5040
 
        PUSH HL
 
        CALL PRNUM
 
        POP HL
 
        CALL PRNUMH
 
        LD A,(MUZ+99)
 
        LD HL,TFRQTAB
 
PRMNFR0 SUB 1
 
        JR C,PRMENFR
 
        LD E,A
 
        XOR A
 
        LD B,H
 
        CPIR
 
        LD A,E
 
        JR PRMNFR0
 
PRMENFR LD DE,#5050
 
        CALL PRTEXT
 
PRMENNN POP HL
 
        CALL FINDATR-1
 
        LD H,A
 
        LD B,LX
 
        RET
 
TFRQTAB
 
        DB "ProTracker 3.1",0
 
        DB "SoundTracker or PT2",0
 
        DB "ASM or PSC",0
 
        DB "Real sound",0
 
PRNS
 
        LD HL,MUZ+105
 
        LD BC,#2000
 
        LD D,C
 
PRNSsmp
 
 
         LD A,(HL)
 
         LD A,(HL)
         INC HL
+
         SUB #C0-'PLAYER
        OR (HL)
+
        LD D,A
        INC HL
+
        INC HL
        JR Z,$+3
+
        LD A,(DE)
        INC D
+
        ADD A,LX
        DJNZ PRNSsmp
+
        LD (DE),A
        LD B,#10
+
        DEC BC
PRNSorn
+
        LD A,B
         LD A,(HL)
+
        OR C
        INC HL
+
        JR NZ,PCOMCH0
        OR (HL)
+
        RET
        INC HL
+
PHELP
        JR Z,$+3
+
        CALL CLS
        INC C
+
         IFN 0
        DJNZ PRNSorn
+
        DI
      LD A,C
+
        LD (PHELPE+1),SP
      PUSH AF
+
        LD HL,-1-LENP
      PUSH DE
+
        LD DE,-1
 
+
        LD BC,-MUZ-LENP
        LD HL,MUZ+201
+
        LDDR
 +
        LD HL,#5FFF
 +
        INC B
 +
        LDDR
 +
        LD HL,PHELPE
 +
        LD (#5E33),HL
 +
        LD HL,TEXT
 +
        LD (#5D64),HL
 +
        LD HL,PAKHELP+6
 +
        JP #5D5A
 +
 +
PHELPE  LD SP,0
 
         XOR A
 
         XOR A
         LD D,A
+
         LD (DE),A
SRTMAX LD C,(HL)
+
        LD (TEXT-1),A
        INC C
+
        LD HL,MUZ+LENP-1
        JR Z,SRTMAXQ
+
        LD DE,#5FFF
        INC D
+
        LD BC,256
        DEC C
+
        LDDR
        INC HL
+
        EI
        CP C
+
        ENDIF
        JR NC,SRTMAX
+
        CALL LISTER
 +
        IFN 0
 +
        LD HL,MUZ+LENP
 +
        LD DE,MUZ
 +
        LD B,64
 +
        LDIR
 +
        ENDIF
 +
        JP CLS
 +
 +
PSORT
 +
        LD A,(MODOK)
 +
        RLA
 +
        JP NC,PLDBUG
 +
 +
 +
        LD DE,MUZ+201 ;POS
 +
 +
        LD C,0 ;CURR.PAT
 +
PSORT0
 +
        LD A,(DE)
 +
        CP -1
 +
        JR Z,POK
 +
        LD B,A
 +
        CP C
 +
        JR C,PSORTOK
 +
        LD H,D
 +
        LD L,E
 +
PSORT1  LD A,(HL)
 +
        CP -1
 +
        JR Z,PSORT1Q
 +
        CP B
 +
        LD (HL),C
 +
        JR Z,PSORT1E
 +
        CP C
 +
        LD (HL),B
 +
        JR Z,$+3
 +
        LD (HL),A
 +
PSORT1E INC HL
 +
        JR PSORT1
 +
  PSORT1Q
 +
        LD A,B
 +
        PUSH BC
 +
        PUSH DE
 +
        LD HL,(MUZ+103)
 +
        SLA C
 +
        LD B,'MUZ
 +
        ADD HL,BC
 +
        EX DE,HL
 +
        LD HL,(MUZ+103)
 +
        ADD A,A
 +
        LD C,A
 +
        ADD HL,BC
 +
        LD B,6
 +
PSORT2  LD A,(DE)
 +
        LD C,(HL)
 +
        LD (HL),A
 +
        LD A,C
 +
        LD (DE),A
 +
        INC HL
 +
        INC DE
 +
        DJNZ PSORT2
 +
        POP DE
 +
        POP BC
 +
        INC C,C,C
 +
PSORTOK
 +
        INC DE
 +
        JR PSORT0
 +
 +
POK
 +
        LD HL,#58E0
 +
        LD DE,#58E1
 +
        LD BC,31
 +
        LD (HL),#44
 +
        LDIR
 +
        LD HL,TOK
 +
        LD DE,#40E6
 +
        CALL PRTEXT
 +
        CALL IYKEY
 +
        JP CLS
 +
 +
TPOSS  DB "POSITIONS:",0
 +
        DB "PATTERNS:",0
 +
        DB "TRACKS:",0
 +
 +
        DB "SAMPLES:",0
 +
        DB "ORNAMENTS:",0
 +
 +
TOK    DB "OPERATION COMPLETED OK.",0
 +
 +
TA_B    DB " -> 1. A<>B",0
 +
TB_C    DB "2. B<>C",0
 +
 +
PSWAP
 +
        LD A,(MODOK)
 +
        RLA
 +
        JP NC,PLDBUG
 +
        LD HL,TA_B
 +
        LD DE,#4895
 +
        CALL PRTEXT
 +
        INC HL
 +
        LD DE,#48B8
 +
        CALL PRTEXT
 +
 +
PSWAPK  CALL IYKEY
 +
        JP NC,CLS
 +
        CP "2
 +
        JR Z,ACB
 +
        CP "1
 +
        JR NZ,PSWAPK
 +
        LD A,197
 +
        LD (ACBX1),A
 +
        LD A,193
 +
        LD (ACBX2),A
 +
ACB    LD HL,MUZ
 +
        DI
 +
        LD (Sav_SP0+1),SP
 +
        LD D,H
 +
        LD E,L
 +
        LD BC,100
 +
        ADD HL,BC
 +
        INC HL
 +
        LD SP,HL
 +
        ADD HL,BC
 +
        XOR A
 +
ACBMAX  LD C,(HL)
 +
        INC C
 +
        JR Z,ACBMAXQ
 +
        DEC C
 +
        INC HL
 +
        CP C
 +
        JR NC,ACBMAX
 +
        LD A,C
 +
        JR ACBMAX
 +
ACBMAXQ POP HL;AF
 +
        POP HL
 +
        ADD HL,DE
 +
 +
        LD SP,HL
 +
ACB0    POP BC
 +
        POP DE
 +
ACBX1  POP HL    ;PUSH BC
 +
        PUSH DE
 +
ACBX2  PUSH HL  ;POP BC
 +
        POP DE
 +
        POP HL
 +
        SUB 3
 +
        JR NC,ACB0
 +
        LD A,225
 +
        LD (ACBX1),A
 +
        LD A,229
 +
        LD (ACBX2),A
 +
Sav_SP0 LD SP,0
 +
        EI
 +
        JP POK
 +
PRMENU
 +
        CALL DEPKFNT
 +
        LD HL,#5800
 +
        LD DE,#5801
 +
        LD BC,31
 +
        LD (HL),6
 +
        LDIR
 +
        LD HL,#5A40
 +
        LD DE,#5A41
 +
        LD C,128
 +
        LD (HL),7
 +
        LDIR
 +
        LD C,63
 +
        LD (HL),6
 +
        LDIR
 +
        LD HL,TPTUTIL
 +
        LD DE,#4004
 +
        CALL PRTEXT
 +
        LD HL,TBY
 +
        LD DE,#50E3
 +
        CALL PRTEXT
 +
        LD HL,TMENU
 +
        LD DE,#4809
 +
        PUSH DE
 +
        LD LX,0
 +
PRMENU0 PUSH DE
 +
        INC LX
 +
        LD C,0
 +
PRMENU2 LD A,(HL)
 +
        INC HL
 +
        CP 32
 +
        JR C,$+7
 +
        CALL PRSYM
 +
        JR PRMENU2
 +
        POP DE
 +
        CALL NXTLINE
 +
        XOR A
 +
        OR (HL)
 +
        JR NZ,PRMENU0
 +
        LD A,(MODOK)
 +
        RLA
 +
        JR NC,PRMENNN
 +
        CALL PRBY
 +
        CALL PRNS
 +
        LD HL,(LENGTH)
 +
        LD DE,#5040
 +
        PUSH HL
 +
        CALL PRNUM
 +
        POP HL
 +
        CALL PRNUMH
 +
        LD A,(MUZ+99)
 +
        LD HL,TFRQTAB
 +
PRMNFR0 SUB 1
 +
        JR C,PRMENFR
 +
        LD E,A
 +
        XOR A
 +
        LD B,H
 +
        CPIR
 +
        LD A,E
 +
        JR PRMNFR0
 +
PRMENFR LD DE,#5050
 +
        CALL PRTEXT
 +
PRMENNN POP HL
 +
        CALL FINDATR-1
 +
        LD H,A
 +
        LD B,LX
 +
        RET
 +
TFRQTAB
 +
        DB "ProTracker 3.1",0
 +
        DB "SoundTracker or PT2",0
 +
        DB "ASM or PSC",0
 +
        DB "Real sound",0
 +
PRNS
 +
        LD HL,MUZ+105
 +
        LD BC,#2000
 +
        LD D,C
 +
PRNSsmp
 +
        LD A,(HL)
 +
        INC HL
 +
        OR (HL)
 +
        INC HL
 +
        JR Z,$+3
 +
        INC D
 +
        DJNZ PRNSsmp
 +
        LD B,#10
 +
PRNSorn
 +
        LD A,(HL)
 +
        INC HL
 +
        OR (HL)
 +
        INC HL
 +
        JR Z,$+3
 +
        INC C
 +
        DJNZ PRNSorn
 
         LD A,C
 
         LD A,C
        JR SRTMAX
 
SRTMAXQ LD BC,3
 
        INC B
 
        SUB C
 
        JR NC,$-2
 
        PUSH BC
 
        PUSH DE
 
        LD A,B
 
        RLCA
 
        ADD A,B
 
        LD B,A
 
        LD HL,(MUZ+103)
 
        LD DE,MUZ
 
        ADD HL,DE ;PATS
 
        LD HX,0
 
SRTNTR
 
        LD DE,LINBUF
 
        LD C,HX
 
        INC C
 
        DEC C
 
        JR Z,SRTNTRA
 
SRTNTR0 LD A,(DE)
 
        INC E
 
        CP (HL)
 
        INC HL
 
        JR NZ,SRTNTR1
 
        LD A,(DE)
 
        CP (HL)
 
        JR Z,SRTNTRQ
 
SRTNTR1 DEC HL
 
        INC E
 
        DEC C
 
        JR NZ,SRTNTR0
 
SRTNTRA LD A,(HL)
 
        LD (DE),A
 
        INC HL
 
        INC E
 
        LD A,(HL)
 
        LD (DE),A
 
        INC HX
 
SRTNTRQ
 
        INC HL
 
        DJNZ SRTNTR
 
 
        LD HL,TPOSS
 
        LD DE,#4040
 
        CALL PRTEXT
 
        INC E
 
        POP AF
 
        CALL PRNUMA
 
        INC HL
 
        LD DE,#4060
 
        CALL PRTEXT
 
        INC E
 
        POP AF
 
        CALL PRNUMA
 
        INC HL
 
        LD DE,#4080
 
        CALL PRTEXT
 
        INC E
 
        LD A,HX
 
        CALL PRNUMA
 
 
        INC HL
 
        LD DE,#40A0
 
        CALL PRTEXT
 
        INC E
 
        POP AF
 
        CALL PRNUMA
 
        INC HL
 
        LD DE,#40C0
 
        CALL PRTEXT
 
        INC E
 
        POP AF
 
        JP PRNUMA
 
PRBY
 
        LD HL,TSONG
 
        LD DE,#5080
 
        CALL PRTEXT
 
        LD HL,MUZ+#1E
 
        CALL PRSTR-2
 
        LD HL,TSONGBY
 
        LD DE,#50A0
 
        CALL PRTEXT
 
        LD HL,MUZ+#42
 
        LD B,32
 
PRSTR
 
        LD A,(HL)
 
        INC HL
 
        CALL PRSYM
 
        DJNZ PRSTR
 
        RET
 
 
TSONG  DB "MUSIC:",0
 
TSONGBY DB "  BY:",0
 
 
RULILKA
 
        PUSH HL
 
        CALL CURSCNT
 
        LD A,14
 
        LD (CURSOR0-1),A
 
        CALL CURSOR
 
        CALL IYKEY
 
 
         PUSH AF
 
         PUSH AF
        CALL CURRES
 
        LD A,8
 
        LD (CURSOR0-1),A
 
        POP AF
 
        POP HL
 
        SUB 8
 
        JR Z,RUL0
 
        DEC A
 
        JR Z,RULZ
 
        SUB 2
 
        JR NZ,RULILND
 
        CP C
 
        JR NZ,$+3
 
RULZ    LD C,B
 
        DEC C
 
        JR RULILKA
 
RULILND INC A
 
        RET NZ
 
        INC C
 
        LD A,C
 
        SUB B
 
        JR NZ,$+3
 
RUL0    LD C,A
 
        JR RULILKA
 
DDE
 
        INC D
 
        LD A,D
 
        AND 7
 
        RET NZ
 
        LD A,E
 
        ADD A,32
 
        LD E,A
 
        RET C
 
        LD A,D
 
        ADD A,-8
 
        LD D,A
 
        RET
 
 
        LD A,H
 
FINDATR RRA
 
        RRA
 
        RRA
 
        AND 3
 
        OR 88
 
        RET
 
 
NAME
 
        LD C,0
 
WORKPN
 
        PUSH BC
 
        CALL WORKPP
 
        POP BC
 
        LD B,0
 
        LD HL,FILENAM
 
        ADD HL,BC
 
        CALL IYKEY
 
        RET NC
 
        ADD A,-13
 
        RET Z
 
        LD DE,WORKPN
 
 
         PUSH DE
 
         PUSH DE
        LD DE,#720
+
        INC A
+
        LD HL,MUZ+201
        JR NZ,WORKND
+
        XOR A
WORKDEL CP C
+
        LD D,A
        RET Z
+
SRTMAX  LD C,(HL)
        DEC HL
+
        INC C
        LD (HL),E
+
        JR Z,SRTMAXQ
WORKDC  CP C
+
        INC D
        RET Z
+
        DEC C
        DEC C
+
        INC HL
        RET  
+
        CP C
WORKND  SUB -3
+
        JR NC,SRTMAX
        JR Z,WORKIC
+
        LD A,C
        INC A
+
        JR SRTMAX
        JR Z,WORKDC
+
SRTMAXQ LD BC,3
        INC A
+
        INC B
        INC A
+
        SUB C
        JP Z,CAPLNT
+
        JR NC,$-2
        ADD A,6
+
        PUSH BC
        CP E
+
        PUSH DE
        RET C
+
        LD A,B
        CALL RECODE-1
+
        RLCA
        BIT 7,B
+
        ADD A,B
        RET NZ
+
        LD B,A
        LD (HL),B
+
        LD HL,(MUZ+103)
WORKIC  LD A,C
+
        LD DE,MUZ
        SUB D
+
        ADD HL,DE ;PATS
        ADC A,D
+
        LD HX,0
        LD C,A
+
SRTNTR
        RET  
+
        LD DE,LINBUF
 
+
        LD C,HX
        LD B,A
+
        INC C
RECODE
+
        DEC C
        LD A,B
+
        JR Z,SRTNTRA
        CP 198
+
SRTNTR0 LD A,(DE)
        LD B,"[
+
        INC E
        RET Z
+
        CP (HL)
        INC B
+
        INC HL
        CP 205
+
        JR NZ,SRTNTR1
        RET Z
+
        LD A,(DE)
        INC B
+
        CP (HL)
        CP 197
+
        JR Z,SRTNTRQ
        RET Z
+
SRTNTR1 DEC HL
        LD B,"{
+
        INC E
        CP 204
+
        DEC C
        RET Z
+
        JR NZ,SRTNTR0
        INC B
+
SRTNTRA LD A,(HL)
        CP 195
+
        LD (DE),A
        RET Z
+
        INC HL
        INC B
+
        INC E
        CP 203
+
        LD A,(HL)
        RET Z
+
        LD (DE),A
        INC B
+
        INC HX
        CP 226
+
SRTNTRQ
        RET Z
+
        INC HL
        LD B,A
+
        DJNZ SRTNTR
        RET  
+
PRFNDO
+
        LD HL,TPOSS
        SBC HL,BC
+
        LD DE,#4040
        LD (PRCDESC+1),HL
+
        CALL PRTEXT
        LD DE,#4009
+
        INC E
        LD C,0
+
        POP AF
PRFN
+
        CALL PRNUMA
        LD B,8
+
        INC HL
        CALL PRSYM-1
+
        LD DE,#4060
        INC HL
+
        CALL PRTEXT
        DJNZ $-4
+
        INC E
        DB ">.
+
        POP AF
        CALL PRSYM
+
        CALL PRNUMA
 +
        INC HL
 +
        LD DE,#4080
 +
        CALL PRTEXT
 +
        INC E
 +
        LD A,HX
 +
        CALL PRNUMA
 +
 +
        INC HL
 +
        LD DE,#40A0
 +
        CALL PRTEXT
 +
        INC E
 +
        POP AF
 +
        CALL PRNUMA
 +
        INC HL
 +
        LD DE,#40C0
 +
        CALL PRTEXT
 +
        INC E
 +
        POP AF
 +
        JP PRNUMA
 +
PRBY
 +
        LD HL,TSONG
 +
        LD DE,#5080
 +
        CALL PRTEXT
 +
        LD HL,MUZ+#1E
 +
        CALL PRSTR-2
 +
        LD HL,TSONGBY
 +
        LD DE,#50A0
 +
        CALL PRTEXT
 +
        LD HL,MUZ+#42
 +
        LD B,32
 +
PRSTR
 +
        LD A,(HL)
 +
        INC HL
 +
        CALL PRSYM
 +
        DJNZ PRSTR
 +
        RET
 +
 +
TSONG  DB "MUSIC:",0
 +
TSONGBY DB "  BY:",0
 +
 +
RULILKA
 +
        PUSH HL
 +
        CALL CURSCNT
 +
        LD A,14
 +
        LD (CURSOR0-1),A
 +
        CALL CURSOR
 +
        CALL IYKEY
 +
        PUSH AF
 +
        CALL CURRES
 +
        LD A,8
 +
        LD (CURSOR0-1),A
 +
        POP AF
 +
        POP HL
 +
        SUB 8
 +
        JR Z,RUL0
 +
        DEC A
 +
        JR Z,RULZ
 +
        SUB 2
 +
        JR NZ,RULILND
 +
        CP C
 +
        JR NZ,$+3
 +
RULZ    LD C,B
 +
        DEC C
 +
        JR RULILKA
 +
RULILND INC A
 +
        RET NZ
 +
        INC C
 +
        LD A,C
 +
        SUB B
 +
        JR NZ,$+3
 +
RUL0    LD C,A
 +
        JR RULILKA
 +
DDE
 +
        INC D
 +
        LD A,D
 +
        AND 7
 +
        RET NZ
 +
        LD A,E
 +
        ADD A,32
 +
        LD E,A
 +
        RET C
 +
        LD A,D
 +
        ADD A,-8
 +
        LD D,A
 +
        RET
 +
 +
        LD A,H
 +
FINDATR RRA
 +
        RRA
 +
        RRA
 +
        AND 3
 +
        OR 88
 +
        RET
 +
 +
NAME
 +
        LD C,0
 +
WORKPN
 +
        PUSH BC
 +
        CALL WORKPP
 +
        POP BC
 +
        LD B,0
 +
        LD HL,FILENAM
 +
        ADD HL,BC
 +
        CALL IYKEY
 +
        RET NC
 +
        ADD A,-13
 +
        RET Z
 +
        LD DE,WORKPN
 +
        PUSH DE
 +
        LD DE,#720
 +
        INC A
 +
        JR NZ,WORKND
 +
WORKDEL CP C
 +
        RET Z
 +
        DEC HL
 +
        LD (HL),E
 +
WORKDC  CP C
 +
        RET Z
 +
        DEC C
 +
        RET  
 +
WORKND  SUB -3
 +
        JR Z,WORKIC
 +
        INC A
 +
        JR Z,WORKDC
 +
        INC A
 +
        INC A
 +
        JP Z,CAPLNT
 +
        ADD A,6
 +
        CP E
 +
        RET C
 +
        CALL RECODE-1
 +
        BIT 7,B
 +
        RET NZ
 +
        LD (HL),B
 +
WORKIC  LD A,C
 +
        SUB D
 +
        ADC A,D
 +
        LD C,A
 +
        RET  
 +
 +
        LD B,A
 +
RECODE
 +
        LD A,B
 +
        CP 198
 +
        LD B,"[
 +
        RET Z
 +
        INC B
 +
        CP 205
 +
        RET Z
 +
        INC B
 +
        CP 197
 +
        RET Z
 +
        LD B,"{
 +
        CP 204
 +
        RET Z
 +
        INC B
 +
        CP 195
 +
        RET Z
 +
        INC B
 +
        CP 203
 +
        RET Z
 +
        INC B
 +
        CP 226
 +
        RET Z
 +
        LD B,A
 +
        RET  
 +
PRFNDO
 +
        SBC HL,BC
 +
        LD (PRCDESC+1),HL
 +
        LD DE,#4009
 +
        LD C,0
 +
PRFN
 +
        LD B,8
 +
        CALL PRSYM-1
 +
        INC HL
 +
        DJNZ $-4
 +
        DB ">.
 +
        CALL PRSYM
 +
        LD A,(HL)
 +
PRSYM
 +
        PUSH HL
 +
        PUSH DE
 +
        LD L,A
 +
        XOR A
 +
        OR C
 +
        LD H,'FONTS
 +
        JR Z,PRSMED
 +
        DUP 4
 +
        RLCA
 +
        EDUP
 +
        SUB -80
 +
        JP P,PRSSLOW
 +
        LD C,0
 +
        DUP 7
 +
        LD A,(DE)
 +
        OR (HL)
 +
        LD (DE),A
 +
        INC D
 +
        INC H
 +
        EDUP
 +
        LD A,(DE)
 +
        OR (HL)
 +
        LD (DE),A
 +
        POP AF
 +
        LD D,A
 +
        POP HL
 +
        RET
 +
PRSMED  INC E
 +
        INC C
 +
        DUP 8
 +
        DB "~
 +
        RLCA
 +
        RLCA
 +
        LD (DE),A
 +
        INC D
 +
        INC H
 +
        EDUP
 +
        ORG $-2
 +
        JR PRS42D
 +
PRSSLOW LD H,A
 +
        INC C
 +
        DUP 4
 +
        LD A,(DE)
 +
        OR (HL)
 +
        LD (DE),A
 +
        INC E
 +
        DB "$~$
 +
        LD (DE),A
 +
        INC D
 +
        DB "~$
 +
        LD (DE),A
 +
        DEC E
 +
        LD A,(DE)
 +
        OR (HL)
 +
        LD (DE),A
 +
        INC H
 +
        INC D
 +
        EDUP
 +
        ORG $-2
 +
        INC E
 +
PRS42D  POP AF
 +
        LD D,A
 +
        POP HL
 +
        RET
 +
 +
 +
TYN    CALL WINDTXT
 +
        DW #4847,#1F11
 +
        CALL 8020
 +
        JR NC,$-3
 +
TYN0    CALL 8020
 +
        CCF
 +
        JR C,TYNQ
 +
        AND 4
 +
        HALT
 +
        JR Z,TYNQ
 +
        LD A,#DF
 +
        IN A,(-2)
 +
        CPL
 +
        AND 16
 +
        JR Z,TYN0
 +
TYNQ    PUSH AF
 +
        CALL PUTWIN
 +
POPRET  POP AF
 +
        RET
 +
 +
IYKEY  RES 5,(IY+1)
 +
IY0    BIT 5,(IY+1)
 +
        JR Z,IY0
 +
        CALL 8020
 +
        LD A,(23560)
 +
        RET
 +
 +
CURSCNT EX DE,HL
 +
        LD L,C
 +
        LD H,0
 +
        DB ")))))
 +
        ADD HL,DE
 +
        RET
 +
CURSOR  PUSH BC
 
         LD A,(HL)
 
         LD A,(HL)
PRSYM
+
        LD (CURSORR-1),A
        PUSH HL
+
        LD C,CURSCOL
 +
        JR CURSORR
 +
CURRES  PUSH BC
 +
        LD C,5
 +
CURSORR PUSH HL
 +
        LD B,8
 +
CURSOR0 DB "q,
 +
        DJNZ $-2
 +
        POP HL
 +
        POP BC
 +
        RET
 +
 +
EM6    LD BC,262
 +
EM15635
 +
        LD A,195
 +
        LD (23746),A
 +
        LD (EMSP+1),SP
 +
        PUSH BC
 +
        PUSH DE
 +
        PUSH HL
 +
        CALL AYOFF
 +
        LD HL,#5C00
 +
        LD D,'SYSBUF
 +
        LD BC,#400
 +
        LDIR
 +
DRV    LD A,0
 +
        LD (23798),A
 +
        OR #3C
 +
        LD (23830),A
 +
        LD H,L
 +
        LD (23823),HL
 +
        LD (23802),HL
 +
        POP HL
 +
        POP DE
 +
        POP BC
 +
        LD SP,EMSTACK
 +
        CALL 15635
 +
EMSP    LD SP,0
 +
        LD A,201
 +
        LD (23746),A
 +
        RET
 +
ONERROR LD (ERRDE+1),DE
 +
        EX (SP),HL
 +
        LD DE,8020
 +
        OR A
 +
        SBC HL,DE
 +
        JR NZ,ERRSP
 +
        POP HL
 +
ERRDE  LD DE,0
 +
        SCF
 +
        RET
 +
ERRSP  LD SP,0
 +
        LD HL,SYSBUF
 +
        LD DE,#5C00
 +
        LD BC,#400
 +
        LDIR
 +
        CALL DEPKFNT
 +
        LD HL,SAVERR
 +
        CALL WINDTXT
 +
        DW #4848,#2711
 +
        CALL IYKEY
 +
        OR A
 +
OLDRV  LD A,(23833)
 +
        LD (DRV+1),A
 +
        RET
 +
 +
PRCURXY PUSH BC
 +
        PUSH DE
 +
        JR PRCU3
 +
WORKPP  PUSH BC
 +
        LD DE,#400B
 +
        LD HL,FILENAM
 +
        CALL PRFN-2
 +
        LD A,32
 +
        CALL PRSYM
 +
        POP BC
 +
        LD A,C
 +
        CP 8
 +
        SBC A,-17
 +
        LD HL,#4000
 +
PRCU    LD E,A
 +
        PUSH BC
 +
        PUSH DE
 +
        PUSH HL
 +
        JR PRCUS
 +
PRCUR  PUSH BC
 +
        PUSH DE
 +
CURXY  EQU $+1
 +
        LD DE,0
 +
PRCU3  PUSH HL
 +
        LD A,D
 +
        CALL 3742
 +
PRCUS  LD A,E
 +
        RLCA
 +
        ADD A,E
 +
        ADD A,A
 +
        LD C,0
 +
        SBC A,C
 +
        LD B,A
 +
        RRA
 +
        RRA
 +
        RRA
 +
        AND 31
 +
        ADD A,L
 +
        LD L,A
 +
        LD A,B
 +
        CPL
 +
        AND 7
 +
        INC A
 +
        LD B,A
 +
CUR1    PUSH BC
 +
        LD A,#FC
 +
        ADD A,A
 +
        RL C
 +
        DJNZ $-3
 +
        LD B,A
 +
        LD A,C
 +
        XOR (HL)
 +
        DB "w,
 +
        LD A,L
 +
        AND 31
 +
        LD A,B
 +
        JR Z,$+4
 +
        XOR (HL)
 +
        DB "w-$
 +
        POP BC
 +
        LD A,H
 +
        AND 7
 +
        JR NZ,CUR1
 +
CURQ    POP HL
 +
        POP DE
 +
        POP BC
 +
        RET
 +
 +
CLS    LD H,64
 +
        CALL CLA+7
 +
        LD A,COLOUR
 +
CLA    LD BC,#2FF
 +
        LD H,88
 +
        JR $+6
 +
        LD BC,#17FF
 +
        XOR A
 +
        LD L,0
 +
        DB "w
 +
        LD D,H
 +
        LD E,1
 +
        JR $+5
 +
LDIR1  LD BC,256
 +
        LDIR
 +
        RET
 +
NXTLINE
 +
        LD A,E
 +
        ADD A,32
 +
        LD E,A
 +
        RET NC
 +
        LD A,D
 +
        SUB -8
 +
        LD D,A
 +
        RET
 +
PRCATU
 +
        LD DE,SECBUF
 +
        PUSH DE
 +
        PUSH HL
 +
        LD HL,SECBUF
 +
        LD D,L,E,L
 +
        LD BC,#905
 +
        CALL Z,EM15635
 +
        CALL DEPKFNT
 +
        CALL CLS
 +
        CALL DEPKFNT
 +
        LD A,TITLCOL
 +
        LD HL,#5AE0
 +
        DB "w,
 +
        JR NZ,$-2
 +
        LD HL,#5820
 +
        DB "-w
 +
        JR NZ,$-2
 +
        LD DE,#4000
 +
        POP HL
 +
        LD (PRCRE+4),HL
 +
        CALL PRTEXT
 +
        LD DE,#50E0
 +
        LD HL,TFREE
 +
        CALL PRTEXT
 +
        INC E
 +
        LD HL,(SECBUF+#8E5)
 +
        CALL PRNUM
 +
        LD C,B
 +
        POP HL
 +
        LD (PRCATF0-2),HL
 +
        LD DE,#4020
 +
PRCAT0  LD (PRCRE+1),HL
 +
        LD A,C
 +
        CP 88
 +
        RET Z
 +
        XOR A
 +
        OR (HL)
 +
        RET Z
 +
        ;DEC A
 +
        ;JR Z,PRCATNO
 +
        PUSH BC
 
         PUSH DE
 
         PUSH DE
        LD L,A
+
        LD C,3
        XOR A
+
        CALL PRFN
        OR C
+
         IFN zwet
        LD H,'FONTS
 
        JR Z,PRSMED
 
        DUP 4
 
        RLCA
 
        EDUP
 
        SUB -80
 
        JP P,PRSSLOW
 
        LD C,0
 
        DUP 7
 
        LD A,(DE)
 
        OR (HL)
 
        LD (DE),A
 
        INC D
 
        INC H
 
        EDUP
 
        LD A,(DE)
 
        OR (HL)
 
        LD (DE),A
 
        POP AF
 
        LD D,A
 
        POP HL
 
        RET
 
PRSMED  INC E
 
        INC C
 
        DUP 8
 
        DB "~
 
        RLCA
 
        RLCA
 
        LD (DE),A
 
        INC D
 
        INC H
 
        EDUP
 
        ORG $-2
 
        JR PRS42D
 
PRSSLOW LD H,A
 
        INC C
 
        DUP 4
 
        LD A,(DE)
 
        OR (HL)
 
        LD (DE),A
 
        INC E
 
        DB "$~$
 
        LD (DE),A
 
        INC D
 
        DB "~$
 
        LD (DE),A
 
        DEC E
 
        LD A,(DE)
 
        OR (HL)
 
        LD (DE),A
 
        INC H
 
        INC D
 
        EDUP
 
        ORG $-2
 
        INC E
 
PRS42D  POP AF
 
        LD D,A
 
        POP HL
 
        RET
 
 
 
 
 
TYN    CALL WINDTXT
 
        DW #4847,#1F11
 
        CALL 8020
 
        JR NC,$-3
 
TYN0    CALL 8020
 
        CCF
 
        JR C,TYNQ
 
        AND 4
 
        HALT
 
        JR Z,TYNQ
 
        LD A,#DF
 
        IN A,(-2)
 
        CPL
 
        AND 16
 
        JR Z,TYN0
 
TYNQ    PUSH AF
 
        CALL PUTWIN
 
POPRET  POP AF
 
        RET
 
 
 
IYKEY  RES 5,(IY+1)
 
IY0    BIT 5,(IY+1)
 
        JR Z,IY0
 
        CALL 8020
 
        LD A,(23560)
 
        RET
 
 
 
CURSCNT EX DE,HL
 
        LD L,C
 
        LD H,0
 
        DB ")))))
 
        ADD HL,DE
 
        RET
 
CURSOR  PUSH BC
 
      LD A,(HL)
 
      LD (CURSORR-1),A
 
        LD C,CURSCOL
 
        JR CURSORR
 
CURRES  PUSH BC
 
        LD C,5
 
CURSORR PUSH HL
 
        LD B,8
 
CURSOR0 DB "q,
 
        DJNZ $-2
 
        POP HL
 
        POP BC
 
        RET
 
 
 
EM6    LD BC,262
 
EM15635
 
        LD A,195
 
        LD (23746),A
 
        LD (EMSP+1),SP
 
        PUSH BC
 
        PUSH DE
 
        PUSH HL
 
        CALL AYOFF
 
        LD HL,#5C00
 
        LD D,'SYSBUF
 
        LD BC,#400
 
        LDIR
 
DRV    LD A,0
 
        LD (23798),A
 
        OR #3C
 
        LD (23830),A
 
        LD H,L
 
        LD (23823),HL
 
        LD (23802),HL
 
         POP HL
 
 
         POP DE
 
         POP DE
        POP BC
 
        LD SP,EMSTACK
 
        CALL 15635
 
EMSP    LD SP,0
 
        LD A,201
 
        LD (23746),A
 
        RET
 
ONERROR LD (ERRDE+1),DE
 
        EX (SP),HL
 
        LD DE,8020
 
        OR A
 
        SBC HL,DE
 
        JR NZ,ERRSP
 
        POP HL
 
ERRDE  LD DE,0
 
        SCF
 
        RET
 
ERRSP  LD SP,0
 
        LD HL,SYSBUF
 
        LD DE,#5C00
 
        LD BC,#400
 
        LDIR
 
        CALL DEPKFNT
 
        LD HL,SAVERR
 
        CALL WINDTXT
 
        DW #4848,#2711
 
        CALL IYKEY
 
        OR A
 
OLDRV  LD A,(23833)
 
        LD (DRV+1),A
 
        RET
 
 
PRCURXY PUSH BC
 
 
         PUSH DE
 
         PUSH DE
        JR PRCU3
 
WORKPP  PUSH BC
 
        LD DE,#400B
 
        LD HL,FILENAM
 
        CALL PRFN-2
 
        LD A,32
 
        CALL PRSYM
 
        POP BC
 
        LD A,C
 
        CP 8
 
        SBC A,-17
 
        LD HL,#4000
 
PRCU    LD E,A
 
        PUSH BC
 
        PUSH DE
 
        PUSH HL
 
        JR PRCUS
 
PRCUR  PUSH BC
 
        PUSH DE
 
CURXY  EQU $+1
 
        LD DE,0
 
PRCU3  PUSH HL
 
 
         LD A,D
 
         LD A,D
         CALL 3742
+
         RRCA
PRCUS  LD A,E
+
        RRCA
         RLCA
+
         RRCA
         ADD A,E
+
         ADD A,80
         ADD A,A
+
         LD D,A
        LD C,0
+
        LD A,(HL)
        SBC A,C
+
        LD C,#47
        LD B,A
+
        SUB "B
        RRA
+
        JR Z,zwY
        RRA
+
        LD C,#07
        RRA
+
        DEC A
        AND 31
+
        JR Z,zwY
        ADD A,L
+
        LD C,#45
        LD L,A
+
        CP "m"-"C
        LD A,B
+
        JR Z,zwY
        CPL
+
        DEC C
        AND 7
+
        CP "W"-"C
        INC A
+
        JR Z,zwY
        LD B,A
+
        CP "p"-"C
CUR1    PUSH BC
+
        JR NZ,zwN
        LD A,#FC
+
zwY
        ADD A,A
+
        LD B,8
        RL C
+
        LD A,C
        DJNZ $-3
+
        LD (DE),A
        LD B,A
+
        INC E
        LD A,C
+
        DJNZ $-2
        XOR (HL)
+
zwN
        DB "w,
+
         ENDIF
        LD A,L
+
        RES 3,L
        AND 31
 
        LD A,B
 
        JR Z,$+4
 
        XOR (HL)
 
        DB "w-$
 
        POP BC
 
        LD A,H
 
         AND 7
 
        JR NZ,CUR1
 
CURQ    POP HL
 
 
         POP DE
 
         POP DE
        POP BC
+
         CALL NXTLINE
        RET
 
 
 
CLS    LD H,64
 
         CALL CLA+7
 
        LD A,COLOUR
 
CLA    LD BC,#2FF
 
        LD H,88
 
        JR $+6
 
        LD BC,#17FF
 
        XOR A
 
        LD L,0
 
        DB "w
 
        LD D,H
 
        LD E,1
 
        JR $+5
 
LDIR1  LD BC,256
 
        LDIR
 
        RET
 
NXTLINE
 
 
         LD A,E
 
         LD A,E
 
         ADD A,32
 
         ADD A,32
        LD E,A
 
        RET NC
 
 
         LD A,D
 
         LD A,D
         SUB -8
+
         RLA
        LD D,A
+
        CP 80+81
        RET
+
        JR C,PRCprok
PRCATU
+
        LD A,E
 +
        ADD A,64+8
 +
        LD E,A
 +
        LD D,64
 +
PRCprok
 +
        POP BC
 +
        INC C
 +
        ;DB "~
 +
PRCATNO ;DB "w
 +
        LD A,L
 +
        SUB -16
 +
        LD L,A
 +
        JR NZ,PRCAT0
 +
        INC H
 +
        JR PRCAT0
 +
PRCRE
 +
        LD DE,0
 +
        LD HL,0
 +
        LD A,(DE)
 +
        OR A
 +
        JR NZ,$+6
 +
PRCAT
 
         LD DE,SECBUF
 
         LD DE,SECBUF
        PUSH DE
 
        PUSH HL
 
        LD HL,SECBUF
 
        LD D,L,E,L
 
        LD BC,#905
 
        CALL Z,EM15635
 
        CALL DEPKFNT
 
        CALL CLS
 
        CALL DEPKFNT
 
        LD A,TITLCOL
 
        LD HL,#5AE0
 
        DB "w,
 
        JR NZ,$-2
 
        LD HL,#5820
 
        DB "-w
 
        JR NZ,$-2
 
        LD DE,#4000
 
        POP HL
 
        LD (PRCRE+4),HL
 
        CALL PRTEXT
 
        LD DE,#50E0
 
        LD HL,TFREE
 
        CALL PRTEXT
 
        INC E
 
        LD HL,(SECBUF+#8E5)
 
        CALL PRNUM
 
        LD C,B
 
        POP HL
 
        LD (PRCATF0-2),HL
 
        LD DE,#4020
 
PRCAT0  LD (PRCRE+1),HL
 
        LD A,C
 
        CP 88
 
        RET Z
 
 
         XOR A
 
         XOR A
        OR (HL)
+
        LD (ERRSP+1),SP
        RET Z
+
        CALL PRCATU+3
        ;DEC A
+
        XOR A
        ;JR Z,PRCATNO
+
        CP C
        PUSH BC
+
        JP Z,OLDRV
      PUSH DE
+
        LD HL,(PRCDESC+1)
        LD C,3
+
        CALL SAVTEST
        CALL PRFN
+
        JP NZ,PRCCPN
      IFN zwet
+
PRCB    LD B,0
      POP DE
+
PRCATST LD A,B
      PUSH DE
+
        CP C
      LD A,D
+
        JP NC,PRCCPN
      RRCA
+
        LD L,-1
      RRCA
+
        INC L
      RRCA
+
        SUB 22
      ADD A,80
+
         JR NC,$-3
      LD D,A
+
;nom=stolb+4*(stroka+1)
         LD A,(HL)
+
;HL=8*(#1100+nom)
         LD C,#47
+
         ADD A,23
         SUB "B
+
         ADD A,A,A,A
         JR Z,zwY
+
         ADD A,L
         LD C,#07
+
         ;SUB -4
        DEC A
+
        LD H,11
        JR Z,zwY
+
        LD L,A
        LD C,#45
+
        DB ")))
        CP "m"-"C
+
        PUSH HL
        JR Z,zwY
+
        CALL CURSOR
        DEC C
+
        PUSH BC
        CP "W"-"C
+
        LD A,B
        JR Z,zwY
+
        LD (PRCB+1),A
        CP "p"-"C
+
        LD BC,16
        JR NZ,zwN
+
        LD HL,SECBUF
zwY
+
PRCATF0 DEC (HL)
        LD B,8
+
        INC (HL)
        LD A,C
+
        ADD HL,BC
        LD (DE),A
+
        JR Z,PRCATF0
        INC E
+
        ADD A,-1
        DJNZ $-2
+
        JR C,PRCATF0
zwN
+
        CALL PRFNDO
      ENDIF
+
        DB ",~,
        RES 3,L
+
        PUSH HL
      POP DE
+
        LD H,(HL)
      CALL NXTLINE
+
        LD L,A
      LD A,E
+
        LD B,32
      ADD A,32
+
        SUB B
      LD A,D
+
        CP 96
      RLA
+
        LD A,B
      CP 80+81
+
        JR NC,PRFNE
      JR C,PRCprok
+
        LD A,H
        LD A,E
+
        SUB B
        ADD A,64+8
+
        CP 96
        LD E,A
+
        LD A,B
        LD D,64
+
        JR NC,$+4
PRCprok
+
        LD B,H
        POP BC
+
        LD A,L
        INC C
+
PRFNE  CALL PRSYM
        ;DB "~
+
        LD A,B
PRCATNO ;DB "w
+
        CALL PRSYM
        LD A,L
+
        POP BC
        SUB -16
+
        INC C
        LD L,A
+
        CALL PRSTLEN
        JR NZ,PRCAT0
+
        POP BC
        INC H
+
        CALL IYKEY
         JR PRCAT0
+
        POP HL
PRCRE
+
        RET NC
         LD DE,0
+
        CALL CURRES
        LD HL,0
+
        CP 13
        LD A,(DE)
+
         JR Z,PRCDESC
        OR A
+
        SUB 8
        JR NZ,$+6
+
         JP C,PRCRE
PRCAT
+
        JR NZ,PRCATNL
      LD DE,SECBUF
+
        LD A,B
      XOR A
+
        SUB CATHGT
        LD (ERRSP+1),SP
+
        JR NC,$+3
        CALL PRCATU+3
+
        XOR A
 +
        LD B,A
 
         XOR A
 
         XOR A
        CP C
+
PRCATNL DEC A
        JP Z,OLDRV
+
        JR NZ,PRCATNR
        LD HL,(PRCDESC+1)
 
        CALL SAVTEST
 
      JP NZ,PRCCPN
 
PRCB    LD B,0
 
PRCATST LD A,B
 
        CP C
 
      JP NC,PRCCPN
 
      LD L,-1
 
      INC L
 
      SUB 22
 
      JR NC,$-3
 
;nom=stolb+4*(stroka+1)
 
;HL=8*(#1100+nom)
 
      ADD A,23
 
      ADD A,A,A,A
 
      ADD A,L
 
      ;SUB -4
 
        LD H,11
 
        LD L,A
 
        DB ")))
 
        PUSH HL
 
        CALL CURSOR
 
        PUSH BC
 
 
         LD A,B
 
         LD A,B
        LD (PRCB+1),A
+
         ADD A,CATHGT
        LD BC,16
+
         LD B,A
        LD HL,SECBUF
 
PRCATF0 DEC (HL)
 
        INC (HL)
 
        ADD HL,BC
 
        JR Z,PRCATF0
 
         ADD A,-1
 
        JR C,PRCATF0
 
        CALL PRFNDO
 
        DB ",~,
 
        PUSH HL
 
        LD H,(HL)
 
        LD L,A
 
        LD B,32
 
        SUB B
 
        CP 96
 
        LD A,B
 
        JR NC,PRFNE
 
        LD A,H
 
        SUB B
 
        CP 96
 
         LD A,B
 
        JR NC,$+4
 
        LD B,H
 
        LD A,L
 
PRFNE  CALL PRSYM
 
        LD A,B
 
        CALL PRSYM
 
        POP BC
 
        INC C
 
        CALL PRSTLEN
 
        POP BC
 
        CALL IYKEY
 
        POP HL
 
        RET NC
 
        CALL CURRES
 
        CP 13
 
      JR Z,PRCDESC
 
        SUB 8
 
      JP C,PRCRE
 
        JR NZ,PRCATNL
 
        LD A,B
 
        SUB CATHGT
 
        JR NC,$+3
 
 
         XOR A
 
         XOR A
        LD B,A
+
PRCATNR DEC A
      XOR A
+
        JR NZ,PRCATND
PRCATNL DEC A
+
        INC B
        JR NZ,PRCATNR
+
PRCATND DEC A
      LD A,B
+
        JR NZ,PRCATNU
      ADD A,CATHGT
+
PRCATUP XOR A
      LD B,A
+
        CP B
      XOR A
+
        JR Z,$+3
PRCATNR DEC A
+
        DEC B
        JR NZ,PRCATND
+
PRCND  JP PRCATST
        INC B
+
PRCCPN  LD B,C
PRCATND DEC A
+
        JR PRCATUP
        JR NZ,PRCATNU
+
PRCATNU SUB "1"-11
PRCATUP XOR A
+
        CP 4
        CP B
+
        JR NC,PRCND
        JR Z,$+3
+
        LD (DRV+1),A
        DEC B
+
        LD HL,(PRCRE+4)
PRCND  JP PRCATST
+
        JP PRCAT
PRCCPN  LD B,C
+
PRCDESC
        JR PRCATUP
+
        LD HL,0
PRCATNU SUB "1"-11
+
        CALL LDIR9-3
        CP 4
+
        LD E,(HL)
        JR NC,PRCND
+
        INC L
        LD (DRV+1),A
+
        LD D,(HL)
        LD HL,(PRCRE+4)
+
        LD (STADR+1),DE
      JP PRCAT
+
GETbde  INC L
PRCDESC
+
        LD E,(HL)
        LD HL,0
+
        INC L
        CALL LDIR9-3
+
        LD D,(HL)
        LD E,(HL)
+
GETBDE  INC L
        INC L
+
        PUSH DE
        LD D,(HL)
+
        LD A,(HL)
        LD (STADR+1),DE
+
        INC L
GETbde  INC L
+
        LD E,(HL)
        LD E,(HL)
+
        INC L
        INC L
+
        LD D,(HL)
        LD D,(HL)
+
        POP HL
GETBDE  INC L
+
        LD B,A
        PUSH DE
+
        LD C,5
        LD A,(HL)
+
        SCF  
        INC L
+
        RET  
        LD E,(HL)
+
REMFN
        INC L
+
        LD HL,FNBUF
        LD D,(HL)
+
        LD DE,FILENAM
        POP HL
+
LDIR9  LD BC,9
        LD B,A
+
        LDIR
        LD C,5
+
        RET
        SCF  
+
SAVE
        RET  
+
        LD HL,TSAVE
REMFN
+
LENGTH  EQU $+1
        LD HL,FNBUF
+
        LD DE,0
        LD DE,FILENAM
+
        LD (SDESCHL+1),DE
LDIR9  LD BC,9
+
        DEC DE
 +
        INC D
 +
        RET Z
 +
        LD (ERRSP+1),SP
 +
        PUSH DE
 +
        CALL PRCATU
 +
        LD HL,(SSTART+1)
 +
        LD BC,LENGTH
 +
        CALL PRSTLEN
 +
        LD HL,FILENAM
 +
        LD DE,FNBUF
 +
        CALL LDIR9
 +
        CALL NAME
 +
        JP NC,POPRET
 +
        LD HL,LINBUF
 +
        LD DE,8
 +
        LD BC,#105
 +
        CALL EM15635
 +
        POP BC
 +
        LD A,(LINBUF+#E4)
 +
        LD C,A
 +
        LD DE,0
 +
SAV0    LD A,E
 +
        LD (SAVSEC+1),A
 +
        LD HL,WINBUF
 +
        PUSH BC
 +
        PUSH DE
 +
        PUSH HL
 +
        LD BC,#105
 +
        CALL EM15635
 +
        POP HL
 +
        POP DE
 +
        POP BC
 +
SAV1    LD A,C
 +
        OR A
 +
        JP Z,SAVNEON
 +
        CALL SAVTEST
 +
        JR NZ,NOERASE
 +
        LD A,C
 +
        DEC A
 +
        JR Z,SAVON
 +
        PUSH BC
 +
        LD A,L
 +
        OR 15
 +
        LD L,A
 +
        LD A,B
 +
        LD B,(HL)
 +
        DEC L
 +
        LD C,(HL)
 +
        DEC L
 +
        CP (HL)
 +
        RES 2,L
 +
        JR Z,SAVOVER
 +
        RES 3,L
 +
        DEC L
 +
        LD (HL),1
 +
        PUSH DE
 +
        PUSH HL
 +
        LD HL,LINBUF+#F4
 +
        INC (HL)
 +
        LD HL,WINBUF
 +
        CALL EM6
 +
        POP HL
 +
        POP DE
 +
        POP BC
 +
NOERASE DEC C
 +
        LD A,16
 +
        ADD A,L
 +
        LD L,A
 +
        JR NC,SAV1
 +
        INC E
 +
        JR SAV0
 +
SAVOVER
 +
        LD D,B
 +
        LD E,C
 +
        POP BC
 +
        CALL SAVTAM
 +
        XOR A
 +
        LD (SAVFLAG+3),A
 +
        JR SAVALL2
 +
SAVON
 +
        SET 3,L
 +
        INC L
 +
        CALL SAVTAM
 +
        LD E,(HL)
 +
        INC L
 +
        LD D,(HL)
 +
        LD HL,LINBUF+#E5
 +
        ADD A,(HL)
 +
        LD (HL),A
 +
        INC HL
 +
        JR NC,$+3
 +
        INC (HL)
 +
SAVALL  LD HL,LINBUF+#E5
 +
        LD A,(HL)
 +
        SUB B
 +
        LD (HL),A
 +
        INC HL
 +
        JR NC,$+3
 +
        DEC (HL)
 +
SAVALL2 PUSH BC
 +
        PUSH DE
 +
        LD E,C
 +
        LD D,'WINBUF
 +
SDESCHL LD HL,0
 +
        LD BC,MUZ
 +
        ADD HL,BC
 +
        LD C,L
 +
        LD L,-1
 +
        LD B,14
 +
SAVSDES LD A,C
 +
        CP L
 +
        JR Z,SAVSEC
 +
        LD A,(DE)
 +
        DEC E
 +
        LD (HL),A
 +
        DEC L
 +
        DJNZ SAVSDES
 +
SAVS0  LD A,C
 +
        CP L
 +
;;    JR Z,$+4
 +
        LD (HL),0
 +
        DEC HL
 +
        JR NZ,SAVS0
 +
SAVSEC  LD DE,0
 +
        LD HL,WINBUF
 +
        CALL EM6
 +
        POP DE
 +
        POP BC
 +
        LD HL,MUZ
 +
SVNXPAG LD C,6
 +
        CALL EM15635
 +
        LD DE,(23796)
 +
SAVFLAG LD (LINBUF+#E1),DE
 +
        LD HL,MUZ
 +
        LD (SVNXPAG-2),HL
 +
        LD HL,LINBUF
 +
        LD A,H
 +
        LD (SAVFLAG+3),A
 +
        LD DE,8
 +
        JP EM6
 +
SAVNEON
 +
        LD HL,LINBUF+#E4
 +
        LD A,(HL)
 +
        INC (HL)
 +
        CP 128
 +
        RET Z
 +
        PUSH BC
 +
        CALL SAVEPP
 +
SAVNEO0 LD A,(DE)
 +
        LD (HL),A
 +
        INC DE
 +
        INC L
 +
        DJNZ SAVNEO0
 +
        POP BC
 +
        CALL SAVTAM
 +
        LD DE,(LINBUF+#E1)
 +
        LD (HL),E
 +
        INC L
 +
        LD (HL),D
 +
        JP SAVALL
 +
SAVTAM
 +
        PUSH BC
 +
SSTART  LD BC,0
 +
        LD (HL),C
 +
        INC L
 +
        LD (HL),B
 +
        INC L
 +
        LD BC,(LENGTH)
 +
        LD (HL),C
 +
        INC L
 +
        LD (HL),B
 +
        INC L
 +
        POP BC
 +
        LD A,(HL)
 +
        LD (HL),B
 +
        LD C,L
 +
        INC L
 +
        RET
 +
SAVEPP
 +
        LD L,A
 +
        LD H,0
 +
        LD D,H
 +
        DB "))))
 +
        LD E,H
 +
        LD A,E
 +
        LD (SAVSEC+1),A
 +
        LD H,'WINBUF
 +
        PUSH HL
 +
        LD L,D
 +
        LD BC,#105
 +
        CALL EM15635
 +
        POP HL
 +
        LD DE,FILENAM
 +
        LD B,9
 +
        RET
 +
SAVTEST
 +
        PUSH BC,DE,HL
 +
        LD DE,FILENAM
 +
        LD B,9
 +
SAVTST0 LD A,(DE)
 +
        CP (HL)
 +
        JR NZ,POP3
 +
        INC HL,DE
 +
        DJNZ SAVTST0
 +
POP3    POP HL,DE,BC
 +
        RET
 +
PRNUMH
 +
        CALL PRSK
 +
        PUSH HL
 +
        LD A,H
 +
        CALL PRHEX
 +
        LD A,L
 +
        JR PRNUMAQ
 +
PRSK
 +
        LD A,"(
 +
        CALL PR88
 +
        LD A,"#
 +
        JR PR88
 +
PRNUMA
 +
        PUSH HL
 +
        PUSH AF
 +
        LD L,A
 +
        LD H,0
 +
        CALL PRNUM3
 +
        CALL PRSK
 +
        POP AF
 +
PRNUMAQ CALL PRHEX
 +
        LD A,")
 +
        CALL PR88
 +
        POP HL
 +
        RET
 +
PRHEX
 +
        LD C,A
 +
        DUP 4
 +
        RRA
 +
        EDUP
 +
        CALL PRH
 +
        LD A,C
 +
PRH    AND 15
 +
        ADD A,"0
 +
        CP ":
 +
        JR C,$+4
 +
        SUB ":"-"A
 +
        JR PR88
 +
PRAHL
 +
        CALL PR88
 +
        LD A,H
 +
        CALL PR88
 +
        LD A,L
 +
PR88
 +
        PUSH HL
 +
        ADD A,A
 +
        LD L,A
 +
        LD H,15
 +
        DB "))
 +
        JR PRDGUSE
 +
PRSTLEN
 +
        PUSH BC
 +
        LD DE,#4015
 +
        CALL PRNUM
 +
        DB ">,
 +
        CALL PR88
 +
        POP HL
 +
        LD A,(HL)
 +
        INC HL
 +
        LD H,(HL)
 +
        LD L,A
 +
PRNUM  LD BC,10000
 +
        CALL PRDIG
 +
PRNUM4  LD BC,1000
 +
        CALL PRDIG
 +
PRNUM3  LD BC,100
 +
        CALL PRDIG
 +
PRNUM99 LD BC,10
 +
        LD H,B
 +
        CALL PRDIG
 +
        LD C,1
 +
PRDIG  LD A,120
 +
PRDIG0  ADD A,8
 +
        SBC HL,BC
 +
        JR NC,PRDIG0
 +
        ADD HL,BC
 +
        PUSH HL
 +
        LD H,61
 +
        LD L,A
 +
PRDGUSE PUSH DE
 +
        LD B,8
 +
        DB "~
 +
        RRCA
 +
        OR (HL)
 +
        INC L
 +
        LD (DE),A
 +
        INC D
 +
        DJNZ $-6
 +
        POP DE
 +
        POP HL
 +
        INC E
 +
        RET
 +
PRTEXT
 +
        LD C,0
 +
PRTXT  XOR A
 +
        OR (HL)
 +
        RET Z
 +
        INC HL
 +
        CALL PRSYM
 +
        JR PRTXT
 +
GETWIN
 +
        LD HL,LDIRKA
 +
        LD (HL),E
 +
        INC HL
 +
        LD (HL),D
 +
        INC HL
 +
        LD (HL),C
 +
        INC HL
 +
        LD (HL),B
 +
        INC HL
 +
        PUSH BC
 +
        PUSH DE
 +
GETWIN0 PUSH BC
 +
        EX DE,HL
 +
        PUSH HL
 +
        LD B,0
 +
        LDIR
 +
        POP HL
 +
        EX DE,HL
 +
        POP BC
 +
        CALL DDE
 +
        DJNZ GETWIN0
 +
        POP DE
 +
        POP BC
 +
        RET
 +
WINDTXT
 +
        EX (SP),HL
 +
        LD E,(HL)
 +
        INC HL
 +
        LD D,(HL)
 +
        INC HL
 +
        LD C,(HL)
 +
        INC HL
 +
        LD B,(HL)
 +
        INC HL
 +
        EX (SP),HL
 +
        PUSH DE
 +
        PUSH BC
 +
        PUSH DE
 +
        PUSH HL
 +
        LD A,B
 +
        SUB -9
 +
        LD B,A
 +
        CP 50
 +
        LD HL,WINBUF
 +
        CALL C,GETWIN
 +
        EX DE,HL
 +
        PUSH BC
 +
        CALL FINDATR-1
 +
        LD H,A
 +
        CALL LDIR1
 +
        DEC H
 +
        POP BC
 +
        SRL B,B,B
 +
GETWN1  PUSH BC
 +
        PUSH HL
 +
        LD B,C
 +
GWCOL  LD (HL),WINCOL
 +
        INC L
 +
        DJNZ $-3
 +
        POP HL
 +
        LD C,32
 +
        ADD HL,BC
 +
        POP BC
 +
        DJNZ GETWN1
 +
        CALL DEPKFNT
 +
        POP HL
 +
        POP DE
 +
        POP BC
 +
        PUSH BC
 +
WINDTIT LD B,C
 +
        PUSH DE
 +
        XOR A
 +
        LD (DE),A
 +
        INC E
 +
        DJNZ $-2
 +
        POP DE
 +
        CALL DDE
 +
        JR NC,WINDTIT
 +
        POP BC
 +
WINDBOK PUSH BC
 +
        PUSH DE
 +
        LD A,128
 +
        LD (DE),A
 +
        LD B,C
 +
        DEC B
 +
        XOR A
 +
        INC E
 +
        LD (DE),A
 +
        DJNZ $-2
 +
        INC A
 +
        LD (DE),A
 +
        POP DE
 +
        CALL DDE
 +
        POP BC
 +
        DJNZ WINDBOK
 +
        LD B,C
 +
        LD A,-1
 +
        LD (DE),A
 +
        INC E
 +
        DJNZ $-2
 +
        POP DE
 +
        LD B,-2
 +
        PUSH DE
 +
        CALL WIND0XT
 +
        POP HL
 +
        CALL FINDATR-1
 +
        LD H,A
 +
        PUSH HL
 +
        LD (HL),TITLCOL
 +
        INC L
 +
        DEC C
 +
        JR NZ,$-4
 +
        POP HL
 +
        LD DE,64
 +
        ADD HL,DE
 +
        RET
 +
WIND0XT
 +
        PUSH BC
 +
        PUSH DE
 +
        CALL WINDPX0
 +
        POP DE
 +
        INC E
 +
        CALL NXTLINE
 +
        DEC E
 +
        POP BC
 +
        INC B
 +
        XOR A
 +
        OR (HL)
 +
        JR NZ,WIND0XT
 +
        RET
 +
WINDPX0
 +
        LD C,0
 +
        LD B,42
 +
WINDOX0 DEC B
 +
        XOR A
 +
        OR (HL)
 +
        RET Z
 +
        INC HL
 +
        CP 13
 +
        RET Z
 +
        CALL PRSYM
 +
        JR WINDOX0
 +
PUTWIN
 +
        LD HL,LDIRKA
 +
        LD E,(HL)
 +
        INC HL
 +
        LD D,(HL)
 +
        INC HL
 +
        LD C,(HL)
 +
        INC HL
 +
        LD B,(HL)
 +
        INC HL
 +
        PUSH DE
 +
PUTWIN0 PUSH BC
 +
        PUSH DE
 +
        LD B,0
 +
        LDIR
 +
        POP DE
 +
        POP BC
 +
        CALL DDE
 +
        DJNZ PUTWIN0
 +
        POP DE
 +
        LD A,D
 +
        CALL FINDATR
 +
        LD D,A
 +
        CALL LDIR1
 +
DEPKFNT
 +
        LD E,0
 +
DEPKFN1 LD H,#6E
 +
        LD L,E
 +
        LD D,'FONTS
 +
        LD B,4
 +
DEPKFN2 CALL DEPKA
 +
        DB "q$w
 +
        RES 4,H
 +
        CALL DEPKB
 +
        DB "w%q
 +
        CALL DEPKA
 +
        DB "w$q
 +
        RES 4,H
 +
        CALL DEPKB
 +
        DB "q%w
 +
        DJNZ DEPKFN2
 +
        INC E
 +
        JR NZ,DEPKFN1
 +
        RET
 +
DEPKA
 +
        LD A,(DE)
 +
        INC D
 +
        LD C,A
 +
        DB "$$
 +
        SET 4,H
 +
        XOR A
 +
DEPKB  SRL C
 +
        RRA
 +
        SRL C
 +
        RRA
 +
        RET
 +
OUTME
 +
        PUSH BC
 +
        LD BC,FD
 +
        OUT (C),A
 +
        POP BC
 +
        RET
 +
QUIT
 +
        LD HL,SSBREAK
 +
        CALL TYN
 +
PUTWD  RET Z
 +
        JR QUIT3
 +
QUIT2
 +
        CALL TYN
 +
        JR C,PUTWD
 +
        CALL NZ,SAVE
 +
QUIT3
 +
        LD A,23
 +
        CALL OUTME
 +
        LD HL,(#C000)
 +
        LD DE,#FF31
 +
        XOR A
 +
        SBC HL,DE
 +
        JP Z,#C000
 +
        LD H,A,L,A
 +
QUITHL  PUSH HL
 +
        LD A,16
 +
        CALL OUTME
 +
        JP 15663
 +
 +
TFREE  DB "Free:",0
 +
TLOAD  DB "Load file:",0
 +
TSAVE  DB "Save file:",0
 +
 +
TPTUTIL DB "Pro Tracker 3.x Utility v1.367"
 +
        NOP
 +
TBY    DB "(C) 09.03.2004 by Alone Coder"
 +
        DB "/i8",0
 +
 +
TMENU  DB "  LOAD  MODULE",1
 +
        DB "  PLAY  MODULE",1
 +
        DB "  SAVE  MODULE",1
 +
        DB "  COMPILE SONG",1
 +
        DB " SWAP  CHANNELS",1
 +
        DB "  RENAME  SONG",1
 +
        DB " SORT  PATTERNS",1
 +
;      DB "TRACKS/POSITIONS",1
 +
        DB "      HELP",1
 +
        DB "      QUIT",1,0
 +
SSBREAK
 +
        DB " Выход из программы",13,13
 +
        DB "QUIT?STAY?QUIT?STAY?",13
 +
        DB " Sure to quit(Y/N)?",0
 +
SAVERR
 +
        DB "      ERROR",13,13
 +
        DB "  Virtual memory",13
 +
        DB " allocation error",0
 +
LISTER
 +
        ;CALL DEPKFNT
 +
        LD HL,TEXT
 +
        CALL PRPAGE
 +
START  CALL IYKEY
 +
        RET NC
 +
        LD HL,STQ
 +
        PUSH HL
 +
        SUB "9
 +
        JR Z,UP
 +
        INC A
 +
        JR Z,DOWN
 +
        SUB 11-"8
 +
        JR Z,UP
 +
        INC A
 +
        JR Z,DOWN
 +
        INC A
 +
        JR Z,PGDN
 +
        INC A
 +
        JR Z,PGUP
 +
        SUB -3
 +
        JR Z,PGDN
 +
        INC A
 +
        JR Z,PGUP
 +
        POP HL
 +
STQ
 +
        JR START
 +
PGUP
 +
        LD HL,(TOP)
 +
UPPAGE  LD B,HGT
 +
        CALL LINEUP
 +
        DJNZ $-3
 +
PRPAGE  LD (TOP),HL
 +
        LD DE,#4000
 +
        LD B,HGT
 +
PRPAGE0 CALL PRLINE
 +
        CALL NXTLINE
 +
        DJNZ PRPAGE0
 +
        LD (BOTTOM),HL
 +
        RET
 +
PGDN
 +
        LD HL,(BOTTOM)
 +
        LD (TOP),HL
 +
        LD DE,#4000
 +
        LD B,HGT
 +
DNPAGE0 LD A,(HL)
 +
        OR A
 +
        JR Z,UPPAGE
 +
        CALL PRLINE
 +
        CALL NXTLINE
 +
        DJNZ DNPAGE0
 +
        LD (BOTTOM),HL
 +
        RET
 +
BOTTOM=$+1
 +
DOWN
 +
        LD HL,0
 +
        LD A,(HL)
 +
        OR A
 +
        RET Z
 +
        PUSH HL
 +
        CALL SCRUP
 +
        LD HL,(TOP)
 +
        CALL LINEDN
 +
        LD (TOP),HL
 +
        POP HL
 +
        LD DE,#50E0
 +
        CALL PRLINE
 +
        LD (BOTTOM),HL
 +
        RET
 +
TOP=$+1
 +
UP
 +
        LD HL,0
 +
        DEC HL
 +
        LD A,(HL)
 +
        INC HL
 +
        OR A
 +
        RET Z
 +
        CALL LINEUP
 +
        LD (TOP),HL
 +
        PUSH HL
 +
        CALL SCRDN
 +
        LD HL,(BOTTOM)
 +
        CALL LINEUP
 +
        LD (BOTTOM),HL
 +
        POP HL
 +
        LD DE,#4000
 +
PRLINE  PUSH BC
 +
        PUSH DE
 +
        DEC E
 +
        LD BC,#2A00
 +
PRLINEP LD A,(HL)
 +
        OR A
 +
        JR Z,PRLINEQ
 +
        INC HL
 +
        CP 13
 +
        JR Z,PRLINEQ
 +
        CALL PRSYM
 +
        DJNZ PRLINEP
 +
        INC HL
 +
PRLNE
 +
        POP DE
 +
        POP BC
 +
        RET
 +
PRLINEQ LD A,32
 +
        CALL PRSYM
 +
        DJNZ $-5
 +
        JR PRLNE
 +
SCRDN
 +
        LD B,HGT-1
 +
        LD HL,#50E0
 +
SCRDN0  LD D,H,E,L,A,L
 +
        SUB 32
 +
        LD L,A
 +
        JR NC,$+6
 +
        LD A,H
 +
        SUB 8
 +
        LD H,A
 +
        CALL LDIRER
 +
        DJNZ SCRDN0
 +
        RET
 +
LDIRER
 +
        INC B
 +
        PUSH HL
 +
        LD A,8
 +
LDIR0  PUSH DE,HL
 +
        DUP 32
 +
        LDI
 +
        EDUP
 +
        POP HL,DE
 +
        INC H,D
 +
        DEC A
 +
        JR NZ,LDIR0
 +
        POP HL
 +
        RET
 +
SCRUP
 +
        LD B,HGT-1
 +
        LD HL,#4000
 +
SCRUP0  LD D,H,E,L
 +
        CALL NXTLINE
 +
        EX DE,HL
 +
        CALL LDIRER
 +
        DJNZ SCRUP0
 +
        RET
 +
LINEDN
 +
        LD A,(HL)
 +
        OR A
 +
        RET Z
 +
        INC HL
 +
        CP 13
 +
        JR NZ,LINEDN
 +
        RET
 +
LINEUP
 +
        DEC HL
 +
        LD A,(HL)
 +
        OR A
 +
        JR Z,LFQ
 +
LINEUP0 DEC HL
 +
        LD A,(HL)
 +
        OR A
 +
        JR Z,LFQ
 +
        CP 13
 +
        JR NZ,LINEUP0
 +
LFQ    INC HL
 +
        RET
 +
deinit
 +
        LD DE,MUZ
 +
        PUSH DE
 +
        LD HL,TcomT
 +
        LD BC,TcomTln
 
         LDIR  
 
         LDIR  
         RET
+
        POP DE
SAVE
+
         DI
         LD HL,TSAVE
+
         LD HL,105
LENGTH  EQU $+1
+
         ADD HL,DE
         LD DE,0
+
        LD (dei_SP0+1),SP
        LD (SDESCHL+1),DE
+
        LD SP,HL
        DEC DE
+
         LD HL,201-105
        INC D
+
         ADD HL,SP
        RET Z
+
         LD BC,0
        LD (ERRSP+1),SP
+
         LD A,-1
        PUSH DE
+
         CPIR
        CALL PRCATU
+
         OR A ;SUB HL,SP-105
         LD HL,(SSTART+1)
+
         SBC HL,SP
         LD BC,LENGTH
+
         LD BC,105
        CALL PRSTLEN
+
         ADD HL,BC
         LD HL,FILENAM
+
         DEC SP,SP
         LD DE,FNBUF
 
         CALL LDIR9
 
         CALL NAME
 
        JP NC,POPRET
 
         LD HL,LINBUF
 
         LD DE,8
 
         LD BC,#105
 
         CALL EM15635
 
 
         POP BC
 
         POP BC
        LD A,(LINBUF+#E4)
 
        LD C,A
 
        LD DE,0
 
SAV0    LD A,E
 
        LD (SAVSEC+1),A
 
        LD HL,WINBUF
 
 
         PUSH BC
 
         PUSH BC
        PUSH DE
 
        PUSH HL
 
        LD BC,#105
 
        CALL EM15635
 
        POP HL
 
        POP DE
 
        POP BC
 
SAV1    LD A,C
 
 
         OR A
 
         OR A
         JP Z,SAVNEON
+
         SBC HL,BC
        CALL SAVTEST
+
         EX DE,HL
        JR NZ,NOERASE
+
        LD B,49;48
        LD A,C
+
  dia_s0  POP HL
        DEC A
 
        JR Z,SAVON
 
        PUSH BC
 
        LD A,L
 
        OR 15
 
        LD L,A
 
        LD A,B
 
        LD B,(HL)
 
        DEC L
 
        LD C,(HL)
 
        DEC L
 
        CP (HL)
 
        RES 2,L
 
        JR Z,SAVOVER
 
        RES 3,L
 
        DEC L
 
        LD (HL),1
 
        PUSH DE
 
        PUSH HL
 
        LD HL,LINBUF+#F4
 
        INC (HL)
 
        LD HL,WINBUF
 
        CALL EM6
 
        POP HL
 
        POP DE
 
        POP BC
 
NOERASE DEC C
 
        LD A,16
 
        ADD A,L
 
        LD L,A
 
        JR NC,SAV1
 
        INC E
 
        JR SAV0
 
SAVOVER
 
        LD D,B
 
        LD E,C
 
        POP BC
 
         CALL SAVTAM
 
        XOR A
 
        LD (SAVFLAG+3),A
 
        JR SAVALL2
 
SAVON
 
        SET 3,L
 
        INC L
 
        CALL SAVTAM
 
        LD E,(HL)
 
        INC L
 
        LD D,(HL)
 
        LD HL,LINBUF+#E5
 
        ADD A,(HL)
 
        LD (HL),A
 
        INC HL
 
        JR NC,$+3
 
        INC (HL)
 
SAVALL  LD HL,LINBUF+#E5
 
        LD A,(HL)
 
        SUB B
 
        LD (HL),A
 
        INC HL
 
        JR NC,$+3
 
        DEC (HL)
 
SAVALL2 PUSH BC
 
        PUSH DE
 
        LD E,C
 
        LD D,'WINBUF
 
SDESCHL LD HL,0
 
        LD BC,MUZ
 
        ADD HL,BC
 
        LD C,L
 
        LD L,-1
 
        LD B,14
 
SAVSDES LD A,C
 
        CP L
 
        JR Z,SAVSEC
 
        LD A,(DE)
 
        DEC E
 
        LD (HL),A
 
        DEC L
 
        DJNZ SAVSDES
 
SAVS0  LD A,C
 
        CP L
 
;;    JR Z,$+4
 
        LD (HL),0
 
        DEC HL
 
        JR NZ,SAVS0
 
SAVSEC LD DE,0
 
        LD HL,WINBUF
 
        CALL EM6
 
        POP DE
 
        POP BC
 
        LD HL,MUZ
 
SVNXPAG LD C,6
 
        CALL EM15635
 
        LD DE,(23796)
 
SAVFLAG LD (LINBUF+#E1),DE
 
        LD HL,MUZ
 
        LD (SVNXPAG-2),HL
 
        LD HL,LINBUF
 
 
         LD A,H
 
         LD A,H
         LD (SAVFLAG+3),A
+
         CP #40
         LD DE,8
+
         JR C,$+3
        JP EM6
+
         ADD HL,DE
SAVNEON
+
        PUSH HL
        LD HL,LINBUF+#E4
+
        POP HL
         LD A,(HL)
+
        DJNZ dia_s0
        INC (HL)
+
  deiNpa0 LD A,B
        CP 128
+
deiNpa  DEC SP
        RET Z
+
        POP BC
        PUSH BC
+
        INC B
        CALL SAVEPP
+
        JR Z,deiNpaQ
SAVNEO0 LD A,(DE)
+
        DEC B
        LD (HL),A
+
        CP B
        INC DE
+
        JR NC,deiNpa
        INC L
+
        JR deiNpa0
        DJNZ SAVNEO0
+
deiNpaQ
        POP BC
+
        ADD A,3
        CALL SAVTAM
+
        LD B,A
        LD DE,(LINBUF+#E1)
+
dia_p0  POP HL
        LD (HL),E
 
        INC L
 
        LD (HL),D
 
        JP SAVALL
 
SAVTAM
 
        PUSH BC
 
SSTART LD BC,0
 
        LD (HL),C
 
        INC L
 
        LD (HL),B
 
        INC L
 
        LD BC,(LENGTH)
 
        LD (HL),C
 
        INC L
 
        LD (HL),B
 
        INC L
 
        POP BC
 
        LD A,(HL)
 
        LD (HL),B
 
        LD C,L
 
        INC L
 
        RET
 
SAVEPP
 
        LD L,A
 
        LD H,0
 
        LD D,H
 
        DB "))))
 
        LD E,H
 
        LD A,E
 
        LD (SAVSEC+1),A
 
        LD H,'WINBUF
 
        PUSH HL
 
        LD L,D
 
        LD BC,#105
 
        CALL EM15635
 
        POP HL
 
        LD DE,FILENAM
 
        LD B,9
 
        RET
 
SAVTEST
 
        PUSH BC,DE,HL
 
        LD DE,FILENAM
 
        LD B,9
 
SAVTST0 LD A,(DE)
 
        CP (HL)
 
        JR NZ,POP3
 
        INC HL,DE
 
        DJNZ SAVTST0
 
POP3    POP HL,DE,BC
 
        RET
 
PRNUMH
 
        CALL PRSK
 
        PUSH HL
 
 
         LD A,H
 
         LD A,H
         CALL PRHEX
+
         CP #40
        LD A,L
+
         JR C,$+3
        JR PRNUMAQ
 
PRSK
 
        LD A,"(
 
        CALL PR88
 
        LD A,"#
 
        JR PR88
 
PRNUMA
 
        PUSH HL
 
        PUSH AF
 
        LD L,A
 
        LD H,0
 
        CALL PRNUM3
 
        CALL PRSK
 
        POP AF
 
PRNUMAQ CALL PRHEX
 
        LD A,")
 
        CALL PR88
 
        POP HL
 
        RET
 
PRHEX
 
        LD C,A
 
        DUP 4
 
        RRA
 
        EDUP
 
        CALL PRH
 
        LD A,C
 
PRH    AND 15
 
        ADD A,"0
 
        CP ":
 
         JR C,$+4
 
        SUB ":"-"A
 
        JR PR88
 
PRAHL
 
        CALL PR88
 
        LD A,H
 
        CALL PR88
 
        LD A,L
 
PR88
 
        PUSH HL
 
        ADD A,A
 
        LD L,A
 
        LD H,15
 
        DB "))
 
        JR PRDGUSE
 
PRSTLEN
 
        PUSH BC
 
        LD DE,#4015
 
        CALL PRNUM
 
        DB ">,
 
        CALL PR88
 
        POP HL
 
        LD A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
PRNUM  LD BC,10000
 
        CALL PRDIG
 
PRNUM4  LD BC,1000
 
        CALL PRDIG
 
PRNUM3  LD BC,100
 
        CALL PRDIG
 
PRNUM99 LD BC,10
 
        LD H,B
 
        CALL PRDIG
 
        LD C,1
 
PRDIG  LD A,120
 
PRDIG0  ADD A,8
 
        SBC HL,BC
 
        JR NC,PRDIG0
 
        ADD HL,BC
 
        PUSH HL
 
        LD H,61
 
        LD L,A
 
PRDGUSE PUSH DE
 
        LD B,8
 
        DB "~
 
        RRCA
 
        OR (HL)
 
        INC L
 
        LD (DE),A
 
        INC D
 
        DJNZ $-6
 
        POP DE
 
        POP HL
 
        INC E
 
        RET
 
PRTEXT
 
        LD C,0
 
PRTXT  XOR A
 
        OR (HL)
 
        RET Z
 
        INC HL
 
        CALL PRSYM
 
        JR PRTXT
 
GETWIN
 
        LD HL,LDIRKA
 
        LD (HL),E
 
        INC HL
 
        LD (HL),D
 
        INC HL
 
        LD (HL),C
 
        INC HL
 
        LD (HL),B
 
        INC HL
 
        PUSH BC
 
        PUSH DE
 
GETWIN0 PUSH BC
 
        EX DE,HL
 
        PUSH HL
 
        LD B,0
 
        LDIR
 
        POP HL
 
        EX DE,HL
 
        POP BC
 
        CALL DDE
 
        DJNZ GETWIN0
 
        POP DE
 
        POP BC
 
        RET
 
WINDTXT
 
        EX (SP),HL
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        INC HL
 
        LD C,(HL)
 
        INC HL
 
        LD B,(HL)
 
        INC HL
 
        EX (SP),HL
 
        PUSH DE
 
        PUSH BC
 
        PUSH DE
 
        PUSH HL
 
        LD A,B
 
        SUB -9
 
        LD B,A
 
        CP 50
 
        LD HL,WINBUF
 
        CALL C,GETWIN
 
        EX DE,HL
 
        PUSH BC
 
        CALL FINDATR-1
 
        LD H,A
 
        CALL LDIR1
 
        DEC H
 
        POP BC
 
        SRL B,B,B
 
GETWN1  PUSH BC
 
        PUSH HL
 
        LD B,C
 
GWCOL  LD (HL),WINCOL
 
        INC L
 
        DJNZ $-3
 
        POP HL
 
        LD C,32
 
        ADD HL,BC
 
        POP BC
 
        DJNZ GETWN1
 
        CALL DEPKFNT
 
        POP HL
 
        POP DE
 
        POP BC
 
        PUSH BC
 
WINDTIT LD B,C
 
        PUSH DE
 
        XOR A
 
        LD (DE),A
 
        INC E
 
        DJNZ $-2
 
        POP DE
 
        CALL DDE
 
        JR NC,WINDTIT
 
        POP BC
 
WINDBOK PUSH BC
 
        PUSH DE
 
        LD A,128
 
        LD (DE),A
 
        LD B,C
 
        DEC B
 
        XOR A
 
        INC E
 
        LD (DE),A
 
        DJNZ $-2
 
        INC A
 
        LD (DE),A
 
        POP DE
 
        CALL DDE
 
        POP BC
 
        DJNZ WINDBOK
 
        LD B,C
 
        LD A,-1
 
        LD (DE),A
 
        INC E
 
        DJNZ $-2
 
        POP DE
 
        LD B,-2
 
        PUSH DE
 
        CALL WIND0XT
 
        POP HL
 
        CALL FINDATR-1
 
        LD H,A
 
        PUSH HL
 
        LD (HL),TITLCOL
 
        INC L
 
        DEC C
 
        JR NZ,$-4
 
        POP HL
 
        LD DE,64
 
 
         ADD HL,DE
 
         ADD HL,DE
        RET
+
        PUSH HL
WIND0XT
+
        POP HL
        PUSH BC
+
        DJNZ dia_p0
        PUSH DE
+
dei_SP0 LD SP,0
        CALL WINDPX0
+
        EI
        POP DE
+
        RET
        INC E
+
TcomT
        CALL NXTLINE
+
        DB "ProTracker 3.6"
        DEC E
+
TcomTln=$-TcomT
        POP BC
+
PAKHELP
        INC B
+
         NOP
        XOR A
+
TEXT    INCBIN "acbdoc  .W"
         OR (HL)
+
         NOP
        JR NZ,WIND0XT
+
         RET
+
TABC    INCBIN "TABC
WINDPX0
+
LTABC  EQU $-TABC/2
        LD C,0
+
FNBUF  DS 9
        LD B,42
+
DISPLAY $
WINDOX0 DEC B
+
        DS .(-$)
        XOR A
+
TABS
        OR (HL)
+
        INCBIN "tb_PT
        RET Z
+
        INCBIN "tb_ST
        INC HL
+
        INCBIN "tb_ASM
        CP 13
+
        INCBIN "tb_REAL
        RET Z
+
        INCLUDE "PTUPLAY",#C2
        CALL PRSYM
+
initia
        JR WINDOX0
+
        LD DE,MUZ
PUTWIN
+
        LD B,D,C,E
        LD HL,LDIRKA
+
initia3
        LD E,(HL)
+
         ;LD (ia_pos0+1),BC
        INC HL
+
        DI
        LD D,(HL)
+
        LD HL,101
        INC HL
+
        ADD HL,DE
         LD C,(HL)
+
        PUSH HL
        INC HL
+
        LD (sav_SP0+1),SP
        LD B,(HL)
+
        LD SP,HL
        INC HL
+
        POP AF
        PUSH DE
+
        POP HL
PUTWIN0 PUSH BC
+
        ADD HL,BC
        PUSH DE
+
        LD (Psa_chn+1),HL
        LD B,0
+
        LD D,B,E,C
        LDIR
+
         DEC SP,SP
        POP DE
+
        LD B,49;48
        POP BC
+
ia_s0  POP HL
        CALL DDE
+
        ADD HL,DE
        DJNZ PUTWIN0
+
        PUSH HL
        POP DE
+
        POP HL
        LD A,D
+
        DJNZ ia_s0
        CALL FINDATR
 
        LD D,A
 
         CALL LDIR1
 
DEPKFNT
 
        LD E,0
 
DEPKFN1 LD H,#6E
 
 
         LD L,E
 
         LD L,E
         LD D,'FONTS
+
         ADD HL,SP
         LD B,4
+
         LD H,D
DEPKFN2 CALL DEPKA
+
        LD (Psa_beg+1),HL
        DB "q$w
 
        RES 4,H
 
        CALL DEPKB
 
        DB "w%q
 
        CALL DEPKA
 
        DB "w$q
 
        RES 4,H
 
        CALL DEPKB
 
        DB "q%w
 
        DJNZ DEPKFN2
 
        INC E
 
        JR NZ,DEPKFN1
 
        RET
 
DEPKA
 
        LD A,(DE)
 
        INC D
 
 
         LD C,A
 
         LD C,A
        DB "$$
 
        SET 4,H
 
        XOR A
 
DEPKB  SRL C
 
        RRA
 
        SRL C
 
        RRA
 
        RET
 
OUTME
 
        PUSH BC
 
        LD BC,FD
 
        OUT (C),A
 
        POP BC
 
        RET
 
QUIT
 
        LD HL,SSBREAK
 
        CALL TYN
 
PUTWD  RET Z
 
        JR QUIT3
 
QUIT2
 
        CALL TYN
 
        JR C,PUTWD
 
        CALL NZ,SAVE
 
QUIT3
 
        LD A,23
 
        CALL OUTME
 
        LD HL,(#C000)
 
        LD DE,#FF31
 
        XOR A
 
        SBC HL,DE
 
        JP Z,#C000
 
        LD H,A,L,A
 
QUITHL  PUSH HL
 
        LD A,16
 
        CALL OUTME
 
        JP 15663
 
 
TFREE  DB "Free:",0
 
TLOAD  DB "Load file:",0
 
TSAVE  DB "Save file:",0
 
 
TPTUTIL DB "Pro Tracker 3.x Utility v1.367"
 
        NOP
 
TBY    DB "(C) 09.03.2004 by Alone Coder"
 
        DB "/i8",0
 
 
TMENU  DB "  LOAD  MODULE",1
 
        DB "  PLAY  MODULE",1
 
        DB "  SAVE  MODULE",1
 
        DB "  COMPILE SONG",1
 
        DB " SWAP  CHANNELS",1
 
        DB "  RENAME  SONG",1
 
        DB " SORT  PATTERNS",1
 
;      DB "TRACKS/POSITIONS",1
 
        DB "      HELP",1
 
        DB "      QUIT",1,0
 
SSBREAK
 
        DB " Выход из программы",13,13
 
        DB "QUIT?STAY?QUIT?STAY?",13
 
        DB " Sure to quit(Y/N)?",0
 
SAVERR
 
        DB "      ERROR",13,13
 
        DB "  Virtual memory",13
 
        DB " allocation error",0
 
LISTER
 
      ;CALL DEPKFNT
 
        LD HL,TEXT
 
        CALL PRPAGE
 
START  CALL IYKEY
 
        RET NC
 
        LD HL,STQ
 
        PUSH HL
 
        SUB "9
 
        JR Z,UP
 
        INC A
 
        JR Z,DOWN
 
        SUB 11-"8
 
        JR Z,UP
 
        INC A
 
        JR Z,DOWN
 
        INC A
 
        JR Z,PGDN
 
        INC A
 
        JR Z,PGUP
 
        SUB -3
 
        JR Z,PGDN
 
        INC A
 
        JR Z,PGUP
 
        POP HL
 
STQ
 
        JR START
 
PGUP
 
        LD HL,(TOP)
 
UPPAGE  LD B,HGT
 
        CALL LINEUP
 
        DJNZ $-3
 
PRPAGE  LD (TOP),HL
 
        LD DE,#4000
 
        LD B,HGT
 
PRPAGE0 CALL PRLINE
 
        CALL NXTLINE
 
        DJNZ PRPAGE0
 
        LD (BOTTOM),HL
 
        RET
 
PGDN
 
        LD HL,(BOTTOM)
 
        LD (TOP),HL
 
        LD DE,#4000
 
        LD B,HGT
 
DNPAGE0 LD A,(HL)
 
        OR A
 
        JR Z,UPPAGE
 
        CALL PRLINE
 
        CALL NXTLINE
 
        DJNZ DNPAGE0
 
        LD (BOTTOM),HL
 
        RET
 
BOTTOM=$+1
 
DOWN
 
        LD HL,0
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        PUSH HL
 
        CALL SCRUP
 
        LD HL,(TOP)
 
        CALL LINEDN
 
        LD (TOP),HL
 
        POP HL
 
        LD DE,#50E0
 
        CALL PRLINE
 
        LD (BOTTOM),HL
 
        RET
 
TOP=$+1
 
UP
 
        LD HL,0
 
        DEC HL
 
        LD A,(HL)
 
        INC HL
 
        OR A
 
        RET Z
 
        CALL LINEUP
 
        LD (TOP),HL
 
        PUSH HL
 
        CALL SCRDN
 
        LD HL,(BOTTOM)
 
        CALL LINEUP
 
        LD (BOTTOM),HL
 
        POP HL
 
        LD DE,#4000
 
PRLINE  PUSH BC
 
        PUSH DE
 
        DEC E
 
        LD BC,#2A00
 
PRLINEP LD A,(HL)
 
        OR A
 
        JR Z,PRLINEQ
 
        INC HL
 
        CP 13
 
        JR Z,PRLINEQ
 
        CALL PRSYM
 
        DJNZ PRLINEP
 
        INC HL
 
PRLNE
 
        POP DE
 
        POP BC
 
        RET
 
PRLINEQ LD A,32
 
        CALL PRSYM
 
        DJNZ $-5
 
        JR PRLNE
 
SCRDN
 
        LD B,HGT-1
 
        LD HL,#50E0
 
SCRDN0  LD D,H,E,L,A,L
 
        SUB 32
 
        LD L,A
 
        JR NC,$+6
 
        LD A,H
 
        SUB 8
 
        LD H,A
 
        CALL LDIRER
 
        DJNZ SCRDN0
 
        RET
 
LDIRER
 
        INC B
 
        PUSH HL
 
        LD A,8
 
LDIR0  PUSH DE,HL
 
        DUP 32
 
        LDI
 
        EDUP
 
        POP HL,DE
 
        INC H,D
 
        DEC A
 
        JR NZ,LDIR0
 
        POP HL
 
        RET
 
SCRUP
 
        LD B,HGT-1
 
        LD HL,#4000
 
SCRUP0  LD D,H,E,L
 
        CALL NXTLINE
 
        EX DE,HL
 
        CALL LDIRER
 
        DJNZ SCRUP0
 
        RET
 
LINEDN
 
        LD A,(HL)
 
        OR A
 
        RET Z
 
        INC HL
 
        CP 13
 
        JR NZ,LINEDN
 
        RET
 
LINEUP
 
        DEC HL
 
        LD A,(HL)
 
        OR A
 
        JR Z,LFQ
 
LINEUP0 DEC HL
 
        LD A,(HL)
 
        OR A
 
        JR Z,LFQ
 
        CP 13
 
        JR NZ,LINEUP0
 
LFQ    INC HL
 
        RET
 
deinit
 
        LD DE,MUZ
 
        PUSH DE
 
      LD HL,TcomT
 
      LD BC,TcomTln
 
      LDIR
 
        POP DE
 
      DI
 
      LD HL,105
 
      ADD HL,DE
 
        LD (dei_SP0+1),SP
 
        LD SP,HL
 
      LD HL,201-105
 
      ADD HL,SP
 
      LD BC,0
 
      LD A,-1
 
      CPIR
 
      OR A ;SUB HL,SP-105
 
      SBC HL,SP
 
      LD BC,105
 
      ADD HL,BC
 
      DEC SP,SP
 
      POP BC
 
      PUSH BC
 
      OR A
 
      SBC HL,BC
 
      EX DE,HL
 
        LD B,49;48
 
dia_s0  POP HL
 
      LD A,H
 
      CP #40
 
      JR C,$+3
 
      ADD HL,DE
 
        PUSH HL
 
        POP HL
 
        DJNZ dia_s0
 
deiNpa0 LD A,B
 
deiNpa  DEC SP
 
        POP BC
 
        INC B
 
        JR Z,deiNpaQ
 
        DEC B
 
        CP B
 
        JR NC,deiNpa
 
        JR deiNpa0
 
deiNpaQ
 
        ADD A,3
 
        LD B,A
 
dia_p0  POP HL
 
      LD A,H
 
      CP #40
 
      JR C,$+3
 
      ADD HL,DE
 
        PUSH HL
 
        POP HL
 
        DJNZ dia_p0
 
dei_SP0 LD SP,0
 
        EI
 
        RET
 
TcomT
 
        DB "ProTracker 3.6"
 
TcomTln=$-TcomT
 
PAKHELP
 
      NOP
 
TEXT    INCBIN "acbdoc  .W"
 
      NOP
 
 
TABC    INCBIN "TABC
 
LTABC  EQU $-TABC/2
 
FNBUF  DS 9
 
DISPLAY $
 
        DS .(-$)
 
TABS
 
        INCBIN "tb_PT
 
        INCBIN "tb_ST
 
        INCBIN "tb_ASM
 
        INCBIN "tb_REAL
 
        INCLUDE "PTUPLAY",#C2
 
initia
 
        LD DE,MUZ
 
        LD B,D,C,E
 
initia3
 
      ;LD (ia_pos0+1),BC
 
        DI
 
        LD HL,101
 
        ADD HL,DE
 
        PUSH HL
 
        LD (sav_SP0+1),SP
 
        LD SP,HL
 
        POP AF
 
        POP HL
 
 
         ADD HL,BC
 
         ADD HL,BC
        LD (Psa_chn+1),HL
+
        LD (Psa_lop+1),HL
        LD D,B,E,C
+
iniNpa0 LD A,B
      DEC SP,SP
+
iniNpa  DEC SP
        LD B,49;48
+
        POP BC
ia_s0  POP HL
+
        INC B
        ADD HL,DE
+
        JR Z,iniNpaQ
        PUSH HL
+
        DEC B
        POP HL
+
        CP B
        DJNZ ia_s0
+
        JR NC,iniNpa
      LD L,E
+
        JR iniNpa0
      ADD HL,SP
+
iniNpaQ
      LD H,D
+
        ADD A,3
        LD (Psa_beg+1),HL
+
        LD B,A
      LD C,A
+
ia_p0  POP HL
      ADD HL,BC
+
        ADD HL,DE
        LD (Psa_lop+1),HL
+
        PUSH HL
iniNpa0 LD A,B
+
        POP HL
iniNpa  DEC SP
+
        DJNZ ia_p0
        POP BC
+
        INC B
+
        LD HL,T_m
        JR Z,iniNpaQ
+
        LD C,D
        DEC B
+
        LD B,T_m_l
        CP B
+
ini_m0  LD E,(HL)
        JR NC,iniNpa
+
        INC HL
        JR iniNpa0
+
        LD D,(HL)
iniNpaQ
+
        INC HL
        ADD A,3
+
        LD A,C
        LD B,A
+
        LD (DE),A
ia_p0  POP HL
+
        DJNZ ini_m0
        ADD HL,DE
+
        LD HL,#101
        PUSH HL
+
        LD (int_qty),HL ;&A_qty
        POP HL
+
        LD (B_qty),HL ;&C_qty
        DJNZ ia_p0
+
sav_SP0 LD SP,0
 
+
        EI  
      LD HL,T_m
+
        XOR A
      LD C,D
+
        LD (Am_vol+1),A
        LD B,T_m_l
+
        LD (Bm_vol+1),A
ini_m0  LD E,(HL)
+
        LD (Cm_vol+1),A
        INC HL
+
        LD HL,DUMMYORN
        LD D,(HL)
+
        LD (Ao_adr+1),HL
        INC HL
+
        LD (Bo_adr+1),HL
        LD A,C
+
        LD (Co_adr+1),HL
        LD (DE),A
+
        LD (As_adr+1),HL
        DJNZ ini_m0
+
        LD (Bs_adr+1),HL
        LD HL,#101
+
        LD (Cs_adr+1),HL
        LD (int_qty),HL ;&A_qty
+
        LD (Ach_adr+1),HL
        LD (B_qty),HL ;&C_qty
+
        SUB 16
sav_SP0 LD SP,0
+
        LD (Ag_vol+1),A
        EI  
+
        LD (Bg_vol+1),A
        XOR A
+
        LD (Cg_vol+1),A
        LD (Am_vol+1),A
+
        SBC A,A
        LD (Bm_vol+1),A
+
        LD (Avb_lok+1),A
        LD (Cm_vol+1),A
+
        LD (Cvb_lok+1),A
        LD HL,DUMMYORN
+
        LD (Bvb_lok+1),A
        LD (Ao_adr+1),HL
+
        POP DE
        LD (Bo_adr+1),HL
+
        DEC DE
        LD (Co_adr+1),HL
+
        JP eff_tmp
        LD (As_adr+1),HL
+
end
        LD (Bs_adr+1),HL
+
        DISPLAY $,"<",SECBUF
        LD (Cs_adr+1),HL
+
        ORG #5CDD
        LD (Ach_adr+1),HL
+
        DB "PTU1.367B
        SUB 16
+
        INCLUDE "mrip*",#C5
        LD (Ag_vol+1),A
+
        ORG $
        LD (Bg_vol+1),A
+
        CALL 8026
        LD (Cg_vol+1),A
+
        JP NC,nenado
        SBC A,A
+
        LD HL,QUITHL
        LD (Avb_lok+1),A
+
        LD (HL),225
        LD (Cvb_lok+1),A
+
        XOR A
        LD (Bvb_lok+1),A
+
        JP GO+3
        POP DE
+
        DISPLAY $MUZ
        DEC DE
+
        PUSH DE
        JP eff_tmp
+
        LD HL,TcomT
end
+
        LD BC,Tco
        DISPLAY $,"<",SECBUF
 
        ORG #5CDD
 
        DB "PTU1.367B
 
        INCLUDE "mrip*",#C5
 
        ORG $
 
        CALL 8026
 
        JP NC,nenado
 
        LD HL,QUITHL
 
        LD (HL),225
 
        XOR A
 
        JP GO+3
 
        DISPLAY $MUZ
 
        PUSH DE
 
      LD HL,TcomT
 
      LD BC,Tco
 

Latest revision as of 21:47, 8 March 2020

PTU367 C��╔Ы�ЬЕ

COLOUR=5
zwet=1
CATHGT=22
HGT     EQU 24
WINCOL  EQU 7
TITLCOL EQU 56
FD      EQU 32765
EMSTACK EQU #5F00
SYSBUF  EQU #6800
LDIRKA  EQU #BB80
CURSCOL EQU 56
SECBUF  EQU #B700
;TEXT=SECBUF+1
LINBUF  EQU #BE00
WINBUF  EQU #BF00
FILENAM EQU #5CDD
FNEXT   EQU FILENAM+8
MUZ=#C000
        ORG #8000
begin
FONTS
        INCBIN "42>>
GO
        LD SP,#6000
        OUT (-2),A
        INC A
        LD (IY-48),A
        LD (IY+48),A
        LD (IY+1),#CC
        LD (IY+14),COLOUR
        LD (IY-49),16
        CALL OLDRV
        LD (23798),A
        LD HL,ONERROR
        LD (23747),HL
        CALL CLS
ST
        CALL PRMENU
STC
        LD C,0
        CALL RULILKA
        LD A,C
        LD (STC+1),A
        LD DE,QUIT
        CALL 8020
        JR NC,STPUSH
        LD B,0
        LD HL,JPS
        ADD HL,BC,HL,BC
        LD E,(HL)
        INC HL
        LD D,(HL)
STPUSH  LD HL,ST
        PUSH HL,DE
        RET 
JPS
        DW PLOAD
        DW PPLAY
        DW PSAVE
        DW PCOM
        DW PSWAP
        DW PREN
        DW PSORT
        DW PHELP
        DW QUIT
PLOAD
        LD HL,TLOAD
        CALL PRCAT
       JP NC,PLOADQ
        LD (LENGTH),HL
        PUSH BC
        PUSH DE
        CALL CLS
        LD HL,MUZ
        PUSH HL
        LD DE,MUZ+1
        LD B,#40
        LD (HL),L
        LDIR 
        POP HL
        POP DE
        POP BC
        LD (ERRSP+1),SP
        PUSH HL
        LD A,64
        CP B
        JR NC,$+3
        LD B,A
        CALL EM15635
PLDCPU  CALL DEPKFNT
        POP HL
        LD BC,#4000
PLOADCP LD DE,TDISTIN
        LD A,(DE)
        CPIR 
        JR NZ,PLDBUGL
        LD (PLDOK+1),HL
PLDCP0  INC DE
        LD A,(DE)
        OR A
        JR Z,PLDOK
        CP (HL)
        INC HL
        DEC BC
        JR Z,PLDCP0
        JR PLOADCP
PLDOK   LD HL,0
       LD BC,-14-1
       ADD HL,BC
        LD DE,MUZ
        LD BC,#4000
        LDIR 
       LD DE,MUZ
       CALL deinit+3
       LD D,0
        LD HL,MUZ+105
        LD A,48
PLDOKM0 LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        EX DE,HL
        OR A
        SBC HL,BC
        ADD HL,BC
        EX DE,HL
        JR NC,$+4
        LD D,B
        LD E,C
        DEC A
        JR NZ,PLDOKM0
        LD HL,MUZ+1
        ADD HL,DE
        LD C,(HL)
        LD B,0
        INC HL
        ADD HL,BC
        LD DE,-MUZ
        ADD HL,DE
        LD (LENGTH),HL
        LD A,183
        LD (MODOK),A
PLOADQ
        JP CLS

PLDBUGL LD A,(MUZ)
        CP 243
        JR NZ,PLDBUG
PLDBGL0 LD HL,TDEPKYN
        LD DE,#4040
        CALL PRTEXT
        CALL IYKEY
        CP "n
        JR Z,PLDBUG
        CP "y
        JR NZ,PLDBGL0
        LD HL,MUZ
        PUSH HL
        LD DE,(STADR+1)
        LD BC,(LENGTH)
        LDIR 
STADR   CALL 0
        EI 
        JP PLDCPU
PLDBUG
        LD HL,TLDBUG
        LD DE,#4060
        CALL PRTEXT
        CALL IYKEY
        LD A,55
        LD (MODOK),A
        JR PLOADQ

TLDBUG  DB "INVALID MODULE!",0
TDEPKYN DB "DEPACK (Y/N)?",0
TDISTIN DB " compilation of ",0
COPYTAB
        LD A,(MUZ+99)
        LD L,A
        ADD A,A
        ADD A,L
        LD L,0
        RRA 
        RR L
        RRA 
        RR L
        ADD A,'TABS
        LD H,A
        LD DE,tab_frq
        LD BC,#C0
        LDIR 
        RET 
PPLAY
MODOK   SCF 
        JR C,PLDBUG
        CALL COPYTAB
       CALL initia
PPLAY0
        RES 5,(IY+1)
        HALT 
        CALL play
        BIT 5,(IY+1)
        JR Z,PPLAY0
        LD A,(23560)
       OR #20
        CP "f
        JR NZ,stop
        CALL play,play
        JR PPLAY0
stop
       CALL deinit
AYOFF
        LD DE,#E00
OFF0    LD BC,-3
        DEC D
        OUT (C),D
        LD B,#BF
        OUT (C),E
        JR NZ,OFF0
        RET 

PSAVE
        LD A,(MODOK)
        RLA 
        JP NC,PLDBUG
        LD A,"m
        LD (FNEXT),A
        CALL SAVE
        JP CLS

PREN
        LD A,(MODOK)
        RLA 
        JP NC,PLDBUG

        LD HL,MUZ
        LD DE,LINBUF
        LD BC,256
        LDIR 
        LD LX,20
PRENST
        PUSH BC
        CALL PRBY
        POP BC
        PUSH BC
        LD A,LX
        CALL 3742
        INC L
        LD A,C
        ADD A,6
        CALL PRCU
        POP BC
        LD HL,MUZ+#1E
        LD A,LX
        RRA 
        JR NC,$+5
        LD HL,MUZ+#42
        LD B,0
        ADD HL,BC
        CALL IYKEY
        JP NC,PRENNO
        ADD A,-13
        JR Z,PRENQQ
        LD DE,PRENST
        PUSH DE
        LD DE,#1F20
        DEC A
        JR Z,PRENEXT
        DEC A
        JR Z,PRENGR
        ADD A,3
        JP Z,WORKDEL
        ADD A,2
        JR NC,PRENNUD
        LD A,LX
        XOR 1
        LD LX,A
        RET 
PRENNUD INC A
        JR Z,PRENIC
        INC A
        JP Z,WORKDC
        INC A
        RET Z
        INC A
        JP Z,CAPLNT
        SUB 193
        RET Z
        DEC A
        RET Z
        DEC A
        RET Z
        SUB 55
        CP 172
        RET Z
        CP E
        RET C
        PUSH BC
        CALL RECODE-1
        LD (HL),B
        POP BC
PRENIC  JP WORKIC
PRENGR  LD A,D
        INC A
        SUB C
        PUSH BC
        LD C,A
        LD B,0
        LD D,H
        LD E,L
        INC HL
        LDIR 
        DEC DE
        LD A,32
        LD (DE),A
        POP BC
        RET 
PRENEXT LD A,D
        INC A
        SUB C
        LD B,A
        LD E,32
PRENEX0 LD A,(HL)
        LD (HL),E
        LD E,A
        INC HL
        DJNZ PRENEX0
        RET 
PRENQQ
        RET 
PRENNO
        LD DE,MUZ
        LD HL,LINBUF
        LD BC,256
        LDIR 
        RET 
CAPLNT
        LD A,(23658)
        XOR 8
        LD (23658),A
        RET 

TLEN    DB "Compiled length=",0
T_ENT   DB "Press <ENTER>",0
TENSTAD DB "Enter start address=#C000",0
TEDSTAD EQU $-5

PCOM
        LD A,(MODOK)
        RLA 
        JP NC,PLDBUG
        CALL CLS
        CALL COPYTAB
        LD HL,-1-LENP
        LD DE,-1
        LD BC,-MUZ-LENP
        LDDR 
        LD BC,LENP
        LD HL,(LENGTH)
        ADD HL,BC
        LD (LENGTH),HL
        PUSH HL
       ;LD HL,ENDP-1
       ;LDDR
        LD HL,T_ENT
        LD DE,#48EA
        CALL PRTEXT
        LD HL,TLEN
        LD DE,#4863
        CALL PRTEXT
        POP HL
        PUSH HL
        INC E
        CALL PRNUM
        POP HL
        CALL PRNUMH
        LD BC,0
PCOMIN  PUSH BC
        LD HL,TENSTAD
        LD DE,#48A5
        PUSH DE
        CALL PRTEXT
        POP HL
        INC L
        POP BC
        LD A,C
        ADD A,TEDSTAD-TENSTAD
        CALL PRCU
        CALL IYKEY
        JR NC,PCOMQQ
        CP 13
        JR Z,PCOMOK
        LD E,A
        SUB "0
        RES 5,A
        CP "G"-"0
        JR NC,PCOMIN
        CP "A"-"0
        JR NC,PCOMSB
        CP 10
        JR NC,PCOMIN
        JR $+4
PCOMSB  SUB "A"-":
PCOMDG  LD HL,TEDSTAD
        ADD HL,BC
        LD (HL),E
        LD DE,PCOMOK+1-TEDSTAD
        ADD HL,DE
        LD (HL),A
        LD A,C
        XOR 1
        LD C,A
        JR PCOMIN
PCOMOK  LD HL,#C000
        LD A,H
        DB "))))
        OR L
       LD H,A
        LD L,0
        LD (CADDR+1),HL
        LD DE,LENP
        ADD HL,DE
       SUB 'PLAYER
       LD LX,A
       ;LD (MUZ+1),HL
       EX DE,HL
;сонг лежит в MUZ+LENP
;пересчитываем его,как будто он в DE
       LD B,D,C,E
       LD DE,MUZ+LENP
       CALL initia3
        CALL PCOMCH
       LD HL,PLAYER
       LD DE,MUZ
       LD BC,LENP
       LDIR 
       XOR A
       SUB LX
       LD LX,A
       CALL PCOMCH

CADDR   LD HL,#C000
        LD (SSTART+1),HL
        LD A,"C
        LD (FNEXT),A
        CALL SAVE
        LD HL,0
        LD (SSTART+1),HL
PCOMQQ
        LD HL,MUZ
        PUSH HL
        JP PLDCPU
PCOMCH
        LD HL,TABC
        LD BC,LTABC
PCOMCH0 LD E,(HL)
        INC HL
       LD A,(HL)
       SUB #C0-'PLAYER
       LD D,A
        INC HL
        LD A,(DE)
        ADD A,LX
        LD (DE),A
        DEC BC
        LD A,B
        OR C
        JR NZ,PCOMCH0
        RET 
PHELP
        CALL CLS
       IFN 0
        DI 
        LD (PHELPE+1),SP
        LD HL,-1-LENP
        LD DE,-1
        LD BC,-MUZ-LENP
        LDDR 
        LD HL,#5FFF
        INC B
        LDDR 
        LD HL,PHELPE
        LD (#5E33),HL
        LD HL,TEXT
        LD (#5D64),HL
        LD HL,PAKHELP+6
        JP #5D5A

PHELPE  LD SP,0
       XOR A
       LD (DE),A
       LD (TEXT-1),A
        LD HL,MUZ+LENP-1
        LD DE,#5FFF
        LD BC,256
        LDDR 
        EI 
       ENDIF 
        CALL LISTER
       IFN 0
        LD HL,MUZ+LENP
        LD DE,MUZ
        LD B,64
        LDIR 
       ENDIF 
        JP CLS

PSORT
        LD A,(MODOK)
        RLA 
        JP NC,PLDBUG


        LD DE,MUZ+201 ;POS

        LD C,0 ;CURR.PAT
PSORT0
        LD A,(DE)
        CP -1
        JR Z,POK
        LD B,A
        CP C
        JR C,PSORTOK
        LD H,D
        LD L,E
PSORT1  LD A,(HL)
        CP -1
        JR Z,PSORT1Q
        CP B
        LD (HL),C
        JR Z,PSORT1E
        CP C
        LD (HL),B
        JR Z,$+3
        LD (HL),A
PSORT1E INC HL
        JR PSORT1
PSORT1Q
        LD A,B
        PUSH BC
        PUSH DE
        LD HL,(MUZ+103)
        SLA C
        LD B,'MUZ
        ADD HL,BC
        EX DE,HL
        LD HL,(MUZ+103)
        ADD A,A
        LD C,A
        ADD HL,BC
        LD B,6
PSORT2  LD A,(DE)
        LD C,(HL)
        LD (HL),A
        LD A,C
        LD (DE),A
        INC HL
        INC DE
        DJNZ PSORT2
        POP DE
        POP BC
        INC C,C,C
PSORTOK
        INC DE
        JR PSORT0

POK
        LD HL,#58E0
        LD DE,#58E1
        LD BC,31
        LD (HL),#44
        LDIR 
        LD HL,TOK
        LD DE,#40E6
        CALL PRTEXT
        CALL IYKEY
        JP CLS

TPOSS   DB "POSITIONS:",0
        DB "PATTERNS:",0
        DB "TRACKS:",0

        DB "SAMPLES:",0
        DB "ORNAMENTS:",0

TOK     DB "OPERATION COMPLETED OK.",0

TA_B    DB " -> 1. A<>B",0
TB_C    DB "2. B<>C",0

PSWAP
        LD A,(MODOK)
        RLA 
        JP NC,PLDBUG
        LD HL,TA_B
        LD DE,#4895
        CALL PRTEXT
        INC HL
        LD DE,#48B8
        CALL PRTEXT

PSWAPK  CALL IYKEY
        JP NC,CLS
        CP "2
        JR Z,ACB
        CP "1
        JR NZ,PSWAPK
        LD A,197
        LD (ACBX1),A
        LD A,193
        LD (ACBX2),A
ACB     LD HL,MUZ
        DI 
        LD (Sav_SP0+1),SP
        LD D,H
        LD E,L
        LD BC,100
        ADD HL,BC
        INC HL
        LD SP,HL
        ADD HL,BC
        XOR A
ACBMAX  LD C,(HL)
        INC C
        JR Z,ACBMAXQ
        DEC C
        INC HL
        CP C
        JR NC,ACBMAX
        LD A,C
        JR ACBMAX
ACBMAXQ POP HL;AF
        POP HL
        ADD HL,DE

        LD SP,HL
ACB0    POP BC
        POP DE
ACBX1   POP HL    ;PUSH BC
        PUSH DE
ACBX2   PUSH HL   ;POP BC
        POP DE
        POP HL
        SUB 3
        JR NC,ACB0
        LD A,225
        LD (ACBX1),A
        LD A,229
        LD (ACBX2),A
Sav_SP0 LD SP,0
        EI 
        JP POK
PRMENU
        CALL DEPKFNT
        LD HL,#5800
        LD DE,#5801
        LD BC,31
        LD (HL),6
        LDIR 
        LD HL,#5A40
        LD DE,#5A41
        LD C,128
        LD (HL),7
        LDIR 
        LD C,63
        LD (HL),6
        LDIR 
        LD HL,TPTUTIL
        LD DE,#4004
        CALL PRTEXT
        LD HL,TBY
        LD DE,#50E3
        CALL PRTEXT
        LD HL,TMENU
        LD DE,#4809
        PUSH DE
        LD LX,0
PRMENU0 PUSH DE
        INC LX
        LD C,0
PRMENU2 LD A,(HL)
        INC HL
        CP 32
        JR C,$+7
        CALL PRSYM
        JR PRMENU2
        POP DE
        CALL NXTLINE
        XOR A
        OR (HL)
        JR NZ,PRMENU0
        LD A,(MODOK)
        RLA 
        JR NC,PRMENNN
        CALL PRBY
        CALL PRNS
        LD HL,(LENGTH)
        LD DE,#5040
        PUSH HL
        CALL PRNUM
        POP HL
        CALL PRNUMH
        LD A,(MUZ+99)
        LD HL,TFRQTAB
PRMNFR0 SUB 1
        JR C,PRMENFR
        LD E,A
        XOR A
        LD B,H
        CPIR 
        LD A,E
        JR PRMNFR0
PRMENFR LD DE,#5050
        CALL PRTEXT
PRMENNN POP HL
        CALL FINDATR-1
        LD H,A
        LD B,LX
        RET 
TFRQTAB
        DB "ProTracker 3.1",0
        DB "SoundTracker or PT2",0
        DB "ASM or PSC",0
        DB "Real sound",0
PRNS
        LD HL,MUZ+105
        LD BC,#2000
        LD D,C
PRNSsmp
        LD A,(HL)
        INC HL
        OR (HL)
        INC HL
        JR Z,$+3
        INC D
        DJNZ PRNSsmp
        LD B,#10
PRNSorn
        LD A,(HL)
        INC HL
        OR (HL)
        INC HL
        JR Z,$+3
        INC C
        DJNZ PRNSorn
       LD A,C
       PUSH AF
       PUSH DE

        LD HL,MUZ+201
        XOR A
        LD D,A
SRTMAX  LD C,(HL)
        INC C
        JR Z,SRTMAXQ
        INC D
        DEC C
        INC HL
        CP C
        JR NC,SRTMAX
        LD A,C
        JR SRTMAX
SRTMAXQ LD BC,3
        INC B
        SUB C
        JR NC,$-2
        PUSH BC
        PUSH DE
        LD A,B
        RLCA 
        ADD A,B
        LD B,A
        LD HL,(MUZ+103)
        LD DE,MUZ
        ADD HL,DE ;PATS
        LD HX,0
SRTNTR
        LD DE,LINBUF
        LD C,HX
        INC C
        DEC C
        JR Z,SRTNTRA
SRTNTR0 LD A,(DE)
        INC E
        CP (HL)
        INC HL
        JR NZ,SRTNTR1
        LD A,(DE)
        CP (HL)
        JR Z,SRTNTRQ
SRTNTR1 DEC HL
        INC E
        DEC C
        JR NZ,SRTNTR0
SRTNTRA LD A,(HL)
        LD (DE),A
        INC HL
        INC E
        LD A,(HL)
        LD (DE),A
        INC HX
SRTNTRQ
        INC HL
        DJNZ SRTNTR

        LD HL,TPOSS
        LD DE,#4040
        CALL PRTEXT
        INC E
        POP AF
        CALL PRNUMA
        INC HL
        LD DE,#4060
        CALL PRTEXT
        INC E
        POP AF
        CALL PRNUMA
        INC HL
        LD DE,#4080
        CALL PRTEXT
        INC E
        LD A,HX
        CALL PRNUMA

        INC HL
        LD DE,#40A0
        CALL PRTEXT
        INC E
        POP AF
        CALL PRNUMA
        INC HL
        LD DE,#40C0
        CALL PRTEXT
        INC E
        POP AF
        JP PRNUMA
PRBY
        LD HL,TSONG
        LD DE,#5080
        CALL PRTEXT
        LD HL,MUZ+#1E
        CALL PRSTR-2
        LD HL,TSONGBY
        LD DE,#50A0
        CALL PRTEXT
        LD HL,MUZ+#42
        LD B,32
PRSTR
        LD A,(HL)
        INC HL
        CALL PRSYM
        DJNZ PRSTR
        RET 

TSONG   DB "MUSIC:",0
TSONGBY DB "   BY:",0

RULILKA
        PUSH HL
        CALL CURSCNT
        LD A,14
        LD (CURSOR0-1),A
        CALL CURSOR
        CALL IYKEY
        PUSH AF
        CALL CURRES
        LD A,8
        LD (CURSOR0-1),A
        POP AF
        POP HL
        SUB 8
        JR Z,RUL0
        DEC A
        JR Z,RULZ
        SUB 2
        JR NZ,RULILND
        CP C
        JR NZ,$+3
RULZ    LD C,B
        DEC C
        JR RULILKA
RULILND INC A
        RET NZ
        INC C
        LD A,C
        SUB B
        JR NZ,$+3
RUL0    LD C,A
        JR RULILKA
DDE
        INC D
        LD A,D
        AND 7
        RET NZ
        LD A,E
        ADD A,32
        LD E,A
        RET C
        LD A,D
        ADD A,-8
        LD D,A
        RET 

        LD A,H
FINDATR RRA 
        RRA 
        RRA 
        AND 3
        OR 88
        RET 

NAME
        LD C,0
WORKPN
        PUSH BC
        CALL WORKPP
        POP BC
        LD B,0
        LD HL,FILENAM
        ADD HL,BC
        CALL IYKEY
        RET NC
        ADD A,-13
        RET Z
        LD DE,WORKPN
        PUSH DE
        LD DE,#720
        INC A
        JR NZ,WORKND
WORKDEL CP C
        RET Z
        DEC HL
        LD (HL),E
WORKDC  CP C
        RET Z
        DEC C
        RET 
WORKND  SUB -3
        JR Z,WORKIC
        INC A
        JR Z,WORKDC
        INC A
        INC A
        JP Z,CAPLNT
        ADD A,6
        CP E
        RET C
        CALL RECODE-1
        BIT 7,B
        RET NZ
        LD (HL),B
WORKIC  LD A,C
        SUB D
        ADC A,D
        LD C,A
        RET 

        LD B,A
RECODE
        LD A,B
        CP 198
        LD B,"[
        RET Z
        INC B
        CP 205
        RET Z
        INC B
        CP 197
        RET Z
        LD B,"{
        CP 204
        RET Z
        INC B
        CP 195
        RET Z
        INC B
        CP 203
        RET Z
        INC B
        CP 226
        RET Z
        LD B,A
        RET 
PRFNDO
        SBC HL,BC
        LD (PRCDESC+1),HL
        LD DE,#4009
        LD C,0
PRFN
        LD B,8
        CALL PRSYM-1
        INC HL
        DJNZ $-4
        DB ">.
        CALL PRSYM
        LD A,(HL)
PRSYM
        PUSH HL
        PUSH DE
        LD L,A
        XOR A
        OR C
        LD H,'FONTS
        JR Z,PRSMED
        DUP 4
        RLCA 
        EDUP 
        SUB -80
        JP P,PRSSLOW
        LD C,0
        DUP 7
        LD A,(DE)
        OR (HL)
        LD (DE),A
        INC D
        INC H
        EDUP 
        LD A,(DE)
        OR (HL)
        LD (DE),A
        POP AF
        LD D,A
        POP HL
        RET 
PRSMED  INC E
        INC C
        DUP 8
        DB "~
        RLCA 
        RLCA 
        LD (DE),A
        INC D
        INC H
        EDUP 
        ORG $-2
        JR PRS42D
PRSSLOW LD H,A
        INC C
        DUP 4
        LD A,(DE)
        OR (HL)
        LD (DE),A
        INC E
        DB "$~$
        LD (DE),A
        INC D
        DB "~$
        LD (DE),A
        DEC E
        LD A,(DE)
        OR (HL)
        LD (DE),A
        INC H
        INC D
        EDUP 
        ORG $-2
        INC E
PRS42D  POP AF
        LD D,A
        POP HL
        RET 


TYN     CALL WINDTXT
        DW #4847,#1F11
        CALL 8020
        JR NC,$-3
TYN0    CALL 8020
        CCF 
        JR C,TYNQ
        AND 4
        HALT 
        JR Z,TYNQ
        LD A,#DF
        IN A,(-2)
        CPL 
        AND 16
        JR Z,TYN0
TYNQ    PUSH AF
        CALL PUTWIN
POPRET  POP AF
        RET 

IYKEY   RES 5,(IY+1)
IY0     BIT 5,(IY+1)
        JR Z,IY0
        CALL 8020
        LD A,(23560)
        RET 

CURSCNT EX DE,HL
        LD L,C
        LD H,0
        DB ")))))
        ADD HL,DE
        RET 
CURSOR  PUSH BC
       LD A,(HL)
       LD (CURSORR-1),A
        LD C,CURSCOL
        JR CURSORR
CURRES  PUSH BC
        LD C,5
CURSORR PUSH HL
        LD B,8
CURSOR0 DB "q,
        DJNZ $-2
        POP HL
        POP BC
        RET 

EM6     LD BC,262
EM15635
        LD A,195
        LD (23746),A
        LD (EMSP+1),SP
        PUSH BC
        PUSH DE
        PUSH HL
        CALL AYOFF
        LD HL,#5C00
        LD D,'SYSBUF
        LD BC,#400
        LDIR 
DRV     LD A,0
        LD (23798),A
        OR #3C
        LD (23830),A
        LD H,L
        LD (23823),HL
        LD (23802),HL
        POP HL
        POP DE
        POP BC
        LD SP,EMSTACK
        CALL 15635
EMSP    LD SP,0
        LD A,201
        LD (23746),A
        RET 
ONERROR LD (ERRDE+1),DE
        EX (SP),HL
        LD DE,8020
        OR A
        SBC HL,DE
        JR NZ,ERRSP
        POP HL
ERRDE   LD DE,0
        SCF 
        RET 
ERRSP   LD SP,0
        LD HL,SYSBUF
        LD DE,#5C00
        LD BC,#400
        LDIR 
        CALL DEPKFNT
        LD HL,SAVERR
        CALL WINDTXT
        DW #4848,#2711
        CALL IYKEY
        OR A
OLDRV   LD A,(23833)
        LD (DRV+1),A
        RET 

PRCURXY PUSH BC
        PUSH DE
        JR PRCU3
WORKPP  PUSH BC
        LD DE,#400B
        LD HL,FILENAM
        CALL PRFN-2
        LD A,32
        CALL PRSYM
        POP BC
        LD A,C
        CP 8
        SBC A,-17
        LD HL,#4000
PRCU    LD E,A
        PUSH BC
        PUSH DE
        PUSH HL
        JR PRCUS
PRCUR   PUSH BC
        PUSH DE
CURXY   EQU $+1
        LD DE,0
PRCU3   PUSH HL
        LD A,D
        CALL 3742
PRCUS   LD A,E
        RLCA 
        ADD A,E
        ADD A,A
        LD C,0
        SBC A,C
        LD B,A
        RRA 
        RRA 
        RRA 
        AND 31
        ADD A,L
        LD L,A
        LD A,B
        CPL 
        AND 7
        INC A
        LD B,A
CUR1    PUSH BC
        LD A,#FC
        ADD A,A
        RL C
        DJNZ $-3
        LD B,A
        LD A,C
        XOR (HL)
        DB "w,
        LD A,L
        AND 31
        LD A,B
        JR Z,$+4
        XOR (HL)
        DB "w-$
        POP BC
        LD A,H
        AND 7
        JR NZ,CUR1
CURQ    POP HL
        POP DE
        POP BC
        RET 

CLS     LD H,64
        CALL CLA+7
        LD A,COLOUR
CLA     LD BC,#2FF
        LD H,88
        JR $+6
        LD BC,#17FF
        XOR A
        LD L,0
        DB "w
        LD D,H
        LD E,1
        JR $+5
LDIR1   LD BC,256
        LDIR 
        RET 
NXTLINE
        LD A,E
        ADD A,32
        LD E,A
        RET NC
        LD A,D
        SUB -8
        LD D,A
        RET 
PRCATU
        LD DE,SECBUF
        PUSH DE
        PUSH HL
        LD HL,SECBUF
        LD D,L,E,L
        LD BC,#905
        CALL Z,EM15635
        CALL DEPKFNT
        CALL CLS
        CALL DEPKFNT
        LD A,TITLCOL
        LD HL,#5AE0
        DB "w,
        JR NZ,$-2
        LD HL,#5820
        DB "-w
        JR NZ,$-2
        LD DE,#4000
        POP HL
        LD (PRCRE+4),HL
        CALL PRTEXT
        LD DE,#50E0
        LD HL,TFREE
        CALL PRTEXT
        INC E
        LD HL,(SECBUF+#8E5)
        CALL PRNUM
        LD C,B
        POP HL
        LD (PRCATF0-2),HL
        LD DE,#4020
PRCAT0  LD (PRCRE+1),HL
        LD A,C
        CP 88
        RET Z
        XOR A
        OR (HL)
        RET Z
        ;DEC A
        ;JR Z,PRCATNO
        PUSH BC
       PUSH DE
        LD C,3
        CALL PRFN
       IFN zwet
       POP DE
       PUSH DE
       LD A,D
       RRCA 
       RRCA 
       RRCA 
       ADD A,80
       LD D,A
        LD A,(HL)
        LD C,#47
        SUB "B
        JR Z,zwY
        LD C,#07
        DEC A
        JR Z,zwY
        LD C,#45
        CP "m"-"C
        JR Z,zwY
        DEC C
        CP "W"-"C
        JR Z,zwY
        CP "p"-"C
        JR NZ,zwN
zwY
        LD B,8
        LD A,C
        LD (DE),A
        INC E
        DJNZ $-2
zwN
       ENDIF 
        RES 3,L
       POP DE
       CALL NXTLINE
       LD A,E
       ADD A,32
       LD A,D
       RLA 
       CP 80+81
       JR C,PRCprok
        LD A,E
        ADD A,64+8
        LD E,A
        LD D,64
PRCprok
        POP BC
        INC C
        ;DB "~
PRCATNO ;DB "w
        LD A,L
        SUB -16
        LD L,A
        JR NZ,PRCAT0
        INC H
        JR PRCAT0
PRCRE
        LD DE,0
        LD HL,0
        LD A,(DE)
        OR A
        JR NZ,$+6
PRCAT
       LD DE,SECBUF
       XOR A
        LD (ERRSP+1),SP
        CALL PRCATU+3
        XOR A
        CP C
        JP Z,OLDRV
        LD HL,(PRCDESC+1)
        CALL SAVTEST
       JP NZ,PRCCPN
PRCB    LD B,0
PRCATST LD A,B
        CP C
       JP NC,PRCCPN
       LD L,-1
       INC L
       SUB 22
       JR NC,$-3
;nom=stolb+4*(stroka+1)
;HL=8*(#1100+nom)
       ADD A,23
       ADD A,A,A,A
       ADD A,L
       ;SUB -4
        LD H,11
        LD L,A
        DB ")))
        PUSH HL
        CALL CURSOR
        PUSH BC
        LD A,B
        LD (PRCB+1),A
        LD BC,16
        LD HL,SECBUF
PRCATF0 DEC (HL)
        INC (HL)
        ADD HL,BC
        JR Z,PRCATF0
        ADD A,-1
        JR C,PRCATF0
        CALL PRFNDO
        DB ",~,
        PUSH HL
        LD H,(HL)
        LD L,A
        LD B,32
        SUB B
        CP 96
        LD A,B
        JR NC,PRFNE
        LD A,H
        SUB B
        CP 96
        LD A,B
        JR NC,$+4
        LD B,H
        LD A,L
PRFNE   CALL PRSYM
        LD A,B
        CALL PRSYM
        POP BC
        INC C
        CALL PRSTLEN
        POP BC
        CALL IYKEY
        POP HL
        RET NC
        CALL CURRES
        CP 13
       JR Z,PRCDESC
        SUB 8
       JP C,PRCRE
        JR NZ,PRCATNL
        LD A,B
        SUB CATHGT
        JR NC,$+3
        XOR A
        LD B,A
       XOR A
PRCATNL DEC A
        JR NZ,PRCATNR
       LD A,B
       ADD A,CATHGT
       LD B,A
       XOR A
PRCATNR DEC A
        JR NZ,PRCATND
        INC B
PRCATND DEC A
        JR NZ,PRCATNU
PRCATUP XOR A
        CP B
        JR Z,$+3
        DEC B
PRCND  JP PRCATST
PRCCPN  LD B,C
        JR PRCATUP
PRCATNU SUB "1"-11
        CP 4
        JR NC,PRCND
        LD (DRV+1),A
        LD HL,(PRCRE+4)
       JP PRCAT
PRCDESC
        LD HL,0
        CALL LDIR9-3
        LD E,(HL)
        INC L
        LD D,(HL)
        LD (STADR+1),DE
GETbde  INC L
        LD E,(HL)
        INC L
        LD D,(HL)
GETBDE  INC L
        PUSH DE
        LD A,(HL)
        INC L
        LD E,(HL)
        INC L
        LD D,(HL)
        POP HL
        LD B,A
        LD C,5
        SCF 
        RET 
REMFN
        LD HL,FNBUF
        LD DE,FILENAM
LDIR9   LD BC,9
        LDIR 
        RET 
SAVE
        LD HL,TSAVE
LENGTH  EQU $+1
        LD DE,0
        LD (SDESCHL+1),DE
        DEC DE
        INC D
        RET Z
        LD (ERRSP+1),SP
        PUSH DE
        CALL PRCATU
        LD HL,(SSTART+1)
        LD BC,LENGTH
        CALL PRSTLEN
        LD HL,FILENAM
        LD DE,FNBUF
        CALL LDIR9
        CALL NAME
        JP NC,POPRET
        LD HL,LINBUF
        LD DE,8
        LD BC,#105
        CALL EM15635
        POP BC
        LD A,(LINBUF+#E4)
        LD C,A
        LD DE,0
SAV0    LD A,E
        LD (SAVSEC+1),A
        LD HL,WINBUF
        PUSH BC
        PUSH DE
        PUSH HL
        LD BC,#105
        CALL EM15635
        POP HL
        POP DE
        POP BC
SAV1    LD A,C
        OR A
        JP Z,SAVNEON
        CALL SAVTEST
        JR NZ,NOERASE
        LD A,C
        DEC A
        JR Z,SAVON
        PUSH BC
        LD A,L
        OR 15
        LD L,A
        LD A,B
        LD B,(HL)
        DEC L
        LD C,(HL)
        DEC L
        CP (HL)
        RES 2,L
        JR Z,SAVOVER
        RES 3,L
        DEC L
        LD (HL),1
        PUSH DE
        PUSH HL
        LD HL,LINBUF+#F4
        INC (HL)
        LD HL,WINBUF
        CALL EM6
        POP HL
        POP DE
        POP BC
NOERASE DEC C
        LD A,16
        ADD A,L
        LD L,A
        JR NC,SAV1
        INC E
        JR SAV0
SAVOVER
        LD D,B
        LD E,C
        POP BC
        CALL SAVTAM
        XOR A
        LD (SAVFLAG+3),A
        JR SAVALL2
SAVON
        SET 3,L
        INC L
        CALL SAVTAM
        LD E,(HL)
        INC L
        LD D,(HL)
        LD HL,LINBUF+#E5
        ADD A,(HL)
        LD (HL),A
        INC HL
        JR NC,$+3
        INC (HL)
SAVALL  LD HL,LINBUF+#E5
        LD A,(HL)
        SUB B
        LD (HL),A
        INC HL
        JR NC,$+3
        DEC (HL)
SAVALL2 PUSH BC
        PUSH DE
        LD E,C
        LD D,'WINBUF
SDESCHL LD HL,0
        LD BC,MUZ
        ADD HL,BC
        LD C,L
        LD L,-1
        LD B,14
SAVSDES LD A,C
        CP L
        JR Z,SAVSEC
        LD A,(DE)
        DEC E
        LD (HL),A
        DEC L
        DJNZ SAVSDES
SAVS0   LD A,C
        CP L
;;     JR Z,$+4
        LD (HL),0
        DEC HL
        JR NZ,SAVS0
SAVSEC  LD DE,0
        LD HL,WINBUF
        CALL EM6
        POP DE
        POP BC
        LD HL,MUZ
SVNXPAG LD C,6
        CALL EM15635
        LD DE,(23796)
SAVFLAG LD (LINBUF+#E1),DE
        LD HL,MUZ
        LD (SVNXPAG-2),HL
        LD HL,LINBUF
        LD A,H
        LD (SAVFLAG+3),A
        LD DE,8
        JP EM6
SAVNEON
        LD HL,LINBUF+#E4
        LD A,(HL)
        INC (HL)
        CP 128
        RET Z
        PUSH BC
        CALL SAVEPP
SAVNEO0 LD A,(DE)
        LD (HL),A
        INC DE
        INC L
        DJNZ SAVNEO0
        POP BC
        CALL SAVTAM
        LD DE,(LINBUF+#E1)
        LD (HL),E
        INC L
        LD (HL),D
        JP SAVALL
SAVTAM
        PUSH BC
SSTART  LD BC,0
        LD (HL),C
        INC L
        LD (HL),B
        INC L
        LD BC,(LENGTH)
        LD (HL),C
        INC L
        LD (HL),B
        INC L
        POP BC
        LD A,(HL)
        LD (HL),B
        LD C,L
        INC L
        RET 
SAVEPP
        LD L,A
        LD H,0
        LD D,H
        DB "))))
        LD E,H
        LD A,E
        LD (SAVSEC+1),A
        LD H,'WINBUF
        PUSH HL
        LD L,D
        LD BC,#105
        CALL EM15635
        POP HL
        LD DE,FILENAM
        LD B,9
        RET 
SAVTEST
        PUSH BC,DE,HL
        LD DE,FILENAM
        LD B,9
SAVTST0 LD A,(DE)
        CP (HL)
        JR NZ,POP3
        INC HL,DE
        DJNZ SAVTST0
POP3    POP HL,DE,BC
        RET 
PRNUMH
        CALL PRSK
        PUSH HL
        LD A,H
        CALL PRHEX
        LD A,L
        JR PRNUMAQ
PRSK
        LD A,"(
        CALL PR88
        LD A,"#
        JR PR88
PRNUMA
        PUSH HL
        PUSH AF
        LD L,A
        LD H,0
        CALL PRNUM3
        CALL PRSK
        POP AF
PRNUMAQ CALL PRHEX
        LD A,")
        CALL PR88
        POP HL
        RET 
PRHEX
        LD C,A
        DUP 4
        RRA 
        EDUP 
        CALL PRH
        LD A,C
PRH     AND 15
        ADD A,"0
        CP ":
        JR C,$+4
        SUB ":"-"A
        JR PR88
PRAHL
        CALL PR88
        LD A,H
        CALL PR88
        LD A,L
PR88
        PUSH HL
        ADD A,A
        LD L,A
        LD H,15
        DB "))
        JR PRDGUSE
PRSTLEN
        PUSH BC
        LD DE,#4015
        CALL PRNUM
        DB ">,
        CALL PR88
        POP HL
        LD A,(HL)
        INC HL
        LD H,(HL)
        LD L,A
PRNUM   LD BC,10000
        CALL PRDIG
PRNUM4  LD BC,1000
        CALL PRDIG
PRNUM3  LD BC,100
        CALL PRDIG
PRNUM99 LD BC,10
        LD H,B
        CALL PRDIG
        LD C,1
PRDIG   LD A,120
PRDIG0  ADD A,8
        SBC HL,BC
        JR NC,PRDIG0
        ADD HL,BC
        PUSH HL
        LD H,61
        LD L,A
PRDGUSE PUSH DE
        LD B,8
        DB "~
        RRCA 
        OR (HL)
        INC L
        LD (DE),A
        INC D
        DJNZ $-6
        POP DE
        POP HL
        INC E
        RET 
PRTEXT
        LD C,0
PRTXT   XOR A
        OR (HL)
        RET Z
        INC HL
        CALL PRSYM
        JR PRTXT
GETWIN
        LD HL,LDIRKA
        LD (HL),E
        INC HL
        LD (HL),D
        INC HL
        LD (HL),C
        INC HL
        LD (HL),B
        INC HL
        PUSH BC
        PUSH DE
GETWIN0 PUSH BC
        EX DE,HL
        PUSH HL
        LD B,0
        LDIR 
        POP HL
        EX DE,HL
        POP BC
        CALL DDE
        DJNZ GETWIN0
        POP DE
        POP BC
        RET 
WINDTXT
        EX (SP),HL
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        EX (SP),HL
        PUSH DE
        PUSH BC
        PUSH DE
        PUSH HL
        LD A,B
        SUB -9
        LD B,A
        CP 50
        LD HL,WINBUF
        CALL C,GETWIN
        EX DE,HL
        PUSH BC
        CALL FINDATR-1
        LD H,A
        CALL LDIR1
        DEC H
        POP BC
        SRL B,B,B
GETWN1  PUSH BC
        PUSH HL
        LD B,C
GWCOL   LD (HL),WINCOL
        INC L
        DJNZ $-3
        POP HL
        LD C,32
        ADD HL,BC
        POP BC
        DJNZ GETWN1
        CALL DEPKFNT
        POP HL
        POP DE
        POP BC
        PUSH BC
WINDTIT LD B,C
        PUSH DE
        XOR A
        LD (DE),A
        INC E
        DJNZ $-2
        POP DE
        CALL DDE
        JR NC,WINDTIT
        POP BC
WINDBOK PUSH BC
        PUSH DE
        LD A,128
        LD (DE),A
        LD B,C
        DEC B
        XOR A
        INC E
        LD (DE),A
        DJNZ $-2
        INC A
        LD (DE),A
        POP DE
        CALL DDE
        POP BC
        DJNZ WINDBOK
        LD B,C
        LD A,-1
        LD (DE),A
        INC E
        DJNZ $-2
        POP DE
        LD B,-2
        PUSH DE
        CALL WIND0XT
        POP HL
        CALL FINDATR-1
        LD H,A
        PUSH HL
        LD (HL),TITLCOL
        INC L
        DEC C
        JR NZ,$-4
        POP HL
        LD DE,64
        ADD HL,DE
        RET 
WIND0XT
        PUSH BC
        PUSH DE
        CALL WINDPX0
        POP DE
        INC E
        CALL NXTLINE
        DEC E
        POP BC
        INC B
        XOR A
        OR (HL)
        JR NZ,WIND0XT
        RET 
WINDPX0
        LD C,0
        LD B,42
WINDOX0 DEC B
        XOR A
        OR (HL)
        RET Z
        INC HL
        CP 13
        RET Z
        CALL PRSYM
        JR WINDOX0
PUTWIN
        LD HL,LDIRKA
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        PUSH DE
PUTWIN0 PUSH BC
        PUSH DE
        LD B,0
        LDIR 
        POP DE
        POP BC
        CALL DDE
        DJNZ PUTWIN0
        POP DE
        LD A,D
        CALL FINDATR
        LD D,A
        CALL LDIR1
DEPKFNT
        LD E,0
DEPKFN1 LD H,#6E
        LD L,E
        LD D,'FONTS
        LD B,4
DEPKFN2 CALL DEPKA
        DB "q$w
        RES 4,H
        CALL DEPKB
        DB "w%q
        CALL DEPKA
        DB "w$q
        RES 4,H
        CALL DEPKB
        DB "q%w
        DJNZ DEPKFN2
        INC E
        JR NZ,DEPKFN1
        RET 
DEPKA
        LD A,(DE)
        INC D
        LD C,A
        DB "$$
        SET 4,H
        XOR A
DEPKB   SRL C
        RRA 
        SRL C
        RRA 
        RET 
OUTME
        PUSH BC
        LD BC,FD
        OUT (C),A
        POP BC
        RET 
QUIT
        LD HL,SSBREAK
        CALL TYN
PUTWD   RET Z
        JR QUIT3
QUIT2
        CALL TYN
        JR C,PUTWD
        CALL NZ,SAVE
QUIT3
        LD A,23
        CALL OUTME
        LD HL,(#C000)
        LD DE,#FF31
        XOR A
        SBC HL,DE
        JP Z,#C000
        LD H,A,L,A
QUITHL  PUSH HL
        LD A,16
        CALL OUTME
        JP 15663

TFREE   DB "Free:",0
TLOAD   DB "Load file:",0
TSAVE   DB "Save file:",0

TPTUTIL DB "Pro Tracker 3.x Utility v1.367"
        NOP 
TBY     DB "(C) 09.03.2004 by Alone Coder"
        DB "/i8",0

TMENU   DB "  LOAD  MODULE",1
        DB "  PLAY  MODULE",1
        DB "  SAVE  MODULE",1
        DB "  COMPILE SONG",1
        DB " SWAP  CHANNELS",1
        DB "  RENAME  SONG",1
        DB " SORT  PATTERNS",1
;      DB "TRACKS/POSITIONS",1
        DB "      HELP",1
        DB "      QUIT",1,0
SSBREAK
        DB " Выход из программы",13,13
        DB "QUIT?STAY?QUIT?STAY?",13
        DB " Sure to quit(Y/N)?",0
SAVERR
        DB "      ERROR",13,13
        DB "  Virtual memory",13
        DB " allocation error",0
LISTER
       ;CALL DEPKFNT
        LD HL,TEXT
        CALL PRPAGE
START   CALL IYKEY
        RET NC
        LD HL,STQ
        PUSH HL
        SUB "9
        JR Z,UP
        INC A
        JR Z,DOWN
        SUB 11-"8
        JR Z,UP
        INC A
        JR Z,DOWN
        INC A
        JR Z,PGDN
        INC A
        JR Z,PGUP
        SUB -3
        JR Z,PGDN
        INC A
        JR Z,PGUP
        POP HL
STQ
        JR START
PGUP
        LD HL,(TOP)
UPPAGE  LD B,HGT
        CALL LINEUP
        DJNZ $-3
PRPAGE  LD (TOP),HL
        LD DE,#4000
        LD B,HGT
PRPAGE0 CALL PRLINE
        CALL NXTLINE
        DJNZ PRPAGE0
        LD (BOTTOM),HL
        RET 
PGDN
        LD HL,(BOTTOM)
        LD (TOP),HL
        LD DE,#4000
        LD B,HGT
DNPAGE0 LD A,(HL)
        OR A
        JR Z,UPPAGE
        CALL PRLINE
        CALL NXTLINE
        DJNZ DNPAGE0
        LD (BOTTOM),HL
        RET 
BOTTOM=$+1
DOWN
        LD HL,0
        LD A,(HL)
        OR A
        RET Z
        PUSH HL
        CALL SCRUP
        LD HL,(TOP)
        CALL LINEDN
        LD (TOP),HL
        POP HL
        LD DE,#50E0
        CALL PRLINE
        LD (BOTTOM),HL
        RET 
TOP=$+1
UP
        LD HL,0
        DEC HL
        LD A,(HL)
        INC HL
        OR A
        RET Z
        CALL LINEUP
        LD (TOP),HL
        PUSH HL
        CALL SCRDN
        LD HL,(BOTTOM)
        CALL LINEUP
        LD (BOTTOM),HL
        POP HL
        LD DE,#4000
PRLINE  PUSH BC
        PUSH DE
        DEC E
        LD BC,#2A00
PRLINEP LD A,(HL)
        OR A
        JR Z,PRLINEQ
        INC HL
        CP 13
        JR Z,PRLINEQ
        CALL PRSYM
        DJNZ PRLINEP
        INC HL
PRLNE
        POP DE
        POP BC
        RET 
PRLINEQ LD A,32
        CALL PRSYM
        DJNZ $-5
        JR PRLNE
SCRDN
        LD B,HGT-1
        LD HL,#50E0
SCRDN0  LD D,H,E,L,A,L
        SUB 32
        LD L,A
        JR NC,$+6
        LD A,H
        SUB 8
        LD H,A
        CALL LDIRER
        DJNZ SCRDN0
        RET 
LDIRER
        INC B
        PUSH HL
        LD A,8
LDIR0   PUSH DE,HL
        DUP 32
        LDI 
        EDUP 
        POP HL,DE
        INC H,D
        DEC A
        JR NZ,LDIR0
        POP HL
        RET 
SCRUP
        LD B,HGT-1
        LD HL,#4000
SCRUP0  LD D,H,E,L
        CALL NXTLINE
        EX DE,HL
        CALL LDIRER
        DJNZ SCRUP0
        RET 
LINEDN
        LD A,(HL)
        OR A
        RET Z
        INC HL
        CP 13
        JR NZ,LINEDN
        RET 
LINEUP
        DEC HL
        LD A,(HL)
        OR A
        JR Z,LFQ
LINEUP0 DEC HL
        LD A,(HL)
        OR A
        JR Z,LFQ
        CP 13
        JR NZ,LINEUP0
LFQ     INC HL
        RET 
deinit
        LD DE,MUZ
        PUSH DE
       LD HL,TcomT
       LD BC,TcomTln
       LDIR 
        POP DE
       DI 
       LD HL,105
       ADD HL,DE
        LD (dei_SP0+1),SP
        LD SP,HL
       LD HL,201-105
       ADD HL,SP
       LD BC,0
       LD A,-1
       CPIR 
       OR A ;SUB HL,SP-105
       SBC HL,SP
       LD BC,105
       ADD HL,BC
       DEC SP,SP
       POP BC
       PUSH BC
       OR A
       SBC HL,BC
       EX DE,HL
        LD B,49;48
dia_s0  POP HL
       LD A,H
       CP #40
       JR C,$+3
       ADD HL,DE
        PUSH HL
        POP HL
        DJNZ dia_s0
deiNpa0 LD A,B
deiNpa  DEC SP
        POP BC
        INC B
        JR Z,deiNpaQ
        DEC B
        CP B
        JR NC,deiNpa
        JR deiNpa0
deiNpaQ
        ADD A,3
        LD B,A
dia_p0  POP HL
       LD A,H
       CP #40
       JR C,$+3
       ADD HL,DE
        PUSH HL
        POP HL
        DJNZ dia_p0
dei_SP0 LD SP,0
        EI 
        RET 
TcomT
        DB "ProTracker 3.6"
TcomTln=$-TcomT
PAKHELP
       NOP 
TEXT    INCBIN "acbdoc  .W"
       NOP 

TABC    INCBIN "TABC
LTABC   EQU $-TABC/2
FNBUF   DS 9
DISPLAY $
        DS .(-$)
TABS
        INCBIN "tb_PT
        INCBIN "tb_ST
        INCBIN "tb_ASM
        INCBIN "tb_REAL
        INCLUDE "PTUPLAY",#C2
initia
        LD DE,MUZ
        LD B,D,C,E
initia3
       ;LD (ia_pos0+1),BC
        DI 
        LD HL,101
        ADD HL,DE
        PUSH HL
        LD (sav_SP0+1),SP
        LD SP,HL
        POP AF
        POP HL
        ADD HL,BC
        LD (Psa_chn+1),HL
        LD D,B,E,C
       DEC SP,SP
        LD B,49;48
ia_s0   POP HL
        ADD HL,DE
        PUSH HL
        POP HL
        DJNZ ia_s0
       LD L,E
       ADD HL,SP
       LD H,D
        LD (Psa_beg+1),HL
       LD C,A
       ADD HL,BC
        LD (Psa_lop+1),HL
iniNpa0 LD A,B
iniNpa  DEC SP
        POP BC
        INC B
        JR Z,iniNpaQ
        DEC B
        CP B
        JR NC,iniNpa
        JR iniNpa0
iniNpaQ
        ADD A,3
        LD B,A
ia_p0   POP HL
        ADD HL,DE
        PUSH HL
        POP HL
        DJNZ ia_p0

       LD HL,T_m
       LD C,D
        LD B,T_m_l
ini_m0  LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD A,C
        LD (DE),A
        DJNZ ini_m0
        LD HL,#101
        LD (int_qty),HL ;&A_qty
        LD (B_qty),HL ;&C_qty
sav_SP0 LD SP,0
        EI 
        XOR A
        LD (Am_vol+1),A
        LD (Bm_vol+1),A
        LD (Cm_vol+1),A
        LD HL,DUMMYORN
        LD (Ao_adr+1),HL
        LD (Bo_adr+1),HL
        LD (Co_adr+1),HL
        LD (As_adr+1),HL
        LD (Bs_adr+1),HL
        LD (Cs_adr+1),HL
        LD (Ach_adr+1),HL
        SUB 16
        LD (Ag_vol+1),A
        LD (Bg_vol+1),A
        LD (Cg_vol+1),A
        SBC A,A
        LD (Avb_lok+1),A
        LD (Cvb_lok+1),A
        LD (Bvb_lok+1),A
        POP DE
        DEC DE
        JP eff_tmp
end
        DISPLAY $,"<",SECBUF
        ORG #5CDD
        DB "PTU1.367B
        INCLUDE "mrip*",#C5
        ORG $
        CALL 8026
        JP NC,nenado
        LD HL,QUITHL
        LD (HL),225
        XOR A
        JP GO+3
        DISPLAY $MUZ
        PUSH DE
       LD HL,TcomT
       LD BC,Tco