	MOVE.L	SP,A5
	LEA		STACK,SP
	MOVE.L	4(A5),A5
	MOVE.L	$C(A5),D0
	ADD.L		$14(A5),D0
	ADD.L		$1C(A5),D0
	ADD.L		#$100,D0
	MOVE.L	D0,-(SP)
	MOVE.L	A5,-(SP)
	CLR		-(SP)
	MOVE.W	#$4A,-(SP)
	TRAP		#1
	LEA		12(SP),SP

	CLR.L		-(SP)
	MOVE		#$20,-(SP)
	TRAP		#1
	LEA		6(SP),SP
	MOVE.L	D0,SAVE_STACK

	JSR		SAVE_INTERRUPTS
	JSR		INPUT_MODULE_NAME
	JSR		SET_SCREEN
	JSR		INIT_MUSIC
	JSR		INIT_INTERRUPTS

	JSR		PLAY_MUSIC

TOO_BAD
	JSR		REINSTALL_INTERRUPTS

	MOVE.L	SAVE_STACK,-(SP)
	MOVE		#$20,-(SP)
	TRAP		#1
	LEA		6(SP),SP
	CLR		-(SP)
	TRAP		#1

SAVE_INTERRUPTS
	PEA		MOUSOFF
	MOVE.W	#1,-(SP)
	MOVE.W	#25,-(SP)
	TRAP		#14
	LEA		8(SP),SP
	MOVE.L	$70.W,SAVE_VBL
	MOVE.B	$FFFFFA07.W,MFP
	MOVE.B	$FFFFFA09.W,MFP+1
	MOVEM.L	$FFFF8240.W,D0-D7
	MOVEM.L	D0-D7,SHIFTER
	MOVE.B	$FFFF8260.W,SHIFTER+32
	MOVE.L	$134.W,TIMERA
	MOVE.B	$FFFFFA0B.W,TIMERA+4
	MOVE.B	$FFFFFA0F.W,TIMERA+5
	MOVE.B	$FFFFFA13.W,TIMERA+6
	MOVE.B	$FFFFFA19.W,TIMERA+7
	MOVE.B	$FFFFFA1F.W,TIMERA+8
	RTS

INPUT_MODULE_NAME
	MOVE.L	#INDICATION,-(SP)
	MOVE		#9,-(SP)
	TRAP		#1
	LEA		6(SP),SP
	PEA		FILENAME
	MOVE.W	#$A,-(SP)
	TRAP		#1
	LEA		6(SP),SP
	RTS

SET_SCREEN
	MOVEM.L	NO_COLOR,D0-D7
	MOVEM.L	D0-D7,$FFFF8240.W
	MOVE.L	SCREEN2,D0
	LSR.L		#8,D0
	LEA		$FFFF8201.W,A0
	MOVEP		D0,(A0)
	MOVE.B	#0,$FFFF8260.W
	MOVEM.L	PAL,D0-D7
	MOVEM.L	D0-D7,$FFFF8240.W
	LEA		$80000,A0
RHA
	MOVE.L	#0,-(A0)
	CMP.L		#$70000,A0
	BNE		RHA
	RTS

INIT_MUSIC
	CLR		-(SP)
	MOVE.L	#FILENAME+2,-(SP)
	MOVE		#$3D,-(SP)
	TRAP		#1
	LEA		8(SP),SP
	MOVE.L	D0,D1
	TST.W		D0
	BMI		ERROR
	MOVE.L	#BUFFER,-(SP)
	MOVE.L	#$FFFFF,-(SP)
	MOVE		D1,-(SP)
	MOVE		#$3F,-(SP)
	TRAP		#1
	LEA		12(SP),SP
	TST.L		D0
	BMI		ERROR
	MOVE		D1,-(SP)
	MOVE		#$3E,-(SP)
	TRAP		#1
	LEA		4(SP),SP
	TST.W		D0
	BMI		ERROR

	LEA		BUFFER,A0
	LEA		20+30*15(A0),A0
	MOVEQ		#0,D0
	MOVE.B	(A0)+,D0
	MOVEQ		#0,D1
	MOVE.B	(A0)+,D1
	LEA		BUFFER,A0
	LEA		30*16(A0),A0
	ADD		D1,A0
	MOVE.L	A0,PAT
	LEA		BUFFER,A0
	LEA		20+30*15+2(A0),A0
	MOVEQ		#0,D1
	MOVEQ		#0,D2
HOW_MANY_PAT
	MOVE.B	(A0)+,D1
	CMP.B		D1,D2
	BPL		CONT_HOW_MANY_PAT
	MOVE.B	D1,D2
