	section l,code_p

;--- NOISERIPPER V1.15 WRITTEN BY ALLEYCAT OF THALYSIS 
;
;--- STARTUP-CODE    /  NOW IT CAN BE LOADED FROM CLI AND WB

	MOVEM.L	D0/A0,-(SP)
	CLR.L	WBENCHMSG

	MOVE.L	4,A6
	SUB.L	A1,A1
	JSR	-294(A6)
	MOVE.L	D0,A4

	TST.L	$AC(A4)
	BEQ	FROM_WB

	MOVEM.L	(SP)+,D0/A0
	BRA	RUN

FROM_WB:LEA	$5C(A4),A0
	JSR	-384(A6)
	LEA	$5C(A4),A0
	JSR	-372(A6)
	MOVE.L	D0,WBENCHMSG

	MOVEM.L	(SP)+,D0/A0
RUN:	BSR	MAIN
	MOVE.L	D0,-(SP)
	TST.L	WBENCHMSG
	BEQ	EXIT
	
	JSR	-132(A6)
	MOVE.L	WBENCHMSG(PC),A1
	JSR	-378(A6)
EXIT:
	MOVE.L	(SP)+,D0
	RTS

WBENCHMSG:	dc.L	1
	EVEN

;     --- THE REAL CODE ---

MAIN:	LEA	DOSLIBNAME(PC),A1
	MOVEQ	#0,D0
	MOVE.L	4,A6		; ABSOLUTE EXEC-BASE
	JSR	-552(A6)	; OPENLIBRARY
	MOVE.L	D0,DOSBASE

	MOVE.L	D0,A6
	MOVE.L	#1005,D2
	MOVE.L	#WSTRUCT,D1
	JSR	-30(A6)
	MOVE.L	D0,WHANDLE

*********************************
BUILDMENU:
	MOVEQ	#0,D4
	MOVE.L	#$7FF00,D5

	LEA	CLSTEXT(PC),A2
	BSR	PRINT		; WRITE (CLEAR FRAMES)
	LEA	CTEXT1(PC),A2
	BSR	PRINT

	MOVE.L	DOSBASE,A6
	MOVE.L	WHANDLE(PC),D1
	MOVE.L	#BUFFER,D2
	MOVE.L	#2,D3
	JSR	-42(A6)		; READ
	
	MOVE.B	BUFFER(PC),D5
	BCLR	#5,D5		; CHANGE TO UPPERCASE

	CMP.B	#`X`,D5
	BEQ	OUTRUN
	CMP.B	#`L`,D5
	BEQ	STARTSEARCH2
	CMP.B	#`H`,D5
	BEQ	STARTSEARCH

	BRA	BUILDMENU

********************************************
OUTRUN:
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WHANDLE(PC),D1
	JSR	-36(A6)		; CLOSEWINDOW
	
	MOVE.L	4,A6
	MOVE.L	DOSBASE(PC),A1
	JSR	-414(A6)	; CLOSELIBRARY
	RTS

***********************************
STARTSEARCH:
	MOVE.L	#$C00000,D4
	MOVE.L	#$C7FF00,D5
STARTSEARCH2:
	MOVE.L	D4,STARTPOS
	MOVE.L	D5,ENDPOS

	LEA	CTEXT2(PC),A2
	BSR	PRINT

	MOVE.L	D4,A0

MK2:	CMP.B	#`M`,(A0)
	BNE	MK1
	CMP.B	#`.`,1(A0)
	BNE	MK1
	CMP.B	#`K`,2(A0)
	BNE	MK1
	CMP.B	#`.`,3(A0)
	BNE	MK1

	MOVE.L	A0,D5
	BTST	#0,D5
	BNE	MK1

	MOVE.L	A0,ACTUALPOS
	SUB.L	#$438,A0
	BCLR	#0,MK
	BRA	SONG_FOUND

MK1:	ADDQ	#1,A0

	MOVE.B	(A0),$dff180

	CMP.L	ENDPOS(PC),A0
	BNE	MK2

*PASS*2***********************
	LEA	CTEXT5(PC),A2
	BSR	PRINT

	MOVE.L	STARTPOS(PC),A0

SK2:	CMP.B	#`S`,(A0)
	BEQ	SK3
	CMP.B	#`s`,(A0)
	BNE	SK1
SK3:	CMP.B	#`T`,1(A0)
	BEQ	SK4
	CMP.B	#`t`,1(A0)
	BNE	SK1
SK4:	CMP.B	#`-`,2(A0)
	BNE	SK1

	MOVE.L	A0,D5
	BTST	#0,D5
	BNE	SK1

;	--- IS IT A SONG ? ---

	MOVE.L	A0,A1
	SUB.L	#20,A1
	MOVEQ	#19,D0
SO2:	MOVE.B	(A1)+,D1
	BEQ	SO1
	CMP.B	#122,D1
	BHI	SK1
	CMP.B	#31,D1
	BLS	SK1
SO1:	DBF	D0,SO2

	MOVE.L	A0,ACTUALPOS
	SUB.L	#20,A0
	BSET	#0,MK
	BRA	SONG_FOUND

SK1:	ADDQ	#1,A0

	MOVE.B	(A0),$DFF180
	MOVE.B	#0,$DFF181

	CMP.L	ENDPOS(PC),A0
	BNE	SK2
	BRA	BUILDMENU

************************
SONG_FOUND:
	MOVE.L	A0,D5
	MOVE.L	D5,D7
