;----------------- DIGI Booster v1.1 player pure code ----------------
;			by Tap - Tomasz Piasta
;			    © 20.07.1995
;
; This player is very easy to use:
; - first jump to db_init
; - in your own loop jump to db_music
; - to switch off player jump to db_end
;
; The player plays modules from Digi Booster 1.0/1.1 with packed 
; pattern data. Eight channels modules take about 0.25 frame
; (on standard Amiga 1200). The player automticly recognize
; processor (old Motorola 68000/68010 or 68020 and higher) and uses
; suitable instructions. If you want to use this player in your
; productions please buy the original (DIGI Booster with player
; source code).
; The code of player isn't optimized yet (except the mix routine
; which is extremly fast!).
; NOTE:
; If you want to use interrupt with this player you MUST use a VBL interrupt!
;------------------------- effects commands --------------------------
;   0xx arpeggio
; * 1xx portamento up
; * 2xx portamento down
; * 3xx glissando
; * 4xx vibrato
; * 5xx glissando + slide volume
; * 6xx vibrato + slide volume
;   7xx volume vibrato
; * 8xx robot
; * 9xx sample offset - main
; * axx slide volume
; * bxx song repeat
; * cxx set volume
; * dxx pattern break
; * fxx set speed
;
;----------------------------- exx commands ---------------------------
; * e00 filter off
; * e01 filter on
; * e1x fine slide up
; * e2x fine slide down
; * e30 backwd play sample
; * e31 backwd play sample+loop
; * e40 stop playing sample
; * e50 channel	off
; * e51 channel	on
; * e6x loops
; * e8x sample offset 2
; * e9x retrace
; * eax fine volume up
; * ebx fine volume down
; * ecx cut sample
;   edx sample delay
; * eex pause


	Section	code,code_p

BuffSize	equ	16384
ChanArea	equ	100

PackEnable:	equ	26
PatNum:		equ	46
OrdNum:		equ	47
Orders:		equ	48
SamLens:	equ	176
SamReps:	equ	300
SamReplens:	equ	424
SamVols:	equ	548
SamFins:	equ	579
SongName:	equ	610
SamNames:	equ	642
SongData:	equ	1572


SamBuffAdr:	equ	0	; 4
SamRep1:	equ	4	; 4
SamRep2:	equ	8	; 4
ChangeAdr:	equ	12	; 1
MixDon:		equ	13	; 1
VolA:		equ	14	; 1
VolB:		equ	15	; 1
SlideVolOldA	equ	16	; 1
SlideVolOldB	equ	17	; 1
ReplaceEnable	equ	18	; 1
OFFenable	equ	19	; 1
SamOffsetA	equ	20	; 1
SamOffsetB	equ	21	; 1
RetraceCntA	equ	22	; 1
RetraceCntB	equ	23	; 1
OldSamNumA:	equ	24	; 1
OldSamNumB:	equ	25	; 1
RobotOldVal:	equ	26	; 1
RobotEnable:	equ	27	; 1
MainPeriod:	equ	28	; 2
MainVol:	equ	30	; 1
MBRpointer	equ	31	; 1
PlayPointer	equ	32	; 1
Oldd0		equ	34	; 2
Oldd1		equ	36	; 2
Oldd2		equ	38	; 2
Oldd3		equ	40	; 2
Oldd4		equ	42	; 2
Oldd5		equ	44	; 2
Oldd6		equ	46	; 2
loopsdataschanA	equ	48	; 3
loopsdataschanB	equ	51	; 3
BACKWDenable:	equ	56	; 1
EqNewSamA	equ	57	; 1
EqNewSamB	equ	58	; 1
MainDTALEN:	equ	60	; 2
PortUpOldValA	equ	62	; 1
PortUpOldValB	equ	63	; 1
PortDownOldValA	equ	64	; 1
PortDownOldValB	equ	65	; 1
VibratoDatasA	equ	66	; 4
VibratoDatasB	equ	70	; 4
GlissandoDatasA	equ	74	; 6
GlissandoDatasB	equ	80	; 6
BuffBegADR	equ	86	; 4
BuffEndADR	equ	90	; 4
BuffMixADR	equ	94	; 4
OnOffChanA	equ	98	; 1
OnOffChanB	equ	99	; 1

; ----------------- przyklad wykorzystania playera -------------------

Start:	move.w	#$4000,$dff09a
	bsr	db_Init
Loop:	bsr	vbl
	bsr	db_Music
	btst	#6,$bfe001
	bne.s	Loop
	bsr	db_end
	move.w	#$c000,$dff09a
	rts

vbl:	cmp.b	#$ff,$dff006
	bne.s	vbl
	rts
; --------------------------------------------------------------------


db_init:
	move.l	4.w,a6	
	move.w	296(a6),d0	
	move.b	#1,OldCPU
	btst	#0,d0
	beq.s	MC68010
	move.b	#1,OldCPU
MC68010:
	btst	#1,d0
	beq.s	MC68020
	clr.b	OldCPU
MC68020:
	btst	#2,d0
	beq.s	MC68030
	clr.b	OldCPU
MC68030:
	btst	#3,d0
	beq.s	MC68040
	clr.b	OldCPU
MC68040:
	lea	Channel1,a0
	move.l	#sample_buff1_1,(a0)
	move.l	#sample_buff1_1,BuffBegAdr(a0)
	move.l	#sample_buff1_1+BuffSize,BuffEndAdr(a0)
	move.l	#sample_buff1_2,ChanArea(a0)
	move.l	#sample_buff1_2,ChanArea+BuffBegAdr(a0)
	move.l	#sample_buff1_2+BuffSize,ChanArea+BuffEndAdr(a0)
	move.l	#sample_buff1_3,ChanArea*2(a0)
	move.l	#sample_buff1_3,[ChanArea*2]+BuffBegAdr(a0)
	move.l	#sample_buff1_3+BuffSize,[ChanArea*2]+BuffEndAdr(a0)
	move.l	#sample_buff1_4,ChanArea*3(a0)
	move.l	#sample_buff1_4,[ChanArea*3]+BuffBegAdr(a0)
	move.l	#sample_buff1_4+BuffSize,[ChanArea*3]+BuffEndAdr(a0)

	clr.b	SongPos
	clr.b	PattPos
	clr.b	count
	move.b	#6,temp

	bset	#1,$bfe001
	
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d3
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	moveq	#0,d7

	move.l	#0,a0
	move.l	#0,a1
	move.l	#0,a2
	move.l	#0,a3
	move.l	#0,a5

	bsr	db_InitVoices

	move.b	temp(pc),count
	move.l	ModDIGI,a5

	lea	1572(a5),a1		; song data
	lea	PattAdresses(pc),a2
	move.l	a1,(a2)+
	move.b	PatNum(a5),d7
	moveq	#0,d0
db_MakePatAdr
	move.w	(a1),d0
	addq	#2,d0	
	add.l	d0,a1
	move.l	a1,(a2)+
	dbf	d7,db_MakePatAdr

	lea	SamLens(a5),a0
	move.l	a1,d6
	lea	sample_starts(pc),a2
	moveq	#30,d7
db_MakeSamAdr
	move.l	d6,(a2)+
	add.l	(a0)+,d6
	dbf	d7,db_MakeSamAdr

	lea	SamLens(a5),a0
	lea	sample_lenghts(pc),a1
	moveq	#31-1,d7
db_cploop1:
	move.l	(a0)+,(a1)+
	dbf	d7,db_cploop1

	bsr	make_voltab
	bsr	make_tab
	rts

db_InitVoices:
	move.l	#sample_buff1_1,$dff0a0
	move.w	#166,$dff0a4
	move.w	#214,$dff0a6
	clr.w	$dff0a8
	move.l	#sample_buff1_2,$dff0b0
	move.w	#166,$dff0b4
	move.w	#214,$dff0b6
	clr.w	$dff0b8
	move.l	#sample_buff1_3,$dff0c0
	move.w	#166,$dff0c4
	move.w	#214,$dff0c6
	clr.w	$dff0c8
	move.l	#sample_buff1_4,$dff0d0
	move.w	#166,$dff0d4
	move.w	#214,$dff0d6
	clr.w	$dff0d8
	rts

PattEnable:	dc.b	0
SongPos:	dc.b	0
PattPos:	dc.b	0
temp:		dc.b	0
count:		dc.b	0
PauseEn:	dc.b	0
PauseVBL:	dc.w	0
JMPEN:		dc.b	0
OldPattPos:	dc.b	0
OldDepAdr:	dc.l	0
modDIGI:	dc.l	module
UnPackedData:	ds.l	8
oldcpu:		dc.b	0
DMA1:		dc.b	0
		even

db_music:
	move.l	ModDIGI,a5
	lea	sample_starts(pc),a0	; sample starts, 124(a0) lenghts
	lea	SamReps(a5),a3		; sample repeats, 124(a3) replens
	lea	SamVols(a5),a4		; sample volumes

	move.b	count(pc),d7
	cmp.b	temp(pc),d7
	blt	DepackDone

	tst.b	temp
	beq.s	NoNewPos
	cmp.b	#64,pattpos
	bne.s	NoNewPos
	clr.b	PattPos
	tst.b	PattEnable
	bne.s	NoNewPos
	addq.b	#1,SongPos
NoNewPos:
	moveq	#0,d6
	moveq	#0,d7
	move.b	OrdNum(a5),d7
	move.b	SongPos(pc),d6
	cmp.w	d6,d7
	bge.s	NoRepeatSong
	clr.b	SongPos
	clr.b	PattPos
	move.l	PattAdresses(pc),a1
NoRepeatSong:

	moveq	#0,d7
	move.b	SongPos(pc),d7
	move.b	Orders(a5,d7.w),d7
	lsl.w	#2,d7
	lea	PattAdresses(pc),a1
	move.l	(a1,d7.w),a1

	addq.w	#2,a1
	lea	(a1),a6
	lea	64(a1),a5
	moveq	#0,d7
	move.b	PattPos(pc),d7
	add.w	d7,a1
	move.b	OldPattPos(pc),d6
	addq.b	#1,d6
	cmp.b	d6,d7
	beq.s	NoCalcAdr

	tst.w	d7
	beq.s	DepackData
	subq	#1,d7
	move.l	a5,d1
DepackCalcAdr:
	move.b	(a6)+,d0
	btst	#7,d0
	beq.s	DepackNoAdd7
	addq	#4,d1
DepackNoAdd7
	btst	#6,d0
	beq.s	DepackNoAdd6
	addq	#4,d1
DepackNoAdd6
	btst	#5,d0
	beq.s	DepackNoAdd5
	addq	#4,d1
DepackNoAdd5
	btst	#4,d0
	beq.s	DepackNoAdd4
	addq	#4,d1
DepackNoAdd4
	btst	#3,d0
	beq.s	DepackNoAdd3
	addq	#4,d1
DepackNoAdd3
	btst	#2,d0
	beq.s	DepackNoAdd2
	addq	#4,d1
DepackNoAdd2
	btst	#1,d0
	beq.s	DepackNoAdd1
	addq	#4,d1
DepackNoAdd1
	btst	#0,d0
	beq.s	DepackNoAdd0
	addq	#4,d1
DepackNoAdd0
	dbf	d7,DepackCalcAdr
	move.l	d1,a5
	move.w	#$f,$dff180
	bra.s	DepackData
NoCalcAdr
	move.l	OldDepAdr(pc),a5
DepackData:
	move.b	PattPos(pc),OldPattPos
	lea	UnPackedData,a6
	moveq	#7,d7
DepackDataLoop
	btst	d7,(a1)
	beq.s	DepackPutZero
	move.l	(a5)+,(a6)+
	dbf	d7,DepackDataLoop
	move.l	a5,OldDepAdr
	bra.s	DepackDone
DepackPutZero
	clr.l	(a6)+
	dbf	d7,DepackDataLoop
	move.l	a5,OldDepAdr
DepackDone

	lea	UnPackedData,a1
	moveq	#0,d6
	moveq	#0,d5
	lea	Channel1(pc),a6
	lea	$dff0a0,a5
	bsr	playvoice
	moveq	#1,d5
	lea	Channel2(pc),a6
	lea	$dff0b0,a5
	bsr	playvoice
	moveq	#2,d5
	lea	Channel3(pc),a6
	lea	$dff0c0,a5
	bsr	playvoice
	moveq	#3,d5
	lea	Channel4(pc),a6
	lea	$dff0d0,a5
	bsr	playvoice

	tst.w	d6
	beq.s	NoSetDma

	bsr	Wait_dma

	or.w	#$8000,d6
	move.w	d6,$dff096