CONT_HOW_MANY_PAT
	DBRA		D0,HOW_MANY_PAT	
	ADD.B		#1,D2
	MULU		#1024,D2
	MOVE.L	PAT,D0
	ADD.L		D2,D0
	MOVE.L	D0,A2
	LEA		BUFFER,A0
	LEA		20(A0),A0
	LEA		INS,A1
	LEA		16(A1),A1
	MOVEQ		#15-1,D0
READ_INS
	MOVEQ		#0,D1
	MOVE		22(A0),D1
	LSL.L		#1,D1
	MOVE.L	D1,(A1)
	MOVE.L	D1,4(A1)
	MOVEQ		#0,D1
	MOVE		24(A0),D1
	BEQ		CONT_READ_VOLUME
	SUBQ		#1,D1
CONT_READ_VOLUME
	MOVE		D1,12(A1)
	MOVEQ		#0,D1
	MOVE		28(A0),D1
	LSL.L		#1,D1
	CMP.B		#2,D1
	BNE		CONT_READ_INS
	MOVEQ		#0,D1
CONT_READ_INS
	SWAP		D1
	MOVE.L	D1,8(A1)
	MOVE.L	(A1),D1
	MOVE.L	A2,4(A1)
	ADD.L		D1,A2
	LEA		30(A0),A0
	LEA		16(A1),A1
	DBRA		D0,READ_INS

	LEA		INS,A0
	LEA		16(A0),A0
	LEA		BUFFER,A1
	LEA		20(A1),A1
	LEA		$68000,A2
	MOVEQ		#15-1,D0
REVERSE
	MOVEQ		#0,D1
	MOVE		22(A1),D1
	BEQ		END_REVERSE_THIS_INS
	LSL.L		#1,D1
	SUBQ.L	#1,D1
	MOVE.L	D1,D2
	MOVE.L	4(A0),A3
REV_1
	MOVE.B	(A3)+,(A2)
	ADD.B		#$80,(A2)+
	DBRA		D1,REV_1
	MOVE.L	4(A0),A3
REV_2
	MOVE.B	-(A2),(A3)+
	DBRA		D2,REV_2
END_REVERSE_THIS_INS
	LEA		16(A0),A0
	LEA		30(A1),A1
	DBRA		D0,REVERSE
	RTS

INIT_INTERRUPTS
MFP_RESET
	MOVE.B	#0,$FFFFFA07.W
	MOVE.B	#0,$FFFFFA09.W
YAMAHA_RESET
	MOVE.B	#0,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#1,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#2,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#3,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#4,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#5,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#7,$FFFF8800.W
	MOVE.B	#$FF,$FFFF8802.W
	MOVE.B	#8,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#9,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#10,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	RTS

REINSTALL_INTERRUPTS
	MOVEM.L	NO_COLOR,D0-D7
	MOVEM.L	D0-D7,$FFFF8240.W
	MOVE.L	SAVE_VBL,$70.W
	MOVE.L	TIMERA,$134.W
	MOVE.B	TIMERA+4,$FFFFFA0B.W
	MOVE.B	TIMERA+5,$FFFFFA0F.W
	MOVE.B	TIMERA+6,$FFFFFA13.W
	MOVE.B	TIMERA+7,$FFFFFA19.W
	MOVE.B	TIMERA+8,$FFFFFA1F.W
	MOVE.B	MFP,$FFFFFA07.W
	MOVE.B	MFP+1,$FFFFFA09.W
	PEA		MOUSON
	MOVE.W	#1,-(SP)
	MOVE.W	#25,-(SP)
	TRAP		#14
	LEA		8(SP),SP
	MOVE.L	#CLS,-(SP)
	MOVE		#9,-(SP)
	TRAP		#1
	LEA		6(SP),SP
	MOVEQ		#0,D0
	MOVE.B	SHIFTER+32,D0
	MOVE		D0,-(SP)
	MOVE.L	#$78000,-(SP)
	MOVE.L	#$78000,-(SP)
	MOVE		#5,-(SP)
	TRAP		#14
	LEA		12(SP),SP
	MOVEM.L	SHIFTER,D0-D7
	MOVEM.L	D0-D7,$FFFF8240.W
	RTS

ERROR
	MOVE.L	#TOO_BAD,(SP)
	RTS