SONG_AGAIN:
	MOVE.L	D7,D5
	BSR	C_TO_A
	BSR	CALCLEN
				; --- print adress
	LEA	CTEXT3(PC),A2
	BSR	PRINT
	LEA	CHARBLOCK(PC),A2
	BSR	PRINT
				; --- print name
	LEA	CTEXT6(PC),A2
	BSR	PRINT
	MOVE.L	D7,A2
	BSR	PRINT

	BSR	CALCINT	
				; --- print length
	LEA	CTEXT7(PC),A2
	BSR	PRINT
	MOVE.L	TOTALLEN,D5
	BSR	C_TO_A
	LEA	CHARBLOCK+3(PC),A2
	BSR	PRINT
				; --- song length
	LEA	CTEXT8(PC),A2
	BSR	PRINT
	MOVE.L	D7,A0
	MOVEQ	#0,D5
	MOVE.B	$3B6(A0),D5
	BSR	C_TO_A
	LEA	CHARBLOCK+6(PC),A2
	BSR	PRINT
				; --- number of patterns
	LEA	CTEXT9(PC),A2
	BSR	PRINT
	MOVE.L	HIGHPAT(PC),D5
	ADDQ	#1,D5
	JSR	C_TO_A
	LEA	CHARBLOCK+6(PC),A2
	BSR	PRINT

	BSR	COPYINST
	LEA	CTEXT10(PC),A2
	BSR	PRINT
* * * * * * * * * * * * * * * * * * * * 
MENU_2:
	MOVEQ	#32,D0
	LEA	BUFFER(PC),A0
CLEAR:	MOVE.B	#0,(A0)+
	DBF	D0,CLEAR

	LEA	BUFFER(PC),A2
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WHANDLE(PC),D1
	MOVE.L	A2,D2
	MOVEQ	#32,D3
	JSR	-42(A6)		; READ
	MOVE.B	#0,-1(A2,D0)

	BCLR	#5,BUFFER

	MOVE.B	BUFFER(PC),D1
	MOVEQ	#0,D0
	LEA	OPTIONS(PC),A0
TNT:	ADDQ	#1,D0
	MOVE.B	(A0)+,D2
	CMP.B	D1,D2
	BNE	TNT
	SUBQ	#1,D0
	CMP.B	#10,D0
	BHI	NO_OPT
	LSL.L	#2,D0
	LEA	OPTIONS2(PC),A1
	MOVE.L	(A1,D0),A1
	JMP	(A1)
NO_OPT:
	BRA	SONG_AGAIN


***********************
COPYMOD:
	MOVE.L	D7,A0
	MOVE.L	#$40000,A1
	MOVE.L	TOTALLEN(PC),D0
CM1:	MOVE.B	(A0)+,(A1)+
	DBF	D0,CM1
	BRA	SONG_AGAIN
***********************
FLIPFILTER:
	MOVE.B	#0,D0
	BTST	#1,$BFE001
	BNE	FF1
	ADD.B	#1,D0
FF1:	AND.B	#1,D0
	ASL.B	#1,D0
	AND.B	#$FD,$BFE001
	OR.B	D0,$BFE001
	BRA	SONG_AGAIN
***********************
FLIPPY:
	LEA	CTEXT10+92(PC),A0
	LEA	TERENCE(PC),A1
	MOVEQ	#22,D0
FL1:	MOVE.B	(A1)+,(A0)+
	DBF	D0,FL1
	BCHG	#0,FLIP
	BRA	SONG_AGAIN

***********************
CONTI:
	BCLR	#0,FLIP
	BSR	CLEARLIST
	MOVE.L	ACTUALPOS(PC),A0
	TST.B	MK
	BEQ	MK1
	BRA	SK1

***********************
PLAYIT:
	MOVE.L	D7,A0
	MOVE.B	$3B6(A0),SONGLEN
	MOVE.B	$3B7(A0),PLAYERM
	MOVE.L	A0,MT_DATA
	BSR	MT_INIT
	MOVE.W	#$4000,$DFF09A
	MOVE.L	$6C,OLDIRQ
	MOVE.L	#NEWIRQ,$6C
	MOVE.W	#$C000,$DFF09A
	BSR	MO
	MOVE.W	#$4000,$DFF09A
	MOVE.L	OLDIRQ,$6C
	MOVE.W	#$C000,$DFF09A
	BSR	MT_END
	BRA	SONG_AGAIN

***********************
RENAME:
	LEA	BUFFER+1(PC),A0
	MOVE.L	D7,A1
	MOVEQ	#19,D0
RN1:	MOVE.B	(A0)+,(A1)+
	DBF	D0,RN1
	BRA	SONG_AGAIN

***********************
INSTRENAME:
	LEA	BUFFER+1(PC),A2
	BSR	CONVERT
	SUBQ	#1,D0
	BMI	IR5
	MULU	#30,D0
	MOVE.L	D7,A0
	ADD.L	#20,A0
	ADD.L	D0,A0
	ADDQ	#1,A2
	MOVEQ	#21,D0
IR4:	MOVE.B	(A2)+,(A0)+
	DBF	D0,IR4
IR5:	BRA	SONG_AGAIN

***********************
PLAYINST:
	LEA	BUFFER+1(PC),A2
	BSR	CONVERT
	MOVE.L	D0,D5
	LSL.L	#2,D0
	LEA	INSTIS(PC),A0
	MOVE.L	(A0,D0),D2
	BNE	PI1
	BRA	SONG_AGAIN
PI1:	
	SUBQ	#1,D5
	MULU	#30,D5

	MOVE.L	D7,A0
	ADD.L	#42,A0
	ADD.L	D5,A0
	MOVE.W	(A0),D0
	MOVE.W	#400,D3