NoSetDma:
	move.l	ModDIGI,a5
	lea	channel1(pc),a6
	bsr	MIXCHAN

	tst.w	PauseVBL
	beq.s	NoPause
	move.b	#1,PauseEn
	subq.w	#1,PauseVBL
NoPause:

	move.b	count(pc),d7
	cmp.b	temp(pc),d7
	blt.s	No_NEW
	clr.b	count

	tst.w	PauseVBL
	bne.s	DoPAUSE
	addq.b	#1,pattpos
	clr.b	PauseEn
DoPAUSE
No_NEW
	addq.b	#1,count
	rts

playvoice:
	clr.b	EqNewSamA(a6)
	clr.b	EqNewSamB(a6)

	tst.w	MainPeriod(a6)
	beq.w	PlayOk

	tst.b	OffEnable(a6)
	beq.s	NoOFFchan
	clr.b	OffEnable(a6)

	tst.w	Oldd0(a6)
	beq.s	NoData1
	tst.w	Oldd4(a6)
	bne.s	OFFchan
NoData1
	tst.b	PlayPointer(a6)
	beq.s	OFFchan
	move.w	Oldd2(a6),d1
	lsr.w	#8,d1
	cmp.b	#3,d1
	beq.s	NoOFFchan
	cmp.b	#5,d1
	beq.s	NoOFFchan
	move.w	Oldd6(a6),d1
	lsr.w	#8,d1
	cmp.b	#3,d1
	beq.s	NoOFFchan
	cmp.b	#5,d1
	beq.s	NoOFFchan
OFFchan
	moveq	#0,d0
	bset	d5,d0
	move.w	d0,$dff096
	bset	d5,d6
NoOFFchan
	cmp.w	#-1,MainPeriod(a6)
	beq.w	StopChan

	tst.b	MBRpointer(a6)
	bne.s	NoPlayMixBuff
	move.l	BuffBegAdr(a6),(a5)
	move.w	#BuffSize/2,4(a5)
	move.w	MainPeriod(a6),6(a5)
	moveq	#0,d7
	move.b	MainVol(a6),d7
	move.w	d7,8(a5)
	move.b	#1,PlayPointer(a6)
	bra.s	PlayOK
NoPlayMixBuff
	move.l	BuffMixADR(a6),(a5)
	move.w	OldD3(a6),d3
	lsr.w	#1,d3
	move.w	d3,4(a5)
	move.w	MainPeriod(a6),6(a5)
	moveq	#0,d7
	move.b	MainVol(a6),d7
	move.w	d7,8(a5)
	bra.s	PlayOK
StopChan
	moveq	#0,d0
	bset	d5,d0
	bclr	d5,d6
	move.w	d0,$dff096
	move.b	#1,PlayPointer(a6)
	clr.w	MainPeriod(a6)
PlayOK	rts


WAIT_DMA:
	moveq	#0,d1
	move.b	$dff006,d1
	ext.w	d1
WAITDMA_loop
	moveq	#0,d0
	move.b	$dff006,d0
	sub.w	#14,d0
	ext.w	d0
	cmp.w	d1,d0
	blt.s	WAITDMA_loop
	rts

MIXCHAN:
*-------------------- channel 1a,1b mix ---------------------------
	lea	sample_pos1(pc),a2	; sample positions
	move.w	Oldd0(a6),d0
	move.w	Oldd1(a6),d1
	move.w	Oldd2(a6),d2
	move.w	Oldd3(a6),d3
	move.w	Oldd4(a6),d4
	move.w	Oldd5(a6),d5
	move.w	Oldd6(a6),d6

	tst.w	what
	bne.s	ok1
	move.l	#sample_buff1_MIX,BuffMixADR(a6)
ok1:
	cmp.w	#1,what
	bne.s	ok2
	move.l	#sample_buff1_MIX+640,BuffMixADR(a6)
ok2:
	cmp.w	#2,what
	bne.s	ok3
	move.l	#sample_buff1_MIX+1280,BuffMixADR(a6)
ok3:
	bsr	mainPROC
	move.w	d0,Oldd0(a6)
	move.w	d1,Oldd1(a6)
	move.w	d2,Oldd2(a6)
	move.w	d3,Oldd3(a6)
	move.w	d4,Oldd4(a6)
	move.w	d5,Oldd5(a6)
	move.w	d6,Oldd6(a6)

*-------------------- channel 2a,2b mix ---------------------------
	lea	ChanArea(a6),a6
	lea	sample_pos2(pc),a2	; sample positions
	move.w	Oldd0(a6),d0
	move.w	Oldd1(a6),d1
	move.w	Oldd2(a6),d2
	move.w	Oldd3(a6),d3
	move.w	Oldd4(a6),d4
	move.w	Oldd5(a6),d5
	move.w	Oldd6(a6),d6
	lea	8(a1),a1

	tst.w	what
	bne.s	ok1_2
	move.l	#sample_buff2_MIX,BuffMixADR(a6)
ok1_2:
	cmp.w	#1,what
	bne.s	ok2_2
	move.l	#sample_buff2_MIX+640,BuffMixADR(a6)
ok2_2:
	cmp.w	#2,what
	bne.s	ok3_2
	move.l	#sample_buff2_MIX+1280,BuffMixADR(a6)
ok3_2:
	bsr	mainPROC
	move.w	d0,Oldd0(a6)
	move.w	d1,Oldd1(a6)
	move.w	d2,Oldd2(a6)
	move.w	d3,Oldd3(a6)
	move.w	d4,Oldd4(a6)
	move.w	d5,Oldd5(a6)
	move.w	d6,Oldd6(a6)
*-------------------- channel 3a,3b mix ---------------------------
	lea	ChanArea(a6),a6
	lea	sample_pos3(pc),a2	; sample positions
	move.w	Oldd0(a6),d0
	move.w	Oldd1(a6),d1
	move.w	Oldd2(a6),d2
	move.w	Oldd3(a6),d3
	move.w	Oldd4(a6),d4
	move.w	Oldd5(a6),d5
	move.w	Oldd6(a6),d6
	lea	8(a1),a1

	tst.w	what
	bne.s	ok1_3
	move.l	#sample_buff3_MIX,BuffMixADR(a6)
ok1_3:
	cmp.w	#1,what
	bne.s	ok2_3
	move.l	#sample_buff3_MIX+640,BuffMixADR(a6)
ok2_3:
	cmp.w	#2,what
	bne.s	ok3_3
	move.l	#sample_buff3_MIX+1280,BuffMixADR(a6)
ok3_3:
	bsr	mainPROC
	move.w	d0,Oldd0(a6)
	move.w	d1,Oldd1(a6)
	move.w	d2,Oldd2(a6)
	move.w	d3,Oldd3(a6)
	move.w	d4,Oldd4(a6)
	move.w	d5,Oldd5(a6)
	move.w	d6,Oldd6(a6)
*-------------------- channel 4a,4b mix ---------------------------
	lea	ChanArea(a6),a6
	lea	sample_pos4(pc),a2	; sample positions
	move.w	Oldd0(a6),d0
	move.w	Oldd1(a6),d1
	move.w	Oldd2(a6),d2
	move.w	Oldd3(a6),d3
	move.w	Oldd4(a6),d4
	move.w	Oldd5(a6),d5
	move.w	Oldd6(a6),d6
	lea	8(a1),a1

	tst.w	what
	bne.s	ok1_4
	move.l	#sample_buff4_MIX,BuffMixADR(a6)
ok1_4:
	cmp.w	#1,what
	bne.s	ok2_4
	move.l	#sample_buff4_MIX+640,BuffMixADR(a6)
ok2_4:
	cmp.w	#2,what
	bne.s	ok3_4
	move.l	#sample_buff4_MIX+1280,BuffMixADR(a6)
ok3_4:
	bsr	mainPROC
	move.w	d0,Oldd0(a6)
	move.w	d1,Oldd1(a6)
	move.w	d2,Oldd2(a6)
	move.w	d3,Oldd3(a6)
	move.w	d4,Oldd4(a6)
	move.w	d5,Oldd5(a6)
	move.w	d6,Oldd6(a6)
* ----------------------------------------------------------
	tst.w	what
	bne.s	whatok
	move.w	#3,what
whatok
	subq	#1,what
	rts

; -------------- main procedure ----------------------------
mainPROC:
	tst.b	temp
	beq	old_data

	move.b	count(pc),d7
	cmp.b	temp(pc),d7
	blt	old_data

	tst.b	PauseEn
	bne.w	oldperiod_1
	tst.b	OnOffChanA(a6)
	bne.w	oldperiod_1

	moveq	#0,d3

	tst.w	(a1)
	beq.s	oldperiod_1

	move.w	2(a1),d7
	and.w	#$0f00,d7
	cmp.w	#$300,d7
	bne.s	NoClrGliss_1
	clr.w	GlissandoDatasA+4(a6)
NoClrGliss_1

	clr.b	BackWDenable(a6)
	clr.w	VibratoDatasA(a6)

	move.b	#1,OffEnable(a6)
	move.b	#1,EqNewSamA(a6)
	move.w	(a1),d7

	btst	#12,d7
	beq.s	nohisam1
	move.b	#1,hisam
	bclr	#12,d7
	tst.w	d7
	beq.s	oldperiod_1
nohisam1
	move.w	d7,d0

	tst.b	MixDon(a6)
	beq.s	cont1

	move.l	(a0,d5.w),d7
	add.l	124(a0,d5.w),d7
	cmp.l	124(a2,d5.w),d7
	bgt.s	cont1

	tst.l	(a3,d5.w)
	bne.s	cont1

	clr.l	124(a2,d5.w)
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	clr.b	MixDon(a6)
cont1:
	bra.s	newperiod_1
oldperiod_1:
	moveq	#-1,d3
newperiod_1:

	moveq	#0,d2

	tst.b	hisam
	bne.s	neweff_1
	tst.w	2(a1)
	beq.w	oldeff_1
neweff_1
	move.w	2(a1),d2
	move.w	d2,d7
	lsr.w	#8,d7
	lsr.w	#4,d7

	tst.b	hisam
	beq.s	nohisam11
	add.w	#$10,d7
	clr.b	hisam
nohisam11

	tst.b	d7
	beq.s	oldeff_1

	cmp.b	#-1,d3
	bne.s	noupvol_1
	move.w	d1,d3
	lsr.w	#2,d3
	move.b	(a4,d3.w),VolA(a6)
	and.w	#$0fff,d2
	bra.s	NoOldNum_1
noupvol_1:

	move.w	d7,d1
	subq	#1,d1
	lsl.w	#2,d1
	move.w	d2,d7
	and.w	#$0f00,d7
	cmp.w	#$300,d7
	bne.s	NewAdr_1

	tst.l	(a2,d1.w)
	bne.s	NoNewAdr_1
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	bra.s	NoOldNum_1
NewAdr_1
	move.l	(a0,d1.w),(a2,d1.w)
NoNewAdr_1
	move.w	d1,d3
	lsr.w	#2,d3
	move.b	(a4,d3.w),VolA(a6)
	and.w	#$0fff,d2
	move.b	d1,OldSamNumA(a6)
	bra.s	NoOldNum_1
oldeff_1:
	tst.w	(a1)
	beq.s	NoOldNum_1

	moveq	#0,d1
	move.b	OldSamNumA(a6),d1

	move.w	d2,d7
	and.w	#$0f00,d7
	cmp.w	#$500,d7
	beq.s	YeGL_1
	cmp.w	#$300,d7
	bne.s	NoGL_1
YeGL_1
	tst.l	(a2,d1.w)
	bne.s	NoOldNum_1
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	bra.s	NoOldNum_1
NoGL_1

	move.l	(a0,d1.w),(a2,d1.w)
NoOldNum_1





	tst.b	PauseEn
	bne.w	oldperiod_2
	tst.b	OnOffChanB(a6)
	bne.s	oldperiod_2

	moveq	#0,d3

	tst.w	4(a1)
	beq.s	oldperiod_2

	move.w	6(a1),d7
	and.w	#$0f00,d7
	cmp.w	#$300,d7
	bne.s	NoClrGliss_2
	clr.w	GlissandoDatasB+4(a6)