PLAY_MUSIC
;GET MUSIC GOING
ON	MOVE.W	#$2700,SR
	LEA		PLAYER_DATA,A4
	MOVE.W	#6,SPD+2
	MOVE.B	#6,SPEED(A4)
	MOVE.B	#1,POS(A4)
	MOVE.B	SEQ-2,TRK(A4)
	MOVE.L	#SEQ-1,MUS+2
	LEA		OFF,A0
	LEA		OFF,A1
	LEA		OFF,A2
	LEA		OFF,A3
	CLR.L		D0
	CLR.L		D1
	CLR.L		D2
	CLR.L		D3
	MOVE.L	#$7F8,D7
	LEA		$FFFF8800.W,A4
	CLR.L		F0+2
	CLR.L		F1+2
	CLR.L		F2+2
	CLR.L		F3+2
	CLR.L		V0+2
	CLR.L		V1+2
	CLR.L		V2+2
	CLR.L		V3+2
	MOVE.L	#AMIGA,$134.W
	MOVE.B	#0,$FFFFFA0B.W
	MOVE.B	#0,$FFFFFA0F.W
	MOVE.B	#0,$FFFFFA19.W
	MOVE.B	#0,$FFFFFA1F.W
	MOVE.B	#32,$FFFFFA13.W
	MOVE.B	#0,$FFFFFA19.W
	BCLR		#3,$FFFFFA17.W
	MOVE.B	#61,$FFFFFA1F.W
	MOVE.B	#1,$FFFFFA19.W
	MOVE.B	#32,$FFFFFA07.W
	MOVE.L	#VBL,$70.W
	STOP		#$2300
MAIN
*	Put your program which use D6,A5,A6 here

	CMP.B		#$39,$FFFFFC02.W
	BEQ		END_PLAYING_MUSIC
	BRA		MAIN

AMIGA
	SWAP		D0					;4(1/0)
	SWAP		D1					;4(1/0)
	SWAP		D2					;4(1/0)
	SWAP		D3					;4(1/0)
V0	SUB.L		#0,D0				;16(3/0)
	BMI.S		L0					;8(1/0)10
V1	SUB.L		#0,D1				;16(3/0)
	BMI.S		L1					;8(1/0)10
V2	SUB.L		#0,D2				;16(3/0)
	BMI.S		L2					;8(1/0)10
V3	SUB.L		#0,D3				;16(3/0)
	BMI.S		L3					;8(1/0)10
OUT	SWAP	D0					;4(1/0)
	SWAP		D1					;4(1/0)
	SWAP		D2					;4(1/0)
	SWAP		D3					;4(1/0)
	MOVEQ		#0,D4				;4(1/0)
	MOVEQ		#0,D5				;4(1/0)
	MOVE.B	0(A0,D0),D4		;14(3/0)
	MOVE.B	0(A1,D1),D5		;14(3/0)
	ADD.W		D5,D4				;4(1/0)
	MOVE.B	0(A2,D2),D5		;14(3/0)
	ADD.W		D5,D4				;4(1/0)
	MOVE.B	0(A3,D3),D5		;14(3/0)
	ADD.W		D5,D4				;4(1/0)
	ADD.W		D4,D4				;4(1/0)
	AND.W		D7,D4				;4(1/0)
	MOVE.L	SOUND(PC,D4),D5	;18(4/0)
	MOVE.W	SOUND+4(PC,D4),D4	;14(3/0)
	MOVEP.L	D5,(A4)				;24(2/4)
	MOVEP.W	D4,(A4)				;16(2/2)
	RTE
L0	MOVE.L	#0,D0
F0	MOVE.L	#0,V0+2
	BRA		V1
L1	MOVE.L	#0,D1
F1	MOVE.L	#0,V1+2
	BRA		V2
L2	MOVE.L	#0,D2
F2	MOVE.L	#0,V2+2
	BRA		V3
L3	MOVE.L	#0,D3
F3	MOVE.L	#0,V3+2
	BRA		OUT