PI2:
	MOVE.W	#$000F,$DFF096
	MOVE.W	D0,$DFF0A4	
	MOVE.W	D0,$DFF0B4	
	MOVE.W	D0,$DFF0C4	
	MOVE.W	D0,$DFF0D4	
	MOVE.W	D3,$DFF0A6
	MOVE.W	D3,$DFF0B6
	MOVE.W	D3,$DFF0C6
	MOVE.W	D3,$DFF0D6
	MOVE.W	#64,$DFF0A8
	MOVE.W	#64,$DFF0B8
	MOVE.W	#64,$DFF0C8
	MOVE.W	#64,$DFF0D8
	MOVE.L	D2,$DFF0A0
	MOVE.L	D2,$DFF0B0
	MOVE.L	D2,$DFF0C0
	MOVE.L	D2,$DFF0D0
	MOVE.W	#$800F,$DFF096

PI3:	BTST	#6,$BFE001
	BEQ	PI4
	BTST	#2,$DFF016
	BEQ	PI5
	BRA	PI3
PI4:	BTST	#2,$DFF016
	BEQ	PI6
	ADD.B	#1,SOFT
	BNE	PI3
	ADD.W	#1,D3
	MOVE.B	#0,SOFT
	BRA	PI2

PI5:	BTST	#6,$BFE001
	BEQ	PI6
	ADD.B	#1,SOFT
	BNE	PI3
	SUB.W	#1,D3
	MOVE.B	#0,SOFT
	BRA	PI2

PI6:	MOVE.W	#$000F,$DFF096
	BRA	SONG_AGAIN


* * * * * * * * * * * *
SAVING:
	MOVE.B	BUFFER+1(PC),D0
	BCLR	#5,D0

	CMP.B	#`M`,D0
	BEQ	SAVEMOD
	CMP.B	#`I`,D0
	BEQ	SAVEINST
	CMP.B	#`F`,D0
	BEQ	SAVESELF
	BRA	SONG_AGAIN

***********************
SAVEMOD:
	MOVE.L	D7,A0
	LEA	NAMEMOD(PC),A1
	MOVEQ	#19,D0
SM1:	MOVE.B	(A0)+,(A1)+
	DBF	D0,SM1

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	#FILEBUFFER,D1
	MOVE.L	#1006,D2
	JSR	-30(A6)
	MOVE.L	D0,FILEHANDLE
	BEQ	ERROR

	MOVE.L	FILEHANDLE(PC),D1
	MOVE.L	D7,D2
	MOVE.L	TOTALLEN(PC),D3
	JSR	-48(A6)

	BRA	CLOSE_DOWN

******************************
ERROR:
	LEA	CTEXT11(PC),A2
	BSR	PRINT
	BSR	MO	
	BRA	SONG_AGAIN

************************
SAVEINST:
	LEA	BUFFER+2(PC),A2
	BSR	CONVERT

	MOVE.L	D0,D5
	LSL.L	#2,D0
	LEA	INSTIS(PC),A0
	MOVE.L	(A0,D0),D6
	BNE	SI4
	BRA	SONG_AGAIN
SI4:	
	SUBQ	#1,D5
	MULU	#30,D5

	MOVE.L	D7,A0
	ADD.L	#20,A0
	ADD.L	D5,A0

	MOVE.L	A0,D4
	MOVEQ	#0,D5
	ADD.L	#22,A0
	MOVE.W	(A0),D5
	LSL.L	#1,D5

	MOVE.L	DOSBASE(PC),A6
	MOVE.L	D4,D1
	MOVE.L	#1006,D2
	JSR	-30(A6)
	MOVE.L	D0,FILEHANDLE
	BEQ	ERROR

	MOVE.L	FILEHANDLE(PC),D1
	MOVE.L	D6,D2
	MOVE.L	D5,D3
	JSR	-48(A6)

CLOSE_DOWN:
	MOVE.L	FILEHANDLE(PC),D1
	JSR	-36(A6)

	BRA	SONG_AGAIN

************************
SAVESELF:
	LEA	CTEXT12(PC),A2
	BSR	PRINT

	LEA	FILEBUFFER2(PC),A2
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WHANDLE(PC),D1
	MOVE.L	A2,D2
	MOVEQ	#49,D3
	JSR	-42(A6)		; READ
	MOVE.B	#0,-1(A2,D0)

	MOVE.L	DOSBASE,A6
	MOVE.L	#FILEBUFFER2,D1
	MOVE.L	#1006,D2
	JSR	-30(A6)
	MOVE.L	D0,FILEHANDLE
	BEQ	ERROR

	MOVE.L	FILEHANDLE(PC),D1
	MOVE.L	D7,D2
	MOVE.L	TOTALLEN(PC),D3
	JSR	-48(A6)

	BRA	CLOSE_DOWN

********************
NEWIRQ:
	MOVEM.L	D0-D6/A0-A6,-(SP)

	BSR	MT_MUSIC

	MOVEM.L	(SP)+,D0-D6/A0-A6
		dc.W	$4EF9
OLDIRQ: 	dc.L 0

********************************
;-S-U-B-R-O-U-T-I-N-E-S-
;*******************************
;
PRINT:
	MOVE.L	A2,D2
	MOVE.L	DOSBASE(PC),A6
	MOVE.L	WHANDLE(PC),D1
	MOVEQ	#0,D3
ZERO:	CMP.B	#0,(A2)+
	BEQ	DOPRINT
	ADDQ	#1,D3
	BRA	ZERO
DOPRINT:
	JSR	-48(A6)
	RTS

****************************
CALCLEN:
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVEQ	#0,D2

	MOVE.L	D7,A0
	MOVE.B	$3B6(A0),D0
	SUBQ	#1,D0
	BNE	CL1
	MOVE.B	$3B8(A0),D1
	BRA	CL4
CL1:
	ADD.L	#$3B8,A0
	MOVE.B	(A0)+,D1
CL2:
	MOVE.B	(A0)+,D2
	CMP.B	D1,D2
	BLS	CL3
	EXG	D2,D1