NoClrGliss_2

	clr.w	VibratoDatasB(a6)
	move.b	#1,OffEnable(a6)
	move.b	#1,EqNewSamB(a6)

	move.w	4(a1),d7

	btst	#12,d7
	beq.s	nohisam_2
	move.b	#1,hisam
	bclr	#12,d7
	tst.w	d7
	beq.s	oldperiod_2
nohisam_2:
	move.w	d7,d4

	tst.b	MixDon(a6)
	beq.s	cont2

	move.l	(a0,d1.w),d7
	add.l	124(a0,d1.w),d7
	cmp.l	(a2,d1.w),d7
	bgt.s	cont2

	tst.l	(a3,d1.w)
	bne.s	cont2

	clr.l	(a2,d1.w)
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	clr.b	MixDon(a6)
cont2:
	bra.s	newperiod_2
oldperiod_2:
	moveq	#-1,d3
newperiod_2:

	moveq	#0,d6

	tst.b	hisam
	bne.s	neweff_2
	tst.w	6(a1)
	beq.s	oldeff_2
neweff_2
	move.w	6(a1),d6

	move.w	d6,d7
	lsr.w	#8,d7
	lsr.w	#4,d7

	tst.b	hisam
	beq.s	nohisam22
	add.w	#$10,d7
	clr.b	hisam
nohisam22

	tst.b	d7
	beq.s	OldEff_2

	cmp.b	#-1,d3
	bne.s	noupvol_2
	move.w	d5,d3
	lsr.w	#2,d3
	move.b	(a4,d3.w),VolB(a6)
	and.w	#$0fff,d6
	bra.s	NoOldNum_2
noupvol_2:
	move.w	d7,d5
	subq	#1,d5
	lsl.w	#2,d5

	move.w	d6,d7
	and.w	#$0f00,d7
	cmp.w	#$300,d7
	bne.s	NewAdr_2

	tst.l	124(a2,d5.w)		; adres sampla
	bne.s	NoNewAdr_2
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	bra.s	NoOldNum_2
NewAdr_2
	move.l	(a0,d5.w),124(a2,d5.w)	; adres sampla
NoNewAdr_2
	move.w	d5,d3
	lsr.w	#2,d3
	move.b	(a4,d3.w),VolB(a6)
	and.w	#$0fff,d6
	move.b	d5,OldSamNumB(a6)
	bra.s	NoOldNum_2
OldEff_2:
	tst.w	4(a1)
	beq.s	NoOldNum_2

	moveq	#0,d5
	move.b	OldSamNumB(a6),d5

	move.w	d6,d7
	and.w	#$0f00,d7
	cmp.w	#$500,d7
	beq.s	YeGL_2
	cmp.w	#$300,d7
	bne.s	NoGL_2
YeGL_2
	tst.l	124(a2,d5.w)
	bne.s	NoOldNum_2
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	bra.s	NoOldNum_2
NoGL_2
	move.l	(a0,d5.w),124(a2,d5.w)
NoOldNum_2

	move.l	a5,-(sp)
	bsr	EffectCommandsA2
	bsr	EffectCommandsB2
	move.l	(sp)+,a5

	tst.b	OnOffChanA(a6)
	bne.s	Stop1
	cmp.w	#$0e40,d2
	bne.s	No_stop1
	move.l	BuffBegAdr(a6),(a6)
	move.b	#1,OffEnable(a6)
Stop1	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
No_stop1
	tst.b	OnOffChanB(a6)
	bne.s	Stop2
	cmp.w	#$0e40,d6
	bne.s	No_stop2
	move.l	BuffBegAdr(a6),(a6)
	move.b	#1,OffEnable(a6)
Stop2	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
No_stop2

old_data:

	move.b	temp(pc),d7
	subq	#1,d7
	cmp.b	count(pc),d7
	bne.s	no_CLReff2
	move.w	d2,d7
	lsr.w	#8,d7
	cmp.b	#8,d7
	beq.s	no_CLReff1
	cmp.b	#3,d7
	beq.s	no_CLReff1
	cmp.b	#5,d7
	beq.s	CLReffSP1
	move.w	d2,d7
	lsr.w	#4,d7
	cmp.w	#$ec,d7
	beq.s	no_CLReff1
	moveq	#0,d2
	bra.s	no_CLReff1
CLReffSP1:
	move.w	#$0300,d2
no_CLReff1
	move.w	d6,d7
	lsr.w	#8,d7
	cmp.b	#3,d7
	beq.s	no_CLReff2
	cmp.b	#5,d7
	beq.s	CLReffSP2
	move.w	d6,d7
	lsr.w	#4,d7
	cmp.w	#$ec,d7
	beq.s	no_CLReff2
	moveq	#0,d6
	bra.s	no_CLReff2
CLReffSP2:
	move.w	#$0300,d6
no_CLReff2

	cmp.w	#113,d0
	bge.w	OKKI1
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
OKKI1
	cmp.w	#113,d4
	bge.s	OKKI2
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
OKKI2

	move.l	a5,-(sp)
	bsr	EffectCommandsA
	bsr	EffectCommandsB
	move.l	(sp)+,a5

	move.w	d0,GlissandoDatasA+2(a6)
	move.w	d4,GlissandoDatasB+2(a6)

; -----------------------------------

	tst.w	d0
	bne.s	NoReplace1
	tst.w	d4
	beq.s	NoReplace1
	move.l	124(a2,d5.w),(a2,d5.w)
	clr.l	124(a2,d5.w)
	move.w	d4,d0
	move.w	d5,d1
	move.w	d6,d2
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	move.b	#1,ReplaceEnable(a6)
	move.b	VolA(a6),d3
	move.b	VolB(a6),VolA(a6)
	move.b	d3,VolB(a6)
NoReplace1

	tst.w	d4
	bne	mixing

	clr.b	MBRpointer(a6)

	tst.w	d0
	beq	nothing

	move.w	d0,MainPeriod(a6)
	move.b	VolA(a6),MainVol(a6)

	tst.b	OffEnable(a6)
	beq.s	NoAtStartBuff
	tst.b	PlayPointer(a6)
	beq.s	BuffAtStart
	move.w	d2,d7
	lsr.w	#8,d7
	cmp.b	#3,d7
	beq.s	NoAtStartBuff
	cmp.b	#5,d7
	beq.s	NoAtStartBuff
BuffAtStart
	move.l	BuffBegAdr(a6),(a6)
NoAtStartBuff

	move.l	#71590,d3
	divu	d0,d3
	and.l	#$0000ffff,d3
; - - - - - - - - - - - - - - -  backwd play - - - - - - - - - - - - - - -
	tst.b	BackWDenable(a6)
	bne.s	bckOK

	move.w	d2,d7
	lsr.w	#4,d7
	cmp.w	#$e3,d7
	bne.s	no_backwd
	move.l	124(a0,d1.w),d7
	add.l	d7,(a2,d1.w)
	move.b	#1,BackWDenable(a6)

	move.b	d2,d7
	and.b	#$0f,d7
	beq.s	bckOK
	move.b	#2,BackWDenable(a6)
bckOK
	move.b	#1,MBRpointer(a6)
	movem.l	d0-d1/a4-a5,-(sp)

	move.l	(a0,d1.w),d0
	move.w	d3,d7
	move.l	(a2,d1.w),a5
	move.l	BuffMixADR(a6),a4

	cmp.b	#1,BackWDenable(a6)
	beq.s	copy_loopbck1

copy_loopbck2:
	cmp.l	d0,a5
	ble.s	sampleend_str
	move.b	-(a5),(a4)+
	dbf	d7,copy_loopbck2
	bra.s	bck_done
sampleend_str:
	clr.b	BackWDenable(a6)
	bra.s	bck_done
copy_loopbck1:
	cmp.l	d0,a5
	ble.w	sampleend
	move.b	-(a5),(a4)+
	dbf	d7,copy_loopbck1
bck_done:

	movem.l	(sp)+,d0-d1/a4-a5
	sub.l	d3,(a2,d1.w)
	bra.w	Replace2
no_backwd
	move.w	d2,d7
	lsr.w	#8,d7
	cmp.b	#$8,d7
	beq	RobotEffect

	tst.b	RobotEnable(a6)
	beq.s	NoOffCH
	move.b	#1,Offenable(a6)
	move.l	BuffBegAdr(a6),(a6)
NoOffCH	clr.b	RobotEnable(a6)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	addq	#1,d3

	tst.l	124(a3,d1.w)
	bne	sampleloop

	movem.l	d0-d1/a4-a5,-(sp)

	move.l	124(a0,d1.w),d0
	add.l	(a0,d1.w),d0
	move.l	(a2,d1.w),a5
	cmp.l	d0,a5
	blt.s	NotSamEnd0
	move.w	#-1,MainPeriod(a6)
	bra	realsampleend
NotSamEnd0

	move.l	(a6),d7
	move.l	(a6),d1
	add.l	d3,d1
	cmp.l	BuffEndAdr(a6),d1
	ble.s	NotEndBuff

	move.l	a5,d7
	add.l	d3,d7
	cmp.l	d0,d7
	ble.s	NotSamEnd2
	move.w	#-1,MainPeriod(a6)
	bra	realsampleend
NotSamEnd2
	sub.l	BuffEndAdr(a6),d1
	move.w	d3,d7
	sub.w	d1,d7
	subq.w	#1,d7
	move.l	(a6),a4
	bsr	copy_loop

	move.l	BuffBegAdr(a6),(a6)
	move.l	(a6),a4

	move.w	d1,d7
	subq.w	#1,d7
	bsr	copy_loop
	bra.s	CopyDone
NotEndBuff

	move.l	(a6),a4

	move.l	a5,d7
	add.l	d3,d7
	cmp.l	d0,d7
	ble.s	NotSamEnd1
	sub.l	d0,d7
	move.w	d7,d0
	move.w	d3,d7
	sub.w	d0,d7
	subq.w	#1,d7
	bsr	copy_loop

	move.w	d0,d7
	beq.s	nosubq1
	subq.w	#1,d7
nosubq1
	bra	sampleend
NotSamEnd1
	move.w	d3,d7
	subq	#1,d7
	bsr	copy_loop
CopyDone:
	move.l	a4,(a6)
	movem.l	(sp)+,d0-d1/a4-a5
	add.l	d3,(a2,d1.w)

Replace2:
	move.w	d3,MainDTALEN(a6)
Replace_R:
	tst.b	ReplaceEnable(a6)
	beq.s	NoReplace2
	move.l	(a2,d1.w),124(a2,d1.w)
	clr.l	(a2,d1.w)
	move.w	d0,d4
	move.w	d1,d5
	move.w	d2,d6
	clr.b	ReplaceEnable(a6)
	move.b	VolA(a6),d0
	move.b	VolB(a6),VolA(a6)
	move.b	d0,VolB(a6)
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
NoReplace2
	rts

copy_loop:
	tst.w	d7
	blt.s	copy_loopex
	tst.b	VolA(a6)
	beq.s	copyclr_loop
	tst.b	OldCPU
	bne.s	copy_loopL68000
	movem.l	d7/a4-a5,-(sp)
	lsr.w	#2,d7
copy_loopL
	move.l	(a5)+,(a4)+
	dbf	d7,copy_loopL
	movem.l	(sp)+,d7/a4-a5
	addq	#1,d7
	add.w	d7,a5
	add.w	d7,a4
	rts
copy_loopL68000
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loopL68000
copy_loopex
	rts

copyclr_loop:
	moveq	#0,d6
	tst.b	OldCPU
	bne.s	copyclr_loopL68000
	movem.l	d7/a4-a5,-(sp)
	lsr.w	#2,d7
copy_loopclrL
	move.l	d6,(a4)+
	dbf	d7,copy_loopclrL
	movem.l	(sp)+,d7/a4-a5
	addq	#1,d7
	add.w	d7,a5
	add.w	d7,a4
	rts
copyclr_loopL68000
	move.b	d6,(a4)+
	dbf	d7,copyclr_loopL68000
	rts

nothing:
	tst.w	MainPeriod(a6)
	beq.s	nostopperiod
	move.w	#-1,MainPeriod(a6)
nostopperiod
	rts

sampleend:
	moveq	#0,d0
	clr.b	-1(a4)
clr_loop:
	move.b	d0,(a4)+
	dbf	d7,clr_loop
realsampleend:
	movem.l	(sp)+,d0-d1/a4-a5
	clr.l	(a2,d1.w)
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	clr.b	ReplaceEnable(a6)
	clr.b	BackWDenable(a6)
	rts

