
**********************************************************************
* Resourced from Replayer.c compiled with SAS/C 5.10a

	SECTION testo000000,CODE
ProgStart
start	LEA	Module,A0
	BSR.S	HardCalc
	JSR	@InitReplayer
	MOVEQ	#0,D0
	JSR	_StartSong
lbC000016	BTST	#6,$BFE001
	BNE	lbC000016
	JSR	@StopSong
	JSR	@TermReplayer
	RTS

HardCalc	MOVEM.L	D0-D7/A0-A6,-(SP)
	LEA	8(A0),A0
	MOVE.L	4(A0),D0
	MULU	#12,D0
	LEA	8(A0),A0
	LEA	_SongStructs,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	ASL.L	#4,D0
	LEA	8(A0),A0
	LEA	_OverTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	MULU	#4,D0
	LEA	8(A0),A0
	LEA	_NoteTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	MULU	#$98,D0
	LEA	8(A0),A0
	LEA	_InstrTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	MOVE.L	D0,D2
	MULU	#$1E,D2
	MOVE.L	D0,D3
	MULU	#4,D3
	MOVE.L	D0,D4
	LEA	8(A0),A0
	ADD.L	D3,A0
	ADD.L	D3,A0
	ADD.L	D2,A0
	MOVE.L	D4,D3
	SUBQ.W	#1,D3
	LEA	_SaList,A1
lbC0000B4	MOVE.L	(A0)+,(A1)+
	DBRA	D3,lbC0000B4

	MOVE.L	D4,D3
	LEA	_SaAddr,A1
	LEA	_SaList,A2
	SUBQ.W	#1,D4
lbC0000CA	MOVE.L	A0,(A1)+
	ADD.L	(A2)+,A0
	DBRA	D4,lbC0000CA

	MOVE.L	4(A0),D0
	ASL.L	#7,D0
	LEA	8(A0),A0
	LEA	_WaveTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	ASL.L	#7,D0
	LEA	8(A0),A0
	LEA	_AdsrTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVE.L	4(A0),D0
	ASL.L	#7,D0
	LEA	8(A0),A0
	LEA	_AmfTable,A1
	MOVE.L	A0,(A1)
	ADD.L	D0,A0
	MOVEM.L	(SP)+,D0-D7/A0-A6
	RTS


	SECTION testo000114,CODE
Init_Song	MOVEM.L	D1/A0/A1,-(SP)
	LEA	$DFF000,A0
	MOVE.W	#15,$96(A0)
	MOVE.W	#$FF,$9E(A0)
	MOVE.W	#$780,$9A(A0)
	MOVE.W	#$780,$9C(A0)
	CLR.W	$A8(A0)
	CLR.W	$B8(A0)
	CLR.W	$C8(A0)
	CLR.W	$D8(A0)
	MOVE.L	_SongStructs,A0
	MULU	#12,D0
	ADD.L	D0,A0
	LEA	_WorkSST,A1
	MOVEQ	#11,D1
lbC00015A	MOVE.B	(A0)+,(A1)+
	DBRA	D1,lbC00015A

	LEA	PlayTable0,A0
	MOVE.W	#$2BF,D1
lbC00016A	CLR.B	(A0)+
	DBRA	D1,lbC00016A

	LEA	_WhichStep,A0
	MOVE.W	lbW001056,D0
	SUBQ.W	#1,D0
	MOVE.W	D0,(A0)
	LEA	SongSpeedCnt,A0
	MOVE.W	_WorkSST,(A0)
	LEA	_WhereInStep,A0
	MOVE.W	lbW001054,(A0)
	BSR	@ReloadTimer
	MOVEM.L	(SP)+,D1/A0/A1
	RTS

myCiaPtr	dc.l	0
myCiaIrq	dcb.l	5,0
	dc.w	0
irqtxt	dc.b	'musicirq',0
ciabtxt	dc.b	'ciab.resource',0,0

@InitReplayer	MOVEM.L	A0/A1/A6,-(SP)
	MOVEQ	#0,D0
	BSR	Init_Song
	LEA	_WhichStep,A0
	ADDQ.W	#1,(A0)
	MOVE.L	4,A6
	JSR	-$78(A6)
	LEA	ciabtxt(PC),A1
	JSR	-$1F2(A6)
	MOVE.L	D0,myCiaPtr
	BNE.S	lbC000202
	MOVEQ	#0,D0
	BRA.S	lbC00024A

lbC000202	LEA	myCiaIrq(PC),A1
	MOVE.B	#2,8(A1)
	MOVE.B	#0,9(A1)
	MOVE.L	#irqtxt,10(A1)
	CLR.L	14(A1)
	MOVE.L	#IrqRout,$12(A1)
	MOVEQ	#13,D0
	MOVE.L	myCiaPtr,A6
	MOVEQ	#1,D0
	LEA	myCiaIrq(PC),A1
	JSR	-6(A6)
	TST.L	D0
	BEQ.S	lbC000240
	MOVEQ	#0,D0
	BRA.S	lbC00024A

lbC000240	MOVE.L	4,A6
	JSR	-$7E(A6)
	MOVEQ	#1,D0
lbC00024A	MOVEM.L	(SP)+,A0/A1/A6
	RTS

ReadTimer	MOVE.B	$BFD700,D0
	MOVE.B	$BFD600,D1
	CMP.B	$BFD700,D0
	BNE.S	ReadTimer
	LSL.W	#8,D0
	MOVE.B	D1,D0
	RTS