CL3:
	DBF	D0,CL2
CL4:
	MOVEQ	#0,D4
	MOVE.B	D1,D4
	MOVE.L	D4,HIGHPAT

	MOVE.L	D7,A0
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	MOVEQ	#31,D3
CL5:
	MOVE.W	$2A(A0,D0),D1
	ADD.L	D1,D2
	ADD.L	#30,D0
	DBF	D3,CL5

	LSL.L	#1,D2
	MOVE.L	D2,INSTLEN
	
	ADDQ	#1,D4
	LSL.L	#5,D4
	LSL.L	#5,D4
	ADD.L	INSTLEN,D4
	ADD.L	#1084,D4
	MOVE.L	D4,TOTALLEN
	RTS

****************************
CALCINT:
	MOVEQ	#0,D0
	MOVE.L	D7,D4
	ADD.L	TOTALLEN(PC),D4
	SUB.L	INSTLEN(PC),D4
	LEA	INSTIS+4(PC),A0

	MOVE.L	D7,A2
	ADD.L	#42,A2

	MOVEQ	#30,D6
CC1:	MOVE.W	(A2),D0
	LSL.L	#1,D0
	BNE	CC2
	MOVE.L	#0,(A0)+
	BRA	CC3
CC2:	MOVE.L	D4,(A0)+
	ADD.L	D0,D4
CC3:	ADD.L	#30,A2
	DBF	D6,CC1
	RTS

*****************************
C_TO_A:
	MOVEM.L	D0-D5/A0,-(SP)

	LEA	CHARBLOCK(PC),A0
	MOVEQ	#7,D2
CTA1:	
	MOVE.L	D5,D3
	ROL.L	#4,D3
	MOVE.L	D3,D5
	AND.B	#$0F,D3
	CMP.B	#9,D3
	BLE	CTA2
	ADD.B	#55,D3
	BRA	CTA3
CTA2:
	ADD.B	#$30,D3
CTA3:
	MOVE.B	D3,(A0)+
	DBF	D2,CTA1
	MOVEM.L	(SP)+,D0-D5/A0
	RTS

*******************************
COPYINST:
	LEA	CTEXT10+67(PC),A1
	MOVE.L	D7,A0
	ADD.L	#20,A0
	TST.B	FLIP
	BEQ	CI1
	ADD.L	#450,A0
	MOVEQ	#15,D3
	BRA	CI2
CI1:	MOVEQ	#19,D0
CI0:	MOVE.B	#`-`,(A1)+
	DBF	D0,CI0
	ADD.L	#37,A1
	MOVEQ	#14,D3

CI2:	MOVEQ	#19,D6

CI3:	MOVE.B	(A0)+,D4
	CMP.B	#32,D4
	BHI	CI4
	BRA	CI5
CI4:	CMP.B	#128,D4
	BLS	CI6
CI5:	MOVE.B	#`.`,D4
CI6:	MOVE.B	D4,(A1)+
	DBF	D6,CI3

	ADDQ	#2,A0
	ADDQ	#5,A1
					; LENGTH
	MOVEQ	#0,D5
	MOVE.W	(A0)+,D5
	LSL.L	#1,D5
	BSR	C_TO_A

	LEA	CHARBLOCK+3(PC),A2

	MOVEQ	#4,D6
CI7:	MOVE.B	(A2)+,(A1)+
	DBF	D6,CI7
					; REPLEN
	LEA	CHARBLOCK+3(PC),A2
	ADDQ	#4,A1
	ADDQ	#2,A0
	MOVEQ	#0,D5
	MOVE.W	(A0)+,D5
	LSL.L	#1,D5
	BSR	C_TO_A

	MOVEQ	#4,D6
CI8:	MOVE.B	(A2)+,(A1)+
	DBF	D6,CI8
					; REPEAT
	LEA	CHARBLOCK+3(PC),A2
	ADDQ	#4,A1
	MOVEQ	#0,D5
	MOVE.W	(A0)+,D5
	LSL.L	#1,D5
	BSR	C_TO_A

	MOVEQ	#4,D6
CI9:	MOVE.B	(A2)+,(A1)+
	DBF	D6,CI9

	ADD.L	#9,A1
	DBF	D3,CI2
	RTS

*******************************
CLEARLIST:
	LEA	CTEXT10+67(PC),A0
	MOVEQ	#15,D1
CRL2:	MOVEQ	#19,D0
CRL1:	MOVE.B	#`.`,(A0)+
	DBF	D0,CRL1
	ADD.L	#37,A0
	DBF	D1,CRL2
	RTS

********************************
CONVERT:
	MOVEQ	#0,D0
	MOVE.B	(A2),D0
	CMP.B	#`9`,D0
	BLS	CO1
	BCLR	#5,D0
	SUB.B	#39,D0
	TST.B	FLIP
	BNE	CO0
	SUB.B	#16,D0
CO0:	BRA	CO2
CO1:	SUB.B	#32,D0
	TST.B	FLIP
	BNE	CO2
	SUB.B	#16,D0
CO2:	RTS


;-----------------------------
MO:	BTST	#6,$BFE001
	BNE MO
	RTS

;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ
;ญ   NOISETRACKERV1.0 REPLAYROUTINE   ญ
;ญ MAHONEY & KAKTUS - HALLONSOFT 1989 ญ
;ญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญญ

MT_INIT:MOVE.L	MT_DATA(PC),A0
	MOVE.L	A0,A1
	ADD.L	#$3B8,A1
	MOVEQ	#$7F,D0
	MOVEQ	#0,D1
MT_LOOP:MOVE.L	D1,D2
	SUBQ.W	#1,D0
