*************************************************
* Mod-palyeri sovitettuna STE:n „„nipiirille
* JV 30/4/90
*
* Parannettu tulostusta ja kommentoitu
************************************************


	include	'a:\sorsat\startup.s'
	
	
main
	jsr	alusta			alustetaan ste:n „„nipiiri
	
	JSR	SAVE_INTERRUPTS
	JSR	INPUT_MODULE_NAME
	JSR	INIT_MUSIC
	JSR	INIT_INTERRUPTS
	JSR	PLAY_MUSIC
TOO_BAD
	JSR	REINSTALL_INTERRUPTS
	rts
	

************************************************
* STE „„nipiirin alustus


alusta

	move.b	#0,$ff8901	resetoidaan „„nipiiri
	move.b	#$03,$ff8921	stereomode,50 kHz
	lea	adata,a0	puskurin alkuosoite
	move.l	a0,d0
	move.b	d0,$ff8907
	lsr.l	#8,d0
	move.b	d0,$ff8905
	lsr.l	#8,d0
	move.b	d0,$ff8903

	lea	adata+2,a0	puskurin loppuosoite
	move.l	a0,d0
	move.b	d0,$ff8913
	lsr.l	#8,d0
	move.b	d0,$ff8911
	lsr.l	#8,d0
	move.b	d0,$ff890f
	move.b	#3,$ff8901	aloitetaan toisto
	
	move.w	#$7ff,$ff8924	suodattimen data
	move.w	#%0000001001001100,$ff8924

	rts
	


	even

adata	ds.b	1		„„nipuskuri on 2 datan mittainen
bdata	ds.b	1

***********************************************

SAVE_INTERRUPTS

	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) 	kysyt„„n nimi
	MOVE	#9,-(SP)
	TRAP	#1

	LEA	6(SP),SP		teksti puskuriin
	PEA	FILENAME
	MOVE.W	#$A,-(SP)
	TRAP	#1
	LEA	6(SP),SP
	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
	
	MOVE.L	#CLS,-(SP)
	MOVE	#9,-(SP)
	TRAP	#1
	LEA	6(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		ei saa keskeytt„„
	LEA	PLAYER_DATA,A4		datapointteri
	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		pointteri „„nipiiriin
	
	CLR.L	F0+2			smf koodia !!!!!
	CLR.L	F1+2			paskaaa !!!!!!!!
	CLR.L	F2+2			ilmeisesti portamentoa
	CLR.L	F3+2			varten ???
	CLR.L	V0+2
	CLR.L	V1+2
	CLR.L	V2+2
	CLR.L	V3+2
	
	MOVE.L	#AMIGA,$134.W		Timer-A vektori
	
	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		Oma VBL rutiini
	STOP	#$2300
MAIN2
*	Put your program which use D6,A5,A6 here

	CMP.B	#$39,$FFFFFC02.W
	BEQ	END_PLAYING_MUSIC
	BRA	MAIN2
	
********************************************************************
* Soittorutiini

AMIGA
	SWAP	D0			
	SWAP	D1			
	SWAP	D2			
	SWAP	D3			
V0	SUB.L	#0,D0			portamentot		
	BMI.S	L0			
V1	SUB.L	#0,D1			
	BMI.S	L1			
V2	SUB.L	#0,D2			
	BMI.S	L2			
V3	SUB.L	#0,D3			
	BMI.S	L3			

OUT	SWAP	D0			
	SWAP	D1			
	SWAP	D2			
	SWAP	D3			
	MOVEQ	#0,D4			naihin tulos	
	MOVEQ	#0,D5			
	MOVE.B	0(A0,D0),D4		
	MOVE.B	0(A1,D1),D5		
	ADD.W	D5,D4			
	lsr.w	#1,d4
	add.b	#$80,d4
	move.b	d4,adata
	
	clr.w	d5
	clr.w	d4
	MOVE.B	0(A2,D2),D5		
	MOVE.B	0(A3,D3),D4		
	ADD.W	D5,D4		
	
	lsr.w	#1,d4
	add.b	#$80,d4
	move.b	d4,bdata
	rte


*****************************************************************
	
L0	MOVE.L	#0,D0			jos meni negatiiviseksi
F0	MOVE.L	#0,V0+2			niin nollataan arvo,
	BRA	V1			ei en„„ vahennet„.
	
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

*********************************************************

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

***************************************************************
* Pystysynkkarutiini

VBL
	MOVE	#$2700,SR		ei saa keskeytt„„
	MOVEM.L	D6/A5-A6,-(SP)
	JSR	PORTAMENTO		muodostetaan portamentot
	SUBQ.B	#1,PLAYER_DATA		joko data loppu ?
	BNE	END			ei viel„.
	JSR	PLAY			alustetaan uudestaan
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 	'a:\sorsat\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

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'
		DC.B		'Module name (.MOD): ',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