SOUND
	DC.W	$80E,$90D,$A0C,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0A,0,$80E,$90D,$A0A,0
	DC.W	$80E,$90D,$A0A,0,$80E,$90D,$A0A,0
	DC.W	$80E,$90C,$A0C,0,$80E,$90D,$A00,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0A,0,$80E,$90C,$A0A,0
	DC.W	$80E,$90C,$A0A,0,$80E,$90C,$A0A,0
	DC.W	$80D,$90D,$A0C,0,$80D,$90D,$A0C,0
	DC.W	$80E,$90C,$A09,0,$80E,$90C,$A09,0
	DC.W	$80E,$90C,$A05,0,$80E,$90C,$A00,0
	DC.W	$80E,$90C,$A00,0,$80E,$90B,$A0B,0
	DC.W	$80E,$90B,$A0B,0,$80E,$90B,$A0B,0
	DC.W	$80E,$90B,$A0B,0,$80E,$90B,$A0A,0
	DC.W	$80E,$90B,$A0A,0,$80E,$90B,$A0A,0
	DC.W	$80D,$90D,$A0B,0,$80D,$90D,$A0B,0
	DC.W	$80D,$90D,$A0B,0,$80E,$90B,$A09,0
	DC.W	$80E,$90B,$A09,0,$80E,$90B,$A09,0
	DC.W	$80D,$90C,$A0C,0,$80D,$90D,$A0A,0
	DC.W	$80E,$90B,$A07,0,$80E,$90B,$A00,0
	DC.W	$80E,$90B,$A00,0,$80D,$90D,$A09,0
	DC.W	$80D,$90D,$A09,0,$80E,$90A,$A09,0
	DC.W	$80D,$90D,$A08,0,$80D,$90D,$A07,0
	DC.W	$80D,$90D,$A04,0,$80D,$90D,$A00,0
	DC.W	$80E,$90A,$A04,0,$80E,$909,$A09,0
	DC.W	$80E,$909,$A09,0,$80D,$90C,$A0B,0
	DC.W	$80E,$909,$A08,0,$80E,$909,$A08,0
	DC.W	$80E,$909,$A07,0,$80E,$908,$A08,0
	DC.W	$80E,$909,$A01,0,$80C,$90C,$A0C,0
	DC.W	$80D,$90C,$A0A,0,$80E,$908,$A06,0
	DC.W	$80E,$907,$A07,0,$80E,$908,$A00,0
	DC.W	$80E,$907,$A05,0,$80E,$906,$A06,0
	DC.W	$80D,$90C,$A09,0,$80E,$905,$A05,0
	DC.W	$80E,$904,$A04,0,$80D,$90C,$A08,0
	DC.W	$80D,$90B,$A0B,0,$80E,$900,$A00,0
	DC.W	$80D,$90C,$A06,0,$80D,$90C,$A05,0
	DC.W	$80D,$90C,$A02,0,$80C,$90C,$A0B,0
	DC.W	$80C,$90C,$A0B,0,$80D,$90B,$A0A,0
	DC.W	$80D,$90B,$A0A,0,$80D,$90B,$A0A,0
	DC.W	$80D,$90B,$A0A,0,$80C,$90C,$A0A,0
	DC.W	$80C,$90C,$A0A,0,$80C,$90C,$A0A,0
	DC.W	$80D,$90B,$A09,0,$80D,$90B,$A09,0
	DC.W	$80D,$90A,$A0A,0,$80D,$90A,$A0A,0
	DC.W	$80D,$90A,$A0A,0,$80C,$90C,$A09,0
	DC.W	$80C,$90C,$A09,0,$80C,$90C,$A09,0
	DC.W	$80D,$90B,$A06,0,$80C,$90B,$A0B,0
	DC.W	$80C,$90C,$A08,0,$80D,$90B,$A00,0
	DC.W	$80D,$90B,$A00,0,$80C,$90C,$A07,0
	DC.W	$80C,$90C,$A06,0,$80C,$90C,$A05,0
	DC.W	$80C,$90C,$A03,0,$80C,$90C,$A01,0
	DC.W	$80C,$90B,$A0A,0,$80D,$90A,$A05,0
	DC.W	$80D,$90A,$A04,0,$80D,$90A,$A02,0
	DC.W	$80D,$909,$A08,0,$80D,$909,$A08,0
	DC.W	$80C,$90B,$A09,0,$80C,$90B,$A09,0
	DC.W	$80D,$908,$A08,0,$80B,$90B,$A0B,0
	DC.W	$80D,$909,$A05,0,$80C,$90B,$A08,0
	DC.W	$80D,$909,$A02,0,$80D,$908,$A06,0
	DC.W	$80C,$90B,$A07,0,$80D,$907,$A07,0
	DC.W	$80C,$90B,$A06,0,$80C,$90A,$A09,0
	DC.W	$80B,$90B,$A0A,0,$80C,$90B,$A02,0
	DC.W	$80C,$90B,$A00,0,$80C,$90A,$A08,0
	DC.W	$80D,$906,$A04,0,$80D,$905,$A05,0
	DC.W	$80D,$905,$A04,0,$80C,$909,$A09,0
	DC.W	$80D,$904,$A03,0,$80B,$90B,$A09,0
	DC.W	$80C,$90A,$A05,0,$80B,$90A,$A0A,0
	DC.W	$80C,$909,$A08,0,$80B,$90B,$A08,0
	DC.W	$80C,$90A,$A00,0,$80C,$90A,$A00,0
	DC.W	$80C,$909,$A07,0,$80B,$90B,$A07,0
	DC.W	$80C,$909,$A06,0,$80B,$90B,$A06,0
	DC.W	$80B,$90A,$A09,0,$80B,$90B,$A05,0
	DC.W	$80A,$90A,$A0A,0,$80B,$90B,$A02,0
	DC.W	$80B,$90A,$A08,0,$80C,$907,$A07,0
	DC.W	$80C,$908,$A04,0,$80C,$907,$A06,0
	DC.W	$80B,$909,$A09,0,$80C,$906,$A06,0
	DC.W	$80A,$90A,$A09,0,$80C,$907,$A03,0
	DC.W	$80B,$90A,$A05,0,$80B,$909,$A08,0
	DC.W	$80B,$90A,$A03,0,$80A,$90A,$A08,0
	DC.W	$80B,$90A,$A00,0,$80B,$909,$A07,0
	DC.W	$80B,$908,$A08,0,$80A,$90A,$A07,0
	DC.W	$80A,$909,$A09,0,$80C,$901,$A01,0
	DC.W	$80A,$90A,$A06,0,$80B,$908,$A07,0
	DC.W	$80A,$90A,$A05,0,$80A,$909,$A08,0
	DC.W	$80A,$90A,$A02,0,$80A,$90A,$A01,0
	DC.W	$80A,$90A,$A00,0,$809,$909,$A09,0
	DC.W	$80A,$908,$A08,0,$80B,$908,$A01,0
	DC.W	$80A,$909,$A06,0,$80B,$907,$A04,0
	DC.W	$80A,$909,$A05,0,$809,$909,$A08,0
	DC.W	$80A,$909,$A03,0,$80A,$908,$A06,0
	DC.W	$80A,$909,$A00,0,$809,$909,$A07,0
	DC.W	$809,$908,$A08,0,$80A,$908,$A04,0
	DC.W	$809,$909,$A06,0,$80A,$908,$A01,0
	DC.W	$809,$909,$A05,0,$809,$908,$A07,0
	DC.W	$808,$908,$A08,0,$809,$909,$A02,0
	DC.W	$809,$908,$A06,0,$809,$909,$A00,0
	DC.W	$809,$907,$A07,0,$808,$908,$A07,0
	DC.W	$809,$907,$A06,0,$809,$908,$A02,0
	DC.W	$808,$908,$A06,0,$809,$906,$A06,0
	DC.W	$808,$907,$A07,0,$808,$908,$A04,0
	DC.W	$808,$907,$A06,0,$808,$908,$A02,0
	DC.W	$807,$907,$A07,0,$808,$906,$A06,0
	DC.W	$808,$907,$A04,0,$807,$907,$A06,0
	DC.W	$808,$906,$A05,0,$808,$906,$A04,0
	DC.W	$807,$906,$A06,0,$807,$907,$A04,0
	DC.W	$808,$905,$A04,0,$806,$906,$A06,0
	DC.W	$807,$906,$A04,0,$807,$905,$A05,0
	DC.W	$806,$906,$A05,0,$806,$906,$A04,0
	DC.W	$806,$905,$A05,0,$806,$906,$A02,0
	DC.W	$806,$905,$A04,0,$805,$905,$A05,0
	DC.W	$806,$905,$A02,0,$805,$905,$A04,0
	DC.W	$805,$904,$A04,0,$805,$905,$A02,0
	DC.W	$804,$904,$A04,0,$804,$904,$A03,0
	DC.W	$804,$904,$A02,0,$804,$903,$A03,0
	DC.W	$803,$903,$A03,0,$803,$903,$A02,0
	DC.W	$803,$902,$A02,0,$802,$902,$A02,0
	DC.W	$802,$902,$A01,0,$801,$901,$A01,0
	DC.W	$802,$901,$A00,0,$801,$901,$A00,0
	DC.W	$801,$900,$A00,0,$800,$900,$A00,0