MT_LOP2:MOVE.B	(A1)+,D1
	CMP.B	D2,D1
	BGT.S	MT_LOOP
	DBF	D0,MT_LOP2
	ADDQ.B	#1,D2

	LEA	MT_SAMPLESTARTS(PC),A1
	ASL.L	#8,D2
	ASL.L	#2,D2
	ADD.L	#$43C,D2
	ADD.L	A0,D2
	MOVE.L	D2,A2
	MOVEQ	#$1E,D0
MT_LOP3:CLR.L	(A2)
	MOVE.L	A2,(A1)+
	MOVEQ	#0,D1
	MOVE.W	42(A0),D1
	ASL.L	#1,D1
	ADD.L	D1,A2
	ADD.L	#$1E,A0
	DBF	D0,MT_LOP3

	MOVE.B	#$6,MT_SPEED
	CLR.W	$DFF0A8
	CLR.W	$DFF0B8
	CLR.W	$DFF0C8
	CLR.W	$DFF0D8
	CLR.B	MT_SONGPOS
	CLR.B	MT_COUNTER
	CLR.W	MT_PATTPOS
	RTS

MT_END:	CLR.W	$DFF0A8
	CLR.W	$DFF0B8
	CLR.W	$DFF0C8
	CLR.W	$DFF0D8
	MOVE.W	#$F,$DFF096
	RTS

MT_MUSIC:
	MOVEM.L	D0-D4/A0-A3/A5-A6,-(A7)
	MOVE.L	MT_DATA,A0
	ADDQ.B	#$1,MT_COUNTER
	MOVE.B	MT_COUNTER(PC),D0
	CMP.B	MT_SPEED(PC),D0
	BLT.S	MT_NONEW
	CLR.B	MT_COUNTER
	BRA	MT_GETNEW

MT_NONEW:
	LEA	MT_VOICE1(PC),A6
	LEA	$DFF0A0,A5
	BSR	MT_CHECKCOM
	LEA	MT_VOICE2(PC),A6
	LEA	$DFF0B0,A5
	BSR	MT_CHECKCOM
	LEA	MT_VOICE3(PC),A6
	LEA	$DFF0C0,A5
	BSR	MT_CHECKCOM
	LEA	MT_VOICE4(PC),A6
	LEA	$DFF0D0,A5
	BSR	MT_CHECKCOM
	BRA	MT_ENDR

MT_ARPEGGIO:
	MOVEQ	#0,D0
	MOVE.B	MT_COUNTER(PC),D0
	DIVS	#$3,D0
	SWAP	D0
	CMP.W	#$0,D0
	BEQ.S	MT_ARP2
	CMP.W	#$2,D0
	BEQ.S	MT_ARP1

	MOVEQ	#0,D0
	MOVE.B	$3(A6),D0
	LSR.B	#4,D0
	BRA.S	MT_ARP3
MT_ARP1:MOVEQ	#0,D0
	MOVE.B	$3(A6),D0
	AND.B	#$F,D0
	BRA.S	MT_ARP3
MT_ARP2:MOVE.W	$10(A6),D2
	BRA.S	MT_ARP4
MT_ARP3:ASL.W	#1,D0
	MOVEQ	#0,D1
	MOVE.W	$10(A6),D1
	LEA	MT_PERIODS(PC),A0
	MOVEQ	#$24,D7
MT_ARPLOOP:
	MOVE.W	(A0,D0.W),D2
	CMP.W	(A0),D1
	BGE.S	MT_ARP4
	ADDQ.L	#2,A0
	DBF	D7,MT_ARPLOOP
	RTS
MT_ARP4:MOVE.W	D2,$6(A5)
	RTS

MT_GETNEW:
	MOVE.L	MT_DATA(PC),A0
	MOVE.L	A0,A3
	MOVE.L	A0,A2
	ADD.L	#$C,A3
	ADD.L	#$3B8,A2
	ADD.L	#$43C,A0

	MOVEQ	#0,D0
	MOVE.L	D0,D1
	MOVE.B	MT_SONGPOS(PC),D0
	MOVE.B	(A2,D0.W),D1
	ASL.L	#8,D1
	ASL.L	#2,D1
	ADD.W	MT_PATTPOS,D1
	CLR.W	MT_DMACON

	LEA	$DFF0A0,A5
	LEA	MT_VOICE1(PC),A6
	BSR.S	MT_PLAYVOICE
	LEA	$DFF0B0,A5
	LEA	MT_VOICE2(PC),A6
	BSR.S	MT_PLAYVOICE
	LEA	$DFF0C0,A5
	LEA	MT_VOICE3(PC),A6
	BSR.S	MT_PLAYVOICE
	LEA	$DFF0D0,A5
	LEA	MT_VOICE4(PC),A6
	BSR.S	MT_PLAYVOICE
	BRA	MT_SETDMA

MT_PLAYVOICE:
	MOVE.L	(A0,D1.L),(A6)
	ADDQ.L	#4,D1
	MOVEQ	#0,D2
	MOVE.B	$2(A6),D2
	AND.B	#$F0,D2
	LSR.B	#4,D2
	MOVE.B	(A6),D0
	AND.B	#$F0,D0
	OR.B	D0,D2
	TST.B	D2
	BEQ.S	MT_SETREGS
	MOVEQ	#0,D3
	LEA	MT_SAMPLESTARTS(PC),A1
	MOVE.L	D2,D4
	SUBQ.L	#$1,D2
	ASL.L	#2,D2
	MULU	#$1E,D4
	MOVE.L	(A1,D2.L),$4(A6)
	MOVE.W	(A3,D4.L),$8(A6)
	MOVE.W	$2(A3,D4.L),$12(A6)
	MOVE.W	$4(A3,D4.L),D3
	TST.W	D3
	BEQ.S	MT_NOLOOP
	MOVE.L	$4(A6),D2
	ASL.W	#1,D3
	ADD.L	D3,D2
	MOVE.L	D2,$A(A6)
	MOVE.W	$4(A3,D4.L),D0
	ADD.W	$6(A3,D4.L),D0
	MOVE.W	D0,8(A6)
	MOVE.W	$6(A3,D4.L),$E(A6)
	MOVE.W	$12(A6),$8(A5)
	BRA.S	MT_SETREGS