@ReloadTimer	MOVE.L	D1,-(SP)
	MOVE.L	#$AD303,D0
	MOVE.W	lbW00105C,D1
	BEQ.S	lbC00027C
	DIVU	D1,D0
lbC00027C	MOVE.B	#0,$BFDF00
	MOVE.B	D0,$BFD600
	LSR.W	#8,D0
	MOVE.B	D0,$BFD700
	MOVE.B	#$11,$BFDF00
	BSR	ReadTimer
	MOVE.W	D0,timerticks
	MOVE.L	(SP)+,D1
	RTS

@VoicesShutDown	MOVEM.L	D0/A0,-(SP)
	LEA	PlayTable0,A0
	MOVE.W	#$2BF,D1
lbC0002B6	CLR.B	(A0)+
	DBRA	D1,lbC0002B6

	LEA	$DFF000,A0
	MOVE.W	#15,$96(A0)
	MOVEQ	#0,D0
	MOVE.W	D0,$A8(A0)
	MOVE.W	D0,$A8(A0)
	MOVE.W	D0,$A8(A0)
	MOVE.W	D0,$A8(A0)
	MOVEM.L	(SP)+,D0/A0
	RTS

@TermReplayer	MOVEM.L	D0/A1/A6,-(SP)
	MOVE.L	4,A6
	JSR	-$78(A6)
	MOVE.B	#1,$BFDD00
	MOVE.L	myCiaPtr,A6
	MOVEQ	#1,D0
	LEA	myCiaPtr,A1
	JSR	-12(A6)
	MOVE.L	4,A6
	JSR	-$7E(A6)
	BSR.S	@VoicesShutDown
	MOVEM.L	(SP)+,D0/A1/A6
	RTS

_StartSong	MOVEM.L	D1-D7/A0-A6,-(SP)
	CLR.W	_PlayOn
	BSR	Init_Song
	MOVE.W	#$FFFF,_PlayOn
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

_StartPatternPlay	MOVEM.L	D1-D7/A0-A6,-(SP)
	CLR.W	_PlayOn
	MOVE.W	lbW001054,_WhereInStep
	MOVE.W	D0,_WhichStep
	MOVE.W	#1,_PlayOn
	MOVEM.L	(SP)+,D1-D7/A0-A6
	RTS

@StopSong	CLR.W	_PlayOn
	LEA	PlayTable0,A0
	MOVE.W	#$2BF,D1
lbC00036A	CLR.B	(A0)+
	DBRA	D1,lbC00036A

	BSR	@VoicesShutDown
	RTS

_PlayOn	dc.w	0

IrqRout	MOVEM.L	D0-D7/A0-A6,-(SP)
	LEA	_RepeatVoice0,A0
	TST.L	(A0)
	BEQ.S	lbC0003DE
	TST.B	(A0)
	BEQ.S	lbC00039A
	LEA	$DFF0A0,A1
	LEA	PlayTable0,A2
	BSR	Set_repeat
lbC00039A	TST.B	1(A0)
	BEQ.S	lbC0003B0
	LEA	$DFF0B0,A1
	LEA	PlayTable1,A2
	BSR	Set_repeat
lbC0003B0	TST.B	2(A0)
	BEQ.S	lbC0003C6
	LEA	$DFF0C0,A1
	LEA	PlayTable2,A2
	BSR	Set_repeat
lbC0003C6	TST.B	3(A0)
	BEQ.S	lbC0003DC
	LEA	$DFF0D0,A1
	LEA	PlayTable3,A2
	BSR	Set_repeat
lbC0003DC	CLR.L	(A0)
lbC0003DE	LEA	SongSpeedCnt,A0
	ADDQ.W	#1,(A0)
	MOVE.W	(A0),D0
	CMP.W	_WorkSST,D0
	BLT.S	lbC0003FC
	CLR.W	(A0)
	MOVE.W	_PlayOn(PC),D0
	BEQ.S	lbC0003FC
	BSR	SongReplayer
lbC0003FC	BSR	Update_Effects
	LEA	DMAStartMask,A0
	TST.B	1(A0)
	BEQ.S	lbC000414
	MOVE.W	(A0),$DFF096
	CLR.W	(A0)
lbC000414	MOVE.B	$BFDD00,D0
	MOVE.W	#$2000,$DFF09C
	MOVEM.L	(SP)+,D0-D7/A0-A6
	MOVEQ	#0,D0
	RTS

Set_repeat	MOVE.L	_InstrTable,A3
	MOVEQ	#0,D0
	MOVE.W	$88(A2),D0
	SUBQ.W	#1,D0
	MULU	#$98,D0
	ADD.L	D0,A3
	TST.W	6(A3)
	BEQ.S	lbC000484
	CMP.W	#1,6(A3)
	BNE.S	lbC00045E
	LEA	ZeroWaveForm,A4
	MOVE.L	A4,0(A1)
	MOVE.W	#1,4(A1)
	RTS

lbC00045E	LEA	_SaAddr,A4
	MOVEQ	#0,D0
	MOVE.W	2(A3),D0
	LSL.W	#2,D0
	MOVE.L	0(A4,D0.W),A4
	MOVEQ	#0,D0
	MOVEM.W	4(A3),D0/D1
	LSL.L	#1,D0
	ADD.L	D0,A4
	MOVE.L	A4,0(A1)
	MOVE.W	D1,4(A1)
