Код:
----------------------------------------------------------------
;PT2 and PT3 universal searcher by Spectre
;IN: HL-Start address, BC-Length.
;OUT: HL-Song start address, BC-Length (positions), A: 0-PT2, 1-PT3.
LD HL,#6000
LD BC,#A000
FINDPT LD A,B
OR C
RET Z; Not found
LD A,(HL) ;Temp
OR A
JR Z,FPTEND3
CP #40
JR NC,FPTEND3
PUSH HL
INC HL
LD A,(HL) ;Len
OR A
JR Z,FPTEND2
INC HL
CP (HL) ;Loop
JR C,FPTEND2
PUSH BC
INC HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (FPT3+1),DE ;Patterns PT3 or first sample PT2
LD C,A
LD B,#30-1
FPT2 PUSH DE
LD E,(HL) ;Samples
INC HL
LD D,(HL)
INC HL
EX (SP),HL
LD A,D
OR E
JR Z,$+5
SBC HL,DE
CCF
POP HL
JR C,FPTEND
DJNZ FPT2
LD E,(HL) ;#63 ;Patterns PT2 or positions PT3
INC HL
LD D,(HL) ;#64
INC HL
PUSH HL
LD HL,-#83
ADD HL,DE
SBC HL,BC
POP HL ; #65
JR NZ,FPT3
PUSH HL
ADD HL,DE
LD DE,-#65-1
ADD HL,DE
LD A,(HL)
POP HL
INC A
JR Z,FPT5 ;It PT2
FPT3 LD DE,0
PUSH HL
LD HL,-#C9
ADD HL,DE
SBC HL,BC
POP HL
JR NZ,FPTEND
PUSH HL
ADD HL,DE
LD DE,-#C9-1
ADD HL,DE
LD A,(HL)
POP HL
INC A
JR Z,FPT4 ;It PT3
FPTEND POP BC
FPTEND2 POP HL
FPTEND3 INC HL
DEC BC
JR FINDPT
FPT4 LD DE,#65-#C9 ;found PT3
ADD HL,DE
INC A
FPT5 POP DE,DE
LD DE,-#65 ;found PT2
ADD HL,DE
RET