MT_NOLOOP:
	MOVE.L	$4(A6),D2
	ADD.L	D3,D2
	MOVE.L	D2,$A(A6)
	MOVE.W	$6(A3,D4.L),$E(A6)
	MOVE.W	$12(A6),$8(A5)
MT_SETREGS:
	MOVE.W	(A6),D0
	AND.W	#$FFF,D0
	BEQ	MT_CHECKCOM2
	MOVE.B	$2(A6),D0
	AND.B	#$F,D0
	CMP.B	#$3,D0
	BNE.S	MT_SETPERIOD
	BSR	MT_SETMYPORT
	BRA	MT_CHECKCOM2
MT_SETPERIOD:
	MOVE.W	(A6),$10(A6)
	AND.W	#$FFF,$10(A6)
	MOVE.W	$14(A6),D0
	MOVE.W	D0,$DFF096
	CLR.B	$1B(A6)

	MOVE.L	$4(A6),(A5)
	MOVE.W	$8(A6),$4(A5)
	MOVE.W	$10(A6),D0
	AND.W	#$FFF,D0
	MOVE.W	D0,$6(A5)
	MOVE.W	$14(A6),D0
	OR.W	D0,MT_DMACON
	BRA	MT_CHECKCOM2

MT_SETDMA:
	MOVE.W	#$12C,D0
MT_WAIT:DBF	D0,MT_WAIT
	MOVE.W	MT_DMACON(PC),D0
	OR.W	#$8000,D0
	MOVE.W	D0,$DFF096
	MOVE.W	#$12C,D0
MT_WAI2:DBF	D0,MT_WAI2
	LEA	$DFF000,A5
	LEA	MT_VOICE4(PC),A6
	MOVE.L	$A(A6),$D0(A5)
	MOVE.W	$E(A6),$D4(A5)
	LEA	MT_VOICE3(PC),A6
	MOVE.L	$A(A6),$C0(A5)
	MOVE.W	$E(A6),$C4(A5)
	LEA	MT_VOICE2(PC),A6
	MOVE.L	$A(A6),$B0(A5)
	MOVE.W	$E(A6),$B4(A5)
	LEA	MT_VOICE1(PC),A6
	MOVE.L	$A(A6),$A0(A5)
	MOVE.W	$E(A6),$A4(A5)

	ADD.W	#$10,MT_PATTPOS
	CMP.W	#$400,MT_PATTPOS
	BNE.S	MT_ENDR
MT_NEX:	CLR.W	MT_PATTPOS
	CLR.B	MT_BREAK
	ADDQ.B	#1,MT_SONGPOS
	AND.B	#$7F,MT_SONGPOS
	MOVE.B	MT_SONGPOS(PC),D1
	CMP.B	SONGLEN(PC),D1
	BNE.S	MT_ENDR
	MOVE.B	PLAYERM(PC),MT_SONGPOS
MT_ENDR:TST.B	MT_BREAK
	BNE.S	MT_NEX
	MOVEM.L	(A7)+,D0-D4/A0-A3/A5-A6
	RTS

MT_SETMYPORT:
	MOVE.W	(A6),D2
	AND.W	#$FFF,D2
	MOVE.W	D2,$18(A6)
	MOVE.W	$10(A6),D0
	CLR.B	$16(A6)
	CMP.W	D0,D2
	BEQ.S	MT_CLRPORT
	BGE.S	MT_RT
	MOVE.B	#$1,$16(A6)
	RTS
MT_CLRPORT:
	CLR.W	$18(A6)
MT_RT:	RTS

MT_MYPORT:
	MOVE.B	$3(A6),D0
	BEQ.S	MT_MYSLIDE
	MOVE.B	D0,$17(A6)
	CLR.B	$3(A6)
MT_MYSLIDE:
	TST.W	$18(A6)
	BEQ.S	MT_RT
	MOVEQ	#0,D0
	MOVE.B	$17(A6),D0
	TST.B	$16(A6)
	BNE.S	MT_MYSUB
	ADD.W	D0,$10(A6)
	MOVE.W	$18(A6),D0
	CMP.W	$10(A6),D0
	BGT.S	MT_MYOK
	MOVE.W	$18(A6),$10(A6)
	CLR.W	$18(A6)
MT_MYOK:MOVE.W	$10(A6),$6(A5)
	RTS
MT_MYSUB:
	SUB.W	D0,$10(A6)
	MOVE.W	$18(A6),D0
	CMP.W	$10(A6),D0
	BLT.S	MT_MYOK
	MOVE.W	$18(A6),$10(A6)
	CLR.W	$18(A6)
	MOVE.W	$10(A6),$6(A5)
	RTS

MT_VIB:	MOVE.B	$3(A6),D0
	BEQ.S	MT_VI
	MOVE.B	D0,$1A(A6)

MT_VI:	MOVE.B	$1B(A6),D0
	LEA	MT_SIN(PC),A4
	LSR.W	#$2,D0
	AND.W	#$1F,D0
	MOVEQ	#0,D2
	MOVE.B	(A4,D0.W),D2
	MOVE.B	$1A(A6),D0
	AND.W	#$F,D0
	MULU	D0,D2
	LSR.W	#$6,D2
	MOVE.W	$10(A6),D0
	TST.B	$1B(A6)
	BMI.S	MT_VIBMIN
	ADD.W	D2,D0
	BRA.S	MT_VIB2