RESTART
	LEA		PLAYER_DATA,A4
	MOVE.W	#6,SPD+2
	MOVE.B	#6,SPEED(A4)
	MOVE.B	#1,POS(A4)
	MOVE.B	SEQ-2,TRK(A4)
	MOVE.L	#SEQ-1,MUS+2
	LEA		OFF,A0
	LEA		OFF,A1
	LEA		OFF,A2
	LEA		OFF,A3
	CLR.L		D0
	CLR.L		D1
	CLR.L		D2
	CLR.L		D3
	CLR.L		F0+2
	CLR.L		F1+2
	CLR.L		F2+2
	CLR.L		F3+2
	CLR.L		V0+2
	CLR.L		V1+2
	CLR.L		V2+2
	CLR.L		V3+2
	BRA		PLAY
VBL
	MOVE		#$2700,SR
	MOVEM.L	D6/A5-A6,-(SP)
	JSR		PORTAMENTO
	SUBQ.B	#1,PLAYER_DATA
	BNE		END
	JSR		PLAY
END
	MOVEM.L	(SP)+,D6/A5-A6
	RTE
PLAYER_DATA	DS.W		8
SPEED			EQU		0
POS			EQU		SPEED+1
TRK			EQU		POS+1
FRQ			INCBIN 	'B:\10KHZ.FRQ'
PLAY
	MOVE.L	SAVE_A6_OF_PLAYER,A6
	CMP.B		#$39,$FFFFFC02.W
	BEQ		END_PLAYING_MUSIC
	LEA		PLAYER_DATA(PC),A4
	LEA		INS(PC),A5