lbC000484	RTS

SongReplayer	BSR	ReadNewOTLine
	BSR	ReadNewNotes
	MOVEQ	#0,D7
	LEA	Voice0On,A0
	TST.W	(A0)+
	BEQ.S	lbC0004BE
	MOVE.L	CurrNote0,D0
	MOVE.L	CurrOtTrk0,D1
	MOVEQ	#1,D2
	LEA	_RepeatVoice0,A1
	LEA	PlayTable0,A2
	LEA	$DFF0A0,A3
	BSR	PlayVoice
lbC0004BE	TST.W	(A0)+
	BEQ.S	lbC0004E6
	MOVE.L	CurrNote1,D0
	MOVE.L	CurrOtTrk1,D1
	MOVEQ	#2,D2
	LEA	_RepeatVoice1,A1
	LEA	PlayTable1,A2
	LEA	$DFF0B0,A3
	BSR	PlayVoice
lbC0004E6	TST.W	(A0)+
	BEQ.S	lbC00050E
	MOVE.L	CurrNote2,D0
	MOVE.L	CurrOtTrk2,D1
	MOVEQ	#4,D2
	LEA	_RepeatVoice2,A1
	LEA	PlayTable2,A2
	LEA	$DFF0C0,A3
	BSR	PlayVoice
lbC00050E	TST.W	(A0)+
	BEQ.S	lbC000536
	MOVE.L	CurrNote3,D0
	MOVE.L	CurrOtTrk3,D1
	MOVEQ	#8,D2
	LEA	_RepeatVoice3,A1
	LEA	PlayTable3,A2
	LEA	$DFF0D0,A3
	BSR	PlayVoice
lbC000536	OR.W	#$8000,D7
	MOVE.W	D7,DMAStartMask
	RTS

ReadNewOTLine	LEA	_WhereInStep,A0
	ADDQ.W	#1,(A0)
	MOVE.W	lbW001054,D0
	CMP.W	(A0),D0
	BGT.S	lbC000594
	CLR.W	(A0)
	TST.W	_PlayOn
	BGT.S	lbC000576
	LEA	_WhichStep,A0
	ADDQ.W	#1,(A0)
	MOVE.W	lbW001058,D0
	CMP.W	(A0),D0
	BGE.S	lbC000576
	MOVE.W	lbW00105A,(A0)
lbC000576	MOVE.W	_WhichStep,D0
	LSL.W	#4,D0
	MOVE.L	_OverTable,A0
	MOVEM.L	0(A0,D0.W),D1-D4
	LEA	CurrOtTrk0,A0
	MOVEM.L	D1-D4,(A0)
lbC000594	RTS

ReadNewNotes	MOVE.L	_NoteTable,A0
	MOVEQ	#0,D0
	MOVE.W	_WhereInStep,D0
	LSL.W	#2,D0
	ADD.W	D0,A0
	LEA	CurrNote0,A1
	LEA	CurrOtTrk0,A2
	LEA	Voice0On,A3
	TST.W	(A3)+
	BEQ.S	lbC0005C8
	MOVEQ	#0,D0
	MOVE.W	(A2),D0
	LSL.L	#2,D0
	MOVE.L	0(A0,D0.L),(A1)
lbC0005C8	TST.W	(A3)+
	BEQ.S	lbC0005DA
	MOVEQ	#0,D0
	MOVE.W	4(A2),D0
	LSL.L	#2,D0
	MOVE.L	0(A0,D0.L),4(A1)
lbC0005DA	TST.W	(A3)+
	BEQ.S	lbC0005EC
	MOVEQ	#0,D0
	MOVE.W	8(A2),D0
	LSL.L	#2,D0
	MOVE.L	0(A0,D0.L),8(A1)
lbC0005EC	TST.W	(A3)
	BEQ.S	lbC0005FE
	MOVEQ	#0,D0
	MOVE.W	12(A2),D0
	LSL.L	#2,D0
	MOVE.L	0(A0,D0.L),12(A1)
lbC0005FE	RTS

EffJumps	dc.l	Eff_Nop
	dc.l	Eff_Slide
	dc.l	Eff_RestartAdsr
	dc.l	Eff_Nop
	dc.l	Eff_SetVib
	dc.l	Eff_Nop
	dc.l	Eff_Nop
	dc.l	Eff_SetPorta
	dc.l	Eff_SkipPorta
	dc.l	Eff_SetTrkLen
	dc.l	Eff_SlideVol
	dc.l	Eff_JmpPattern
	dc.l	Eff_SetVol
	dc.l	Eff_BreakPatt
	dc.l	Eff_SetFilter
	dc.l	Eff_SetSpeed

SetEffects	CLR.W	$86(A2)
	CLR.W	$8C(A2)
	MOVE.W	D0,D5
	AND.L	#$F00,D5
	LSR.L	#6,D5
	LEA	EffJumps(PC),A4
	MOVE.L	0(A4,D5.W),A4
	JMP	(A4)

Eff_Nop	RTS

Eff_Slide	MOVE.B	D0,D5
	EXT.W	D5
	MOVE.W	D5,$86(A2)
	RTS

Eff_RestartAdsr	MOVEQ	#0,D5
	MOVE.B	D0,D5
	MOVE.W	D5,$9A(A2)
	RTS