sampleloop:
	movem.l	d0-d4/a4-a5,-(sp)

	move.l	(a2,d1.w),a5
	move.l	124(a3,d1.w),d4
	add.l	(a3,d1.w),d4
	add.l	(a0,d1.w),d4

	cmp.l	d4,a5
	ble.s	NotSamEndL
	move.l	d4,(a2,d1.w)
	subq.l	#1,(a2,d1.w)
	move.l	d4,a5
	subq.l	#1,a5
NotSamEndL

	move.l	(a6),d7
	move.l	(a6),d2
	add.l	d3,d2
	cmp.l	BuffEndAdr(a6),d2
	ble.w	NotEndBuff_L

	move.l	(a6),a4
	move.l	a5,d7
	add.l	d3,d7
	cmp.l	d4,d7
	ble.w	NoMakeLoop_EB

	sub.l	d4,d7			; loop
	move.w	d7,d4
	move.w	d3,d7
	sub.w	d4,d7

	sub.l	BuffEndAdr(a6),d2
	move.w	d3,d0
	sub.w	d2,d0

	cmp.w	d0,d7
	bge.s	Copy_ToEndBuff
; d0=>d7 koniec buff pozniej niz petla

	move.l	BuffEndAdr(a6),d2

	move.w	d3,d7
	subq	#1,d7
	move.l	124(a3,d1.w),d4
	add.l	(a3,d1.w),d4
	add.l	(a0,d1.w),d4

	move.l	(a3,d1.w),d0
	add.l	(a0,d1.w),d0
	bra.s	copy_loop3EBML2
copy_loop4EBML2:
	move.l	d0,a5
copy_loop3EBML2:
	cmp.l	d4,a5
	bge.s	copy_loop4EBML2

	cmp.l	d2,a4
	blt.s	EBMLcont
	move.l	BuffBegAdr(a6),(a6)
	move.l	(a6),a4
EBMLcont
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop3EBML2
	bra.s	MakeLoopEB_done

Copy_ToEndBuff
	exg	d0,d7
	sub.w	d7,d0
	subq	#1,d7
	bsr	copy_loop
	move.l	BuffBegAdr(a6),(a6)
	move.l	(a6),a4
	exg	d0,d7
	subq	#1,d7
	bsr	copy_loop

	move.w	d4,d7
	subq.w	#1,d7
	move.l	124(a3,d1.w),d4
	add.l	(a3,d1.w),d4
	add.l	(a0,d1.w),d4

	move.l	(a3,d1.w),d0
	add.l	(a0,d1.w),d0
copy_loop4EBML:
	move.l	d0,a5
copy_loop3EBML:
	cmp.l	d4,a5
	bge.s	copy_loop4EBML
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop3EBML

MakeLoopEB_done
	move.l	a4,(a6)
	move.l	a5,(a2,d1.w)
	movem.l	(sp)+,d0-d4/a4-a5
	bsr	Replace2
	rts

NoMakeLoop_EB
	sub.l	BuffEndAdr(a6),d2
	move.w	d3,d7
	sub.w	d2,d7
	subq.w	#1,d7
	bsr	copy_loop

	move.l	BuffBegAdr(a6),(a6)
	move.l	(a6),a4

	move.w	d2,d7
	subq.w	#1,d7
	bsr	copy_loop

	move.l	a4,(a6)
	move.l	a5,(a2,d1.w)
	movem.l	(sp)+,d0-d4/a4-a5
	bsr	Replace2
	rts

NotEndBuff_L
	move.l	(a6),a4
	move.l	a5,d7
	add.l	d3,d7

	cmp.l	d4,d7
	ble.s	NoMakeLoop

	sub.l	d4,d7
	move.w	d7,d4
	move.w	d3,d7
	sub.w	d4,d7
	subq.w	#1,d7
	bsr	copy_loop

	move.w	d4,d7
	subq.w	#1,d7

	move.l	124(a3,d1.w),d4
	add.l	(a3,d1.w),d4
	add.l	(a0,d1.w),d4

	move.l	(a3,d1.w),d0
	add.l	(a0,d1.w),d0
copy_loop4:
	move.l	d0,a5
copy_loop3:
	cmp.l	d4,a5
	bge.s	copy_loop4
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop3

	move.l	a4,(a6)
	move.l	a5,(a2,d1.w)
	movem.l	(sp)+,d0-d4/a4-a5
	bsr	Replace2
	rts

NoMakeLoop
	move.w	d3,d7
	subq	#1,d7
	bsr	copy_loop
	move.l	a4,(a6)
	move.l	a5,(a2,d1.w)
	movem.l	(sp)+,d0-d4/a4-a5
	bsr	Replace2
	rts

; --------------------------- EffectCommands ---------------------------

EffectCommandsA2:
; effects 9xx, bxx, cxx, dxx, fxx chan A

	move.w	d2,d7
	beq	EffComA2exit
	lsr.w	#8,d7
	clr.b	channelenable
	move.w	d2,d3

	lea	SamoffsetA(a6),a5
	cmp.b	#9,d7
	beq	SampleOffset

	cmp.b	#$b,d7
	beq	SongRepeat

	lea	VolA(a6),a5
	cmp.b	#$c,d7
	beq	SetVolume

	lea	Hex(pc),a5
	cmp.b	#$d,d7
	beq	PattBreak

	cmp.b	#$f,d7
	beq	SetTempo

; effects E0x, E1x, E2x, E6x, E8x, EAx, EBx EEx chan A

	cmp.w	#$e00,d3
	beq.w	OffFilter

	cmp.w	#$e01,d3
	beq.w	OnFilter

	cmp.w	#$e50,d3
	beq.w	OffChannelA

	cmp.w	#$e51,d3
	beq.w	OnChannelA

	move.w	d2,d7
	lsr.w	#4,d7
	move.w	d2,d3

	cmp.b	#$e1,d7
	beq.w	FineSlideUp

	cmp.b	#$e2,d7
	beq.w	FineSlideDown

	lea	loopsdataschanA(a6),a5
	cmp.b	#$e6,d7
	beq.w	Loops

	lea	SamOffsetA(a6),a5
	cmp.b	#$e8,d7
	beq	offsets

	lea	VolA(a6),a5
	cmp.b	#$ea,d7
	beq	FineVolUp

	cmp.b	#$eb,d7
	beq	FineVolDown

	cmp.b	#$ee,d7
	beq	Pause
EffComA2exit
	rts

EffectCommandsB2:
; effects 9xx, bxx, cxx, dxx, fxx chan B

	move.w	d6,d7
	beq	EffComB2exit
	lsr.w	#8,d7
	move.b	#1,channelenable
	move.w	d6,d3

	lea	SamoffsetB(a6),a5
	cmp.b	#9,d7
	beq	SampleOffset

	cmp.b	#$b,d7
	beq	SongRepeat

	lea	VolB(a6),a5
	cmp.b	#$c,d7
	beq	SetVolume

	lea	Hex(pc),a5
	cmp.b	#$d,d7
	beq	PattBreak

	cmp.b	#$f,d7
	beq	SetTempo

; effects E0x, E1x, E2x, E6x, E8x, EAx, EBx EEx chan B

	cmp.w	#$e00,d3
	beq.w	OffFilter

	cmp.w	#$e01,d3
	beq.w	OnFilter

	cmp.w	#$e50,d3
	beq.w	OffChannelB

	cmp.w	#$e51,d3
	beq.w	OnChannelB

	move.w	d6,d7
	lsr.w	#4,d7
	move.w	d6,d3

	cmp.b	#$e1,d7
	beq.w	FineSlideUp

	cmp.b	#$e2,d7
	beq.w	FineSlideDown

	lea	loopsdataschanB(a6),a5
	cmp.b	#$e6,d7
	beq.w	Loops

	lea	SamOffsetB(a6),a5
	cmp.b	#$e8,d7
	beq	offsets

	lea	VolB(a6),a5
	cmp.b	#$ea,d7
	beq	FineVolUp

	cmp.b	#$eb,d7
	beq	FineVolDown

	cmp.b	#$ee,d7
	beq	Pause
EffComB2exit
	rts




EffectCommandsA:
; effects 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, axx, chan A
	move.w	d2,d7
	beq	EffComAexit
	lsr.w	#8,d7
	clr.b	channelenable
	move.w	d2,d3

	cmp.b	#1,d7
	beq.w	PortUp

	cmp.b	#2,d7
	beq.w	PortDown

	lea	GlissandoDatasA(a6),a5
	cmp.b	#3,d7
	beq.w	Glissando

	lea	VibratoDatasA(a6),a5
	cmp.b	#4,d7
	beq.w	Vibrato

	cmp.b	#5,d7
	beq.w	SlideVolGliss

	cmp.b	#6,d7
	beq.w	SlideVolVib

	lea	VolA(a6),a5
	cmp.b	#$a,d7
	beq	SlideVolume

; effects E9x, ECx chan A

	move.w	d2,d7
	lsr.w	#4,d7
	move.w	d2,d3

	lea	RetraceCntA(a6),a5
	cmp.b	#$e9,d7
	beq.w	Retrace

	lea	VolA(a6),a5
	cmp.b	#$ec,d7
	beq	CutSample
EffComAexit
	rts


EffectCommandsB:
; effects 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, axx, chan B
	move.w	d6,d7
	beq	EffComBexit
	lsr.w	#8,d7
	move.b	#1,channelenable
	move.w	d6,d3

	cmp.b	#1,d7
	beq.w	PortUp

	cmp.b	#2,d7
	beq.w	PortDown

	lea	GlissandoDatasB(a6),a5
	cmp.b	#3,d7
	beq.w	Glissando

	lea	VibratoDatasB(a6),a5
	cmp.b	#4,d7
	beq.w	Vibrato

	cmp.b	#5,d7
	beq.w	SlideVolGliss

	cmp.b	#6,d7
	beq.w	SlideVolVib

	lea	VolB(a6),a5
	cmp.b	#$a,d7
	beq	SlideVolume

; effects E9x, ECx chan B

	move.w	d6,d7
	lsr.w	#4,d7
	move.w	d6,d3

	lea	RetraceCntB(a6),a5
	cmp.b	#$e9,d7
	beq.w	Retrace

	lea	VolB(a6),a5
	cmp.b	#$ec,d7
	beq	CutSample
EffComBexit
	rts


channelenable:
	dc.w	0

;------------------------------ effects -------------------------------------

;looppattpos	(a5)
;loopsongpos	1(a5)
;loophowmany	2(a5)

loops:
	cmp.w	#$e60,d3
	bne.s	no_loop
	tst.b	2(a5)
	bne.s	loops_done
	move.b	pattpos(pc),(a5)
	subq.b	#1,(a5)
	move.b	songpos(pc),1(a5)
	bra.s	loops_done
no_loop
	tst.b	2(a5)
	beq.s	storehowmany
	subq.b	#1,2(a5)
	bne.s	no_done
	clr.b	(a5)
	clr.b	1(a5)
	clr.b	2(a5)
	bra.s	loops_done
no_done
	move.b	(a5),pattpos
	move.b	1(a5),songpos
	bra.s	loops_done
storehowmany
	and.b	#$0f,d3
	move.b	d3,2(a5)
	move.b	(a5),pattpos
	move.b	1(a5),songpos
loops_done
	rts

Pause:
	tst.b	PauseEn
	bne.s	no_pause

	moveq	#0,d7
	move.b	d3,d7
	and.b	#$0f,d7
	beq.s	No_pause
	moveq	#0,d3
	move.b	Temp(pc),d3
	mulu	d3,d7
	addq.w	#1,d7
	move.w	d7,PauseVBL
no_pause
	rts

SongRepeat:
	move.b	#-1,pattpos
	moveq	#0,d7
	move.b	d3,d7
	cmp.w	#$7f,d7
	blt.s	songrep_ok
	move.b	#$7f,d7
songrep_ok
	move.b	d7,songpos
	rts

PattBreak:
	moveq	#0,d7
	move.b	d3,d7
	cmp.w	#$63,d7
	blt.s	patt_ok
	move.b	#$63,d7
patt_ok
	cmp.b	#-1,pattpos
	beq.s	NoAddSP
	addq.b	#1,songpos
NoAddSP
	move.b	(a5,d7.w),d7
	move.b	d7,pattpos
	subq.b	#1,pattpos
	rts

SampleOffset:
	moveq	#0,d7
	move.b	(a5),d7
	lsl.w	#8,d7
	lsl.l	#8,d7
	and.w	#$00ff,d3
	lsl.w	#8,d3
	add.w	d3,d7
	tst.b	channelenable
	bne.s	SamOffsChanB
	add.l	d7,(a2,d1.w)
	rts