MT_VIBMIN:
	SUB.W	D2,D0
MT_VIB2:MOVE.W	D0,$6(A5)
	MOVE.B	$1A(A6),D0
	LSR.W	#$2,D0
	AND.W	#$3C,D0
	ADD.B	D0,$1B(A6)
	RTS

MT_NOP:	MOVE.W	$10(A6),$6(A5)
	RTS

MT_CHECKCOM:
	MOVE.W	$2(A6),D0
	AND.W	#$FFF,D0
	BEQ.S	MT_NOP
	MOVE.B	$2(A6),D0
	AND.B	#$F,D0
	TST.B	D0
	BEQ	MT_ARPEGGIO
	CMP.B	#$1,D0
	BEQ.S	MT_PORTUP
	CMP.B	#$2,D0
	BEQ	MT_PORTDOWN
	CMP.B	#$3,D0
	BEQ	MT_MYPORT
	CMP.B	#$4,D0
	BEQ	MT_VIB
	MOVE.W	$10(A6),$6(A5)
	CMP.B	#$A,D0
	BEQ.S	MT_VOLSLIDE
	RTS

MT_VOLSLIDE:
	MOVEQ	#0,D0
	MOVE.B	$3(A6),D0
	LSR.B	#4,D0
	TST.B	D0
	BEQ.S	MT_VOLDOWN
	ADD.W	D0,$12(A6)
	CMP.W	#$40,$12(A6)
	BMI.S	MT_VOL2
	MOVE.W	#$40,$12(A6)
MT_VOL2:MOVE.W	$12(A6),$8(A5)
	RTS

MT_VOLDOWN:
	MOVEQ	#0,D0
	MOVE.B	$3(A6),D0
	AND.B	#$F,D0
	SUB.W	D0,$12(A6)
	BPL.S	MT_VOL3
	CLR.W	$12(A6)
MT_VOL3:MOVE.W	$12(A6),$8(A5)
	RTS

MT_PORTUP:
	MOVEQ	#0,D0
	MOVE.B	$3(A6),D0
	SUB.W	D0,$10(A6)
	MOVE.W	$10(A6),D0
	AND.W	#$FFF,D0
	CMP.W	#$71,D0
	BPL.S	MT_POR2
	AND.W	#$F000,$10(A6)
	OR.W	#$71,$10(A6)
MT_POR2:MOVE.W	$10(A6),D0
	AND.W	#$FFF,D0
	MOVE.W	D0,$6(A5)
	RTS

MT_PORTDOWN:
	CLR.W	D0
	MOVE.B	$3(A6),D0
	ADD.W	D0,$10(A6)
	MOVE.W	$10(A6),D0
	AND.W	#$FFF,D0
	CMP.W	#$358,D0
	BMI.S	MT_POR3
	AND.W	#$F000,$10(A6)
	OR.W	#$358,$10(A6)
MT_POR3:MOVE.W	$10(A6),D0
	AND.W	#$FFF,D0
	MOVE.W	D0,$6(A5)
	RTS

MT_CHECKCOM2:
	MOVE.B	$2(A6),D0
	AND.B	#$F,D0
	CMP.B	#$D,D0
	BEQ.S	MT_PATTBREAK
	CMP.B	#$B,D0
	BEQ.S	MT_POSJMP
	CMP.B	#$C,D0
	BEQ.S	MT_SETVOL
	CMP.B	#$F,D0
	BEQ.S	MT_SETSPEED
	RTS
MT_PATTBREAK:
	NOT.B	MT_BREAK
	RTS
MT_POSJMP:
	MOVE.B	$3(A6),D0
	SUBQ.B	#$1,D0
	MOVE.B	D0,MT_SONGPOS
	NOT.B	MT_BREAK
	RTS
MT_SETVOL:
	CMP.B	#$40,$3(A6)
	BLE.S	MT_VOL4
	MOVE.B	#$40,$3(A6)
MT_VOL4:MOVE.B	$3(A6),$8(A5)
	RTS
MT_SETSPEED:
	CMP.B	#$1F,$3(A6)
	BLE.S	MT_SETS
	MOVE.B	#$1F,$3(A6)
MT_SETS:MOVE.B	$3(A6),D0
	BEQ.S	MT_RTS2
	MOVE.B	D0,MT_SPEED
	CLR.B	MT_COUNTER
MT_RTS2:RTS

MT_SIN:
		dc.B $00,$18,$31,$4A,$61,$78,$8D,$A1,$B4,$C5,$D4,$E0,$EB,$F4,$FA,$FD
		dc.B $FF,$FD,$FA,$F4,$EB,$E0,$D4,$C5,$B4,$A1,$8D,$78,$61,$4A,$31,$18

MT_PERIODS:
		dc.W $0358,$0328,$02FA,$02D0,$02A6,$0280,$025C,$023A,$021A,$01FC,$01E0
		dc.W $01C5,$01AC,$0194,$017D,$0168,$0153,$0140,$012E,$011D,$010D,$00FE
		dc.W $00F0,$00E2,$00D6,$00CA,$00BE,$00B4,$00AA,$00A0,$0097,$008F,$0087
		dc.W $007F,$0078,$0071,$0000,$0000

MT_SPEED:		dc.B	$6
MT_SONGPOS:		dc.B	$0
MT_PATTPOS:		dc.W	$0
MT_COUNTER:		dc.B	$0

MT_BREAK:		dc.B	$0
MT_DMACON:		dc.W	$0
MT_SAMPLESTARTS:BLK.L	$1F,0
MT_VOICE1:	BLK.W	10,0
			dc.W	$1
		BLK.W	3,0
MT_VOICE2:	BLK.W	10,0
			dc.W	$2
		BLK.W	3,0