Eff_SetVib	CLR.W	$90(A2)
	MOVEQ	#0,D5
	MOVE.B	D0,D5
	AND.W	#$F0,D5
	ASR.W	#3,D5
	MOVE.W	D5,$92(A2)
	MOVE.B	D0,D5
	AND.L	#15,D5
	ASL.L	#4,D5
	NEG.L	D5
	ADD.L	#$A0,D5
	MOVE.W	D5,$94(A2)
	RTS

Eff_SetPorta	MOVEQ	#0,D5
	MOVE.B	D0,D5
	MOVE.W	D5,$96(A2)
	MOVE.W	D5,$98(A2)
	RTS

Eff_SkipPorta	CLR.W	$96(A2)
	CLR.W	$98(A2)
	RTS

Eff_SetTrkLen	TST.B	D0
	BLE.S	Eff_Nop
	CMP.B	#$40,D0
	BHI.S	Eff_Nop
	MOVEQ	#0,D5
	MOVE.B	D0,D5
	MOVE.W	D5,lbW001054
	RTS

Eff_SlideVol	MOVE.B	D0,D5
	EXT.W	D5
	MOVE.W	D5,$8C(A2)
	RTS

Eff_JmpPattern	MOVEQ	#0,D5
	MOVE.B	D0,D5
	MOVE.W	D3,_WhichStep
	MOVE.W	lbW001054,_WhereInStep
	RTS

Eff_SetVol	MOVEQ	#0,D5
	MOVE.B	D0,D5
	CMP.W	#$40,D5
	BLS.S	lbC0006F8
	MOVE.W	#$40,D5
lbC0006F8	MOVE.W	D5,$8A(A2)
	ASL.W	#2,D5
	MOVE.W	D5,$AE(A2)
	RTS

Eff_BreakPatt	MOVE.W	lbW001054,_WhereInStep
	RTS

Eff_SetFilter	TST.B	D0
	BNE.S	lbC00071E
	BCLR	#1,$BFE001
	RTS

lbC00071E	BSET	#1,$BFE001
	RTS

Eff_SetSpeed	TST.B	D0
	BLE	Eff_Nop
	CMP.B	#$10,D0
	BGT	Eff_Nop
	MOVEQ	#0,D5
	MOVE.B	D0,D5
	MOVE.W	D5,_WorkSST
	RTS

PlayVoice	MOVE.L	D0,D3
	ROL.L	#8,D3
	AND.L	#$FF,D3
	MOVE.L	D0,D4
	SWAP	D4
	AND.L	#$FF,D4
	TST.B	D3
	BNE.S	lbC000768
	TST.B	D4
	BEQ	lbC0007E2
	BSR	RestorePlayTable
	BRA	lbC0007E2

lbC000768	CMP.B	#$80,D3
	BEQ.S	lbC0007E2
	CMP.B	#$7F,D3
	BNE.S	lbC00077A
	BSR	ForceQuiet
	BRA.S	lbC0007E2

lbC00077A	MOVE.W	D0,D6
	MOVEQ	#12,D5
	LSR.L	D5,D6
	MOVEQ	#12,D5
	AND.L	D5,D6
	BTST	#2,D6
	BNE.S	lbC000790
	MOVE.B	D1,D5
	EXT.W	D5
	ADD.W	D5,D3
lbC000790	TST.W	D4
	BEQ.S	lbC0007A6
	BTST	#3,D6
	BNE.S	lbC0007A6
	MOVE.W	D1,D5
	ROR.W	#8,D5
	EXT.W	D5
	ADD.W	D5,D4
	AND.W	#$FF,D4
lbC0007A6	MOVE.W	$80(A2),$82(A2)
	MOVE.W	D3,$80(A2)
	MOVE.W	D2,$DFF096
	MOVE.W	#1,6(A3)
	TST.W	D4
	BEQ.S	lbC0007E8
	MOVE.W	#$2B,D6
	LEA	$84(A2),A6
lbC0007C8	CLR.B	0(A6,D6.W)
	DBRA	D6,lbC0007C8

	BSR.S	RestorePlayTable
lbC0007D2	TST.W	0(A5)
	BNE.S	lbC0007DE
	BSR	SetSampleInstr
	BRA.S	lbC0007E2

lbC0007DE	BSR	SetSynthInstr
lbC0007E2	BSR	SetEffects
	RTS

lbC0007E8	MOVE.W	$88(A2),D4
	TST.W	D4
	BEQ.S	lbC0007E2
	MOVE.L	_InstrTable,A5
	MOVE.W	$88(A2),D4
	SUBQ.L	#1,D4
	MULU	#$98,D4
	ADD.L	D4,A5
	BRA.S	lbC0007D2

RestorePlayTable	MOVE.L	_InstrTable,A5
	AND.L	#$FF,D4
	MOVE.W	D4,$88(A2)
	SUBQ.L	#1,D4
	MULU	#$98,D4
	ADD.L	D4,A5
	MOVE.W	$10(A5),D4
	MOVE.W	D4,$8A(A2)
	ASL.W	#2,D4
	MOVE.W	D4,$AE(A2)
	MOVE.W	$12(A5),D4
	EXT.W	D4
	MOVE.W	D4,$84(A2)
	MOVE.W	$14(A5),$96(A2)
	MOVE.W	$14(A5),$98(A2)
	MOVE.W	$16(A5),$90(A2)
	MOVE.W	$18(A5),$92(A2)
	MOVE.W	$1A(A5),$94(A2)
	MOVE.W	$1E(A5),$A2(A2)
	MOVE.W	$26(A5),$9C(A2)
	MOVE.W	$44(A5),$A4(A2)
	CLR.W	$A6(A2)
	MOVE.W	$48(A5),$A8(A2)
	RTS