SamOffsChanB
	add.l	d7,124(a2,d5.w)
	rts


offsets:
	move.b	d3,d7
	and.b	#$0f,d7
	move.b	d7,(a5)
	rts

SetTempo:
	moveq	#0,d7
	move.b	d3,d7
	cmp.w	#$1f,d7
	bgt.s	old_temp
	move.b	d3,temp
	move.b	d3,count
	addq.b	#1,count
old_temp
	rts

OffChannelA:
	bset	#0,OnOffChanA(a6)
	rts
OnChannelA:
	bclr	#0,OnOffChanA(a6)
	rts
OffChannelB:
	bset	#0,OnOffChanB(a6)
	rts
OnChannelB:
	bclr	#0,OnOffChanB(a6)
	rts

OffFilter:
	bclr	#1,$bfe001
	rts
OnFilter:
	bset	#1,$bfe001
	rts



Retrace:
	cmp.b	#1,count
	bne.s	retrno_2
	clr.b	(a5)
retrno_2
	moveq	#0,d7
	move.b	d3,d7
	and.b	#$0f,d7
	subq.b	#1,d7
	cmp.b	(a5),d7
	bne.s	retrno_1

	tst.b	channelenable
	beq.s	retr_chan_a
	move.l	(a0,d5.w),124(a2,d5.w)	; adres sampla
	bra.s	retr_chan_b
retr_chan_a
	move.l	(a0,d1.w),(a2,d1.w)	; adres sampla
retr_chan_b
	clr.b	(a5)
	rts
retrno_1
	addq.b	#1,(a5)
no_retrace_1
	rts

cutsample:
	moveq	#0,d7
	move.b	d3,d7
	and.b	#$0f,d7
	cmp.b	count(pc),d7
	bne.s	no_cut_sam
	clr.b	(a5)
no_cut_sam:
	rts

; ------------- portamento up -------------

PortUp:
	moveq	#0,d7
	move.b	d3,d7

	tst.b	channelenable
	bne.s	PortUp_chan_b

PortUp_chan_a
	tst.b	d7
	bne.s	NoOldPortUpA
	move.b	PortUpOldValA(a6),d7
NoOldPortUpA
	move.b	d7,PortUpOldValA(a6)
	sub.w	d7,d0
	cmp.w	#113,d0
	bge.s	PortUpOkA
	move.w	#113,d0
PortUpOkA
	rts

PortUp_chan_b
	tst.b	d7
	bne.s	NoOldPortUpB
	move.b	PortUpOldValB(a6),d7
NoOldPortUpB
	move.b	d7,PortUpOldValB(a6)
	sub.w	d7,d4
	cmp.w	#113,d4
	bge.s	PortUpOkB
	move.w	#113,d4
PortUpOkB
	rts
NoPortUp:
	rts

; ------------- portamento down -------------
PortDown:
	moveq	#0,d7
	move.b	d3,d7

	tst.b	channelenable
	bne.s	PortDown_chan_b
PortDown_chan_a
	tst.b	d7
	bne.s	NoOldPortDownA
	move.b	PortDownOldValA(a6),d7
NoOldPortDownA
	move.b	d7,PortDownOldValA(a6)
	add.w	d7,d0
	cmp.w	#856,d0
	ble.s	PortDownOkA
	move.w	#856,d0
PortDownOkA
	rts

PortDown_chan_b
	tst.b	d7
	bne.s	NoOldPortDownB
	move.b	PortDownOldValB(a6),d7
NoOldPortDownB
	move.b	d7,PortDownOldValB(a6)
	add.w	d7,d4
	cmp.w	#856,d4
	ble.s	PortDownOkB
	move.w	#856,d4
PortDownOkB
	rts
noPortDown:
	rts

; --------------- set volume  -------------
SetVolume:
	move.b	d3,(a5)
	rts

; --------------- slide volume up -------------
SlideVolume:
	tst.b	d3
	bne.s	NoOldSlideVol
	move.b	2(a5),d3	; Old SlideVolVolue
NoOldSlideVol
	move.b	d3,2(a5)

	moveq	#0,d7
	move.b	d3,d7
	cmp.w	#$10,d7
	blt.s	Voldown
	lsr.b	#4,d7
	add.b	d7,(a5)
	cmp.b	#64,(a5)
	blt.s	Voldone
	move.b	#64,(a5)
	rts
Voldown
	sub.b	d3,(a5)
	tst.b	(a5)
	bgt.s	Voldone
	clr.b	(a5)
Voldone:rts


; --------------- fine slide down -------------
FineSlideDown:
	move.w	d3,d7
	and.w	#$000f,d7

	tst.b	channelenable
	bne.s	FineSlideDownB

	add.w	d7,d0
	cmp.w	#856,d0
	ble.s	FineSlideDownOkA
	move.w	#856,d0
FineSlideDownOkA
	moveq	#0,d2
	rts

FineSlideDownB
	add.w	d7,d4
	cmp.w	#856,d4
	ble.s	FineSlideDownOkB
	move.w	#856,d4
FineSlideDownOkB
	moveq	#0,d6
	rts

; --------------- fine slide up -------------
FineSlideUp:
	move.w	d3,d7
	and.w	#$000f,d7

	tst.b	channelenable
	bne.s	FineSlideUpB

	sub.w	d7,d0
	cmp.w	#113,d0
	bge.s	FineSlideUpOkA
	move.w	#113,d0
FineSlideUpOkA
	moveq	#0,d2
	rts

FineSlideUpB
	sub.w	d7,d4
	cmp.w	#113,d4
	bge.s	FineSlideUpOkB
	move.w	#113,d4
FineSlideUpOkB
	moveq	#0,d6
	rts

; --------------- fine volume up  -------------
FineVolUp:
	move.w	d3,d7
	and.b	#$0f,d7
	add.b	d7,(a5)
	cmp.b	#64,(a5)
	blt.s	FVUOK
	move.b	#64,(a5)
FVUOK
	tst.b	channelenable
	bne.s	FVUClrVolB
	moveq	#0,d2
	rts
FVUClrVolB
	moveq	#0,d6
	rts


; --------------- fine volume down  -------------
FineVolDown:
	move.w	d3,d7
	and.b	#$0f,d7
	sub.b	d7,(a5)
	tst.b	(a5)
	bge.s	FVDOK
	clr.b	(a5)
FVDOK
	tst.b	channelenable
	bne.s	FVDClrVolB
	moveq	#0,d2
	rts
FVDClrVolB
	moveq	#0,d6
NoFVD	rts


; ------------- glissando -------------

;GlissOldValue:		 (a5)
;GlissEnable:		1(a5)
;GlissOldPeriod:	2(a5)
;GlissNewPeriod:	4(a5)

Glissando:
	move.w	d3,d7
	tst.b	d3
	bne.s	NoOLDgliss
	move.b	(a5),d3
NoOLDgliss

	cmp.b	#1,count
	bne.s	NoStore
	move.b	d3,(a5)
NoStore

	tst.w	2(a5)
	beq.w	GlissRTS

	tst.b	channelenable
	bne.s	GlissOK1B

GlissOK1A:
	tst.w	4(a5)
	bne.s	GlissOk2
	move.w	d0,d7
	move.w	d0,4(a5)
	move.w	2(a5),d0
	clr.b	1(a5)
	cmp.w	d0,d7
	beq.s	ClrNP
	bge.w	GlissRTS
	move.b	#1,1(a5)
	rts

GlissOK1B:
	tst.w	4(a5)
	bne.s	GlissOk2
	move.w	d4,d7
	move.w	d4,4(a5)
	move.w	2(a5),d4
	clr.b	1(a5)
	cmp.w	d4,d7
	beq.s	ClrNP
	bge.s	GlissRTS
	move.b	#1,1(a5)
	rts

ClrNP:	clr.w	4(a5)
	rts

GlissOk2:
	move.w	d3,d7
	and.w	#$0ff,d7
	tst.w	4(a5)
	beq.s	Glissrts
	tst.b	1(a5)
	bne.s	Glisssub
	add.w	d7,2(a5)
	move.w	4(a5),d7
	cmp.w	2(a5),d7
	bgt.s	GlissOK3
	move.w	4(a5),2(a5)
	clr.w	4(a5)
GlissOK3:
	tst.b	channelenable
	bne.s	GlissChanB
GlissChanA
	move.w	2(a5),d0
	rts
GlissChanB
	move.w	2(a5),d4
	rts

Glisssub:
	sub.w	d7,2(a5)
	move.w	4(a5),d7
	cmp.w	2(a5),d7
	blt.s	GlissOK3
	move.w	4(a5),2(a5)
	clr.w	4(a5)
	bra.s	GlissOK3

Glissrts:
	rts

SlideVolGliss:
	and.w	#$00ff,d3
	add.w	#$a00,d3
	tst.b	channelenable
	bne.s	SlideChanB
	lea	VolA(a6),a5
	bra.s	DoSlideChan
SlideChanB
	lea	VolB(a6),a5
DoSlideChan
	bsr	SlideVolume

	move.w	#$0300,d3
	tst.b	channelenable
	bne.s	GlissBChan
	lea	GlissandoDatasA(a6),a5
	bra.s	DoGlissChan
GlissBChan
	lea	GlissandoDatasB(a6),a5
DoGlissChan
	bra	Glissando




SlideVolVib:
	and.w	#$00ff,d3
	add.w	#$a00,d3
	tst.b	channelenable
	bne.s	SlideChanBV
	lea	VolA(a6),a5
	bra.s	DoSlideChanV
SlideChanBV
	lea	VolB(a6),a5
DoSlideChanV
	bsr	SlideVolume

	move.w	#$0400,d3
	tst.b	channelenable
	bne.s	VibBChan
	lea	VibratoDatasA(a6),a5
	bra.s	DoVibChan
VibBChan
	lea	VibratoDatasB(a6),a5
DoVibChan
	bra	Vibrato


;VibPeriod	(a5)
;VibValue	2(a5)
;ViboldValue	3(a5)

Vibrato:
	movem.l	d2/d5,-(sp)

	move.w	d4,d2
	tst.b	channelenable
	bne.s	VibCHANB1
	move.w	d0,d2
VibCHANB1
	bsr	VibratoMain
	tst.b	channelenable
	bne.s	VibCHANB2
	move.w	d2,d0
	bra.s	VibMainDone
VibCHANB2
	move.w	d2,d4
VibMainDone
	movem.l	(sp)+,d2/d5
	rts

VibratoMain:
	move.b	d3,d5
	and.b	#$0f,d5
	bne.s	NoNew1
	move.b	3(a5),d5
	and.b	#$0f,d5
	add.b	d5,d3
NoNew1
	move.b	d3,d5
	and.b	#$f0,d5
	bne.s	NoNew2
	move.b	3(a5),d5
	and.b	#$f0,d5
	add.b	d5,d3
NoNew2
	move.w	d3,-(sp)

	move.b	d3,3(a5)

	tst.w	(a5)
	bne.s	NoNewPeriod
	move.w	d2,(a5)
NoNewPeriod

	move.b	d3,d7
	move.b	2(a5),d3
	lsr.w	#2,d3
	and.w	#$1f,d3
	moveq	#0,d5
	move.b	VibSin(pc,d3.w),d5
	mulu	#4,d5
	divu	#6,d5

	move.b	d7,d3
	and.w	#$f,d3
	mulu	d3,d5
	lsr.w	#7,d5

	tst.b	2(a5)
	bmi.s	VibSub
	add.w	d5,d2
	bra.s	VibNext
VibSub:
	sub.w	d5,d2
VibNext:
	move.w	d2,d5
	move.b	d7,d5
	lsr.w	#2,d5
	and.w	#$3c,d5
	add.b	d5,2(a5)
	move.w	(sp)+,d3

	move.b	temp(pc),d7
	subq	#2,d7
	cmp.b	count(pc),d7
	bne.s	NoVibrato

	move.w	(a5),d2
	clr.w	(a5)
NoVibrato
	rts
VibSin:
	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


FindPeriod:
	move.w	d1,d3
	move.w	d2,d4
	sub.w	d0,d1
	sub.w	d0,d2

	tst.w	d1
	bge.s	periodOK1
	muls	#-1,d1
periodOK1
	tst.w	d1
	bge.s	periodOK2
	muls	#-1,d2
periodOK2
	cmp.w	d1,d2
	blt.s	periodOK3
	move.w	d3,d7
	rts