MT_VOICE3:	BLK.W	10,0
			dc.W	$4
		BLK.W	3,0
MT_VOICE4:	BLK.W	10,0
			dc.W	$8
		BLK.W	3,0
	even
doslibname:	dc.b "dos.library",0
	even
DOSBASE:  	dc.L	0
************************
CHARBLOCK:BLK.B 9,0
************************
FLIP:	dc.B 0
MK:	dc.B 0
SOFT:	dc.B 0
SONGLEN:	dc.B 0
PLAYERM:	dc.B 0
OPTIONS:	dc.B "XCFPNRISWO"
	even
MODLEN:	dc.l 0
HIGHPAT:	dc.l 0
INSTLEN:	dc.l 0
TOTALLEN:	dc.L 0
MT_DATA:	dc.l 0
FILEHANDLE:	dc.L 0
OPTIONS2:	dc.L	BUILDMENU,CONTI,FLIPPY,PLAYIT,RENAME
		dc.L	INSTRENAME,PLAYINST,SAVING,FLIPFILTER,COPYMOD
************************
whandle:  	dc.l	0
wstruct:	dc.b "CON:0/0/640/250/"
		dc.b "                  >>> NOISERIPPER V1.15 BY ALLEYCAT <<<"
		dc.b "                        ",0
************************
	EVEN
buffer:blk.b 40,0
FILEBUFFER:	dc.B "DF0:MODULES/"
NAMEMOD:BLK.B	25,0
FILEBUFFER2:BLK.B	50,0
	EVEN
ACTUALPOS:	dc.L 0
ENDPOS:	dc.L 0
STARTPOS:	dc.L 0
************************
CLSText:
		dc.b $1b,$63,$1b,$5b,$30,$78,$1b,$5b,$36,$34,$34,$75
		dc.b $1b,$5b,$31,$30,$79,$1b,$5b,$33,$33,$74
		dc.b $0c,$0c,$0a
		dc.b "                ",$0A,$0A,$0A
		dc.b "              L - Start Searching (Chipmem)",$0a,$0a
		dc.b "              H - Start Searching (Fastmem)",$0a,$0a
		dc.b "              X - Quit this Program",$0a,$0a
		dc.B 10,10,10,10,10,10,"Read the DOCS for more information!"
		dc.b $9b,$20,$70
		dc.b 0
************************
CText1:	dc.b $9b,"13",$48
		dc.B "Your Command ->",0
************************
CText2:	dc.b $0c,$0a,$0a
		dc.B "SEARCHING...PASS 1",$9B,$30,$20,$70,0
************************
CText3:	dc.b $0c
		dc.b "SONG ADRESS : $",0
************************
CText5:	dc.b $0C,$0a,$0a
		dc.B "SEARCHING...PASS2",$9B,$30,$20,$70,0
************************
CText6:	dc.B "    SONGNAME : ",0
************************
CText7:	dc.B $9B,"0",$3B,"57",$48
		dc.B "    MOD-LENGTH : $",0
************************
CText8:	dc.B $0A
		dc.B "SONG-LENGTH :       $",0
************************
CText9:	dc.B "    # OF PATTERNS :   $",0
************************
TERENCE:
		dc.B "00000   $00000   $00000"
************************
CText10:	dc.B $0A,$0A
		dc.B "INST#   INSTRUMENT NAME         LENGTH   REPEAT   REPLEN",$0A
		dc.B "   0    ....................    $00000   $00000   $00000",$0A
		dc.B "   1    ....................    $00000   $00000   $00000",$0A
		dc.B "   2    ....................    $00000   $00000   $00000",$0A
		dc.B "   3    ....................    $00000   $00000   $00000",$0A
		dc.B "   4    ....................    $00000   $00000   $00000",$0A
		dc.B "   5    ....................    $00000   $00000   $00000",$0A
		dc.B "   6    ....................    $00000   $00000   $00000",$0A
		dc.B "   7    ....................    $00000   $00000   $00000",$0A	
		dc.B "   8    ....................    $00000   $00000   $00000",$0A
		dc.B "   9    ....................    $00000   $00000   $00000",$0A
		dc.B "   A    ....................    $00000   $00000   $00000",$0A
		dc.B "   B    ....................    $00000   $00000   $00000",$0A
		dc.B "   C    ....................    $00000   $00000   $00000",$0A
		dc.B "   D    ....................    $00000   $00000   $00000",$0A
		dc.B "   E    ....................    $00000   $00000   $00000",$0A
		dc.B "   F    ....................    $00000   $00000   $00000",$0A
		dc.b $0a
		dc.B "F       - FLIP INSTRUMENT PAGES               C          - CONTINUE SEARCH",$0A
		dc.B "X       - RETURN TO MAIN MENU                 P          - PLAY SONG",$0A
		dc.B "N(name) - RENAME SONG                         R(#)(name) - RENAME INSTRUMENT"
		dc.B $0A
		dc.B "I(#)    - PLAY INSTRUMENT                     SI(#)      - SAVE INSTRUMENT",$0A
		dc.B "SM      - SAVE MODULE (AUTO)                  SF         - SAVE MODULE (SELF)"
		dc.B 10
		dc.B "W       - FLIP FILTER                         O          - COPY MODULE TO $40000"
		dc.B $9B,$20,$70
		dc.B $0A,$0A,"YOUR COMMAND ->",0
CTEXT11:
		dc.B $9B,"30",$48
		dc.B "*** ERROR OCCURED ! PLEASE CHECK DISK ***         (MOUSE)",0
CTEXT12:
	dc.B $9B,"29",$48
	dc.B "ENTER THE FILENAME (WITH PATH) ->",0
	EVEN
INSTIS:BLK.L	32,0