ForceQuiet	CLR.W	8(A3)
	CLR.W	$8A(A2)
	CLR.W	$AE(A2)
	CLR.W	$88(A2)
	CLR.B	(A1)
	RTS

SetSampleInstr	LEA	_SaAddr,A6
	MOVEQ	#0,D4
	MOVE.W	2(A5),D4
	LSL.W	#2,D4
	MOVE.L	0(A6,D4.W),D4
	BNE.S	lbC00089C
	BSR.S	ForceQuiet
	RTS

lbC00089C	MOVE.L	D4,0(A3)
	MOVEQ	#0,D6
	MOVE.W	4(A5),D6
	MOVEQ	#0,D4
	CMP.W	#1,6(A5)
	BEQ.S	lbC0008B4
	MOVE.W	6(A5),D4
lbC0008B4	ADD.L	D6,D4
	MOVE.W	D4,4(A3)
	OR.W	D2,D7
	ST 	(A1)
	RTS

SetSynthInstr	MOVE.L	_WaveTable,A6
	MOVEQ	#0,D4
	MOVE.W	2(A5),D4
	ASL.L	#7,D4
	LEA	0(A6,D4.L),A6
	LEA	0(A2),A4
	MOVE.L	A4,0(A3)
	MOVE.W	4(A5),D4
	MOVE.W	D4,4(A3)
lbC0008E2	MOVE.W	(A6)+,(A4)+
	SUBQ.W	#1,D4
	BNE.S	lbC0008E2
	OR.W	D2,D7
	SF	(A1)
	RTS

Update_Effects	MOVE.L	CurrNote0,D0
	MOVE.L	CurrOtTrk0,D1
	LEA	PlayTable0,A2
	LEA	$DFF0A0,A3
	BSR	UpdateVoiceEffects
	MOVE.L	CurrNote1,D0
	MOVE.L	CurrOtTrk1,D1
	LEA	PlayTable1,A2
	LEA	$DFF0B0,A3
	BSR.S	UpdateVoiceEffects
	MOVE.L	CurrNote2,D0
	MOVE.L	CurrOtTrk2,D1
	LEA	PlayTable2,A2
	LEA	$DFF0C0,A3
	BSR.S	UpdateVoiceEffects
	MOVE.L	CurrNote3,D0
	MOVE.L	CurrOtTrk3,D1
	LEA	PlayTable3,A2
	LEA	$DFF0D0,A3
	BSR.S	UpdateVoiceEffects
	RTS

UpdateVoiceEffects	TST.W	$88(A2)
	BNE.S	lbC000972
	MOVE.W	#0,8(A3)
	TST.W	$AE(A2)
	BEQ.S	lbC000970
	SUBQ.W	#4,$AE(A2)
lbC000970	RTS

lbC000972	MOVEQ	#0,D2
	MOVE.W	$80(A2),D2
	MOVEQ	#0,D3
	MOVE.W	$82(A2),D3
	MOVE.L	_InstrTable,A4
	MOVE.W	$88(A2),D4
	SUBQ.W	#1,D4
	MULU	#$98,D4
	LEA	0(A4,D4.L),A4
	TST.W	0(A4)
	BNE.S	SynthInstUpdate
SampleInstUpdate	BSR	Arpeggio
	BSR	Portamento
	BSR	Vibrato
	BSR	Amf
	BSR	Detune
	MOVE.W	D2,6(A3)
	BSR	SetupAdsr
	RTS

SynthInstUpdate	BSR	Arpeggio
	BSR	Portamento
	BSR	Vibrato
	BSR	Amf
	BSR	Detune
	MOVE.W	D2,6(A3)
	BSR.S	SetupSynthEff
	BSR	SetupAdsr
	RTS

SetupSynthEff	SUBQ.W	#1,$A8(A2)
	BNE	NoEff
	MOVE.W	$48(A4),$A8(A2)
	MOVEQ	#0,D4
	MOVE.W	$42(A4),D4
	BEQ	NoEff
	SUBQ.W	#1,D4
	ASL.W	#2,D4
	LEA	EffJmpTable(PC),A0
	MOVE.L	0(A0,D4.W),A0
	JMP	(A0)

EffNegate	LEA	0(A2),A0
	MOVEQ	#0,D4
	MOVE.W	$A4(A2),D4
	NEG.B	0(A0,D4.W)
	BRA	fineff

EffWCNegate	LEA	0(A2),A0
	MOVE.L	_WaveTable,A1
	MOVEQ	#0,D5
	MOVE.W	$40(A4),D5
	ASL.W	#7,D5
	LEA	0(A1,D5.W),A1
	MOVE.W	$A6(A2),D5
	MOVE.B	0(A1,D5.W),D5
	AND.W	#$7F,D5
	MOVE.L	_WaveTable,A1
	MOVEQ	#0,D4
	MOVE.W	2(A4),D4
	ASL.W	#7,D4
	LEA	0(A1,D4.W),A1
	MOVE.W	4(A4),D4
	ASL.W	#1,D4