SPD	MOVE.B	#6,SPEED(A4)
	SUBQ.B	#1,POS(A4)
	BNE		P0
	MOVE.B	#$40,POS(A4)
	ADDQ.L	#1,MUS+2-PLAYER_DATA(A4)
	SUBQ.B	#1,TRK(A4)
	BMI		RESTART
;BACK TO PLAYER
	MOVEQ		#0,D4
MUS	MOVE.B	$0,D4
	SWAP		D4
	LSR.L		#6,D4
	MOVE.L	PAT,A6
	LEA		(A6,D4.L),A6
P0	CLR		VOICE0
	MOVE.W	(A6)+,D4
	BEQ		C0
	MOVE		D4,VOICE0+2
	LSL.W		#2,D4
	MOVE.L	FRQ-PLAYER_DATA(A4,D4.W),D4
	MOVE.L	D4,V0+2
	MOVE.L	D4,F0+2
	MOVE.B	(A6),D4
	AND.W		#$F0,D4
	MOVE.L	0(A5,D4.W),D0
	MOVE.L	4(A5,D4.W),A0
	MOVE.L	8(A5,D4.W),L0+2
	BNE		C0
	CLR.L		F0+2
C0	MOVE.W	(A6)+,D4
	MOVE.B	D4,D5
	AND.W		#$F00,D4
	CMP.W		#$F00,D4
	BNE.S		B0
	MOVE.B	D5,SPD+3
	MOVE.B	D5,SPEED(A4)
	BRA		P1
B0	CMP.W		#$D00,D4
	BNE.S		J0
	MOVE.B	#1,POS(A4)
	BRA		P1
J0	CMP.W		#$B00,D4
	BNE.S		PU0
	CLR.B		POS(A4)
	MOVE.L	#SEQ-1,D4
	AND.L		#$FF,D5
	ADD.L		D5,D4
	MOVE.L	D4,MUS+2-PLAYER_DATA(A4)
	BRA		P1
PU0
	CMP.W		#$100,D4
	BNE.S		PD0
	MOVE.B	#1,VOICE0
	MOVE.B	D5,VOICE0+1
	BRA		P1
PD0
	CMP.W		#$200,D4
	BNE.S		CL0
	MOVE.B	#2,VOICE0
	MOVE.B	D5,VOICE0+1
CL0
	CMP.W		#$C00,D4
	BNE.S		P1
	TST.B		D5
	BNE.S		P1
	CLR.L		V0+2
P1	CLR		VOICE1
	MOVE.W	(A6)+,D4
	BEQ		C1
	MOVE		D4,VOICE1+2
	LSL.W		#2,D4
	MOVE.L	FRQ-PLAYER_DATA(A4,D4.W),D4
	MOVE.L	D4,V1+2
	MOVE.L	D4,F1+2
	MOVE.B	(A6),D4
	AND.W		#$F0,D4
	MOVE.L	0(A5,D4.W),D1
	MOVE.L	4(A5,D4.W),A1
	MOVE.L	8(A5,D4.W),L1+2
	BNE		C1
	CLR.L		F1+2
C1	MOVE.W	(A6)+,D4
	MOVE.B	D4,D5
	AND.W		#$F00,D4
	CMP.W		#$F00,D4
	BNE.S		B1
	MOVE.B	D5,SPD+3
	MOVE.B	D5,SPEED(A4)
	BRA		P2
B1	CMP.W		#$D00,D4
	BNE.S		J1
	MOVE.B	#1,POS(A4)
	BRA		P2
J1	CMP.W		#$B00,D4
	BNE.S		PU1
	CLR.B		POS(A4)
	MOVE.L	#SEQ-1,D4
	AND.L		#$FF,D5
	ADD.L		D5,D4
	MOVE.L	D4,MUS+2-PLAYER_DATA(A4)
	BRA		P2
PU1
	CMP.W		#$100,D4
	BNE.S		PD1
	MOVE.B	#1,VOICE1
	MOVE.B	D5,VOICE1+1
	BRA		P2