periodOK3
	move.w	d4,d7
periodOK4
	rts

OriginalPeriodA:	dc.w	0
OriginalPeriodB:	dc.w	0

mixing:
	move.w	d0,OriginalPeriodA
	move.w	d4,OriginalPeriodB

	movem.l	d0-d4/a3,-(sp)
	lea	periods(pc),a3
Seek1	cmp.w	(a3)+,d0
	blt.s	Seek1
	move.w	-2(a3),d1
	move.w	-4(a3),d2
	bsr	FindPeriod
	movem.l	(sp)+,d0-d4/a3
	move.w	d7,d0

	movem.l	d0-d4/a3,-(sp)
	lea	periods(pc),a3
Seek2	cmp.w	(a3)+,d4
	blt.s	Seek2
	move.w	d4,d0
	move.w	-2(a3),d1
	move.w	-4(a3),d2
	bsr	FindPeriod
	movem.l	(sp)+,d0-d4/a3
	move.w	d7,d4

	move.l	#35800,d3
	divu	d0,d3
	and.l	#$0000ffff,d3
	add.w	d3,d3

	movem.l	d0-d6/a0-a4,-(sp)

	move.l	(a2,d1.w),a0

	move.l	#35800,d0
	divu	d4,d0
	and.l	#$0000ffff,d0
	add.w	d0,d0
	move.l	124(a2,d5.w),a1

	move.w	d0,d4

	cmp.w	d3,d4
	ble	noreplace

	add.l	d0,124(a2,d5.w)
	exg	d1,d5
	lea	-124(a2),a2

	exg	d3,d4
	exg	d2,d6
	exg	a0,a1
	move.w	d3,leng
	move.b	VolA(a6),d7
	move.b	VolB(a6),VolA(a6)
	move.b	d7,VolB(a6)

	bsr	mix
	lea	124(a2),a2

	movem.l	(sp)+,d0-d6/a0-a4

	move.w	leng(pc),d3
	exg	d0,d4
	bsr	play
	exg	d0,d4
	move.b	VolA(a6),d7
	move.b	VolB(a6),VolA(a6)
	move.b	d7,VolB(a6)

	tst.b	ChangeADR(a6)
	beq.s	nochadr1
	move.l	SamRep2(a6),124(a2,d5.w)
nochadr1:
	move.w	OriginalPeriodA(pc),d0
	move.w	OriginalPeriodB(pc),d4

	cmp.b	#1,MixDon(a6)
	beq.s	offsam1
	rts

offsam1:clr.l	(a2,d1.w)
	clr.l	124(a2,d5.w)
	moveq	#0,d4
	moveq	#0,d5
	moveq	#0,d6
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	clr.b	MixDon(a6)
	rts

noreplace
	add.l	d3,(a2,d1.w)
	bsr	mix

	movem.l	(sp)+,d0-d6/a0-a4

	bsr	play

	tst.b	ChangeADR(a6)
	beq.s	nochadr2
	move.l	SamRep2(a6),(a2,d1.w)
nochadr2:

	move.w	OriginalPeriodA(pc),d0
	move.w	OriginalPeriodB(pc),d4

	cmp.b	#1,MixDon(a6)
	beq.s	offsam1
	rts


; --------------- robot -------------

MakeBuff_ROBOT:
	move.b	#1,MBRpointer(a6)

	tst.l	124(a3,d1.w)
	bne	sampleloop_R

	movem.l	d0-d1/a4-a5,-(sp)
	move.l	BuffMixADR(a6),a4
	move.l	124(a0,d1.w),d0
	add.l	(a0,d1.w),d0
	move.w	d3,d7
	subq	#1,d7
	move.l	(a2,d1.w),a5
	cmp.l	d0,a5
	bgt	realsampleend
	move.l	a5,d1
copy_loop_R:
	cmp.l	d0,a5
	bgt	sampleend
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop_R
	movem.l	(sp)+,d0-d1/a4-a5
	add.l	d3,(a2,d1.w)
	rts

sampleloop_R:
	movem.l	d0-d4/a4-a5,-(sp)
	move.l	124(a3,d1.w),d4
	add.l	(a3,d1.w),d4
	add.l	(a0,d1.w),d4

	move.w	d3,d7
	subq	#1,d7
	move.l	(a2,d1.w),a5
	move.l	BuffMixADR(a6),a4
copy_loop2_R:
	cmp.l	d4,a5
	bge.s	makeloop_R
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop2_R
	movem.l	(sp)+,d0-d4/a4-a5
	add.l	d3,(a2,d1.w)
	rts

makeloop_R:
	move.l	(a3,d1.w),d0
	add.l	(a0,d1.w),d0
copy_loop4_R:
	move.l	d0,a5
copy_loop3_R:
	cmp.l	d4,a5
	bge.s	copy_loop4_R
	move.b	(a5)+,(a4)+
	dbf	d7,copy_loop3_R
	move.l	a5,(a2,d1.w)
	movem.l	(sp)+,d0-d4/a4-a5
	rts

RobotEffect:
	tst.b	RobotEnable(a6)
	bne.s	NoROffCH
	move.b	#1,Offenable(a6)
NoROffCH
	move.b	#1,RobotEnable(a6)
	bsr	MakeBuff_robot
	move.w	d3,MainDTALEN(a6)
	bsr	RobotMain
	bsr	Replace_R
	rts

RobotMain:
	tst.b	d2
	bne.s	NoOldRobot
	move.b	RobotOLDVal(a6),d2
NoOldRobot
	move.b	d2,RobotOLDVal(a6)

	moveq	#0,d7
	move.b	d2,d7
	add.w	#80,d7

	move.w	d3,d4
	lsr.w	#6,d4
	lsr.w	#2,d7
	mulu	d7,d4

	cmp.w	d4,d3
	ble.s	CLRrobot
	sub.w	d4,d3
	addq	#1,d3
	bra.s	NoRobot
CLRrobot:
	moveq	#2,d3
NoRobot:
	moveq	#0,d4
	rts


play:	move.w	d0,MainPeriod(a6)
	move.b	#$40,MainVol(a6)
	rts

db_end:
	move.w	#$f,$dff096
	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	rts

mix:
	move.b	#1,MBRpointer(a6)

	cmp.b	#1,OffEnable(a6)
	bne.w	NoSet3OnEn

	cmp.w	d3,d4
	beq.s	NoSet2OnEn

	cmp.w	MainDTALEN(a6),d3
	beq.s	NoSet3OnEn
	move.b	#1,OffEnable(a6)
	bra.s	NoSet2OnEn
NoSet3OnEn

	cmp.b	#2,OffEnable(a6)	; jesli jedn. dwa mix sampl. to wait
	bne.w	NoSet1OnEn
	move.b	#1,OffEnable(a6)
	bra.s	NoSet2OnEn
NoSet1OnEn
	clr.b	OffEnable(a6)
	tst.b	PlayPointer(a6)
	beq.s	NoSet2OnEn
	clr.b	PlayPointer(a6)
	move.b	#1,OffEnable(a6)
NoSet2OnEn

	move.w	d3,MainDTALEN(a6)

	movem.l	d5/a2,-(sp)
	lea	sample_starts(pc),a4
	lea	(a3),a5			; smaple repeats

******
	lea	mix_tab1,a3
	move.l	BuffMixADR(a6),a2

	move.w	d3,d0
	mulu	#18,d0
	add.l	d0,a3
	move.l	(a3,d4.w),a3

	move.w	d4,d2
	move.w	d3,d7
	subq	#1,d7
******

	tst.l	124(a5,d1.w)
	beq.s	nosamloop2
	move.l	(a5,d1.w),d4
	add.l	124(a5,d1.w),d4
	add.l	(a4,d1.w),d4

	tst.l	124(a5,d5.w)
	bne.s	doubleloop
	bra	samloopmix2
doubleloop
	move.l	(a5,d5.w),d6
	add.l	124(a5,d5.w),d6
	add.l	(a4,d5.w),d6
	bra	samloopmix3
nosamloop2:

	move.l	124(a4,d1.w),d4
	add.l	(a4,d1.w),d4

	tst.l	124(a5,d5.w)
	beq.s	nosamloop1
	move.l	(a5,d5.w),d6
	add.l	124(a5,d5.w),d6
	add.l	(a4,d5.w),d6
	bra	samloopmix1
nosamloop1:

	move.l	124(a4,d5.w),d6
	add.l	(a4,d5.w),d6
	move.l	d6,d5

; -------------- mixing norm. sample + norm. sample

	moveq	#0,d0
	moveq	#0,d1
	move.b	VolA(a6),d0
	move.b	VolB(a6),d1
	lsl.w	#8,d0
	lsl.w	#8,d1
	lea	voltab,a4
	lea	voltab,a5
	add.l	d0,a4
	add.l	d1,a5

	cmp.l	d4,a0
	bge.w	sammixloop1_11

	cmp.l	d5,a1
	bge.w	sammixloop1_111

	move.l	a0,d0
	add.l	d3,d0
	cmp.l	d4,d0
	bge.w	sammixloop1_1111

	move.l	a1,d1
	add.l	d2,d1
	cmp.l	d5,d1
	bge.w	sammixloop1_1111

sammixloop1_1:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6
mixloop1_1:

	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	tst.b	(a3)+
	bne.s	newdata1_1

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_1
	bra	mixdone

newdata1_1
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_1
	bra	mixdone

;				 test d5,a1

sammixloop1_11:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6
mixloop1_11:
	tst.b	(a3)+
	bne.s	newdata1_11

	move.b	d2,(a2)+

	dbf	d7,mixloop1_11
	bra	mixdone

newdata1_11
	cmp.l	a1,d5
	bgt.s	mixgoon2_11

	moveq	#0,d2
	move.b	d2,(a2)+

	dbf	d7,mixloop1_11
	bra	mixdone
mixgoon2_11
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2
	move.b	d2,(a2)+

	dbf	d7,mixloop1_11
	bra	mixdone

;				 test d4,a0

sammixloop1_111:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6

mixloop1_111:
	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_111

	clr.b	(a2)+

	dbf	d7,mixloop1_111
	bra	mixdone

mixgoon1_111
	move.b	d1,(a2)+

	dbf	d7,mixloop1_111
	bra	mixdone

;				 test d4,a0,	 d5,a1

sammixloop1_1111:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6
mixloop1_1111:

	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_1111

	moveq	#0,d1
mixgoon1_1111

	tst.b	(a3)+
	bne.s	newdata1_1111

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_1111
	bra	mixdone

newdata1_1111
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	cmp.l	a1,d5
	bgt.s	mixgoon2_1111
	moveq	#0,d2

	move.b	d1,(a2)+

	dbf	d7,mixloop1_1111
	bra	mixdone
mixgoon2_1111

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_1111
	bra	mixdone

; -------------- mixing norm. sample + loop. sample

samloopmix1:
	move.l	(a5,d5.w),d0
	add.l	(a4,d5.w),d0
	move.l	d0,SamRep1(a6)
	move.l	d6,d5

	moveq	#0,d0
	moveq	#0,d1
	move.b	VolA(a6),d0
	move.b	VolB(a6),d1
	lsl.w	#8,d0
	lsl.w	#8,d1
	lea	voltab,a4
	lea	voltab,a5
	add.l	d0,a4
	add.l	d1,a5

	cmp.l	a0,d4
	blt.w	sammixloop1_22

	move.l	a0,d0
	add.l	d3,d0
	cmp.l	d4,d0
	bge.w	sammixloop1_2

	move.l	a1,d1
	add.l	d2,d1
	cmp.l	d5,d1
	bge.w	sammixloop1_2

	bra	sammixloop1_1

sammixloop1_2:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6

mixloop1_2:
	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_2

	moveq	#0,d1
mixgoon1_2

	tst.b	(a3)+
	bne.s	newdata1_2

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_2
	bra	mixdone


newdata1_2
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	cmp.l	a1,d5
	bgt.s	mixgoon2_2

	move.l	SamRep1(a6),a1	; samrep1
mixgoon2_2

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_2
	bra	mixdone



sammixloop1_22:
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6
mixloop1_22:
	tst.b	(a3)+
	bne.s	newdata1_22

	move.b	d2,(a2)+

	dbf	d7,mixloop1_22
	bra	mixdone

newdata1_22
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	cmp.l	a1,d5
	bgt.s	mixgoon2_22
	move.l	SamRep1(a6),a1	; samrep1