lbC000A48	TST.W	D4
	BEQ.S	lbC000A6C
	CMP.W	D4,D5
	BGT.S	lbC000A5A
	MOVE.B	-1(A1,D4.W),-1(A0,D4.W)
	SUBQ.W	#1,D4
	BRA.S	lbC000A48

lbC000A5A	TST.W	D4
	BEQ.S	lbC000A6C
	MOVE.B	-1(A1,D4.W),D5
	NEG.B	D5
	MOVE.B	D5,-1(A0,D4.W)
	SUBQ.W	#1,D4
	BRA.S	lbC000A5A

lbC000A6C	ADDQ.W	#1,$A6(A2)
	MOVE.W	$44(A4),D4
	ADD.W	$46(A4),D4
	MOVE.W	$A6(A2),D5
	CMP.W	D4,D5
	BLS.S	lbC000A86
	MOVE.W	$44(A4),$A6(A2)
lbC000A86	BRA.S	fineff

EffRotateV	LEA	0(A2),A0
	MOVEQ	#0,D4
	MOVE.W	$44(A4),D4
	LEA	0(A0,D4.W),A0
	MOVE.W	$46(A4),D4
	SUB.W	$44(A4),D4
lbC000A9E	ADDQ.B	#1,(A0)+
	DBRA	D4,lbC000A9E

	BRA.S	fineff

EffRotateH	dc.l	$41EA0000
	dc.l	$7800382C
	dc.l	$4441F0
	dc.l	$4000382C
	dc.l	$46986C
	dc.l	$441A10
	dc.l	$534410A8
	dc.l	$15248
	dc.l	$51CCFFF8
	dc.l	$1085602A

EffAlien	LEA	0(A2),A0
	MOVE.L	_WaveTable,A1
	MOVEQ	#0,D4
	MOVE.W	$40(A4),D4
	ASL.W	#7,D4
	LEA	0(A1,D4.W),A1
	MOVE.W	$44(A4),D4
lbC000AE8	MOVE.B	0(A1,D4.W),D5
	ADD.B	D5,0(A0,D4.W)
	ADDQ.W	#1,D4
	CMP.W	$46(A4),D4
	BLS.S	lbC000AE8
fineff	ADDQ.W	#1,$A4(A2)
	MOVE.W	$A4(A2),D4
	CMP.W	$46(A4),D4
	BLS.S	NoEff
	MOVE.W	$44(A4),$A4(A2)
NoEff	RTS

EffJmpTable	dc.l	EffNegate
	dc.l	EffWCNegate
	dc.l	EffRotateV
	dc.l	EffRotateH
	dc.l	EffAlien

Detune	ADD.W	$84(A2),D2
	CMP.W	#$71,D2
	BGE.S	lbC000B30
	MOVE.W	#$71,D2
lbC000B30	TST.W	SongSpeedCnt
	BEQ.S	lbC000B40
	MOVE.W	$86(A2),D5
	SUB.W	D5,$84(A2)
lbC000B40	RTS

Amf	MOVEQ	#0,D4
	MOVE.W	$20(A4),D4
	ADD.W	$22(A4),D4
	TST.W	D4
	BEQ.S	lbC000B94
	MOVE.L	_AmfTable,A1
	MOVEQ	#0,D4
	MOVE.W	$1C(A4),D4
	ASL.L	#7,D4
	LEA	0(A1,D4.L),A1
	MOVE.W	$A0(A2),D5
	MOVE.B	0(A1,D5.W),D4
	EXT.W	D4
	SUB.W	D4,D2
	MOVE.W	$20(A4),D4
	ADD.W	$22(A4),D4
	CMP.W	$A0(A2),D4
	BEQ.S	lbC000B8E
	SUBQ.W	#1,$A2(A2)
	BNE.S	lbC000B94
	MOVE.W	$1E(A4),$A2(A2)
	ADDQ.W	#1,$A0(A2)
	BRA.S	lbC000B94

lbC000B8E	MOVE.W	$20(A4),$A0(A2)
lbC000B94	RTS

Arpeggio	MOVE.W	D0,D4
	MOVEQ	#12,D5
	LSR.W	D5,D4
	AND.W	#3,D4
	TST.W	D4
	BEQ.S	lbC000BDE
	SUBQ.W	#1,D4
	ASL.L	#4,D4
	LEA	$4A(A4,D4.W),A1
	MOVE.W	$AA(A2),D4
	MOVEQ	#0,D5
	MOVE.B	2(A1,D4.W),D5
	ADD.B	D5,D2
	ADD.B	D5,D3
	MOVEQ	#0,D4
	MOVE.B	(A1),D4
	ADD.B	1(A1),D4
	CMP.W	$AA(A2),D4
	BEQ.S	lbC000BCE
	ADDQ.W	#1,$AA(A2)
	BRA.S	lbC000C0A

lbC000BCE	MOVE.B	(A1),D4
	AND.L	#$FF,D4
	MOVE.W	D4,$AA(A2)
	BRA	lbC000C0A

lbC000BDE	MOVE.W	D0,D4
	AND.W	#$F00,D4
	BNE.S	lbC000C0A
	MOVE.B	D0,D4
	BEQ.S	lbC000C0A
	MOVE.W	SongSpeedCnt,D5
	DIVS	#3,D5
	SWAP	D5
	TST.W	D5
	BEQ.S	lbC000C0A
	CMP.W	#1,D5
	BEQ.S	lbC000C02
	ASR.W	#4,D4