PD1
	CMP.W		#$200,D4
	BNE.S		CL1
	MOVE.B	#2,VOICE1
	MOVE.B	D5,VOICE1+1
CL1
	CMP.W		#$C00,D4
	BNE.S		P2
	TST.B		D5
	BNE.S		P2
	CLR.L		V1+2
P2	CLR		VOICE2
	MOVE.W	(A6)+,D4
	BEQ		C2
	MOVE		D4,VOICE2+2
	LSL.W		#2,D4
	MOVE.L	FRQ-PLAYER_DATA(A4,D4.W),D4
	MOVE.L	D4,V2+2
	MOVE.L	D4,F2+2
	MOVE.B	(A6),D4
	AND.W		#$F0,D4
	MOVE.L	0(A5,D4.W),D2
	MOVE.L	4(A5,D4.W),A2
	MOVE.L	8(A5,D4.W),L2+2
	BNE		C2
	CLR.L		F2+2
C2	MOVE.W	(A6)+,D4
	MOVE.B	D4,D5
	AND.W		#$F00,D4
	CMP.W		#$F00,D4
	BNE.S		B2
	MOVE.B	D5,SPD+3
	MOVE.B	D5,SPEED(A4)
	BRA		P3
B2	CMP.W		#$D00,D4
	BNE.S		J2
	MOVE.B	#1,POS(A4)
	BRA		P3
J2	CMP.W		#$B00,D4
	BNE.S		PU2
	CLR.B		POS(A4)
	MOVE.L	#SEQ-1,D4
	AND.L		#$FF,D5
	ADD.L		D5,D4
	MOVE.L	D4,MUS+2-PLAYER_DATA(A4)
	BRA		P3
PU2
	CMP.W		#$100,D4
	BNE.S		PD2
	MOVE.B	#1,VOICE2
	MOVE.B	D5,VOICE2+1
	BRA		P3
PD2
	CMP.W		#$200,D4
	BNE.S		CL2
	MOVE.B	#2,VOICE2
	MOVE.B	D5,VOICE2+1
CL2
	CMP.W		#$C00,D4
	BNE.S		P3
	TST.B		D5
	BNE.S		P3
	CLR.L		V2+2
P3	CLR		VOICE3
	MOVE.W	(A6)+,D4
	BEQ		C3
	MOVE		D4,VOICE3+2
	LSL.W		#2,D4
	MOVE.L	FRQ-PLAYER_DATA(A4,D4.W),D4
	MOVE.L	D4,V3+2
	MOVE.L	D4,F3+2
	MOVE.B	(A6),D4
	AND.W		#$F0,D4
	MOVE.L	0(A5,D4.W),D3
	MOVE.L	4(A5,D4.W),A3
	MOVE.L	8(A5,D4.W),L3+2
	BNE		C3
	CLR.L		F3+2
C3	MOVE.W	(A6)+,D4
	MOVE.B	D4,D5
	AND.W		#$F00,D4
	CMP.W		#$F00,D4
	BNE.S		B3
	MOVE.B	D5,SPD+3
	MOVE.B	D5,SPEED(A4)
	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS
B3	CMP.W		#$D00,D4
	BNE.S		J3
	MOVE.B	#1,POS(A4)
	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS
J3	CMP.W		#$B00,D4
	BNE.S		PU3
	CLR.B		POS(A4)
	MOVE.L	#SEQ-1,D4
	AND.L		#$FF,D5
	ADD.L		D5,D4
	MOVE.L	D4,MUS+2-PLAYER_DATA(A4)
	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS
PU3
	CMP.W		#$100,D4
	BNE.S		PD3
	MOVE.B	#1,VOICE3
	MOVE.B	D5,VOICE3+1
	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS
PD3
	CMP.W		#$200,D4
	BNE.S		CL3
	MOVE.B	#2,VOICE3
	MOVE.B	D5,VOICE3+1
	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS
CL3
	CMP.W		#$C00,D4
	BNE.S		XT
	TST.B		D5
	BNE.S		XT
	CLR.L		V3+2
XT	LEA		$FFFF8800.W,A4
	MOVE.L	A6,SAVE_A6_OF_PLAYER
	RTS

PORTAMENTO
	LEA		PLAYER_DATA(PC),A6
	LEA		VOICE0,A5
	CMP.B		#1,(A5)
	BEQ		PORTUP0
	CMP.B		#2,(A5)
	BEQ		PORTDOWN0
	LEA		VOICE1,A5
	CMP.B		#1,(A5)
	BEQ		PORTUP1
	CMP.B		#2,(A5)
	BEQ		PORTDOWN1
	LEA		VOICE2,A5
	CMP.B		#1,(A5)
	BEQ		PORTUP2
	CMP.B		#2,(A5)
	BEQ		PORTDOWN2
	LEA		VOICE3,A5
	CMP.B		#1,(A5)
	BEQ		PORTUP3
	CMP.B		#2,(A5)
	BEQ		PORTDOWN3
	RTS