mixgoon2_22
	move.b	d2,(a2)+

	dbf	d7,mixloop1_22
	bra	mixdone

; -------------- mixing loop. sample + norm. sample

samloopmix2:
	move.l	124(a4,d5.w),d6
	add.l	(a4,d5.w),d6
	move.l	d6,d5

	move.l	(a5,d1.w),d0
	add.l	(a4,d1.w),d0
	move.l	d0,SamRep2(a6)

	moveq	#0,d0
	moveq	#0,d1
	move.b	VolA(a6),d0
	move.b	VolB(a6),d1
	lsl.w	#8,d0
	lsl.w	#8,d1
	lea	voltab,a4
	lea	voltab,a5
	add.l	d0,a4
	add.l	d1,a5

	cmp.l	a1,d5
	blt.w	sammixloop1_33

	move.l	a0,d0
	add.l	d3,d0
	cmp.l	d4,d0
	bge.w	sammixloop1_3

	move.l	a1,d1
	add.l	d2,d1
	cmp.l	d5,d1
	bge.w	sammixloop1_3

	bra	sammixloop1_1
sammixloop1_3
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6

mixloop1_3:
	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_3

	move.l	SamRep2(a6),a0
	move.b	#1,ChangeADR(a6)
mixgoon1_3

	tst.b	(a3)+
	bne.s	newdata1_3

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_3
	bra	mixdone


newdata1_3
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	cmp.l	a1,d5
	bgt.s	mixgoon2_3

	moveq	#0,d2

	move.b	d1,(a2)+

	dbf	d7,mixloop1_3
	bra	mixdone

mixgoon2_3

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_3
	bra	mixdone


sammixloop1_33
	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6
mixloop1_33:
	move.b	(a0)+,d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_33

	move.l	SamRep2(a6),a0
	move.b	#1,ChangeADR(a6)
mixgoon1_33
	move.b	(a4,d1.w),(a2)+

	dbf	d7,mixloop1_33
	bra	mixdone

; -------------- mixing loop. sample + loop. sample

samloopmix3:
	move.l	(a5,d5.w),d0
	add.l	(a4,d5.w),d0
	move.l	d0,SamRep1(a6)

	move.l	(a5,d1.w),d0
	add.l	(a4,d1.w),d0
	move.l	d0,SamRep2(a6)

	move.l	d6,d5

	moveq	#0,d0
	moveq	#0,d1
	move.b	VolA(a6),d0
	move.b	VolB(a6),d1
	lsl.w	#8,d0
	lsl.w	#8,d1
	lea	voltab,a4
	lea	voltab,a5
	add.l	d0,a4
	add.l	d1,a5

	moveq	#0,d0
	moveq	#0,d1
	moveq	#0,d2
	moveq	#0,d6

mixloop1_4:
	move.b	(a0)+,d1
	move.b	(a4,d1.w),d1

	cmp.l	a0,d4
	bgt.s	mixgoon1_4
	move.l	SamRep2(a6),a0
	move.b	#1,ChangeADR(a6)
mixgoon1_4

	tst.b	(a3)+
	bne.s	newdata1_4

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_4
	bra	mixdone

newdata1_4
	move.b	(a1)+,d2
	move.b	(a5,d2.w),d2

	cmp.l	a1,d5
	bgt.s	mixgoon2_4

	move.l	SamRep1(a6),a1
mixgoon2_4

	add.b	d2,d1
	move.b	d1,(a2)+

	dbf	d7,mixloop1_4
	bra	mixdone

; -------------------------------------------------- 

mixdone:
	lea	MixDon(a6),a4
	cmp.l	a0,d4
	bge.s	notyet3
	move.b	#3,(a4)
notyet3
	cmp.l	a1,d5
	bge.s	notyet2
	move.b	#2,(a4)
notyet2
	cmp.l	a1,d5
	bge.s	notyet1
	cmp.l	a0,d4
	bge.s	notyet1
	move.b	#1,(a4)
notyet1
	movem.l	(sp)+,d5/a2
	move.l	a0,SamRep2(a6)
	move.l	a1,124(a2,d5.w)
	rts

leng:		dc.w	0
what:		dc.w	0
hisam:		dc.b	0
offset:		dc.b	0
		even

; Channel 1A&1B
Channel1:	blk.b	ChanArea,0
; Channel 2A&2B datas
Channel2:	blk.b	ChanArea,0
; Channel 3A&3B datas
Channel3:	blk.b	ChanArea,0
; Channel 4A&4B datas
Channel4:	blk.b	ChanArea,0
	even
make_tab:
	lea	tab(pc),a0
	lea	mix_tab1,a3
	lea	mix_tab2,a1
	moveq	#12,d6
	moveq	#1,d2
make_loop2:
	moveq	#0,d0
	moveq	#0,d1
	move.w	(a0)+,d0
	move.w	(a0)+,d1

	cmp.w	#-1,d0
	beq.s	make_exit

	move.l	#35800,d3
	divu	d0,d3
	add.w	d3,d3
	move.w	d3,d0

	move.l	#35800,d3
	divu	d1,d3
	add.w	d3,d3
	move.w	d3,d1

	lea	(a1),a2
	move.w	d0,d7
	lsr.w	#2,d7
	moveq	#0,d4
make_clr:
	move.l	d4,(a2)+
	dbf	d7,make_clr

	move.w	d0,d3
	mulu	#18,d3
	add.l	d3,a3
	move.l	a1,(a3,d1.w)
	sub.l	d3,a3

	moveq	#0,d3
	move.w	d1,d7
	add.w	#20,d7
	move.w	d0,d5
	lsl.l	d6,d0
	divu	d1,d0
make_loop:
	move.w	d0,d4
	mulu	d3,d4
	lsr.l	d6,d4
	move.b	d2,(a1,d4.w)
	addq	#1,d3
	dbf	d7,make_loop

	add.l	d5,a1
	bra.s	make_loop2
make_exit
	rts

make_voltab:
	lea	voltab,a0
	moveq	#0,d2
	move.w	#128,d3

	moveq	#64,d6
make_voltabl2
	move.w	#$ff,d7
	moveq	#0,d0
make_voltabl1
	move.b	d0,d1
	ext.w	d1
	muls	d2,d1
	divs	d3,d1
	cmp.b	#63,d1
	blt.s	make_volok1
	moveq	#63,d1
make_volok1
	cmp.b	#-64,d1
	bgt.s	make_volok2
	moveq	#-64,d1
make_volok2
	move.b	d1,(a0)+
	addq	#1,d0
	dbf	d7,make_voltabl1
	addq	#2,d2
	dbf	d6,make_voltabl2
	rts


PattAdresses:
	blk.l	129,0
sample_starts:
	blk.l	31,0
sample_lenghts:
	blk.l	31,0

sample_pos1:
	blk.l	31,0
	blk.l	31,0
sample_pos2:
	blk.l	31,0
	blk.l	31,0
sample_pos3:
	blk.l	31,0
	blk.l	31,0
sample_pos4:
	blk.l	31,0
	blk.l	31,0
Hex:
 dc.b	0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,10,11,12,13,14,15,16,17,18,19
 dc.b	0,0,0,0,0,0,20,21,22,23,24,25,26,27,28,29,0,0,0,0,0,0,30,31
 dc.b	32,33,34,35,36,37,38,39,0,0,0,0,0,0,40,41,42,43,44,45,46,47
 dc.b	48,49,0,0,0,0,0,0,50,51,52,53,54,55,56,57,58,59,0,0,0,0,0,0
 dc.b	60,61,62,63
Periods:
 dc.w 856,808,762,720,678,640,604,570,538,508,480,453
 dc.w 428,404,381,360,339,320,302,285,269,254,240,226
 dc.w 214,202,190,180,170,160,151,143,135,127,120,113
PeriodsEnd:
 dc.w 1