lbC000C02	AND.W	#15,D4
	ADD.W	D4,D2
	ADD.W	D4,D3
lbC000C0A	LEA	_FreqTable,A1
	LSL.L	#1,D2
	LSL.L	#1,D3
	MOVE.W	0(A1,D2.W),D2
	MOVE.W	0(A1,D3.W),D3
	RTS

Vibrato	CMP.W	#$FF,$90(A2)
	BEQ.S	lbC000C72
	TST.W	$90(A2)
	BEQ.S	lbC000C32
	SUBQ.W	#1,$90(A2)
	BRA.S	lbC000C72

lbC000C32	LEA	VibratoTab,A1
	MOVE.W	$8E(A2),D4
	MOVEQ	#0,D5
	MOVE.B	0(A1,D4.W),D5
	MOVEQ	#0,D4
	MOVE.W	$1A(A4),D4
	TST.B	D5
	BLT.S	lbC000C58
	TST.W	D4
	BEQ.S	lbC000C64
	LSL.L	#2,D5
	DIVU	D4,D5
	ADD.W	D5,D2
	BRA.S	lbC000C64

lbC000C58	NEG.B	D5
	TST.W	D4
	BEQ.S	lbC000C64
	LSL.L	#2,D5
	DIVU	D4,D5
	SUB.W	D5,D2
lbC000C64	MOVE.W	$18(A4),D5
	ADD.W	D5,$8E(A2)
	AND.W	#$FF,$8E(A2)
lbC000C72	RTS

Portamento	TST.W	$98(A2)
	BEQ.S	lbC000C98
	TST.W	$96(A2)
	BEQ.S	lbC000C98
	CMP.W	D3,D2
	BEQ.S	lbC000C98
	SUBQ.W	#1,$96(A2)
	EXG	D2,D3
	SUB.W	D3,D2
	MULS	$96(A2),D2
	MOVE.W	$98(A2),D4
	DIVS	D4,D2
	ADD.W	D3,D2
lbC000C98	AND.W	#$FFFF,D2
	RTS

SetupAdsr	MOVEQ	#0,D4
	MOVE.W	$28(A4),D4
	ADD.W	$2A(A4),D4
	TST.W	D4
	BNE.S	lbC000CC4
	MOVEQ	#0,D4
	MOVE.W	$8A(A2),D4
	MOVE.W	D4,8(A3)
	TST.W	$AE(A2)
	BEQ.S	lbC000CC0
	SUBQ.W	#4,$AE(A2)
lbC000CC0	BRA	lbC000D5E

lbC000CC4	MOVE.L	_AdsrTable,A1
	MOVE.W	$24(A4),D4
	ASL.W	#7,D4
	LEA	0(A1,D4.W),A1
	MOVE.W	$9A(A2),D4
	MOVEQ	#0,D5
	MOVE.B	0(A1,D4.W),D5
	MOVEQ	#0,D4
	MOVE.W	$8A(A2),D4
	MULU	D5,D4
	LSR.L	#6,D4
	MOVE.W	D4,8(A3)
	ASL.W	#2,D4
	MOVE.W	D4,$AE(A2)
	MOVEQ	#0,D4
	MOVEQ	#0,D5
	MOVE.W	$28(A4),D4
	ADD.W	$2A(A4),D4
	MOVE.W	$9A(A2),D5
	CMP.W	D5,D4
	BGT.S	lbC000D0E
	MOVE.W	$28(A4),$9A(A2)
	BRA.S	lbC000D5E

lbC000D0E	MOVE.L	D0,D4
	ROL.L	#8,D4
	AND.L	#$FF,D4
	CMP.L	#$80,D4
	BEQ.S	lbC000D32
lbC000D20	SUBQ.W	#1,$9C(A2)
	BNE.S	lbC000D5E
	MOVE.W	$26(A4),$9C(A2)
	ADDQ.W	#1,$9A(A2)
	BRA.S	lbC000D5E

lbC000D32	CMP.W	#1,$2E(A4)
	BEQ.S	lbC000D20
	MOVE.W	$9A(A2),D4
	CMP.W	$2C(A4),D4
	BLT.S	lbC000D20
	TST.W	$2E(A4)
	BEQ.S	lbC000D5E
	TST.W	$9E(A2)
	BEQ.S	lbC000D56
	SUBQ.W	#1,$9E(A2)
	BRA.S	lbC000D5E

lbC000D56	MOVE.W	$2E(A4),$9E(A2)
	BRA.S	lbC000D20

lbC000D5E	MOVE.W	$8C(A2),D5
	MOVE.W	$8A(A2),D4
	ADD.W	D5,D4
	TST.W	D4
	BGE.S	lbC000D70
	MOVEQ	#0,D4
	BRA.S	lbC000D7A

lbC000D70	CMP.W	#$40,D4
	BLS.S	lbC000D7A
	MOVE.W	#$40,D4
lbC000D7A	MOVE.W	D4,$8A(A2)
	RTS


	SECTION rep,DATA_C
PlayTable0	dcb.l	$2C,0
PlayTable1	dcb.l	$2C,0
PlayTable2	dcb.l	$2C,0
PlayTable3	dcb.l	$2C,0
ZeroWaveForm	dcb.l	2,0

	SECTION rep,DATA