PORTUP0
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	SUB		D6,2(A5)
	CMP		#$71,2(A5)
	BPL.S		OKPU0
	MOVE		#$71,2(A5)
OKPU0
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V0+2
	TST.L		F0+2
	BEQ		ENDPU0
	MOVE.L	D6,F0+2
ENDPU0
	RTS

PORTDOWN0
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	ADD		D6,2(A5)
	CMP		#$358,2(A5)
	BMI.S		OKPU0
	MOVE		#$358,2(A5)
OKPD0
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V0+2
	TST.L		F0+2
	BEQ		ENDPD0
	MOVE.L	D6,F0+2
ENDPD0
	RTS

PORTUP1
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	SUB		D6,2(A5)
	CMP		#$71,2(A5)
	BPL.S		OKPU1
	MOVE		#$71,2(A5)
OKPU1
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V1+2
	TST.L		F1+2
	BEQ		ENDPU1
	MOVE.L	D6,F1+2
ENDPU1
	RTS

PORTDOWN1
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	ADD		D6,2(A5)
	CMP		#$358,2(A5)
	BMI.S		OKPU1
	MOVE		#$358,2(A5)
OKPD1
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V1+2
	TST.L		F1+2
	BEQ		ENDPD1
	MOVE.L	D6,F1+2
ENDPD1
	RTS

PORTUP2
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	SUB		D6,2(A5)
	CMP		#$71,2(A5)
	BPL.S		OKPU2
	MOVE		#$71,2(A5)
OKPU2
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V2+2
	TST.L		F2+2
	BEQ		ENDPU2
	MOVE.L	D6,F2+2
ENDPU2
	RTS

PORTDOWN2
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	ADD		D6,2(A5)
	CMP		#$358,2(A5)
	BMI.S		OKPU2
	MOVE		#$358,2(A5)
OKPD2
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V2+2
	TST.L		F2+2
	BEQ		ENDPD2
	MOVE.L	D6,F2+2
ENDPD2
	RTS

PORTUP3
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	SUB		D6,2(A5)
	CMP		#$71,2(A5)
	BPL.S		OKPU3
	MOVE		#$71,2(A5)
OKPU3
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V3+2
	TST.L		F3+2
	BEQ		ENDPU3
	MOVE.L	D6,F3+2
ENDPU3
	RTS

PORTDOWN3
	MOVEQ		#0,D6
	MOVE.B	1(A5),D6
	ADD		D6,2(A5)
	CMP		#$358,2(A5)
	BMI.S		OKPU3
	MOVE		#$358,2(A5)
OKPD3
	MOVE		2(A5),D6
	LSL.W		#2,D6
	MOVE.L	FRQ-PLAYER_DATA(A6,D6.W),D6
	MOVE.L	D6,V3+2
	TST.L		F3+2
	BEQ		ENDPD3
	MOVE.L	D6,F3+2
ENDPD3
	RTS
OFF			DC.L	0
VOICE0		DC.L	0
VOICE1		DC.L	0
VOICE2		DC.L	0
VOICE3		DC.L	0

END_PLAYING_MUSIC
	MOVE		#$2700,SR
		RTS

MOUSOFF		DC.B		$12,0
MOUSON		DC.B		8,$F8,0,0
SCREEN1		DC.L		$70000
SCREEN2		DC.L		$78000
SAVE_STACK	DS.L		1
SAVE_VBL		DS.L		1
MFP			DS.L		1
TIMERA		DS.L		3
SHIFTER		DS.L		9
NO_COLOR		DC.L		0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
				DS.L		128
STACK			DS.L		1
SAVE_REG_AREA	DS.L	3
FILENAME		DC.B		20,0
				DS.B		20
CLS			DC.B		$1B,'E',0
INDICATION	DC.B		$1B,'E','ST CONNEXION SOUNDTRACKER.',$0D,$0A
				DC.B		$0D,$0A,$0D,$0A
				DC.B		'Module name: ',0
SAVE_A6_OF_PLAYER	DS.L	1
PAT			DS.L		1
INS			DS.L		16*16/4
PAL			DC.L		$00000200,$03100410,$05210632,$07430754
				DC.L		$07650776,$07770223,$03340445,$05560667
BUFFER		EQU		*
SEQ			EQU		BUFFER+20+30*15+2