tab:
	dc.w	113,856
	dc.w	113,808
	dc.w	113,762
	dc.w	113,720
	dc.w	113,678
	dc.w	113,640
	dc.w	113,604
	dc.w	113,570
	dc.w	113,538
	dc.w	113,508
	dc.w	113,480
	dc.w	113,453
	dc.w	113,428
	dc.w	113,404
	dc.w	113,381
	dc.w	113,360
	dc.w	113,339
	dc.w	113,320
	dc.w	113,302
	dc.w	113,285
	dc.w	113,269
	dc.w	113,254
	dc.w	113,240
	dc.w	113,226
	dc.w	113,214
	dc.w	113,202
	dc.w	113,190
	dc.w	113,180
	dc.w	113,170
	dc.w	113,160
	dc.w	113,151
	dc.w	113,143
	dc.w	113,135
	dc.w	113,127
	dc.w	113,120
	dc.w	113,113

	dc.w	120,856
	dc.w	120,808
	dc.w	120,762
	dc.w	120,720
	dc.w	120,678
	dc.w	120,640
	dc.w	120,604
	dc.w	120,570
	dc.w	120,538
	dc.w	120,508
	dc.w	120,480
	dc.w	120,453
	dc.w	120,428
	dc.w	120,404
	dc.w	120,381
	dc.w	120,360
	dc.w	120,339
	dc.w	120,320
	dc.w	120,302
	dc.w	120,285
	dc.w	120,269
	dc.w	120,254
	dc.w	120,240
	dc.w	120,226
	dc.w	120,214
	dc.w	120,202
	dc.w	120,190
	dc.w	120,180
	dc.w	120,170
	dc.w	120,160
	dc.w	120,151
	dc.w	120,143
	dc.w	120,135
	dc.w	120,127
	dc.w	120,120

	dc.w	127,856
	dc.w	127,808
	dc.w	127,762
	dc.w	127,720
	dc.w	127,678
	dc.w	127,640
	dc.w	127,604
	dc.w	127,570
	dc.w	127,538
	dc.w	127,508
	dc.w	127,480
	dc.w	127,453
	dc.w	127,428
	dc.w	127,404
	dc.w	127,381
	dc.w	127,360
	dc.w	127,339
	dc.w	127,320
	dc.w	127,302
	dc.w	127,285
	dc.w	127,269
	dc.w	127,254
	dc.w	127,240
	dc.w	127,226
	dc.w	127,214
	dc.w	127,202
	dc.w	127,190
	dc.w	127,180
	dc.w	127,170
	dc.w	127,160
	dc.w	127,151
	dc.w	127,143
	dc.w	127,135
	dc.w	127,127

	dc.w	135,856
	dc.w	135,808
	dc.w	135,762
	dc.w	135,720
	dc.w	135,678
	dc.w	135,640
	dc.w	135,604
	dc.w	135,570
	dc.w	135,538
	dc.w	135,508
	dc.w	135,480
	dc.w	135,453
	dc.w	135,428
	dc.w	135,404
	dc.w	135,381
	dc.w	135,360
	dc.w	135,339
	dc.w	135,320
	dc.w	135,302
	dc.w	135,285
	dc.w	135,269
	dc.w	135,254
	dc.w	135,240
	dc.w	135,226
	dc.w	135,214
	dc.w	135,202
	dc.w	135,190
	dc.w	135,180
	dc.w	135,170
	dc.w	135,160
	dc.w	135,151
	dc.w	135,143
	dc.w	135,135

	dc.w	143,856
	dc.w	143,808
	dc.w	143,762
	dc.w	143,720
	dc.w	143,678
	dc.w	143,640
	dc.w	143,604
	dc.w	143,570
	dc.w	143,538
	dc.w	143,508
	dc.w	143,480
	dc.w	143,453
	dc.w	143,428
	dc.w	143,404
	dc.w	143,381
	dc.w	143,360
	dc.w	143,339
	dc.w	143,320
	dc.w	143,302
	dc.w	143,285
	dc.w	143,269
	dc.w	143,254
	dc.w	143,240
	dc.w	143,226
	dc.w	143,214
	dc.w	143,202
	dc.w	143,190
	dc.w	143,180
	dc.w	143,170
	dc.w	143,160
	dc.w	143,151
	dc.w	143,143

	dc.w	151,856
	dc.w	151,808
	dc.w	151,762
	dc.w	151,720
	dc.w	151,678
	dc.w	151,640
	dc.w	151,604
	dc.w	151,570
	dc.w	151,538
	dc.w	151,508
	dc.w	151,480
	dc.w	151,453
	dc.w	151,428
	dc.w	151,404
	dc.w	151,381
	dc.w	151,360
	dc.w	151,339
	dc.w	151,320
	dc.w	151,302
	dc.w	151,285
	dc.w	151,269
	dc.w	151,254
	dc.w	151,240
	dc.w	151,226
	dc.w	151,214
	dc.w	151,202
	dc.w	151,190
	dc.w	151,180
	dc.w	151,170
	dc.w	151,160
	dc.w	151,151

	dc.w	160,856
	dc.w	160,808
	dc.w	160,762
	dc.w	160,720
	dc.w	160,678
	dc.w	160,640
	dc.w	160,604
	dc.w	160,570
	dc.w	160,538
	dc.w	160,508
	dc.w	160,480
	dc.w	160,453
	dc.w	160,428
	dc.w	160,404
	dc.w	160,381
	dc.w	160,360
	dc.w	160,339
	dc.w	160,320
	dc.w	160,302
	dc.w	160,285
	dc.w	160,269
	dc.w	160,254
	dc.w	160,240
	dc.w	160,226
	dc.w	160,214
	dc.w	160,202
	dc.w	160,190
	dc.w	160,180
	dc.w	160,170
	dc.w	160,160

	dc.w	170,856
	dc.w	170,808
	dc.w	170,762
	dc.w	170,720
	dc.w	170,678
	dc.w	170,640
	dc.w	170,604
	dc.w	170,570
	dc.w	170,538
	dc.w	170,508
	dc.w	170,480
	dc.w	170,453
	dc.w	170,428
	dc.w	170,404
	dc.w	170,381
	dc.w	170,360
	dc.w	170,339
	dc.w	170,320
	dc.w	170,302
	dc.w	170,285
	dc.w	170,269
	dc.w	170,254
	dc.w	170,240
	dc.w	170,226
	dc.w	170,214
	dc.w	170,202
	dc.w	170,190
	dc.w	170,180
	dc.w	170,170

	dc.w	180,856
	dc.w	180,808
	dc.w	180,762
	dc.w	180,720
	dc.w	180,678
	dc.w	180,640
	dc.w	180,604
	dc.w	180,570
	dc.w	180,538
	dc.w	180,508
	dc.w	180,480
	dc.w	180,453
	dc.w	180,428
	dc.w	180,404
	dc.w	180,381
	dc.w	180,360
	dc.w	180,339
	dc.w	180,320
	dc.w	180,302
	dc.w	180,285
	dc.w	180,269
	dc.w	180,254
	dc.w	180,240
	dc.w	180,226
	dc.w	180,214
	dc.w	180,202
	dc.w	180,190
	dc.w	180,180

	dc.w	190,856
	dc.w	190,808
	dc.w	190,762
	dc.w	190,720
	dc.w	190,678
	dc.w	190,640
	dc.w	190,604
	dc.w	190,570
	dc.w	190,538
	dc.w	190,508
	dc.w	190,480
	dc.w	190,453
	dc.w	190,428
	dc.w	190,404
	dc.w	190,381
	dc.w	190,360
	dc.w	190,339
	dc.w	190,320
	dc.w	190,302
	dc.w	190,285
	dc.w	190,269
	dc.w	190,254
	dc.w	190,240
	dc.w	190,226
	dc.w	190,214
	dc.w	190,202
	dc.w	190,190

	dc.w	202,856
	dc.w	202,808
	dc.w	202,762
	dc.w	202,720
	dc.w	202,678
	dc.w	202,640
	dc.w	202,604
	dc.w	202,570
	dc.w	202,538
	dc.w	202,508
	dc.w	202,480
	dc.w	202,453
	dc.w	202,428
	dc.w	202,404
	dc.w	202,381
	dc.w	202,360
	dc.w	202,339
	dc.w	202,320
	dc.w	202,302
	dc.w	202,285
	dc.w	202,269
	dc.w	202,254
	dc.w	202,240
	dc.w	202,226
	dc.w	202,214
	dc.w	202,202

	dc.w	214,856
	dc.w	214,808
	dc.w	214,762
	dc.w	214,720
	dc.w	214,678
	dc.w	214,640
	dc.w	214,604
	dc.w	214,570
	dc.w	214,538
	dc.w	214,508
	dc.w	214,480
	dc.w	214,453
	dc.w	214,428
	dc.w	214,404
	dc.w	214,381
	dc.w	214,360
	dc.w	214,339
	dc.w	214,320
	dc.w	214,302
	dc.w	214,285
	dc.w	214,269
	dc.w	214,254
	dc.w	214,240
	dc.w	214,226
	dc.w	214,214

	dc.w	226,856
	dc.w	226,808
	dc.w	226,762
	dc.w	226,720
	dc.w	226,678
	dc.w	226,640
	dc.w	226,604
	dc.w	226,570
	dc.w	226,538
	dc.w	226,508
	dc.w	226,480
	dc.w	226,453
	dc.w	226,428
	dc.w	226,404
	dc.w	226,381
	dc.w	226,360
	dc.w	226,339
	dc.w	226,320
	dc.w	226,302
	dc.w	226,285
	dc.w	226,269
	dc.w	226,254
	dc.w	226,240
	dc.w	226,226

	dc.w	240,856
	dc.w	240,808
	dc.w	240,762
	dc.w	240,720
	dc.w	240,678
	dc.w	240,640
	dc.w	240,604
	dc.w	240,570
	dc.w	240,538
	dc.w	240,508
	dc.w	240,480
	dc.w	240,453
	dc.w	240,428
	dc.w	240,404
	dc.w	240,381
	dc.w	240,360
	dc.w	240,339
	dc.w	240,320
	dc.w	240,302
	dc.w	240,285
	dc.w	240,269
	dc.w	240,254
	dc.w	240,240

	dc.w	254,856
	dc.w	254,808
	dc.w	254,762
	dc.w	254,720
	dc.w	254,678
	dc.w	254,640
	dc.w	254,604
	dc.w	254,570
	dc.w	254,538
	dc.w	254,508
	dc.w	254,480
	dc.w	254,453
	dc.w	254,428
	dc.w	254,404
	dc.w	254,381
	dc.w	254,360
	dc.w	254,339
	dc.w	254,320
	dc.w	254,302
	dc.w	254,285
	dc.w	254,269
	dc.w	254,254

	dc.w	269,856
	dc.w	269,808
	dc.w	269,762
	dc.w	269,720
	dc.w	269,678
	dc.w	269,640
	dc.w	269,604
	dc.w	269,570
	dc.w	269,538
	dc.w	269,508
	dc.w	269,480
	dc.w	269,453
	dc.w	269,428
	dc.w	269,404
	dc.w	269,381
	dc.w	269,360
	dc.w	269,339
	dc.w	269,320
	dc.w	269,302
	dc.w	269,285
	dc.w	269,269

	dc.w	285,856
	dc.w	285,808
	dc.w	285,762
	dc.w	285,720
	dc.w	285,678
	dc.w	285,640
	dc.w	285,604
	dc.w	285,570
	dc.w	285,538
	dc.w	285,508
	dc.w	285,480
	dc.w	285,453
	dc.w	285,428
	dc.w	285,404
	dc.w	285,381
	dc.w	285,360
	dc.w	285,339
	dc.w	285,320
	dc.w	285,302
	dc.w	285,285

	dc.w	302,856
	dc.w	302,808
	dc.w	302,762
	dc.w	302,720
	dc.w	302,678
	dc.w	302,640
	dc.w	302,604
	dc.w	302,570
	dc.w	302,538
	dc.w	302,508
	dc.w	302,480
	dc.w	302,453
	dc.w	302,428
	dc.w	302,404
	dc.w	302,381
	dc.w	302,360
	dc.w	302,339
	dc.w	302,320
	dc.w	302,302

	dc.w	320,856
	dc.w	320,808
	dc.w	320,762
	dc.w	320,720
	dc.w	320,678
	dc.w	320,640
	dc.w	320,604
	dc.w	320,570
	dc.w	320,538
	dc.w	320,508
	dc.w	320,480
	dc.w	320,453
	dc.w	320,428
	dc.w	320,404
	dc.w	320,381
	dc.w	320,360
	dc.w	320,339
	dc.w	320,320

	dc.w	339,856
	dc.w	339,808
	dc.w	339,762
	dc.w	339,720
	dc.w	339,678
	dc.w	339,640
	dc.w	339,604
	dc.w	339,570
	dc.w	339,538
	dc.w	339,508
	dc.w	339,480
	dc.w	339,453
	dc.w	339,428
	dc.w	339,404
	dc.w	339,381
	dc.w	339,360
	dc.w	339,339

	dc.w	360,856
	dc.w	360,808
	dc.w	360,762
	dc.w	360,720
	dc.w	360,678
	dc.w	360,640
	dc.w	360,604
	dc.w	360,570
	dc.w	360,538
	dc.w	360,508
	dc.w	360,480
	dc.w	360,453
	dc.w	360,428
	dc.w	360,404
	dc.w	360,381
	dc.w	360,360

	dc.w	381,856
	dc.w	381,808
	dc.w	381,762
	dc.w	381,720
	dc.w	381,678
	dc.w	381,640
	dc.w	381,604
	dc.w	381,570
	dc.w	381,538
	dc.w	381,508
	dc.w	381,480
	dc.w	381,453
	dc.w	381,428
	dc.w	381,404
	dc.w	381,381

	dc.w	404,856
	dc.w	404,808
	dc.w	404,762
	dc.w	404,720
	dc.w	404,678
	dc.w	404,640
	dc.w	404,604
	dc.w	404,570
	dc.w	404,538
	dc.w	404,508
	dc.w	404,480
	dc.w	404,453
	dc.w	404,428
	dc.w	404,404

	dc.w	428,856
	dc.w	428,808
	dc.w	428,762
	dc.w	428,720
	dc.w	428,678
	dc.w	428,640
	dc.w	428,604
	dc.w	428,570
	dc.w	428,538
	dc.w	428,508
	dc.w	428,480
	dc.w	428,453
	dc.w	428,428

	dc.w	453,856
	dc.w	453,808
	dc.w	453,762
	dc.w	453,720
	dc.w	453,678
	dc.w	453,640
	dc.w	453,604
	dc.w	453,570
	dc.w	453,538
	dc.w	453,508
	dc.w	453,480
	dc.w	453,453

	dc.w	480,856
	dc.w	480,808
	dc.w	480,762
	dc.w	480,720
	dc.w	480,678
	dc.w	480,640
	dc.w	480,604
	dc.w	480,570
	dc.w	480,538
	dc.w	480,508
	dc.w	480,480

	dc.w	508,856
	dc.w	508,808
	dc.w	508,762
	dc.w	508,720
	dc.w	508,678
	dc.w	508,640
	dc.w	508,604
	dc.w	508,570
	dc.w	508,538
	dc.w	508,508

	dc.w	538,856
	dc.w	538,808
	dc.w	538,762
	dc.w	538,720
	dc.w	538,678
	dc.w	538,640
	dc.w	538,604
	dc.w	538,570
	dc.w	538,538

	dc.w	570,856
	dc.w	570,808
	dc.w	570,762
	dc.w	570,720
	dc.w	570,678
	dc.w	570,640
	dc.w	570,604
	dc.w	570,570

	dc.w	604,856
	dc.w	604,808
	dc.w	604,762
	dc.w	604,720
	dc.w	604,678
	dc.w	604,640
	dc.w	604,604

	dc.w	640,856
	dc.w	640,808
	dc.w	640,762
	dc.w	640,720
	dc.w	640,678
	dc.w	640,640

	dc.w	678,856
	dc.w	678,808
	dc.w	678,762
	dc.w	678,720
	dc.w	678,678

	dc.w	720,856
	dc.w	720,808
	dc.w	720,762
	dc.w	720,720

	dc.w	762,856
	dc.w	762,808
	dc.w	762,762

	dc.w	808,856
	dc.w	808,808

	dc.w	856,856
	dc.w	$ffff
endtab

	Section	bufors,bss_c

sample_buff1_4:
	ds.b	BuffSize+4
sample_buff1_1:
	ds.b	BuffSize+4
sample_buff1_2:
	ds.b	BuffSize+4
sample_buff1_3:
	ds.b	BuffSize+4

sample_buff1_MIX:
	ds.b	640*3
sample_buff2_MIX:
	ds.b	640*3
sample_buff3_MIX:
	ds.b	640*3
sample_buff4_MIX:
	ds.b	640*3

	Section	tabs,bss_p

mix_tab1:	ds.b	$3000
mix_tab2:	ds.b	239130
voltab:		ds.b	16720

	Section	module,data_p

module:	incbin	"df0:modules/rave base.digi"