DMAStartMask	dc.w	0
lastticks	dc.w	0
timerticks	dc.w	0
_SongStructs	dc.l	0
_WorkSST	dc.w	0
lbW001054	dc.w	0
lbW001056	dc.w	0
lbW001058	dc.w	0
lbW00105A	dc.w	0
lbW00105C	dc.w	0
_OverTable	dc.l	0
_NoteTable	dc.l	0
_InstrTable	dc.l	0
_WaveTable	dc.l	0
_AmfTable	dc.l	0
_AdsrTable	dc.l	0
_SaAddr	dcb.l	$40,0
_SaList	dcb.l	$40,0
_RepeatVoice0	dc.b	0
_RepeatVoice1	dc.b	0
_RepeatVoice2	dc.b	0
_RepeatVoice3	dc.b	0
Voice0On	dc.w	1
Voice1On	dc.w	1
Voice2On	dc.w	1
Voice3On	dc.w	1
SongSpeedCnt	dc.w	0
_WhereInStep	dc.w	0
_WhichStep	dc.w	0
CurrOtTrk0	dc.l	0
CurrOtTrk1	dc.l	0
CurrOtTrk2	dc.l	0
CurrOtTrk3	dc.l	0
CurrNote0	dc.l	0
CurrNote1	dc.l	0
CurrNote2	dc.l	0
CurrNote3	dc.l	0
VibratoTab	dc.l	$30609
	dc.l	$C101316
	dc.l	$191C1F22
	dc.l	$25282B2E
	dc.l	$31343639
	dc.l	$3C3F4244
	dc.l	$47494C4E
	dc.l	$51535658
	dc.l	$5A5C5E60
	dc.l	$62646668
	dc.l	$6A6C6D6F
	dc.l	$70727374
	dc.l	$76777879
	dc.l	$7A7B7B7C
	dc.l	$7D7D7E7E
	dc.l	$7E7F7F7F
	dc.l	$7F7F7F7F
	dc.l	$7E7E7D7D
	dc.l	$7C7C7B7A
	dc.l	$79787776
	dc.l	$75747271
	dc.l	$706E6C6B
	dc.l	$69676563
	dc.l	$615F5D5B
	dc.l	$59575452
	dc.l	$504D4B48
	dc.l	$4543403D
	dc.l	$3B383532
	dc.l	$2F2C2927
	dc.l	$24201D1A
	dc.l	$1714110E
	dc.l	$B080502
	dc.l	$FFFCF9F6
	dc.l	$F2EFECE9
	dc.l	$E6E3E0DD
	dc.l	$DAD7D4D1
	dc.l	$CECBC9C6
	dc.l	$C3C0BEBB
	dc.l	$B8B6B3B1
	dc.l	$AEACAAA8
	dc.l	$A5A3A19F
	dc.l	$9D9B9998
	dc.l	$96949391
	dc.l	$908E8D8C
	dc.l	$8A898887
	dc.l	$86868584
	dc.l	$84838382
	dcb.l	2,$82828282
	dc.l	$82838384
	dc.l	$84858687
	dc.l	$88898A8B
	dc.l	$8C8D8F90
	dc.l	$92939597
	dc.l	$989A9C9E
	dc.l	$A0A2A4A6
	dc.l	$A9ABADB0
	dc.l	$B2B5B7BA
	dc.l	$BCBFC2C4
	dc.l	$C7CACDD0
	dc.l	$D3D6D9DB
	dc.l	$DEE2E5E8
	dc.l	$EBEEF1F4
	dc.l	$F7FAFD00
_FreqTable	dc.l	$3580
	dc.l	$32802FA0
	dc.l	$2D002A60
	dc.l	$280025C0
	dc.l	$23A021A0
	dc.l	$1FC01E00
	dc.l	$1C501AC0
	dc.l	$194017D0
	dc.l	$16801530
	dc.l	$140012E0
	dc.l	$11D010D0
	dc.l	$FE00F00
	dc.l	$E280D60
	dc.l	$CA00BE8
	dc.l	$B400A98
	dc.l	$A000970
	dc.l	$8E80868
	dc.l	$7F00780
	dc.l	$71406B0
	dc.l	$65005F4
	dc.l	$5A0054C
	dc.l	$50004B8
	dc.l	$4740434
	dc.l	$3F803C0
	dc.l	$38A0358
	dc.l	$32802FA
	dc.l	$2D002A6
	dc.l	$280025C
	dc.l	$23A021A
	dc.l	$1FC01E0
	dc.l	$1C501AC
	dc.l	$194017D
	dc.l	$1680153
	dc.l	$140012E
	dc.l	$11D010D
	dc.l	$FE00F0
	dc.l	$E200D6
	dc.l	$CA00BE
	dc.l	$B400AA
	dc.l	$A00097
	dc.l	$8F0087
	dc.l	$7F0078
	dc.l	$71006B
	dc.l	$65005F
	dc.l	$5A0055
	dc.l	$50004B
	dc.l	$470043
	dc.l	$3F003C
	dc.l	$380035
	dc.l	$32002F
	dc.l	$2D002A
	dc.l	$280025
	dc.l	$230021
	dc.l	$1F001E
	dc.l	$1CFFFF

	SECTION rep,DATA_C
	
	* Load modul beyon this point
Module	
	incbin	"???"
	END
