;************************************************
;*	Friendly non-system startup routine	*
;*    Made as help to demo and game creaters	*
;*						*
;*  ASM-One example coded by Rune Gram-Madsen	*
;*						*
;*   All rights reserved. Copyright (c) 1990	*
;************************************************

;*****************
;*   Constants   *
;*****************

OldOpenLibrary	= -408
CloseLibrary	= -414
Exit		= -144
Execute		= -222

DMASET=	%1000010111101111
;	 -----a-bcdefghij

;	a: Blitter Nasty
;	b: Bitplane DMA (if this isn't set, sprites disappear!)
;	c: Copper DMA
;	d: Blitter DMA
;	e: Sprite DMA
;	f: Disk DMA
;	g-j: Audio 3-0 DMA

START:
	MOVEM.L	D0-D7/A0-A6,-(A7)	; Put registers on stack
;***********************************
;*   CLOSE ALL SYSTEM INTERRUPTS   *
;*                                 *
;*      START DEMO INTERRUPTS      *
;***********************************
	MOVE.L	$4.W,A6			; Exec pointer to A6
	LEA.L	GfxName(PC),A1		; Set library pointer
	MOVEQ	#0,D0
	JSR	OldOpenLibrary(A6)	; Open graphics.library
	MOVE.L	D0,A1			; Use Base-pointer
	MOVE.L	$26(A1),OLDCOP1		; Store copper1 start addr
	MOVE.L	$32(A1),OLDCOP2		; Store copper1 start addr
	JSR	CloseLibrary(A6)	; Close graphics library

	LEA	$DFF000,A6
	MOVE.W	$1C(A6),INTENA		; Store old INTENA
	MOVE.W	$2(A6),DMACON		; Store old DMACON
	MOVE.W	$10(A6),ADKCON		; Store old ADKCON

	MOVE.W	#$7FFF,$9A(A6)		; Clear interrupt enable

	BSR.L	Wait_Vert_Blank

	MOVE.W	#$7FFF,$96(A6)		; Clear DMA channels
	MOVE.L	#COPLIST,$80(A6)	; Copper1 start address
	MOVE.W	#DMASET!$8200,$96(A6)	; DMA kontrol data
	MOVE.L	$6C.W,OldInter		; Store old inter pointer
	MOVE.L	#INTER,$6C.W		; Set interrupt pointer

	MOVE.W	#$7FFF,$9C(A6)		; Clear request
	MOVE.W	#$c020,$9A(A6)		; Interrupt enable


;****       Your main routine      ****
	move.l	#pr_data, pr_module
	bsr	pr_init
	bsr	write
	lea	$dff000, a6
	move.l	#ss, d0
	move.w	d0, B2l
	swap	d0
	move.w	d0, B2h

	MOVE.L	#logo, d0
	move.w	d0,p1l
	swap	d0
	move.w	d0,p1H
	swap	d0	
	add.l	#40, d0
	move.w	d0,p2l
	swap	d0
	move.w	d0,p2H
	swap	d0
	add.l	#40, d0
	move.w	d0,p3l
	swap	d0
	move.w	d0,p3H
	swap	d0
	add.l	#40, d0
	move.w	d0,p4l
	swap	d0
	move.w	d0,p4H
	swap	d0

;**** Main Loop  Test mouse button ****
;	bsr	testsub
;pr_musicfadect:		dc.w	64
;pr_musicfadedirection:	dc.w	0
	move.w	#0, pr_musicfadect
	move.w	#1, pr_musicfadedirection
	move.w	#1, FadeDirection
LOOP:
	bsr	ClearScreen
	jsr	BOX
	bsr	FillScreen
	bsr	swapper
	move.l	#$01500150, Minx
	move.l	#0, Maxx
	bsr	RollBox
	 move.w	STAB+2, d0
	 and.l	#$ffff, d0
	 divs	#9, d0
	 move.w	d0, ITEM_SELECTED
	 muls	#9, d0
	 subq.b	#1, d0
	 move.b	d0, BAR1
	 move.b	d0, BAR2
	 add.b	#10, BAR2
	bsr	Mouse
	bsr	FadeMouse
	bsr	wait_vert_blank
	BTST	#6,$BFE001		; Test left mouse button
	BNE.S	LOOP
	move.w	#-1, pr_musicfadedirection
	move.w	#1, fadedirection
;	move.w	Stab+2, ITEM_SELECTED	;Selectie Item!
.ZERO
	add.w	#130, shiftz
	bsr	ClearScreen
	jsr	BOX
	bsr	FillScreen
	bsr	swapper
	move.l	#$01500150, Minx
	move.l	#0, Maxx
	bsr	wait_vert_blank
	bsr	FadeMouse

	TST	pr_musicfadect
	bgt	.Zero
	tst	FaderLimitReached
	bne	.Zero

	move.w	ITEM_SELECTED, d0
	sub.w	#STARTRegel-1, d0
	move.w	d0, Selection

;*****************************************
;*					 *
;*   RESTORE SYSTEM INTERRUPTS ECT ECT   *
;*					 *
;*****************************************
	LEA	$DFF000,A6

	MOVE.W	#$7FFF,$9A(A6)		; Disable interrupts

	BSR.W	Wait_Vert_Blank

	MOVE.W	#$7FFF,$96(A6)
	MOVE.L	OldCop1(PC),$80(A6)	; Restore old copper1
	MOVE.L	OldCop2(PC),$84(A6)	; Restore old copper1
	MOVE.L	OldInter(PC),$6C.W	; Restore inter pointer
	MOVE.W	DMACON,D0		; Restore old DMACON
	OR.W	#$8000,D0
	MOVE.W	D0,$96(A6)		
	MOVE.W	ADKCON,D0		; Restore old ADKCON
	OR.W	#$8000,D0
	MOVE.W	D0,$9E(A6)
	MOVE.W	INTENA,D0		; Restore inter data
	OR.W	#$C000,D0
	MOVE.W	#$7FFF,$9C(A6)
	MOVE.W	D0,$9A(A6)
	bsr	pr_end


	MOVE.L	$4.W,A6			; Exec pointer to A6
	LEA.L	DosName(PC),A1		; Set library pointer
	MOVEQ	#0,D0
	JSR	OldOpenLibrary(A6)	; Open graphics.library
	move.l	d0, DosBase	
	move.l	DosBase, a6
;---------------------------------------------------
	cmp	#1, Selection
	bne	.NoFirst
	move.l	#First, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoFirst
	cmp	#2, Selection
	bne	.NoSecond
	move.l	#Second, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoSecond
	cmp	#3, Selection
	bne	.NoThird
	move.l	#Third, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoThird
	cmp	#4, Selection
	bne	.NoFourth
	move.l	#Fourth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoFourth
	cmp	#5, Selection
	bne	.NoFifth
	move.l	#Fifth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoFifth
	cmp	#6, Selection
	bne	.NoSixth
	move.l	#sixth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoSixth
	cmp	#7, Selection
	bne	.NoSeventh
	move.l	#Seventh, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoSeventh
	cmp	#8, Selection
	bne	.NoEighth
	move.l	#Eighth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoEighth
	cmp	#9, Selection
	bne	.NoNinth
	move.l	#Ninth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoNinth
	cmp	#10, Selection
	bne	.NoTenth
	move.l	#Tenth, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoTenth
	cmp	#11, Selection
	bne	.NoEleventh
	move.l	#Eleventh, d1
	moveq	#0, d2
	moveq	#0, d3
	jsr	Execute(a6)
.NoEleventh
;---------------------------------------------------
	move.l	$4.w, a6
	move.l	DosBase, a1
	jsr	CloseLibrary(a6)
	MOVEM.L	(A7)+,D0-D7/A0-A6	; Get registers from stack
	RTS
First:	dc.b	'Asm-One_v1.21',0
Second:	dc.b	'echo "2nd menu selection"',0
Third:	dc.b	'echo "3th menu selection"',0
Fourth:	dc.b	'echo "4th menu selection"',0
Fifth:	dc.b	'echo "5th menu selection"',0
Sixth:	dc.b	'echo "6th menu selection"',0
Seventh:dc.b	'echo "7th menu selection"',0
Eighth:	dc.b	'echo "8th menu selection"',0
Ninth:	dc.b	'echo "9th menu selection"',0
Tenth:	dc.b	'echo "10th menu selection"',0
Eleventh:	dc.b	'echo "11th menu selection"',0
;C'est ça!
	even
;*** WAIT VERTICAL BLANK ***

Wait_Vert_Blank:
	BTST	#0,$5(A6)
	BEQ.S	Wait_Vert_Blank
.loop	BTST	#0,$5(A6)
	BNE.S	.loop
	RTS

;*** DATA AREA ***

GfxName		DC.B	'graphics.library',0
		even
DosBase		DC.L	0
DosName		dc.b	'dos.library',0
		even
OldInter	DC.L	0
OldCop1		DC.L	0
OldCop2		DC.L	0
INTENA		DC.W	0
DMACON		DC.W	0
ADKCON		DC.W	0

ITEM_SELECTED:	dc.w	0
Selection:	dc.w	0
MSPEED:		dc.w	0
TESTSUB
	movem.l	d0-d7/a0-a6, -(a7)
	move.l	#pr_data, pr_module
	bsr	pr_init
lp	bsr	pr_music
	lea	$dff000, a6
	bsr	wait_vert_blank
	BTST	#6,$BFE001		; Test left mouse button
	BNE.S	LP
	bsr	pr_end
	movem.l	(a7)+,d0-d7/a0-a6
	rts

;**********************************
;*				  *
;*    INTERRUPT ROUTINE. LEVEL 3  *
;*				  *
;**********************************
Trigger:	dc.w	0

INTER:
	MOVEM.L	D0-D7/A0-A6,-(A7)	; Put registers on stack
	LEA.L	$DFF000,A6
	MOVE.L	cs, d0
	move.w	d0,B1l
	swap	d0
	move.w	d0,B1H
	swap	d0	
	add.l	#40, d0
	move.w	d0,B3l
	swap	d0
	move.w	d0,B3H

	addq.w	#1, Rotx
	addq.w	#2, Roty
	addq.w	#3, Rotz
	and.w	#1023,Rotx
	and.w	#1023,Roty
	and.w	#1023,Rotz
	addq.w	#6, RotBox
	and.w	#1023, RotBox

	BSR	SPRITES
	bsr	Fader
	bsr	pr_music
	lea	$dff000, a6
	bsr	BMover
;---  Place your interrupt routine here  ---
;	move.w	#$0122, $180(a6)
	MOVE.W	#$4020,$9C(A6)		; Clear interrupt request
	MOVEM.L	(A7)+,D0-D7/A0-A6	; Get registers from stack
	RTE


BRC:	dc.w	0
BY:	dc.w	$0b
BMover:
	move.w	BRC(pc), d1
	add.w	d1, BY
	addq.w	#1, BRC
	move.w	BY, d0
	cmp	#$6b, d0
	blt	.Additional
	neg.w	BRC
	addq	#3, BRC
	move.w	#$6b, BY
	move.b	#$6b, BM1
	move.b	#$6c, BM2
	rts
.Additional
	move.b	d0, BM1
	addq.w	#1, d0
	move.b	d0, BM2
	rts

FadeLimit:	dc.w	15
FadeDirection:	dc.w	0
FadeStrength:	dc.w	0
FaderLimitReached:	dc.w	1
FadeTable:	dc.l	Fades
FSpeed:		dc.w	2
FCurrent:	dc.w	0
FADER:
	addq.w	#1, FCurrent
	move.w	FSpeed, d0
	cmp	FCurrent, d0
	blt	.FadeIsOn
	rts
.FadeIsOn
	move.b	#1, FaderLimitReached
	clr.w	FCurrent
	move.w	FadeDirection(pc), d0
	add.w	d0, FadeStrength

	move.w	FadeStrength, d0
	cmp	FadeLimit, d0
	bne	.NoLimit
	clr.w	FadeDirection
	clr.w	FaderLimitReached
.NoLimit
	cmp	#16, FadeStrength
	ble	.MaxFOk
	cmp	#31, FadeStrength
	ble	Fader_Overlight
	move.w	#31, FadeStrength
	clr.w	FaderLimitReached
	bra	Fader_Overlight

.MaxFOk	tst	FadeStrength
	bge	.MinFOk
	clr.w	FadeStrength
	clr.w	FaderLimitReached
.MinFOk	move.l	FadeTable, a0
.FaderLoop
	move.w	FadeStrength, d2
	lsl	#8, d2
	move.l	(a0)+, a1
	move.w	(a0)+, d0
	clr.w	(a1)		;Wis oude kleur
;RED
	move.w	d0, d1
	and.w	#$f00, d1
	cmp	d2, d1
	blt	.Rok
	or.w	d2, (a1)	;OR nieuwe ROOD
	bra	.Rdone
.Rok	or.w	d1, (a1)
.RDone	lsr	#4, d2		;Shift door naar GROEN
	move.w	d0, d1
	and.w	#$f0, d1
	cmp	d2, d1
	blt	.Gok
	or.w	d2, (a1)	;OR nieuwe Groen
	bra	.Gdone
.Gok	or.w	d1, (a1)
.GDone	lsr	#4, d2		;Shift door naar BLAUW
	move.w	d0, d1
	and.w	#$f, d1
	cmp	d2, d1
	blt	.Bok
	or.w	d2, (a1)
	bra	.Bdone
.Bok	or.w	d1, (a1)
.BDone	tst.l	(a0)	
	bgt	.FaderLoop
	rts
Fader_OverLight
	move.l	FadeTable, a0
.FaderLoop
	move.w	FadeStrength, d2
	sub	#16, d2
	lsl	#8, d2
	move.l	(a0)+, a1
	move.w	(a0)+, d0
	clr.w	(a1)		;Wis oude kleur
;RED
	move.w	d0, d1
	and.w	#$f00, d1
	cmp	d2, d1
	bgt	.Rok
	or.w	d2, (a1)	;OR nieuwe ROOD
	bra	.Rdone
.Rok	or.w	d1, (a1)
.RDone	lsr	#4, d2		;Shift door naar GROEN
	move.w	d0, d1
	and.w	#$f0, d1
	cmp	d2, d1
	bgt	.Gok
	or.w	d2, (a1)	;OR nieuwe Groen
	bra	.Gdone
.Gok	or.w	d1, (a1)
.GDone	lsr	#4, d2		;Shift door naar BLAUW
	move.w	d0, d1
	and.w	#$f, d1
	cmp	d2, d1
	bgt	.Bok
	or.w	d2, (a1)
	bra	.Bdone
.Bok	or.w	d1, (a1)
.BDone	tst.l	(a0)	
	bgt	.FaderLoop
	rts


cs:	dc.l	Scren
OS:	dc.l	Wrk
Swapper:
 btst #14,$2(a6)
 bne.s Swapper
	move.l	cs, d0
	move.l	os, d1
	move.l	d0, os
	move.l	d1, cs
	move.l	CurBuff, d0
	move.l	OthBuff, d1
	move.l	d1, CurBuff
	move.l	d0, OthBuff
	rts
CONS:	dc.l	CEX
POLYS:	dc.l	CPOLYS
BOX:	move.l	CONS(pc), a0
	bsr	Conv_Points
	move.l	POLYS(pc), a0
	move.w	(a0)+, d7		;5 vlakken.
	move.l	CONS(pc), a1
	addq.l	#2, a1
	clr.w	color
.PLoop	moveq	#0, d6		;Gemiddelde berekening
	move.w	(a0),d0
	add.w	6(a1,d0), d6
	move.w	2(a0),d0
	add.w	6(a1,d0), d6
	move.w	4(a0),d0
	add.w	6(a1,d0), d6
	move.w	6(a0),d0
	add.w	6(a1,d0), d6

	addq.w	#1, Color
	move.w	Color, d0
	and.w	#%11, d0
	bne	.Cok
	addq.w	#1, Color
.Cok

;	V1*W2 - V2*W1	;2 Vectors...
;	X0*Y1 - Y0*X1
;V1 Berekenen
	move.w	(a0), d0
	move.w	8(a1,d0), d6	;X axis
	move.w	2(a0), d0
	move.w	8(a1,d0), d5	;X2 Axis
	sub	d6, d5		;d5 = V1 = Delta X1
;W2 Berekenen
	move.w	2(a0), d0
	move.w	10(a1,d0), d6	;Y axis
	move.w	4(a0), d0
	move.w	10(a1,d0), d4
	sub	d4, d6		;d6 = W2 = Delta Y2
;V1*W2 Berekenen
	muls	d5, d6		;d6 = V1*W2
;V2 Berekenen
	move.w	(a0), d0
	move.w	10(a1,d0), d5
	move.w	2(a0), d0
	move.w	10(a1,d0), d4
	sub	d5, d4		;D4 = V2 = Delta Y1
;W1 Berekenen
	move.w	2(a0), d0
	move.w	8(a1,d0), d5	;X axis
	move.w	4(a0), d0
	sub.w	8(a1,d0), d5	;d5 = W1 = Delta X2
;V2*W1 Berekenen
	muls	d4, d5
	sub	d5, d6		;d6 = Uiteindelijke uitkomst

	bgt	.NoPoly
	bra	.DrawPoly	;RZ>0, dan tekenen.
.NoPoly	lea	10(a0), a0	;Anders volgende Polygoon
	dbf	d7,.Ploop
	rts
.DrawPoly
	move.w	(a0), d0
	move.w	10(a1,d0), d1	;SX
	move.w	8(a1,d0),d0	;SY
	move.w	2(a0), d2
	move.w	10(a1,d2), d3	;SX
	move.w	8(a1,d2),d2	;SY
	bsr	L3

	move.w	2(a0), d0
	move.w	10(a1,d0), d1	;SX
	move.w	8(a1,d0),d0	;SY
	move.w	4(a0), d2
	move.w	10(a1,d2), d3	;SX
	move.w	8(a1,d2),d2	;SY
	bsr	L3

	move.w	4(a0), d0
	move.w	10(a1,d0), d1	;SX
	move.w	8(a1,d0),d0	;SY
	move.w	6(a0), d2
	move.w	10(a1,d2), d3	;SX
	move.w	8(a1,d2),d2	;SY
	bsr	L3

	move.w	6(a0), d0
	move.w	10(a1,d0), d1	;SX
	move.w	8(a1,d0),d0	;SY
	move.w	8(a0), d2
	move.w	10(a1,d2), d3	;SX
	move.w	8(a1,d2),d2	;SY
	bsr	L3

	lea	10(a0), a0
	dbf	d7,.ploop
	rts
	
;d0 = x start
;d1 = y start
;d2 = x end
;d3 = y end
;a0 = startbitmap
;d4 - d5 = workregister
;		  LINEDRAW ROUTINE FOR USE WITH FILLING:

;BOX polygons.
CPOLYS:	dc.w	9
	dc.w	0*12,2*12,6*12,4*12,0*12
	dc.w	5*12,7*12,3*12,1*12,5*12
	dc.w	4*12,5*12,1*12,0*12,4*12
	dc.w	17*12,16*12,19*12,18*12,17*12
	dc.w	2*12,3*12,7*12,6*12,2*12
	dc.w	21*12,20*12,23*12,22*12,21*12
	dc.w	0*12,1*12,3*12,2*12,0*12
	dc.w	14*12,15*12,13*12,14*12,14*12
	dc.w	6*12,7*12,5*12,4*12,6*12
	dc.w	10*12,11*12,9*12,8*12,10*12

;BOX vertices.; dc.w x,y,z,RotZ,sx,sy
CEX:	dc.w	23;7
	dc.w	1000,1000,1000,0,0,0
	dc.w	1000,1000,-1000,0,0,0
	dc.w	1000,-1000,1000,0,0,0
	dc.w	1000,-1000,-1000,0,0,0
	dc.w	-1000,1000,1000,0,0,0
	dc.w	-1000,1000,-1000,0,0,0
	dc.w	-1000,-1000,1000,0,0,0
	dc.w	-1000,-1000,-1000,0,0,0

TB1:	dc.w	-1000,500,500,0,0,0
	dc.w	-1000,500,-500,0,0,0
	dc.w	-1000,-500,500,0,0,0
	dc.w	-1000,-500,-500,0,0,0

TB2:	dc.w	1000,50,50,0,0,0
	dc.w	1000,50,-50,0,0,0
	dc.w	1000,-50,50,0,0,0
	dc.w	1000,-50,-50,0,0,0

TB3:	dc.w	50,-1000,50,0,0,0
	dc.w	50,-1000,-50,0,0,0
	dc.w	-50,-1000,50,0,0,0
	dc.w	-50,-1000,-50,0,0,0

TB4:
	dc.w	50,1000,50,0,0,0
	dc.w	50,1000,-50,0,0,0
	dc.w	-50,1000,50,0,0,0
	dc.w	-50,1000,-50,0,0,0

TB5:	dc.w	-1000,50,50,0,0,0
	dc.w	-1000,50,-50,0,0,0
	dc.w	-1000,-50,50,0,0,0
	dc.w	-1000,-50,-50,0,0,0

TB6:	dc.w	-1000,50,50,0,0,0
	dc.w	-1000,50,-50,0,0,0
	dc.w	-1000,-50,50,0,0,0
	dc.w	-1000,-50,-50,0,0,0


;d0 = x start
;d1 = y start
;d2 = x end
;d3 = y end
;a0 = startbitmap
;d4 - d5 = workregister
;		  LINEDRAW ROUTINE FOR USE WITH FILLING:

MINX:	dc.w	100
MINY:	dc.w	100
MAXX:	dc.w	0
MAXY:	dc.w	0
color:	dc.w	1

L3:
	movem.l	d0-d7/a0-a6, -(a7)
 cmp	MINX, d0
 bgt	.NoIX0
 move.w	d0, MINX
.NoIX0
 cmp	MAXX, d0
 blt	.NoAX0
 move.w	d0, MAXX
.NoAX0
 cmp	MINX, d2
 bgt	.NoIX01
 move.w	d2, MINX
.NoIX01
 cmp	MAXX, d2
 blt	.NoAX01
 move.w	d2, MAXX
.NoAX01
 cmp	MINY, d1
 bgt	.NoIY0
 move.w	d1, MINY
.NoIY0
 cmp	MAXY, d1
 blt	.NoAY0
 move.w	d1, MAXY
.NoAY0
 cmp	MINY, d3
 bgt	.NoIY01
 move.w	d3, MINY
.NoIY01
 cmp	MAXY, d3
 blt	.NoAY01
 move.w	d3, MAXY
.NoAY01

   move.l	os, a0
 cmp.w d1,d3
 bgt.s noswap
 beq.L doneline
 exg d0,d2
 exg d1,d3
noswap:
 move.w d1,d4
 muls #80,d4	;Waarde X op 1 lijn
 moveq #-$10,d5
 and.w d0,d5
 lsr.w #3,d5
 add.w d5,d4
 add.l a0,d4

 moveq #0,d5
 sub.w d1,d3
 sub.w d0,d2
 roxl.b #1,d5
 tst.w d2
 bge.s line1
 neg.w d2
line1:
 move.w d3,d1
 sub.w d2,d1
 bge.s line2
 exg d3,d2
line2:
 roxl.b #1,d5
;bsr blitwait
bw:
 btst #14,$2(a6)
 bne bw
 move.w #$ffff,$44(a6)
 move.w #$8000,$74(a6)
 move.w #80,$60(a6)	;Modulo's
 move.w #80,$66(a6)	;Modulo's
 move.w #$ffff,$72(a6)
 move.b octtabel(pc,d5.w),d5
 add.w d2,d2
 move.w d2,$62(a6)
 sub.w d3,d2
 bgt line3
 or.b #$40,d5
line3:
 move.w d2,$52(a6)
 move.w d2,d1
 sub.w d3,d2
 tst.w d3
 bne nozero
 addq.w #1,d3
nozero:
 lsl.w #6,d3
 addq.w #2,d3
 move.w d2,$64(a6)
 and.w #$0f,d0
 ror.w #4,d0
 or.w #$0b4a,d0
 move.w #1,d1		;AANTAL BITPLANES
 move.w d2,$52(a6)
nextcol:		;Kleurtoevoegingen, courtesy v. Matthijs!
 btst d1,color+1
 beq nextplane
bw2:
 btst #14,$2(a6)
 bne.s bw2
 move.w d0,$40(a6)
 move.w d5,$42(a6)
 move.l d4,$48(a6)
 move.l d4,$54(a6)
 move.w d3,$58(a6)
nextplane:
 add.l #$28,d4
 dbf d1,nextcol
doneline:
	movem.l	(a7)+, d0-d7/a0-a6
 rts

octtabel:
 dc.b $03,$13,$0b,$17,$07,$1b,$0f,$1f

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CurBuff:	dc.l	OSBuff
OthBuff:	dc.l	CSBuff
OSBuff:	dc.l	Scren
	dc.w	1,1+64
CSBuff:	dc.l	Scren
	dc.w	1,1+64

ClearScreen:
	move.l	OthBuff, a1
	move.l	(a1), a0
	move.w	4(a1), d2
	move.w	6(a1), d0
.BLIYY
	btst #14,$2(a6)
	bne.s .BLIYY
	move.w	#%0000000100000000, $40(a6)
	move.w	#%0000000000000010, $42(a6)
	move.l	a0, $54(a6)
	move.w	d2, $66(a6)
	move.w	d0, $58(a6)
	rts

FillScreen:
	move.l	#0, a0
	move.w	Maxx, d0
	asr.w	#3, d0
	lea	(a0,d0.w), a0
	move.w	Maxy, d0
	muls	#80, d0		;BPL!SSS
	ext.l	d0
	lea	(a0,d0.l), a0	;A0=Screen Offset
				;Nu nog MOD & LENGTH
	move.w	Maxy, d0
	sub.w	Miny, d0	;d0=Delta Y, nodig voor Length
	addq.w	#1, d0
	move.w	Maxx, d1
	sub.w	Minx, d1	;d1=Delta X, nodig voor MOD
	asr	#4, d1		;d1=Delta X.b
	addq	#2, d1
	moveq	#20, d2
	sub.w	d1, d2		;d2=MOD
	lsl	#1, d2
	muls	#2, d0			;BPL!SSS
	lsl	#6, d0
	or.w	d1, d0		;d0 = BLTSIZE!
				;d2 = MODULO
	add.l	OS, a0		;a0 = Screen Pointer
.WAIT_FOR_FUCKING_BLITTER_TO_FINISH
	btst #14,$2(a6)
	bne.s .WAIT_FOR_FUCKING_BLITTER_TO_FINISH
	move.l	#-1, $44(a6)
;	move.w	#%0000100111111111, $40(a6)	;TEKENT VIERVLAK, VOOR CHECKS
	move.w	#%0000100111110000, $40(a6)
	move.w	#%0000000000010010, $42(a6)
	move.l	a0, $50(a6)
	move.l	a0, $54(a6)
	MOVE.W	D2, $64(a6)
	MOVE.W	D2, $66(A6)
	move.w	D0, $58(a6)	;YEAH!!!
	move.l	OthBuff, a1
	move.l	a0,(a1)
	move.w	d2, 4(a1)
	move.w	d0, 6(a1)
	rts
RotBox:	dc.w	0
Boxes:	dc.w	-500,-500
	dc.w	-500,500
	dc.w	500,-500
	dc.w	500,500
RollBox:
	move.w	Boxes(pc), d0
	move.w	Boxes+2(pc), d1
	move.w	RotBox, d3
	bsr	Rotatez
	move.w	d0, TB1+2+12*3
	move.w	d1, TB1+4+12*3

	move.w	d0, TB2+2+12*1
	move.w	d1, TB2+4+12*1

	move.w	d0, TB3+12*1
	move.w	d1, TB3+4+12*1

	move.w	d0, TB4+12*3
	move.w	d1, TB4+4+12*3

	move.w	Boxes+4(pc), d0
	move.w	Boxes+6(pc), d1
	move.w	RotBox,d3
	bsr	Rotatez
	move.w	d0, Tb1+2+12*2
	move.w	d1, Tb1+4+12*2

	move.w	d0, Tb2+2+12*0
	move.w	d1, Tb2+4+12*0

	move.w	d0, Tb3+12*0
	move.w	d1, Tb3+4+12*0

	move.w	d0, TB4+12*2
	move.w	d1, TB4+4+12*2

	move.w	Boxes+8(pc), d0
	move.w	Boxes+10(pc), d1
	move.w	RotBox,d3
	bsr	Rotatez
	move.w	d0, Tb1+2+12*1
	move.w	d1, Tb1+4+12*1

	move.w	d0, Tb2+2+12*3
	move.w	d1, Tb2+4+12*3

	move.w	d0, Tb3+12*3
	move.w	d1, Tb3+4+12*3

	move.w	d0, TB4+12*1
	move.w	d1, TB4+4+12*1

	move.w	Boxes+12(pc), d0
	move.w	Boxes+14(pc), d1
	move.w	RotBox,d3
	bsr	Rotatez

	move.w	d0, Tb1+2+12*0
	move.w	d1, Tb1+4+12*0

	move.w	d0, Tb2+2+12*2
	move.w	d1, Tb2+4+12*2

	move.w	d0, Tb3+12*2
	move.w	d1, Tb3+4+12*2

	move.w	d0, TB4+12*0
	move.w	d1, TB4+4+12*0
	rts
	
;TB1:	dc.w	-1000,500,500,0,0,0
;	dc.w	-1000,500,-500,0,0,0
;	dc.w	-1000,-500,500,0,0,0
;	dc.w	-1000,-500,-500,0,0,0


RotX:	dc.w	0
RotY:	dc.w	0
RotZ:	dc.w	0
Shiftx:	dc.w	0
Shifty:	dc.w	-700
Shiftz:	dc.w	4000;400;250;$280
Conv_Points:
;	lea	ObjectPoints(pc), a0
	move.w	(a0)+, d5
	lea	sinus,a2
	lea	Cosinus,a3
.ConvLoop:
	move.w	(a0)+, d0
	move.w	(a0)+, d1
	move.w	(a0)+, d2
	move.w	Rotz, d3
	bsr	Rotatez
	move.w	Rotx, d3
	bsr	Rotatex
	move.w	Roty, d3
	bsr	Rotatey
	addq.l	#2, a0
	add.w	Shiftx, d0
	add.w	Shifty, d1
	add.w	Shiftz, d2
	ext.l	d0
	ext.l	d1
	asl.l	#7, d0
	asl.l	#7, d1
	tst.w	d2
	ble	.ZERO
	divs	d2, d0
	divs	d2, d1
.ZERO	add.w	#160, d0
	add.w	#100, d1
	move.w	d0, (a0)+
	move.w	d1, (a0)+
	dbf	d5, .ConvLoop
	rts
RotateX:	;Rotates around the X-axis;d0=x;d1=y;d2=z;d3=Angle
	;Gebruikt D4 & High d0 & A2
	;Volgens de volgende formule:
	;X=X
	;Y=cos(angle)*y-sin(angle)*z
	;Z=sin(angle)*y+cos(angle)*z
	MOVEM.L	D3-D7/A0-A6,-(A7)	; Put registers on stack
	move.w	d1, d4	;Apart houden, komt
	move.w	d2, d5	;Dadelijk van pas als we gaan rekenen.
	add.w	d3,d3
	swap	d0
	;Eerst Y
	move.w	(a3,d3), d0	;Cos(Angle)->d0
	muls	d0,d1		;d1=cos(angle)*y
	move.w	(a2,d3), d0	;Sin(Angle)->d0
	muls	d0, d2		;d2=sin(angle)*z
	sub.l	d2, d1		;Hoppa, d1=Y|
	asr.l	#8, d1
	asr.l	#7, d1
	;Dan Z	
	move.w	(a2,d3),d0	;Sin(Angle)->d0
	muls	d0, d4		;d4=sin(angle)*y
	move.w	(a3,d3),d0	;Cos(Angle)->d0
	muls	d0, d5		;d0=cos(Angle)*z
	add.l	d5, d4		;Hoppa, d4=Z|
	asr.l	#8, d4
	asr.l	#7, d4
	move.w	d4, d2
.foe	SWAP	D0		;Oude X-as terughalen.
	MOVEM.L	(A7)+,D3-D7/A0-A6	; Get registers from stack
	rts	
RotateY:	;Rotates around the Y-axis;d0=x;d1=y;d2=z;d3=Angle
;Formula:
;X=cos(angle)*x-sin(angle)*z
;y=y
;Z=sin(angle)*x+Cos(angle)*z
	MOVEM.L	D3-D7/A0-A6,-(A7)	; Put registers on stack
	move.w	d0, d4	;Apart houden, komt
	move.w	d2, d5	;Dadelijk van pas als we gaan rekenen.
	add.w	d3,d3
	swap	d1
	;Eerst X
	move.w	(a3,d3), d1
	muls	d1, d0	;d0=cos(angle)*x
	move.w	(a2,d3), d1
	muls	d1, d2	;d2=sin(angle)*z
	sub.l	d2, d0
	asr.l	#8, d0	;X| is aanwezig!! (joepie de poepie!)
	asr.l	#7, d0
	;Nu de Z
	move.w	(a2,d3),d2
	muls	d2, d4	;d4=sin(angle)*x
	move.w	(a3,d3),d2
	muls	d2, d5	;d5=cos(angle)*z
	add.l	d4, d5
	asr.l	#8, d5
	asr.l	#7, d5
	move.w	d5, d2
	SWAP	D1		;Oude Y-as terughalen.
	MOVEM.L	(A7)+,D3-D7/A0-A6	; Get registers from stack
	rts

RotateZ:	;Rotates around the Z-axis;d0=x;d1=y;d2=z;d3=Angle
;X=cos(Angle)*x - sin(Angle)*y
;Y=sin(Angle)*x + cos(Angle)*y
;Z=Z
	MOVEM.L	D3-D7/A0-A6,-(A7)	; Put registers on stack
	move.w	d0, d4	;Apart houden, komt
	move.w	d1, d5	;Dadelijk van pas als we gaan rekenen.
	add.w	d3,d3
	swap	d2
	;Eerst X
	move.w	(a3,d3), d0
	muls	d4, d0
	move.w	(a2,d3), d2
	muls	d2, d1		;Kan, want er is nog niet geklooid met d2|Y
;d1=sin(Angle)*y
	sub.l	d1, d0		;Nu hebben we de d0|X
	asr.l	#8, d0
	asr.l	#7, d0
	;Dan Y	(d2=Sin(Angle))
	muls	d2, d4		;Mag, we hebben Y|D5 toch niet meer nodig
;d4=sin(Angle)*x!!!
	move.w	(a3,d3), d3
	muls	d5, d3
	add.l	d3, d4		;Nu hebben we d1|y
	asr.l	#8, d4
	asr.l	#7, d4
	move.w	d4, d1
	SWAP	D2		;Oude Z-as terughalen.
	MOVEM.L	(A7)+,D3-D7/A0-A6	; Get registers from stack
	rts
SINUS:


	DC.W	$0065,$012E,$01F7,$02C0,$0389,$0452,$051B,$05E3,$06AC,$0775
	DC.W	$083E,$0906,$09CF,$0A97,$0B5F,$0C28,$0CF0,$0DB8,$0E80,$0F47
	DC.W	$100F,$10D6,$119D,$1264,$132B,$13F2,$14B9,$157F,$1645,$170B
	DC.W	$17D0,$1896,$195B,$1A20,$1AE5,$1BA9,$1C6D,$1D31,$1DF5,$1EB8
	DC.W	$1F7B,$203E,$2100,$21C2,$2284,$2346,$2407,$24C8,$2588,$2648
	DC.W	$2708,$27C7,$2886,$2944,$2A02,$2AC0,$2B7D,$2C3A,$2CF7,$2DB3
	DC.W	$2E6E,$2F2A,$2FE4,$309E,$3158,$3211,$32CA,$3383,$343A,$34F2
	DC.W	$35A8,$365F,$3715,$37CA,$387E,$3933,$39E6,$3A99,$3B4C,$3BFE
	DC.W	$3CAF,$3D60,$3E10,$3EBF,$3F6E,$401D,$40CA,$4177,$4224,$42D0
	DC.W	$437B,$4425,$44CF,$4578,$4621,$46C9,$4770,$4816,$48BC,$4961
	DC.W	$4A06,$4AA9,$4B4C,$4BEE,$4C90,$4D31,$4DD1,$4E70,$4F0E,$4FAC
	DC.W	$5049,$50E5,$5181,$521B,$52B5,$534E,$53E7,$547E,$5515,$55AA
	DC.W	$563F,$56D4,$5767,$57F9,$588B,$591C,$59AC,$5A3B,$5AC9,$5B56
	DC.W	$5BE2,$5C6E,$5CF9,$5D82,$5E0B,$5E93,$5F1A,$5FA0,$6025,$60AA
	DC.W	$612D,$61AF,$6231,$62B1,$6331,$63AF,$642D,$64AA,$6525,$65A0
	DC.W	$661A,$6693,$670A,$6781,$67F7,$686C,$68E0,$6952,$69C4,$6A35
	DC.W	$6AA5,$6B13,$6B81,$6BED,$6C59,$6CC4,$6D2D,$6D95,$6DFD,$6E63
	DC.W	$6EC8,$6F2C,$6F90,$6FF2,$7053,$70B2,$7111,$716F,$71CB,$7227
	DC.W	$7281,$72DB,$7333,$738A,$73E0,$7435,$7488,$74DB,$752D,$757D
	DC.W	$75CC,$761A,$7667,$76B3,$76FE,$7747,$778F,$77D7,$781D,$7862
	DC.W	$78A5,$78E8,$7929,$796A,$79A9,$79E6,$7A23,$7A5F,$7A99,$7AD2
	DC.W	$7B0A,$7B41,$7B77,$7BAB,$7BDE,$7C10,$7C41,$7C71,$7C9F,$7CCD
	DC.W	$7CF9,$7D24,$7D4D,$7D76,$7D9D,$7DC3,$7DE8,$7E0B,$7E2E,$7E4F
	DC.W	$7E6F,$7E8D,$7EAB,$7EC7,$7EE2,$7EFC,$7F15,$7F2C,$7F42,$7F57
	DC.W	$7F6B,$7F7D,$7F8F,$7F9F,$7FAD,$7FBB,$7FC7,$7FD2,$7FDC,$7FE5
	DC.W	$7FEC,$7FF3,$7FF7,$7FFB,$7FFE,$7FFF,$7FFF,$7FFE,$7FFB,$7FF7
	DC.W	$7FF3,$7FEC,$7FE5,$7FDC,$7FD2,$7FC7,$7FBB,$7FAD,$7F9F,$7F8F
	DC.W	$7F7D,$7F6B,$7F57,$7F42,$7F2C,$7F15,$7EFC,$7EE2,$7EC7,$7EAB
	DC.W	$7E8D,$7E6F,$7E4F,$7E2E,$7E0B,$7DE8,$7DC3,$7D9D,$7D76,$7D4D
	DC.W	$7D24,$7CF9,$7CCD,$7C9F,$7C71,$7C41,$7C10,$7BDE,$7BAB,$7B77
	DC.W	$7B41,$7B0A,$7AD2,$7A99,$7A5F,$7A23,$79E6,$79A9,$7969,$7929
	DC.W	$78E8,$78A5,$7862,$781D,$77D7,$778F,$7747,$76FE,$76B3,$7667
	DC.W	$761A,$75CC,$757D,$752C,$74DB,$7488,$7435,$73E0,$738A,$7333
	DC.W	$72DB,$7281,$7227,$71CB,$716F,$7111,$70B2,$7052,$6FF2,$6F8F
	DC.W	$6F2C,$6EC8,$6E63,$6DFD,$6D95,$6D2D,$6CC3,$6C59,$6BED,$6B81
	DC.W	$6B13,$6AA4,$6A35,$69C4,$6952,$68DF,$686C,$67F7,$6781,$670A
	DC.W	$6693,$661A,$65A0,$6525,$64AA,$642D,$63AF,$6331,$62B1,$6231
	DC.W	$61AF,$612D,$60AA,$6025,$5FA0,$5F1A,$5E93,$5E0B,$5D82,$5CF9
	DC.W	$5C6E,$5BE2,$5B56,$5AC9,$5A3A,$59AB,$591C,$588B,$57F9,$5767
	DC.W	$56D3,$563F,$55AA,$5514,$547E,$53E6,$534E,$52B5,$521B,$5181
	DC.W	$50E5,$5049,$4FAC,$4F0E,$4E70,$4DD1,$4D31,$4C90,$4BEE,$4B4C
	DC.W	$4AA9,$4A05,$4961,$48BC,$4816,$4770,$46C9,$4621,$4578,$44CF
	DC.W	$4425,$437B,$42CF,$4224,$4177,$40CA,$401C,$3F6E,$3EBF,$3E10
	DC.W	$3D5F,$3CAF,$3BFD,$3B4B,$3A99,$39E6,$3932,$387E,$37CA,$3714
	DC.W	$365F,$35A8,$34F2,$343A,$3382,$32CA,$3211,$3158,$309E,$2FE4
	DC.W	$2F29,$2E6E,$2DB3,$2CF7,$2C3A,$2B7D,$2AC0,$2A02,$2944,$2886
	DC.W	$27C7,$2707,$2648,$2588,$24C7,$2407,$2345,$2284,$21C2,$2100
	DC.W	$203E,$1F7B,$1EB8,$1DF5,$1D31,$1C6D,$1BA9,$1AE5,$1A20,$195B
	DC.W	$1896,$17D0,$170B,$1645,$157F,$14B8,$13F2,$132B,$1264,$119D
	DC.W	$10D6,$100F,$0F47,$0E7F,$0DB8,$0CF0,$0C27,$0B5F,$0A97,$09CF
	DC.W	$0906,$083D,$0775,$06AC,$05E3,$051A,$0451,$0388,$02BF,$01F6
	DC.W	$012D,$0064,$FF9B,$FED2,$FE09,$FD40,$FC77,$FBAE,$FAE5,$FA1C
	DC.W	$F954,$F88B,$F7C2,$F6FA,$F631,$F569,$F4A0,$F3D8,$F310,$F248
	DC.W	$F180,$F0B9,$EFF1,$EF2A,$EE62,$ED9B,$ECD4,$EC0E,$EB47,$EA81
	DC.W	$E9BB,$E8F5,$E82F,$E76A,$E6A5,$E5E0,$E51B,$E457,$E392,$E2CF
	DC.W	$E20B,$E148,$E085,$DFC2,$DEFF,$DE3D,$DD7C,$DCBA,$DBF9,$DB38
	DC.W	$DA78,$D9B8,$D8F8,$D839,$D77A,$D6BB,$D5FD,$D540,$D482,$D3C5
	DC.W	$D309,$D24D,$D191,$D0D6,$D01C,$CF61,$CEA8,$CDEE,$CD35,$CC7D
	DC.W	$CBC5,$CB0E,$CA57,$C9A1,$C8EB,$C836,$C781,$C6CD,$C61A,$C567
	DC.W	$C4B4,$C402,$C351,$C2A0,$C1F0,$C141,$C092,$BFE3,$BF36,$BE88
	DC.W	$BDDC,$BD30,$BC85,$BBDB,$BB31,$BA87,$B9DF,$B937,$B890,$B7E9
	DC.W	$B744,$B69F,$B5FA,$B556,$B4B4,$B411,$B370,$B2CF,$B22F,$B190
	DC.W	$B0F1,$B054,$AFB7,$AF1A,$AE7F,$ADE4,$AD4B,$ACB1,$AC19,$AB82
	DC.W	$AAEB,$AA55,$A9C0,$A92C,$A899,$A807,$A775,$A6E4,$A654,$A5C5
	DC.W	$A537,$A4AA,$A41D,$A392,$A307,$A27D,$A1F5,$A16D,$A0E6,$A060
	DC.W	$9FDA,$9F56,$9ED3,$9E50,$9DCF,$9D4E,$9CCF,$9C50,$9BD3,$9B56
	DC.W	$9ADA,$9A60,$99E6,$996D,$98F5,$987F,$9809,$9794,$9720,$96AD
	DC.W	$963C,$95CB,$955B,$94ED,$947F,$9412,$93A7,$933C,$92D3,$926A
	DC.W	$9203,$919D,$9138,$90D3,$9070,$900E,$8FAD,$8F4D,$8EEF,$8E91
	DC.W	$8E34,$8DD9,$8D7F,$8D25,$8CCD,$8C76,$8C20,$8BCB,$8B77,$8B25
	DC.W	$8AD3,$8A83,$8A34,$89E6,$8999,$894D,$8902,$88B9,$8870,$8829
	DC.W	$87E3,$879E,$875B,$8718,$86D7,$8696,$8657,$8619,$85DD,$85A1
	DC.W	$8567,$852E,$84F6,$84BF,$8489,$8455,$8422,$83EF,$83BF,$838F
	DC.W	$8361,$8333,$8307,$82DC,$82B3,$828A,$8263,$823D,$8218,$81F5
	DC.W	$81D2,$81B1,$8191,$8172,$8155,$8139,$811E,$8104,$80EB,$80D4
	DC.W	$80BE,$80A9,$8095,$8083,$8071,$8061,$8053,$8045,$8039,$802E
	DC.W	$8024,$801B,$8014,$800D,$8009,$8005,$8002,$8001,$8001,$8002
	DC.W	$8005,$8009,$800D,$8014,$801B,$8024,$802E,$8039,$8045,$8053
	DC.W	$8061,$8071,$8083,$8095,$80A9,$80BE,$80D4,$80EB,$8104,$811E
	DC.W	$8139,$8155,$8173,$8191,$81B1,$81D2,$81F5,$8218,$823D,$8263
	DC.W	$828A,$82B3,$82DD,$8307,$8333,$8361,$838F,$83BF,$83F0,$8422
	DC.W	$8455,$8489,$84BF,$84F6,$852E,$8567,$85A1,$85DD,$861A,$8658
	DC.W	$8697,$86D7,$8718,$875B,$879F,$87E3,$882A,$8871,$88B9,$8903
	DC.W	$894D,$8999,$89E6,$8A34,$8A83,$8AD4,$8B25,$8B78,$8BCB,$8C20
	DC.W	$8C76,$8CCD,$8D26,$8D7F,$8DD9,$8E35,$8E91,$8EEF,$8F4E,$8FAE
	DC.W	$900F,$9071,$90D4,$9138,$919D,$9203,$926B,$92D3,$933D,$93A7
	DC.W	$9413,$947F,$94ED,$955C,$95CB,$963C,$96AE,$9721,$9794,$9809
	DC.W	$987F,$98F6,$996E,$99E6,$9A60,$9ADB,$9B56,$9BD3,$9C51,$9CCF
	DC.W	$9D4F,$9DCF,$9E51,$9ED3,$9F57,$9FDB,$A060,$A0E6,$A16D,$A1F5
	DC.W	$A27E,$A308,$A392,$A41E,$A4AA,$A538,$A5C6,$A655,$A6E5,$A775
	DC.W	$A807,$A89A,$A92D,$A9C1,$AA56,$AAEC,$AB82,$AC1A,$ACB2,$AD4B
	DC.W	$ADE5,$AE80,$AF1B,$AFB7,$B054,$B0F2,$B190,$B230,$B2D0,$B370
	DC.W	$B412,$B4B4,$B557,$B5FB,$B69F,$B744,$B7EA,$B891,$B938,$B9E0
	DC.W	$BA88,$BB31,$BBDB,$BC86,$BD31,$BDDD,$BE89,$BF36,$BFE4,$C092
	DC.W	$C141,$C1F1,$C2A1,$C352,$C403,$C4B5,$C567,$C61A,$C6CE,$C782
	DC.W	$C837,$C8EC,$C9A2,$CA58,$CB0F,$CBC6,$CC7E,$CD36,$CDEF,$CEA8
	DC.W	$CF62,$D01C,$D0D7,$D192,$D24E,$D30A,$D3C6,$D483,$D540,$D5FE
	DC.W	$D6BC,$D77B,$D83A,$D8F9,$D9B9,$DA79,$DB39,$DBFA,$DCBB,$DD7C
	DC.W	$DE3E,$DF00,$DFC3,$E085,$E148,$E20C,$E2CF,$E393,$E457,$E51C
	DC.W	$E5E0,$E6A5,$E76B,$E830,$E8F6,$E9BC,$EA82,$EB48,$EC0E,$ECD5
	DC.W	$ED9C,$EE63,$EF2A,$EFF2,$F0B9,$F181,$F249,$F311,$F3D9,$F4A1
	DC.W	$F569,$F632,$F6FA,$F7C3,$F88C,$F954,$FA1D,$FAE6,$FBAF,$FC78
	DC.W	$FD41,$FE0A,$FED3,$FF9C

COSINUS:
	DC.W	$7FFF,$7FFE,$7FFB,$7FF7,$7FF3,$7FEC,$7FE5,$7FDC,$7FD2,$7FC7
	DC.W	$7FBB,$7FAD,$7F9F,$7F8F,$7F7D,$7F6B,$7F57,$7F42,$7F2C,$7F15
	DC.W	$7EFC,$7EE2,$7EC7,$7EAB,$7E8D,$7E6F,$7E4F,$7E2E,$7E0B,$7DE8
	DC.W	$7DC3,$7D9D,$7D76,$7D4D,$7D24,$7CF9,$7CCD,$7C9F,$7C71,$7C41
	DC.W	$7C10,$7BDE,$7BAB,$7B77,$7B41,$7B0A,$7AD2,$7A99,$7A5F,$7A23
	DC.W	$79E6,$79A9,$796A,$7929,$78E8,$78A5,$7862,$781D,$77D7,$778F
	DC.W	$7747,$76FE,$76B3,$7667,$761A,$75CC,$757D,$752C,$74DB,$7488
	DC.W	$7435,$73E0,$738A,$7333,$72DB,$7281,$7227,$71CB,$716F,$7111
	DC.W	$70B2,$7053,$6FF2,$6F90,$6F2C,$6EC8,$6E63,$6DFD,$6D95,$6D2D
	DC.W	$6CC3,$6C59,$6BED,$6B81,$6B13,$6AA4,$6A35,$69C4,$6952,$68E0
	DC.W	$686C,$67F7,$6781,$670A,$6693,$661A,$65A0,$6525,$64AA,$642D
	DC.W	$63AF,$6331,$62B1,$6231,$61AF,$612D,$60AA,$6025,$5FA0,$5F1A
	DC.W	$5E93,$5E0B,$5D82,$5CF9,$5C6E,$5BE2,$5B56,$5AC9,$5A3B,$59AB
	DC.W	$591C,$588B,$57F9,$5767,$56D3,$563F,$55AA,$5515,$547E,$53E6
	DC.W	$534E,$52B5,$521B,$5181,$50E5,$5049,$4FAC,$4F0E,$4E70,$4DD1
	DC.W	$4D31,$4C90,$4BEE,$4B4C,$4AA9,$4A06,$4961,$48BC,$4816,$4770
	DC.W	$46C9,$4621,$4578,$44CF,$4425,$437B,$42CF,$4224,$4177,$40CA
	DC.W	$401C,$3F6E,$3EBF,$3E10,$3D5F,$3CAF,$3BFD,$3B4C,$3A99,$39E6
	DC.W	$3932,$387E,$37CA,$3714,$365F,$35A8,$34F2,$343A,$3382,$32CA
	DC.W	$3211,$3158,$309E,$2FE4,$2F29,$2E6E,$2DB3,$2CF7,$2C3A,$2B7D
	DC.W	$2AC0,$2A02,$2944,$2886,$27C7,$2708,$2648,$2588,$24C7,$2407
	DC.W	$2346,$2284,$21C2,$2100,$203E,$1F7B,$1EB8,$1DF5,$1D31,$1C6D
	DC.W	$1BA9,$1AE5,$1A20,$195B,$1896,$17D0,$170B,$1645,$157F,$14B8
	DC.W	$13F2,$132B,$1264,$119D,$10D6,$100F,$0F47,$0E7F,$0DB8,$0CF0
	DC.W	$0C28,$0B5F,$0A97,$09CF,$0906,$083D,$0775,$06AC,$05E3,$051A
	DC.W	$0451,$0388,$02BF,$01F6,$012D,$0064,$FF9B,$FED2,$FE09,$FD40
	DC.W	$FC77,$FBAE,$FAE5,$FA1C,$F954,$F88B,$F7C2,$F6FA,$F631,$F569
	DC.W	$F4A0,$F3D8,$F310,$F248,$F180,$F0B9,$EFF1,$EF2A,$EE62,$ED9B
	DC.W	$ECD5,$EC0E,$EB47,$EA81,$E9BB,$E8F5,$E82F,$E76A,$E6A5,$E5E0
	DC.W	$E51B,$E457,$E392,$E2CF,$E20B,$E148,$E085,$DFC2,$DEFF,$DE3D
	DC.W	$DD7C,$DCBA,$DBF9,$DB38,$DA78,$D9B8,$D8F8,$D839,$D77A,$D6BC
	DC.W	$D5FD,$D540,$D482,$D3C5,$D309,$D24D,$D191,$D0D6,$D01C,$CF61
	DC.W	$CEA8,$CDEE,$CD36,$CC7D,$CBC5,$CB0E,$CA57,$C9A1,$C8EB,$C836
	DC.W	$C781,$C6CD,$C61A,$C567,$C4B4,$C402,$C351,$C2A0,$C1F0,$C141
	DC.W	$C092,$BFE3,$BF36,$BE89,$BDDC,$BD30,$BC85,$BBDB,$BB31,$BA88
	DC.W	$B9DF,$B937,$B890,$B7E9,$B744,$B69F,$B5FA,$B557,$B4B4,$B411
	DC.W	$B370,$B2CF,$B22F,$B190,$B0F1,$B054,$AFB7,$AF1A,$AE7F,$ADE4
	DC.W	$AD4B,$ACB2,$AC19,$AB82,$AAEB,$AA55,$A9C0,$A92C,$A899,$A807
	DC.W	$A775,$A6E4,$A654,$A5C5,$A537,$A4AA,$A41D,$A392,$A307,$A27D
	DC.W	$A1F5,$A16D,$A0E6,$A060,$9FDA,$9F56,$9ED3,$9E50,$9DCF,$9D4F
	DC.W	$9CCF,$9C50,$9BD3,$9B56,$9ADA,$9A60,$99E6,$996D,$98F5,$987F
	DC.W	$9809,$9794,$9720,$96AE,$963C,$95CB,$955B,$94ED,$947F,$9412
	DC.W	$93A7,$933C,$92D3,$926A,$9203,$919D,$9138,$90D3,$9070,$900E
	DC.W	$8FAD,$8F4D,$8EEF,$8E91,$8E34,$8DD9,$8D7F,$8D25,$8CCD,$8C76
	DC.W	$8C20,$8BCB,$8B77,$8B25,$8AD3,$8A83,$8A34,$89E6,$8999,$894D
	DC.W	$8902,$88B9,$8870,$8829,$87E3,$879E,$875B,$8718,$86D7,$8696
	DC.W	$8657,$8619,$85DD,$85A1,$8567,$852E,$84F6,$84BF,$8489,$8455
	DC.W	$8422,$83EF,$83BF,$838F,$8361,$8333,$8307,$82DC,$82B3,$828A
	DC.W	$8263,$823D,$8218,$81F5,$81D2,$81B1,$8191,$8173,$8155,$8139
	DC.W	$811E,$8104,$80EB,$80D4,$80BE,$80A9,$8095,$8083,$8071,$8061
	DC.W	$8053,$8045,$8039,$802E,$8024,$801B,$8014,$800D,$8009,$8005
	DC.W	$8002,$8001,$8001,$8002,$8005,$8009,$800D,$8014,$801B,$8024
	DC.W	$802E,$8039,$8045,$8053,$8061,$8071,$8083,$8095,$80A9,$80BE
	DC.W	$80D4,$80EB,$8104,$811E,$8139,$8155,$8173,$8191,$81B1,$81D2
	DC.W	$81F5,$8218,$823D,$8263,$828A,$82B3,$82DD,$8307,$8333,$8361
	DC.W	$838F,$83BF,$83F0,$8422,$8455,$8489,$84BF,$84F6,$852E,$8567
	DC.W	$85A1,$85DD,$861A,$8658,$8697,$86D7,$8718,$875B,$879F,$87E3
	DC.W	$8829,$8871,$88B9,$8903,$894D,$8999,$89E6,$8A34,$8A83,$8AD4
	DC.W	$8B25,$8B78,$8BCB,$8C20,$8C76,$8CCD,$8D26,$8D7F,$8DD9,$8E35
	DC.W	$8E91,$8EEF,$8F4E,$8FAE,$900F,$9071,$90D4,$9138,$919D,$9203
	DC.W	$926B,$92D3,$933D,$93A7,$9413,$947F,$94ED,$955C,$95CB,$963C
	DC.W	$96AE,$9721,$9794,$9809,$987F,$98F6,$996E,$99E6,$9A60,$9ADB
	DC.W	$9B56,$9BD3,$9C51,$9CCF,$9D4F,$9DCF,$9E51,$9ED3,$9F57,$9FDB
	DC.W	$A060,$A0E6,$A16D,$A1F5,$A27E,$A308,$A392,$A41E,$A4AA,$A538
	DC.W	$A5C6,$A655,$A6E5,$A775,$A807,$A899,$A92D,$A9C1,$AA56,$AAEC
	DC.W	$AB82,$AC1A,$ACB2,$AD4B,$ADE5,$AE80,$AF1B,$AFB7,$B054,$B0F2
	DC.W	$B190,$B230,$B2D0,$B370,$B412,$B4B4,$B557,$B5FB,$B69F,$B744
	DC.W	$B7EA,$B890,$B938,$B9DF,$BA88,$BB31,$BBDB,$BC86,$BD31,$BDDD
	DC.W	$BE89,$BF36,$BFE4,$C092,$C141,$C1F1,$C2A1,$C351,$C403,$C4B5
	DC.W	$C567,$C61A,$C6CE,$C782,$C837,$C8EC,$C9A2,$CA58,$CB0F,$CBC6
	DC.W	$CC7E,$CD36,$CDEF,$CEA8,$CF62,$D01C,$D0D7,$D192,$D24E,$D30A
	DC.W	$D3C6,$D483,$D540,$D5FE,$D6BC,$D77B,$D839,$D8F9,$D9B8,$DA78
	DC.W	$DB39,$DBFA,$DCBB,$DD7C,$DE3E,$DF00,$DFC2,$E085,$E148,$E20C
	DC.W	$E2CF,$E393,$E457,$E51C,$E5E0,$E6A5,$E76A,$E830,$E8F6,$E9BB
	DC.W	$EA82,$EB48,$EC0E,$ECD5,$ED9C,$EE63,$EF2A,$EFF2,$F0B9,$F181
	DC.W	$F249,$F311,$F3D9,$F4A1,$F569,$F632,$F6FA,$F7C3,$F88B,$F954
	DC.W	$FA1D,$FAE6,$FBAF,$FC78,$FD41,$FE0A,$FED3,$FF9C,$0065,$012E
	DC.W	$01F7,$02C0,$0389,$0452,$051B,$05E4,$06AD,$0775,$083E,$0907
	DC.W	$09CF,$0A98,$0B60,$0C28,$0CF0,$0DB8,$0E80,$0F48,$100F,$10D7
	DC.W	$119E,$1265,$132C,$13F2,$14B9,$157F,$1645,$170B,$17D1,$1896
	DC.W	$195C,$1A20,$1AE5,$1BAA,$1C6E,$1D32,$1DF5,$1EB9,$1F7C,$203E
	DC.W	$2101,$21C3,$2285,$2346,$2407,$24C8,$2588,$2648,$2708,$27C7
	DC.W	$2886,$2945,$2A03,$2AC1,$2B7E,$2C3B,$2CF7,$2DB3,$2E6F,$2F2A
	DC.W	$2FE5,$309F,$3159,$3212,$32CB,$3383,$343B,$34F2,$35A9,$365F
	DC.W	$3715,$37CA,$387F,$3933,$39E7,$3A9A,$3B4C,$3BFE,$3CAF,$3D60
	DC.W	$3E10,$3EC0,$3F6F,$401D,$40CB,$4178,$4224,$42D0,$437B,$4426
	DC.W	$44D0,$4579,$4621,$46C9,$4770,$4817,$48BD,$4962,$4A06,$4AAA
	DC.W	$4B4D,$4BEF,$4C90,$4D31,$4DD1,$4E70,$4F0F,$4FAD,$504A,$50E6
	DC.W	$5181,$521C,$52B6,$534F,$53E7,$547E,$5515,$55AB,$5640,$56D4
	DC.W	$5767,$57FA,$588B,$591C,$59AC,$5A3B,$5AC9,$5B56,$5BE3,$5C6E
	DC.W	$5CF9,$5D83,$5E0C,$5E93,$5F1A,$5FA1,$6026,$60AA,$612D,$61B0
	DC.W	$6231,$62B2,$6331,$63B0,$642D,$64AA,$6526,$65A1,$661A,$6693
	DC.W	$670B,$6782,$67F7,$686C,$68E0,$6953,$69C4,$6A35,$6AA5,$6B13
	DC.W	$6B81,$6BEE,$6C59,$6CC4,$6D2D,$6D96,$6DFD,$6E63,$6EC9,$6F2D
	DC.W	$6F90,$6FF2,$7053,$70B3,$7111,$716F,$71CC,$7227,$7282,$72DB
	DC.W	$7333,$738A,$73E0,$7435,$7489,$74DB,$752D,$757D,$75CC,$761A
	DC.W	$7667,$76B3,$76FE,$7747,$7790,$77D7,$781D,$7862,$78A5,$78E8
	DC.W	$7929,$796A,$79A9,$79E7,$7A23,$7A5F,$7A99,$7AD2,$7B0A,$7B41
	DC.W	$7B77,$7BAB,$7BDF,$7C11,$7C41,$7C71,$7CA0,$7CCD,$7CF9,$7D24
	DC.W	$7D4D,$7D76,$7D9D,$7DC3,$7DE8,$7E0B,$7E2E,$7E4F,$7E6F,$7E8E
	DC.W	$7EAB,$7EC7,$7EE2,$7EFC,$7F15,$7F2C,$7F42,$7F57,$7F6B,$7F7D
	DC.W	$7F8F,$7F9F,$7FAD,$7FBB,$7FC7,$7FD2,$7FDC,$7FE5,$7FEC,$7FF3
	DC.W	$7FF7,$7FFB,$7FFE,$7FFF

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DMACONR = $2

BLTCON0 = $40
BLTCON1 = $42
BLTCPTH = $48
BLTAPTL = $52
BLTDPTH = $54
BLTCMOD = $60
BLTBMOD = $62
BLTAMOD = $64
BLTDMOD = $66
BLTSIZE = $58
BLTCDAT = $70
BLTBDAT = $72
BLTADAT = $74
BLTAFWM = $44

BLTAPT	= $50
BLTCPT	= $48
BLTDPT	= $54
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


	IFND	HARDWARE_BLIT_I
HARDWARE_BLIT_I	=	1
	RSRESET
bltnode		RS.B	0
bn_n		RS.L	1
bn_function	RS.L	1
bn_stat		RS.B	1
bn_dummy	RS.B	1
bn_blitsize	RS.W	1
bn_beamsync	RS.W	1
bn_cleanup	RS.L	1
bn_SIZEOF	RS.W	0
CLEANMEn	=	6
CLEANME		=	1<<CLEANMEn
HSIZEBITS	=	6
VSIZEBITS	=	16-HSIZEBITS
HSIZEMASK	=	$3f
VSIZEMASK	=	$3FF
MAXBYTESPERROW	=	128
ABC	=	$80
ABNC	=	$40
ANBC	=	$20
ANBNC	=	$10
NABC	=	$8
NABNC	=	$4
NANBC	=	$2
NANBNC	=	$1
BC0B_DEST	=	8
BC0B_SRCC	=	9
BC0B_SRCB	=	10
BC0B_SRCA	=	11
BC0F_DEST	=	$100
BC0F_SRCC	=	$200
BC0F_SRCB	=	$400
BC0F_SRCA	=	$800
BC1F_DESC	=	2
DEST	=	$100
SRCC	=	$200
SRCB	=	$400
SRCA	=	$800
ASHIFTSHIFT=	12
BSHIFTSHIFT=	12
;LINEMODE=	$1
FILL_OR	=	$8
FILL_XOR=	$10
FILL_CARRYIN=	$4
ONEDOT	=	$2
OVFLAG	=	$20
SIGNFLAG=	$40
BLITREVERSE=	$2
SUD	=	$10
SUL	=	$8
AUL	=	$4
OCTANT8	=	24
OCTANT7	=	4
OCTANT6	=	12
OCTANT5	=	28
OCTANT4	=	20
OCTANT3	=	8
OCTANT2	=	0
OCTANT1	=	16
	ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;----------------------------------------------------------------------------
*****************************************
*					*
* PRORUNNER V1.0			*
* --------------			*
* CODED BY COSMOS OF SANITY IN 1992	*
*					*
*****************************************
*					*
* Supporting the following effects:	*
*					*
*	- Fade Sound in/out		*
*	- Finetune			*
*	- Normal play or Arpeggio	*
*	- Slide Frequenz up		*
*	- Slide	Frequenz down		*
*	- Tone Portamento		*
*	- Vibrato			*
*	- Tone Portamento+Volume Slide	*
*	- Vibrato + Volume Slide	*
*	- Tremolo			*
*	- Set SampleOffset		*
*	- Volume Slide			*
*	- Position Jump			*
*	- Set Volume			*
*	- Pattern Break			*
*	- Set Speed			*
* - E-Commands:				*
*	- Set Filter			*
*	- Fine Slide Up			*
*	- Fine Slide Down		*
*	- Glissando Control		*
*	- Set Vibrato Waveform		*
*	- Set Finetune			*
*	- Set Loop / Jump to Loop	*
*	- Set Tremolo Waveform		*
*	- Retrig Note			*
*	- Fine VolumeSlide Up		*
*	- Fine VolumeSlide Down		*
*	- NoteCut			*
*	- NoteDelay			*
*	- PatternDelay			*
*	- FunkRepeat			*
*					*
*****************************************

YES				EQU	1
NO				EQU	0
INCLUDEFADINGROUTINE		EQU	YES

SAMPLELENGTHOFFSET		EQU	4
SAMPLEVOLUMEOFFSET		EQU	6
SAMPLEREPEATPOINTOFFSET		EQU	8
SAMPLEWITHLOOP			EQU	12
SAMPLEREPEATLENGTHOFFSET	EQU	14
SAMPLEFINETUNEOFFSET		EQU	16

* Init-Routine *******************************************************

pr_init:
	lea	pr_framecounter(pc),a6
	move.l	pr_module(pc),a0
	cmp.l	#0,a0
	bne.s	pr_init1
	rts
pr_init1:
	cmp.l	#'M.K.',1080(a0)
	beq.s	pr_init2
	cmp.l	#'SNT.',1080(a0)
	beq.s	pr_init2
	rts
pr_init2:
	lea	20(a0),a1
	lea	pr_Sampleinfos(pc),a2
	moveq.l	#32,d7
	moveq	#30,d0
pr_init3:
	lea	22(a1),a1		; Samplenamen überspringen
	move.w	(a1)+,SAMPLELENGTHOFFSET(a2)	; Samplelength in Words
	lea	pr_periods(pc),a3
	move.b	(a1)+,d2		; Finetuning
	and.w	#$f,d2
	mulu.w	#36*2,d2
	add.l	d2,a3
	move.l	a3,SAMPLEFINETUNEOFFSET(a2)
	moveq	#0,d1
	move.b	(a1)+,d1
	move.w	d1,SAMPLEVOLUMEOFFSET(a2)	; Volume
	moveq.l	#0,d1
	move.w	(a1)+,d1		; Repeatpoint in Bytes
	add.l	d1,d1
	move.l	d1,SAMPLEREPEATPOINTOFFSET(a2)
	move.w	(a1)+,d1
	clr.w	SAMPLEWITHLOOP(a2)
	cmp.w	#1,d1
	bls.s	pr_init3_2
	addq.w	#1,SAMPLEWITHLOOP(a2)
pr_init3_2:
	move.w	d1,SAMPLEREPEATLENGTHOFFSET(a2)	; Repeatlength
	add.l	d7,a2
	dbf	d0,pr_init3

	moveq	#0,d0
	move.b	950(a0),d0		; Number of patterns
	subq.w	#1,d0
	move.w	d0,pr_highestpattern-pr_framecounter(a6)
	moveq.l	#0,d1
	lea	952(a0),a1		; 1. Patternpos
	lea	1084(a0),a2		; 1. Patterndata
	lea	pr_Patternpositions(pc),a3
pr_init4:
	move.b	(a1)+,d2		; x. Patternpos
	moveq.l	#0,d3
	move.b	d2,d3
	lsl.l	#8,d3
	lsl.l	#2,d3
	add.l	a2,d3
	move.l	d3,(a3)+
	dbf	d0,pr_init4

	lea	952(a0),a1
	moveq.l	#0,d1
	moveq	#127,d0
pr_init4_1:
	move.b	(a1)+,d2
	cmp.b	d1,d2			; Highest Pattern ?
	bls.s	pr_init4_2
	move.b	d2,d1
pr_init4_2:
	dbf	d0,pr_init4_1
	addq.w	#1,d1
	lsl.l	#8,d1
	lsl.l	#2,d1			; Highest Pattern * 1024 Bytes
	move.l	a0,d2
	add.l	#1084,d2
	add.l	d1,d2
	lea	pr_Sampleinfos(pc),a3
	lea	pr_Sampleinfos+SAMPLELENGTHOFFSET(pc),a2
	moveq.l	#32,d7
	move.l	d2,(a3)
	moveq	#29,d0
pr_init4_3:
	move.l	(a3),d1
	add.l	d7,a3
	moveq.l	#0,d2
	move.w	(a2),d2
	add.l	d7,a2
	add.l	d2,d2
	add.l	d2,d1
	move.l	d1,(a3)
	dbf	d0,pr_init4_3

	lea	pr_Sampleinfos(pc),a2
	lea	pr_Sampleinfos+SAMPLEREPEATPOINTOFFSET(pc),a3
	moveq.l	#32,d7
	moveq	#30,d0
pr_init4_4:
	move.l	(a2),d1
	add.l	d1,(a3)
	add.l	d7,a2
	add.l	d7,a3
	dbf	d0,pr_init4_4
	
	cmp.l	#'SNT.',1080(a0)
	beq.w	pr_init7
	
	lea	1084(a0),a1
	move.l	pr_Sampleinfos(pc),a2
	move.b	#$f0,d6
	move.w	#$fff,d7
pr_init5:
	move.b	(a1),d0
	move.b	2(a1),d1
	move.w	(a1),d2
	and.w	d7,2(a1)
	and.w	d7,d2
	
	and.b	d6,d0
	lsr.b	#4,d1
	or.b	d1,d0
	move.b	d0,(a1)
	
	tst.w	d2
	beq.s	pr_init5_3
	lea	pr_periods(pc),a4
	moveq	#0,d1
pr_init5_2:
	addq.w	#1,d1
	cmp.w	(a4)+,d2
	bne.s	pr_init5_2
	move.b	d1,1(a1)
pr_init5_3:
	addq.l	#4,a1
	cmp.l	a2,a1
	blt.s	pr_init5	

	move.l	#'SNT.',1080(a0)
pr_init7:
	lea	pr_Arpeggiofastlist(pc),a2
	lea	pr_Arpeggiofastlistperiods(pc),a1
	lea	35*2(a1),a1		; to the end of list...
	moveq	#0,d0
	moveq	#35,d1
	move.w	#999,d2
	moveq	#0,d6
pr_init8:
	move.w	-(a1),d7
	addq.w	#1,d6
pr_init8_2:
	cmp.w	d7,d0
	blt.s	pr_init8_4
	subq.w	#1,d1
	tst.b	d1
	bne.s	pr_init8
pr_init8_3:
	move.b	d1,(a2)+
	dbf	d2,pr_init8_3
	bra.s	pr_init8_5	
pr_init8_4:
	move.b	d1,(a2)+
	addq.w	#1,d0
	dbf	d2,pr_init8_2
pr_init8_5:

	lea	pr_channel0(pc),a1
	move.w	#1,(a1)
	move.w	#1,pr_channel1-pr_channel0(a1)
	move.w	#1,pr_channel2-pr_channel0(a1)
	move.w	#1,pr_channel3-pr_channel0(a1)
	addq.l	#2,a1
	moveq	#(pr_channel1-pr_channel0)/2-2,d0
pr_init9_2:
	clr.w	(a1)
	clr.w	pr_channel1-pr_channel0(a1)
	clr.w	pr_channel2-pr_channel0(a1)
	clr.w	pr_channel3-pr_channel0(a1)
	addq.l	#2,a1
	dbf	d0,pr_init9_2

	lea	pr_fastperiodlist(pc),a1
	lea	pr_periods(pc),a2
	move.l	a2,(a1)
	moveq.l	#36*2,d1
	moveq	#14,d0
pr_init9_3:
	move.l	(a1)+,d2
	add.l	d1,d2
	move.l	d2,(a1)
	dbf	d0,pr_init9_3
		
	lea	pr_arpeggiofastdivisionlist(pc),a1
	moveq	#0,d1
	move.w	#$ff,d0
pr_init9_4:
	move.b	d1,(a1)+
	subq.b	#1,d1
	btst	#7,d1
	beq.s	pr_init9_4_2
	moveq	#2,d1
pr_init9_4_2:
	dbf	d0,pr_init9_4
	
	move.w	#6,pr_speed-pr_framecounter(a6)
	move.w	pr_speed(pc),(a6)
	clr.w	pr_Patternct-pr_framecounter(a6)
	move.w	pr_highestpattern(pc),d0
	move.w	pr_startposition(pc),d1
	blt.s	pr_init9_5
	cmp.w	d0,d1
	bls.s	pr_init9_5_2
pr_init9_5:
	clr.w	pr_startposition-pr_framecounter(a6)
pr_init9_5_2:
	move.w	pr_startposition(pc),pr_currentpattern-pr_framecounter(a6)
	
	lea	pr_Patternpositions(pc),a3
	move.l	a3,d0
	moveq.l	#0,d1
	move.w	pr_startposition(pc),d1
	lsl.l	#2,d1
	add.l	d1,d0
	move.l	d0,pr_Patternpt-pr_framecounter(a6)
	move.l	pr_Patternpt(pc),a5
	move.l	(a5),pr_Currentposition-pr_framecounter(a6)
	
	lea	$dff000,a5
	lea	$bfd000,a0
	move.w	#$2000,$9c(a5)
	move.l	$78.w,pr_old78-pr_framecounter(a6)
	lea	pr_int(pc),a3
	move.l	a3,$78.w
	move.b	#$7f,$d00(a0)
	move.b	#$08,$e00(a0)
	move.b	#$80,$400(a0)
	move.b	#$01,$500(a0)
pr_init10:
	btst	#0,$bfdd00
	beq.s	pr_init10
	move.b	#$81,$d00(a0)
	move.w	#$a000,$9a(a5)
	move.w	#$f,$96(a5)
	clr.w	$a8(a5)
	clr.w	$b8(a5)
	clr.w	$c8(a5)
	clr.w	$d8(a5)
	bset	#1,$bfe001
	rts

* End-Routine *********************************************************

pr_end:
	lea	$dff000,a5
	move.w	#$f,$96(a5)
	clr.w	$a8(a5)
	clr.w	$b8(a5)
	clr.w	$c8(a5)
	clr.w	$d8(a5)
	move.w	#$2000,$9a(a5)
	move.l	pr_old78(pc),$78.w
	bclr	#1,$bfe001
	rts

* Music-Fading ********************************************************

	IFEQ	INCLUDEFADINGROUTINE-YES
pr_fademusic:	macro
	lea	pr_musicfadect(pc),a0
	move.w	pr_musicfadedirection(pc),d0
	add.w	d0,(a0)
	cmp.w	#64,(a0)
	bls.s	pr_fademusicend
	bgt.s	pr_fademusictoohigh
	clr.w	(a0)
	clr.w	pr_musicfadedirection-pr_musicfadect(a0)
	rts
pr_fademusictoohigh:
	move.w	#64,(a0)
	clr.w	pr_musicfadedirection-pr_musicfadect(a0)
pr_fademusicend:
	endm

pr_musicfadect:		dc.w	64
pr_musicfadedirection:	dc.w	0
	ENDC
	
* MACROS **************************************************************

pr_playchannel:	macro			; do not change: a2-a6
		moveq	#0,d0
		move.b	2(a6),d0
		add.b	d0,d0
		lea	pr_playchannellist(pc),a0
		move.w	(a0,d0.w),d0
		jsr	(a0,d0.w)
		endm

pr_checkchannel:	macro
		bsr.w	pr_checkfunkrepeat
		moveq	#0,d0
		move.b	4(a4),d0
		add.b	d0,d0
		lea	pr_Effectchecklist(pc),a0
		move.w	(a0,d0.w),d0
		jsr	(a0,d0.w)
		endm
		
* Music-Routine *******************************************************

pr_music:
	IFEQ	INCLUDEFADINGROUTINE-YES
	pr_fademusic
	ENDC
	lea	$dff000,a5

	lea	pr_framecounter(pc),a2
	subq.w	#1,(a2)
	beq.s	pr_music2
	bsr.w	pr_checkeffects
	rts
pr_music2:
	cmp.b	#1,pr_patterndelaytime-pr_framecounter+1(a2)
	blt.s	pr_music2_2
	bsr.w	pr_checkeffects
	bra.w	pr_music2_9
pr_music2_2:

	move.l	pr_Currentposition(pc),a6
	lea	pr_Channel0(pc),a4
	lea	$a0(a5),a3
	moveq	#1,d7
	pr_playchannel
	move.w	2(a4),6(a3)
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	12(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	12(a4),8(a3)
	ENDC
	
	addq.l	#4,a6
	lea	pr_Channel1(pc),a4
	lea	$b0(a5),a3
	moveq	#2,d7
	pr_playchannel
	move.w	2(a4),6(a3)
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	12(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	12(a4),8(a3)
	ENDC

	addq.l	#4,a6
	lea	pr_Channel2(pc),a4
	lea	$c0(a5),a3
	moveq	#4,d7
	pr_playchannel
	move.w	2(a4),6(a3)
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	12(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	12(a4),8(a3)
	ENDC

	addq.l	#4,a6
	lea	pr_Channel3(pc),a4
	lea	$d0(a5),a3
	moveq	#8,d7
	pr_playchannel
	move.w	2(a4),6(a3)
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	12(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	12(a4),8(a3)
	ENDC
	
	lea	pr_int(pc),a0
	move.l	a0,$78.w
	move.b	#$19,$bfde00

pr_music2_9:
	move.w	pr_speed(pc),(a2)
	tst.w	pr_patternhasbeenbreaked-pr_framecounter(a2)
	bne.s	pr_music3
	tst.w	pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	subq.w	#1,pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	bra.s	pr_nonextpattern
pr_music3:
	clr.w	pr_patternhasbeenbreaked-pr_framecounter(a2)
	tst.w	pr_patterndelaytime-pr_framecounter(a2)
	beq.s	pr_music3_1
	subq.w	#1,pr_patterndelaytime-pr_framecounter(a2)
pr_music3_1:
	moveq.l	#16,d0
	add.l	d0,pr_Currentposition-pr_framecounter(a2)
	lea	pr_Patternct(pc),a1
	addq.w	#1,(a1)
	moveq	#64,d1
	cmp.w	(a1),d1
	bgt.s	pr_nonextpattern
	sub.w	d1,(a1)
	moveq.l	#0,d1
	move.w	(a1),d1
	lsl.w	#4,d1
	addq.l	#4,pr_patternpt-pr_framecounter(a2)
	lea	pr_currentpattern(pc),a0
	addq.w	#1,(a0)
	move.w	(a0),d0
	cmp.w	pr_highestpattern-pr_framecounter(a2),d0
	bls.s	pr_nohighestpattern
	lea	pr_patternpositions(pc),a1
	move.l	a1,pr_Patternpt-pr_framecounter(a2)
	clr.w	(a0)
pr_nohighestpattern:
	move.l	pr_Patternpt-pr_framecounter(a2),a6
	move.l	(a6),d0
	add.l	d1,d0
	move.l	d0,pr_currentposition-pr_framecounter(a2)
pr_nonextpattern:
	rts

	
pr_int:
	tst.b	$bfdd00
	move.b	#$19,$bfde00
	move.w	pr_dmacon(pc),$dff096
	move.w	#$2000,$dff09c
	add.l	#pr_int2-pr_int,$78.w
	rte

pr_int2:
	tst.b	$bfdd00
	movem.l	a5-a6,-(sp)
	lea	$dff000,a5
	lea	pr_Channel0+6(pc),a6
	move.l	(a6),$a0(a5)
	move.w	4(a6),$a4(a5)
	move.l	pr_Channel1-pr_Channel0(a6),$b0(a5)
	move.w	4+pr_Channel1-pr_Channel0(a6),$b4(a5)
	move.l	pr_Channel2-pr_Channel0(a6),$c0(a5)
	move.w	4+pr_Channel2-pr_Channel0(a6),$c4(a5)
	move.l	pr_Channel3-pr_Channel0(a6),$d0(a5)
	move.w	4+pr_Channel3-pr_Channel0(a6),$d4(a5)
	move.w	#$2000,$9c(a5)
	move.l	pr_old78(pc),78.w
	movem.l	(sp)+,a5-a6
	rte
		
pr_playchannellist:
	dc.w	pr_playnormalchannel-pr_playchannellist		; 0
	dc.w	pr_playnormalchannel-pr_playchannellist		; 1
	dc.w	pr_playnormalchannel-pr_playchannellist		; 2
	dc.w	pr_playtpchannel-pr_playchannellist		; 3
	dc.w	pr_playnormalchannel-pr_playchannellist		; 4
	dc.w	pr_playtpchannel-pr_playchannellist		; 5
	dc.w	pr_playnormalchannel-pr_playchannellist		; 6
	dc.w	pr_playnormalchannel-pr_playchannellist		; 7
	dc.w	pr_playnormalchannel-pr_playchannellist		; 8
	dc.w	pr_playsochannel-pr_playchannellist		; 9
	dc.w	pr_playnormalchannel-pr_playchannellist		; A
	dc.w	pr_playnormalchannel-pr_playchannellist		; B
	dc.w	pr_playnormalchannel-pr_playchannellist		; C
	dc.w	pr_playnormalchannel-pr_playchannellist		; D
	dc.w	pr_playnormalchannel-pr_playchannellist		; E
	dc.w	pr_playnormalchannel-pr_playchannellist		; F
	
* KANAL NORMAL SPIELEN ************************************************

pr_playnormalchannel:
	lea	pr_Sampleinfos(pc),a0
	move.l	a0,a1
	lea	Samplefinetuneoffset(a1),a1
	moveq	#0,d1
	move.b	1(a6),d1
	moveq	#0,d0
	move.b	(a6),d0
	beq.s	pr_playnormalnonewsample	; Irgendein Sample ?
	move.w	d0,(a4)				; Trage Samplenummer ein
	tst.b	d1
	bne.s	pr_playnormalsample
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playnormalchannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalchannel2:
	move.w	(a0)+,10(a4)
	bra.w	pr_playnormalnonewperiod
pr_playnormalsample:
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,(a3)		; Setze Samplestart
	move.w	(a0)+,4(a3)		; Setze Audiodatenlänge
	move.w	(a0)+,12(a4)		; Setze Samplelautstärke
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playnormalsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.s	pr_playnormalnewperiod
pr_playnormalnonewsample:
	clr.l	14(a4)
	tst.b	d1
	beq.s	pr_playnormalnonewperiod	; Irgend ne neue Frequenz ?
	move.w	(a4),d0			; Alte Samplenummer holen
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,(a3)		; Setze Samplestart
	move.w	(a0)+,4(a3)		; Setze Audiodatenlänge
	addq.l	#2,a0
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playnormalnonewsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playnormalnonewsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
pr_playnormalnewperiod:
	subq.b	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),2(a4)		; Frequenz eintragen
pr_playnormalnonewperiod:
	move.w	2(a6),4(a4)
	bra.w	pr_playeffect

* KANAL MIT OFFSET SPIELEN *********************************************

pr_playsochannel:
	lea	pr_Sampleinfos(pc),a0
	move.l	a0,a1
	lea	Samplefinetuneoffset(a1),a1
	moveq	#0,d1
	move.b	1(a6),d1
	moveq	#0,d0
	move.b	(a6),d0
	beq.w	pr_playsononewsample	; Irgendein Sample ?
	move.w	d0,(a4)				; Trage Samplenummer ein
	tst.b	d1
	bne.s	pr_playsosample
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsochannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsochannel2:
	move.w	(a0)+,10(a4)
	bra.w	pr_playsononewperiod
pr_playsosample:
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	moveq.l	#0,d6
	move.b	3(a6),d6
	lsl.w	#7,d6
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,d2
	move.w	(a0)+,d3
	cmp.w	d3,d6
	bge.s	pr_playsosample2
	sub.w	d6,d3
	add.l	d6,d6
	add.l	d6,d2
	move.l	d2,(a3)			; Setze Samplestart
	move.w	d3,4(a3)		; Setze Audiodatenlänge
	move.w	(a0)+,12(a4)		; Setze Samplelautstärke
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playsosample1
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample1:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.w	pr_playsonewperiod
pr_playsosample2:
	move.w	(a0)+,12(a4)
	move.l	(a0),(a3)
	move.w	4(a0),4(a3)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsosample4
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample4:
	move.w	(a0)+,10(a4)
	bra.s	pr_playsonewperiod
pr_playsononewsample:
	clr.l	14(a4)
	tst.b	d1
	beq.w	pr_playsononewperiod	; Irgend ne neue Frequenz ?
	move.w	(a4),d0			; Alte Samplenummer holen
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	moveq.l	#0,d6
	move.b	3(a6),d6
	lsl.w	#7,d6
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	move.l	(a0)+,d2
	move.w	(a0)+,d3
	cmp.w	d3,d6
	bge.s	pr_playsosample3
	sub.w	d6,d3
	add.l	d6,d6
	add.l	d6,d2
	move.l	d2,(a3)			; Setze Samplestart
	move.w	d3,4(a3)		; Setze Audiodatenlänge
	addq.l	#2,a0
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Samplerepeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playsononewsample2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsononewsample2:
	move.w	(a0)+,10(a4)		; Samplerepeatlength eintragen
	bra.s	pr_playsonewperiod
pr_playsosample3:
	addq.l	#2,a0
	move.l	(a0),(a3)
	move.w	4(a0),4(a3)
	move.l	(a0)+,d2
	move.l	d2,6(a4)
	tst.w	(a0)+
	beq.s	pr_playsosample5
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playsosample5:
	move.w	(a0)+,10(a4)
	bra.w	pr_playsonewperiod
pr_playsonewperiod:
	subq.w	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),2(a4)		; Frequenz eintragen
pr_playsononewperiod:
	move.w	2(a6),4(a4)
	bra.w	pr_playeffect

* Kanal spielen mit TONE PORTAMENTO **********************************

pr_playtpchannel:
	lea	pr_Sampleinfos(pc),a0
	move.l	a0,a1
	lea	Samplefinetuneoffset(a1),a1
	moveq	#0,d1
	move.b	1(a6),d1
	moveq	#0,d0
	move.b	(a6),d0
	beq.s	pr_playtpnonewsample	; Irgendein Sample ?
	move.w	d0,(a4)			; Trage Samplenummer ein
	subq.b	#1,d0
	lsl.l	#5,d0
	add.l	d0,a0
	addq.l	#6,a0
	move.w	(a0)+,12(a4)		; Lautstärke eintragen
	move.l	(a0)+,d2
	move.l	d2,6(a4)		; Repeatpoint eintragen
	tst.w	(a0)+
	beq.s	pr_playtpchannel2
	move.l	d2,36(a4)
	move.l	d2,40(a4)
pr_playtpchannel2:
	move.w	(a0)+,10(a4)		; Repeatlength eintragen
pr_playtpnonewsample:
	tst.b	d1
	beq.s	pr_playtpnonewperiod	; Irgend ne neue Frequenz ?
pr_playtpnewperiod:
	move.w	2(a4),14(a4)
	subq.w	#1,d1
	add.b	d1,d1
	move.w	(a4),d0
	subq.b	#1,d0
	lsl.w	#5,d0
	move.l	(a1,d0.w),a1
	move.w	(a1,d1.w),d2
	move.w	d2,16(a4)		; Frequenz eintragen
	bra.s	pr_playtpallowed
pr_playtpnonewperiod:
	tst.w	16(a4)
	bne.s	pr_playtpallowed
	clr.w	14(a4)
	clr.l	26(a4)
pr_playtpallowed:
	move.w	2(a6),4(a4)
	bra.w	pr_playeffect

pr_playeffect:
	bsr.w	pr_checkfunkrepeat
	moveq	#0,d0
	move.b	2(a6),d0
	add.b	d0,d0
	lea	pr_normaleffectlist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
pr_playnoeffect:
	rts

pr_normaleffectlist:
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 0
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 1
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 2
	dc.w	pr_preptoneportamento-pr_normaleffectlist	; 3
	dc.w	pr_prepvibrato-pr_normaleffectlist		; 4
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 5
	dc.w	pr_prepvibandvolslide-pr_normaleffectlist	; 6
	dc.w	pr_preptremolo-pr_normaleffectlist		; 7
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 8
	dc.w	pr_playnoeffect-pr_normaleffectlist		; 9
	dc.w	pr_playnoeffect-pr_normaleffectlist		; A
	dc.w	pr_jumptopattern-pr_normaleffectlist		; B
	dc.w	pr_newvolume-pr_normaleffectlist		; C
	dc.w	pr_patternbreak-pr_normaleffectlist		; D
	dc.w	pr_play_e_command-pr_normaleffectlist		; E
	dc.w	pr_newspeed-pr_normaleffectlist			; F

pr_play_e_command:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	add.b	d0,d0
	lea	pr_e_commandeffectlist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
	
pr_e_commandeffectlist:
	dc.w	pr_setfilter-pr_e_commandeffectlist		; 0
	dc.w	pr_fineslideup-pr_e_commandeffectlist		; 1
	dc.w	pr_fineslidedown-pr_e_commandeffectlist		; 2
	dc.w	pr_setglissandocontrol-pr_e_commandeffectlist	; 3
	dc.w	pr_setvibratowaveform-pr_e_commandeffectlist	; 4
	dc.w	pr_playfinetune-pr_e_commandeffectlist		; 5
	dc.w	pr_jumptoloop-pr_e_commandeffectlist		; 6
	dc.w	pr_settremolowaveform-pr_e_commandeffectlist	; 7
	dc.w	pr_playnoeffect-pr_e_commandeffectlist		; 8
	dc.w	pr_prepretrignote-pr_e_commandeffectlist	; 9
	dc.w	pr_finevolumeslideup-pr_e_commandeffectlist	; A
	dc.w	pr_finevolumeslidedown-pr_e_commandeffectlist	; B
	dc.w	pr_prepnotecut-pr_e_commandeffectlist		; C
	dc.w	pr_prepnotedelay-pr_e_commandeffectlist		; D
	dc.w	pr_preppatterndelay-pr_e_commandeffectlist	; E
	dc.w	pr_prepfunkrepeat-pr_e_commandeffectlist	; F

pr_preppatterndelay:
	cmp.b	#1,pr_patterndelaytime-pr_framecounter+1(a2)
	bge.s	pr_preppatterndelayend
	move.b	5(a4),d0
	and.b	#$f,d0
	addq.b	#1,d0
	move.b	d0,pr_patterndelaytime-pr_framecounter+1(a2)
pr_preppatterndelayend:
	rts

pr_setvibratowaveform:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	d0,50(a4)
	rts

pr_settremolowaveform:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	d0,52(a4)
	rts

pr_setglissandocontrol:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	d0,48(a4)
	rts

pr_playfinetune:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	lsl.w	#2,d0
	lea	pr_fastperiodlist(pc),a0
	move.l	(a0,d0.w),a0
	moveq	#0,d1
	move.b	1(a6),d1
	beq.s	pr_playfinetuneend
	subq.b	#1,d1
	add.w	d1,d1
	move.w	(a0,d1.w),2(a4)		; Frequenz eintragen
pr_playfinetuneend:
	rts
	
pr_jumptoloop:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.b	d1,d0
	beq.s	pr_prepjumptoloop
	addq.b	#1,47(a4)
	cmp.b	47(a4),d0
	blt.s	pr_jumptoloopend
	moveq.l	#0,d0
	move.w	44(a4),d0
	subq.b	#1,d0
	move.w	d0,pr_patternct-pr_framecounter(a2)
	move.l	pr_patternpt(pc),a0
	move.l	(a0),d5
	lsl.l	#4,d0
	add.l	d0,d5
	move.l	d5,pr_Currentposition-pr_framecounter(a2)
	rts
pr_jumptoloopend:
	clr.w	46(a4)
	rts
pr_prepjumptoloop:
	tst.w	46(a4)
	bne.s	pr_prepjumptoloopend
	move.w	pr_patternct-pr_framecounter(a2),44(a4)
	clr.w	46(a4)
pr_prepjumptoloopend:
	rts

pr_prepnotedelay:
	tst.w	(a6)
	beq.s	pr_prepnotedelayend
	move.b	5(a4),d0
	and.b	#$f,d0
	beq.s	pr_prepnotedelayend
	move.w	d7,d0
	not.b	d0
	and.b	d0,pr_dmacon-pr_framecounter(a2)
	clr.w	18(a4)
	rts
pr_prepnotedelayend:
	move.w	#$fff,18(a4)
	rts

pr_prepretrignote:
	clr.w	18(a4)
	tst.w	(a6)
	bne.s	pr_prepretrignoteend
	bsr.w	pr_checkretrignote2	
pr_prepretrignoteend:
	rts

pr_prepnotecut:
	clr.w	18(a4)
	move.b	5(a4),d0
	moveq	#$f,d1
	and.b	d1,d0
	tst.b	d0
	bne.s	pr_prepnotecutend
	clr.w	12(a4)
pr_prepnotecutend:
	rts
	
pr_finevolumeslideup:
	move.b	3(a6),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	12(a4),d1
	add.w	d0,d1
	moveq	#64,d0
	cmp.w	d0,d1
	bls.s	pr_finevolumeslideup2
	move.w	d0,d1
pr_finevolumeslideup2:
	move.w	d1,12(a4)
	rts

pr_finevolumeslidedown:
	move.b	3(a6),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	12(a4),d1
	sub.w	d0,d1
	btst	#15,d1
	beq.s	pr_finevolumeslidedown2
	moveq	#0,d1
pr_finevolumeslidedown2:
	move.w	d1,12(a4)
	rts

pr_fineslideup:
	move.b	3(a6),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	2(a4),d1
	sub.w	d0,d1
	cmp.w	#108,d1
	bge.s	pr_fineslideup2
	move.w	#108,d1
pr_fineslideup2:
	move.w	d1,2(a4)
	rts

pr_fineslidedown:
	move.b	3(a6),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	2(a4),d1
	add.w	d0,d1
	cmp.w	#907,d1
	bls.s	pr_fineslidedown2
	move.w	#907,d1
pr_fineslidedown2:
	move.w	d1,2(a4)
	rts

pr_setfilter:
	btst	#0,3(a6)
	beq.s	pr_setfilteron
pr_setfilteroff:
	bset	#1,$bfe001
	rts
pr_setfilteron:
	bclr	#1,$bfe001
	rts

pr_prepvibandvolslide:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_prepvibandvolslide2
	tst.b	1(a6)
	beq.s	pr_prepvibandvolslide2
	clr.w	18(a4)
pr_prepvibandvolslide2:
	rts

pr_preptoneportamento:
	tst.b	3(a6)
	beq.s	pr_preptoneportamento2
	move.w	2(a6),22(a4)
pr_preptoneportamento2:
	rts

pr_prepvibrato:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_prepvibrato2
	tst.b	1(a6)
	beq.s	pr_prepvibrato0
	clr.w	18(a4)
pr_prepvibrato0:
	move.b	5(a4),d0
	move.b	d0,d1
	lsr.b	#4,d1
	beq.s	pr_prepvibrato1
	move.b	d1,24(a4)
pr_prepvibrato1:
	and.b	#$f,d0
	beq.s	pr_prepvibrato2
	move.b	d0,25(a4)
pr_prepvibrato2:
	rts

pr_preptremolo:
	cmp.b	#1,pr_speed-pr_framecounter+1(a2)
	beq.s	pr_preptremolo2
	tst.b	1(a6)
	beq.s	pr_preptremolo0
	clr.w	18(a4)
pr_preptremolo0:
	move.w	12(a4),20(a4)
	move.b	5(a4),d0
	move.b	d0,d1
	lsr.b	#4,d1
	beq.s	pr_preptremolo1
	move.b	d1,30(a4)
pr_preptremolo1:
	and.b	#$f,d0
	beq.s	pr_preptremolo2
	move.b	d0,31(a4)
pr_preptremolo2:
	rts

pr_newvolume:
	move.b	3(a6),d0
	cmp.b	#64,d0
	bls.s	pr_newvolumeend
	moveq	#64,d0
pr_newvolumeend:
	move.b	d0,13(a4)
	rts

pr_newspeed:
	move.b	3(a6),d0
	tst.b	d0
	bne.s	pr_newspeed2
	moveq	#1,d0
pr_newspeed2:
	move.b	d0,pr_speed-pr_framecounter+1(a2)
	rts

pr_patternbreak:
	moveq	#0,d0
	move.b	3(a6),d0
	add.w	#63,d0
	move.w	d0,pr_Patternct-pr_framecounter(a2)
	addq.w	#1,pr_patternhasbeenbreaked-pr_framecounter(a2)
	rts
		
pr_jumptopattern:
	moveq.l	#0,d0
	move.b	3(a6),d0
	subq.b	#1,d0
	btst	#7,d0
	beq.s	pr_playjumptopattern2
	move.w	#128,d0
pr_playjumptopattern2:
	move.b	d0,pr_currentpattern-pr_framecounter+1(a2)
	lsl.l	#2,d0
	lea	pr_patternpositions(pc),a0
	add.l	a0,d0
	move.l	d0,pr_patternpt-pr_framecounter(a2)
	move.w	#63,pr_patternct-pr_framecounter(a2)
	addq.w	#1,pr_patternhasbeenbreaked-pr_framecounter(a2)
	rts

* Control FX every frame **********************************************

pr_checkeffects:
	moveq	#1,d7
	lea	$a0(a5),a3
	lea	pr_channel0(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC
	
	moveq	#2,d7
	lea	$b0(a5),a3
	lea	pr_channel1(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	moveq	#4,d7
	lea	$c0(a5),a3
	lea	pr_channel2(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	moveq	#8,d7
	lea	$d0(a5),a3
	lea	pr_channel3(pc),a4
	move.w	12(a4),54(a4)
	pr_checkchannel
	IFEQ	INCLUDEFADINGROUTINE-YES
	move.w	54(a4),d0
	mulu.w	pr_musicfadect-pr_framecounter(a2),d0
	lsr.l	#6,d0
	move.w	d0,8(a3)
	ELSE
	move.w	54(a4),8(a3)
	ENDC

	lea	pr_int(pc),a0	
	move.l	a0,$78.w
	move.b	#$19,$bfde00
	rts

***********************************************************************

pr_checknotchannel:
	rts

pr_check_e_commands
	moveq	#0,d0
	move.b	5(a4),d0
	lsr.b	#4,d0
	add.b	d0,d0
	lea	pr_E_Command_checklist(pc),a0
	move.w	(a0,d0.w),d0
	jmp	(a0,d0.w)
	
pr_Effectchecklist:
	dc.w	pr_checkarpeggio-pr_Effectchecklist		; 0
	dc.w	pr_checkperiodslideup-pr_Effectchecklist	; 1
	dc.w	pr_checkperiodslidedown-pr_Effectchecklist	; 2
	dc.w	pr_checktoneportamento-pr_Effectchecklist	; 3
	dc.w	pr_checkvibrato-pr_Effectchecklist		; 4
	dc.w	pr_checktpandvolslide-pr_Effectchecklist	; 5
	dc.w	pr_checkvibandvolslide-pr_Effectchecklist	; 6
	dc.w	pr_checktremolo-pr_Effectchecklist		; 7
	dc.w	pr_checknotchannel-pr_Effectchecklist		; 8
	dc.w	pr_checknotchannel-pr_Effectchecklist		; 9
	dc.w	pr_checkvolumeslide-pr_Effectchecklist		; A
	dc.w	pr_checknotchannel-pr_Effectchecklist		; B
	dc.w	pr_checknotchannel-pr_Effectchecklist		; C
	dc.w	pr_checknotchannel-pr_Effectchecklist		; D
	dc.w	pr_check_e_commands-pr_Effectchecklist		; E
	dc.w	pr_checknotchannel-pr_Effectchecklist		; F

pr_E_Command_checklist:
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 0
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 1
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 2
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 3
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 4
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 5
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 6
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 7
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; 8
	dc.w	pr_checkretrignote-pr_E_Command_checklist	; 9
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; A
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; B
	dc.w	pr_checknotecut-pr_E_Command_checklist		; C
	dc.w	pr_checknotedelay-pr_E_Command_checklist	; D
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; E
	dc.w	pr_checknotchannel-pr_E_Command_checklist	; F

pr_prepfunkrepeat:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.b	d1,d0
	move.b	d0,33(a4)
	tst.b	d0
	bne.s	pr_checkfunkrepeat
	rts
pr_checkfunkrepeat:
	move.w	32(a4),d0
	beq.s	pr_checkfunkrepeatend
	lea	pr_FunkTable(pc),a0
	move.b	(a0,d0.w),d0
	move.b	35(a4),d1
	add.b	d0,d1
	btst	#7,d1
	bne.s	pr_checkfunkrepeat2
	move.b	d1,35(a4)
	rts
pr_checkfunkrepeat2:
	clr.b	35(a4)

	move.l	36(a4),d0
	beq.s	pr_checkfunkrepeatend
	move.l	d0,d2
	moveq.l	#0,d1
	move.w	10(a4),d1
	add.l	d1,d0
	add.l	d1,d0
	move.l	40(a4),a0
	addq.l	#1,a0
	cmp.l	d0,a0
	blo.s	pr_checkfunkrepeatok
	move.l	d2,a0
pr_checkfunkrepeatok:
	move.l	a0,40(a4)
	moveq	#-1,d0
	sub.b	(a0),d0
	move.b	d0,(a0)
pr_checkfunkrepeatend:
	rts

pr_checknotedelay:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	bne.s	pr_checknotedelay2
	rts
pr_checknotedelay2:
	move.w	18(a4),d1
	addq.w	#1,d1
	cmp.w	d0,d1
	bne.s	pr_checknotedelayend
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	move.w	(a4),d0
	subq.w	#1,d0
	lsl.w	#5,d0
	lea	pr_Sampleinfos(pc),a0
	move.l	(a0,d0.w),(a3)
	move.w	4(a0,d0.w),4(a3)
pr_checknotedelayend:
	move.w	d1,18(a4)
	rts

pr_checkretrignote:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	move.w	18(a4),d1
	addq.w	#1,d1
	cmp.w	d0,d1
	bne.s	pr_checkretrignoteend
pr_checkretrignote2:
	moveq	#0,d1
	move.w	d7,$96(a5)
	or.w	d7,pr_dmacon-pr_framecounter(a2)
	move.w	(a4),d0
	subq.w	#1,d0
	lsl.w	#5,d0
	lea	pr_Sampleinfos(pc),a0
	move.l	(a0,d0.w),(a3)
	move.w	4(a0,d0.w),4(a3)
pr_checkretrignoteend:
	move.w	d1,18(a4)
	rts

pr_checknotecut:
	move.b	5(a4),d0
	moveq	#$f,d1
	and.w	d1,d0
	addq.w	#1,18(a4)
	move.w	18(a4),d1
	cmp.w	d0,d1
	blt.s	pr_checknotecutend
	clr.w	12(a4)
	clr.w	54(a4)
pr_checknotecutend:
	rts

pr_checkarpeggio:
	tst.b	5(a4)
	bne.s	pr_checkarpeggio0
	rts
pr_checkarpeggio0:
	move.w	(a2),d0
	lea	pr_arpeggiofastdivisionlist(pc),a1
	move.b	(a1,d0.w),d0
	beq.s	pr_checkarpeggio2
	cmp.b	#2,d0
	beq.s	pr_checkarpeggio1
	moveq	#0,d0
	move.b	5(a4),d0
	lsr.b	#4,d0
	bra.s	pr_checkarpeggio3
pr_checkarpeggio2:
	move.w	2(a4),6(a3)
	rts
pr_checkarpeggio1:
	moveq	#0,d0
	move.b	5(a4),d0
	and.b	#$f,d0
pr_checkarpeggio3:
	asl.w	#1,d0
	move.w	(a4),d1
	lsl.w	#5,d1
	lea	pr_Sampleinfos+Samplefinetuneoffset(pc),a0
	move.l	(a0,d1.w),a0
	move.w	2(a4),d1
	lea	pr_Arpeggiofastlist(pc),a1
	moveq.l	#0,d2
	move.b	(a1,d1.w),d2
	add.b	d2,d2
	add.l	d2,a0
	moveq	#36,d7
pr_checkarpeggioloop:
	cmp.w	(a0)+,d1
	bhs.s	pr_checkarpeggio4
	dbf	d7,pr_checkarpeggioloop
	rts
pr_checkarpeggio4:
	subq.l	#2,a0
	move.w	(a0,d0.w),6(a3)
	rts

pr_checktpandvolslide:
	bsr.w	pr_checkvolumeslide
	moveq	#0,d2
	move.b	23(a4),d2
	move.w	26(a4),d0
	move.w	28(a4),d1
	bsr.s	pr_checktoneportamento2
	move.w	14(a4),26(a4)
	rts
	
pr_checktoneportamento:
	moveq	#0,d2
	move.b	5(a4),d2
	bne.s	pr_checktoneportamento1
	move.b	23(a4),d2
pr_checktoneportamento1:
	move.w	14(a4),d0
	move.w	16(a4),d1
pr_checktoneportamento2:
	cmp.w	d0,d1
	bgt.s	pr_checktoneportamentoplus
	blt.s	pr_checktoneportamentominus
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentoplus:
	add.w	d2,d0
	cmp.w	d0,d1
	bgt.s	pr_checktoneportamentoend
	move.w	d1,d0
	move.w	d1,14(a4)
	move.w	d1,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d1,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentominus:
	sub.w	d2,d0
	cmp.w	d0,d1
	blt.s	pr_checktoneportamentoend
	move.w	d1,d0
	move.w	d1,14(a4)
	move.w	d1,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d1,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts
pr_checktoneportamentoend:
	move.w	d0,14(a4)
	move.w	d0,2(a4)
	tst.w	48(a4)
	bne.s	pr_checktoneportamentoglissando
	move.w	d0,6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts	
pr_savetpvalues:
	move.l	14(a4),26(a4)
	rts
pr_checktoneportamentoglissando:
	move.w	(a4),d1
	lsl.w	#5,d1
	lea	pr_Sampleinfos+Samplefinetuneoffset(pc),a0
	move.l	(a0,d1.w),a0
	lea	pr_Arpeggiofastlist(pc),a1
	moveq.l	#0,d2
	move.b	(a1,d0.w),d2
	add.w	d2,d2
	add.l	d2,a0
	moveq	#0,d3
	moveq	#36*2,d1
pr_checktoneportamentoglissandoloop:
	cmp.w	(a0,d3.w),d0
	bhs.s	pr_checktoneportamentoglissando2
	addq.w	#2,d3
	cmp.w	d1,d3
	blo.s	pr_checktoneportamentoglissandoloop
	moveq	#35*2,d3
pr_checktoneportamentoglissando2:
	move.w	(a0,d3.w),6(a3)
	cmp.w	#1,(a2)
	beq.s	pr_savetpvalues
	rts

pr_checkvolumeslide:
	moveq	#0,d0
	move.b	5(a4),d0
	move.w	d0,d1
	lsr.b	#4,d1
	beq.s	pr_checkvolumeslidedown
	move.w	12(a4),d2
	add.w	d1,d2
	btst	#15,d2
	bne.s	pr_checkvolumeslide0
	moveq	#64,d0
	cmp.w	d0,d2
	bgt.s	pr_checkvolumeslide64
	move.w	d2,12(a4)
	move.w	d2,54(a4)
	rts
pr_checkvolumeslidedown:	
	and.b	#$f,d0
	move.w	12(a4),d2
	sub.w	d0,d2
	btst	#15,d2
	bne.s	pr_checkvolumeslide0
	moveq	#64,d0
	cmp.w	d0,d2
	bgt.s	pr_checkvolumeslide64
	move.w	d2,12(a4)
	move.w	d2,54(a4)
	rts
pr_checkvolumeslide64:
	move.w	d0,12(a4)
	move.w	d0,54(a4)
	rts
pr_checkvolumeslide0:
	clr.w	12(a4)
	clr.w	54(a4)
	rts
	
pr_checkperiodslidedown:
	moveq	#0,d0
	move.b	5(a4),d0
	add.w	d0,2(a4)
	cmp.w	#907,2(a4)
	bls.s	pr_checkperiodslidedown2
	move.w	#907,2(a4)
pr_checkperiodslidedown2:
	move.w	2(a4),6(a3)
	rts

pr_checkperiodslideup:
	moveq	#0,d0
	move.b	5(a4),d0
	sub.w	d0,2(a4)
	cmp.w	#108,2(a4)
	bge.s	pr_checkperiodslideup2
	move.w	#108,2(a4)
pr_checkperiodslideup2:
	move.w	2(a4),6(a3)
	rts

pr_checkvibandvolslide:
	bsr.w	pr_checkvolumeslide
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.b	25(a4),d0
	move.b	24(a4),d1
	bra.s	pr_checkvibrato4

pr_checkvibrato:
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.b	5(a4),d0	; Tiefe
pr_checkvibrato2:
	move.w	d0,d1		; Geschwindigkeit
	and.w	#$f,d0
	bne.s	pr_checkvibrato3
	move.b	25(a4),d0
pr_checkvibrato3:
	lsr.b	#4,d1
	bne.s	pr_checkvibrato4
	move.b	24(a4),d1
pr_checkvibrato4:
	move.w	18(a4),d2	;Position
	lsr.w	#2,d2
	and.w	#$1f,d2
	move.w	50(a4),d3
	beq.s	pr_checkvibratosine
	btst	#0,d3
	bne.s	pr_checkvibratorampdown
	move.b	#255,d3
	bra.s	pr_checkvibratoset
pr_checkvibratorampdown:
	lsl.b	#3,d2
	tst.b	19(a4)
	bpl.s	pr_checkvibratorampdown2
	move.b	#255,d3
	sub.b	d2,d3
	bra.s	pr_checkvibratoset
pr_checkvibratorampdown2:
	move.b	d2,d3
	bra.s	pr_checkvibratoset
pr_checkvibratosine:
	lea	pr_Vibratotable(pc),a0
	moveq	#0,d3
	move.b	(a0,d2.w),d3
pr_checkvibratoset:
	mulu.w	d0,d3
	lsr.w	#7,d3
	move.w	2(a4),d2
	tst.b	19(a4)
	bmi.s	pr_checkvibratoneg
	add.w	d3,d2
	bra.s	pr_checkvibrato5
pr_checkvibratoneg:
	sub.w	d3,d2
pr_checkvibrato5:
	move.w	d2,6(a3)
	lsl.w	#2,d1
	add.b	d1,19(a4)
	rts

pr_checktremolo:
	moveq	#0,d0
	moveq.l	#0,d1
	move.b	5(a4),d0	; Tiefe
pr_checktremolo2:
	move.w	d0,d1		; Geschwindigkeit
	and.w	#$f,d0
	bne.s	pr_checktremolo3
	move.b	31(a4),d0
pr_checktremolo3:
	lsr.b	#4,d1
	bne.s	pr_checktremolo4
	move.b	30(a4),d1
pr_checktremolo4:
	move.w	18(a4),d2	;Position
	lsr.w	#2,d2
	and.w	#$1f,d2
	move.w	52(a4),d3
	beq.s	pr_checktremolosine
	btst	#0,d3
	bne.s	pr_checktremolorampdown
	move.b	#255,d3
	bra.s	pr_checktremoloset
pr_checktremolorampdown:
	lsl.b	#3,d2
	tst.b	19(a4)
	bpl.s	pr_checktremolorampdown2
	move.b	#255,d3
	sub.b	d2,d3
	bra.s	pr_checktremoloset
pr_checktremolorampdown2:
	move.b	d2,d3
	bra.s	pr_checktremoloset
pr_checktremolosine:
	lea	pr_Vibratotable(pc),a0
	moveq	#0,d3
	move.b	(a0,d2.w),d3
pr_checktremoloset:
	mulu.w	d0,d3
	lsr.w	#6,d3
	move.w	20(a4),d2
	tst.b	19(a4)
	bmi.s	pr_checktremoloneg
	add.w	d3,d2
	moveq	#64,d4
	cmp.w	d4,d2
	bls.s	pr_checktremolo5
	move.w	d4,d2
	bra.s	pr_checktremolo5
pr_checktremoloneg:
	sub.w	d3,d2
	btst	#15,d2
	beq.s	pr_checktremolo5
	moveq	#0,d2
pr_checktremolo5:
	move.w	d2,54(a4)
	lsl.w	#2,d1
	add.b	d1,19(a4)
	rts

pr_VibratoTable:	
	dc.b    0,  24,  49,  74,  97, 120, 141, 161
	dc.b  180, 197, 212, 224, 235, 244, 250, 253
	dc.b  255, 253, 250, 244, 235, 224, 212, 197
	dc.b  180, 161, 141, 120,  97,  74,  49,  24
pr_FunkTable:
	dc.b  0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
	
* Variables ***********************************************************

pr_module:			dc.l	0
pr_startposition:		dc.w	0
pr_speed:			dc.w	6
pr_highestpattern:		dc.w	0
pr_currentpattern:		dc.w	0
pr_framecounter:		dc.w	0
pr_patterndelaytime:		dc.w	0
pr_patternhasbeenbreaked:	dc.w	0
pr_Patternpositions:		ds.l	128
pr_Patternpt:			dc.l	0
pr_Currentposition:		dc.l	0
pr_Patternct:			dc.w	0
pr_Channel0:	dc.w	1
		ds.w	27
pr_Channel1:	dc.w	1
		ds.w	27
pr_Channel2:	dc.w	1
		ds.w	27
pr_Channel3:	dc.w	1
		ds.w	27
pr_dmacon:	dc.w	$8000
pr_old78:	dc.l	0
pr_arpeggiofastlist:	ds.b	1000
pr_arpeggiofastdivisionlist:	ds.b	$100
pr_fastperiodlist:	ds.l	16
pr_Sampleinfos:		ds.b	32*32

pr_periods:
; Tuning 0, Normal
	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
; Tuning 1
	dc.w	850,802,757,715,674,637,601,567,535,505,477,450
	dc.w	425,401,379,357,337,318,300,284,268,253,239,225
	dc.w	213,201,189,179,169,159,150,142,134,126,119,113
; Tuning 2
	dc.w	844,796,752,709,670,632,597,563,532,502,474,447
	dc.w	422,398,376,355,335,316,298,282,266,251,237,224
	dc.w	211,199,188,177,167,158,149,141,133,125,118,112
; Tuning 3
	dc.w	838,791,746,704,665,628,592,559,528,498,470,444
	dc.w	419,395,373,352,332,314,296,280,264,249,235,222
	dc.w	209,198,187,176,166,157,148,140,132,125,118,111
; Tuning 4
	dc.w	832,785,741,699,660,623,588,555,524,495,467,441
	dc.w	416,392,370,350,330,312,294,278,262,247,233,220
	dc.w	208,196,185,175,165,156,147,139,131,124,117,110
; Tuning 5
	dc.w	826,779,736,694,655,619,584,551,520,491,463,437
	dc.w	413,390,368,347,328,309,292,276,260,245,232,219
	dc.w	206,195,184,174,164,155,146,138,130,123,116,109
; Tuning 6
	dc.w	820,774,730,689,651,614,580,547,516,487,460,434
	dc.w	410,387,365,345,325,307,290,274,258,244,230,217
	dc.w	205,193,183,172,163,154,145,137,129,122,115,109
pr_Arpeggiofastlistperiods:
; Tuning 7
	dc.w	814,768,725,684,646,610,575,543,513,484,457,431
	dc.w	407,384,363,342,323,305,288,272,256,242,228,216
	dc.w	204,192,181,171,161,152,144,136,128,121,114,108
; Tuning -8
	dc.w	907,856,808,762,720,678,640,604,570,538,508,480
	dc.w	453,428,404,381,360,339,320,302,285,269,254,240
	dc.w	226,214,202,190,180,170,160,151,143,135,127,120
; Tuning -7
	dc.w	900,850,802,757,715,675,636,601,567,535,505,477
	dc.w	450,425,401,379,357,337,318,300,284,268,253,238
	dc.w	225,212,200,189,179,169,159,150,142,134,126,119
; Tuning -6
	dc.w	894,844,796,752,709,670,632,597,563,532,502,474
	dc.w	447,422,398,376,355,335,316,298,282,266,251,237
	dc.w	223,211,199,188,177,167,158,149,141,133,125,118
; Tuning -5
	dc.w	887,838,791,746,704,665,628,592,559,528,498,470
	dc.w	444,419,395,373,352,332,314,296,280,264,249,235
	dc.w	222,209,198,187,176,166,157,148,140,132,125,118
; Tuning -4
	dc.w	881,832,785,741,699,660,623,588,555,524,494,467
	dc.w	441,416,392,370,350,330,312,294,278,262,247,233
	dc.w	220,208,196,185,175,165,156,147,139,131,123,117
; Tuning -3
	dc.w	875,826,779,736,694,655,619,584,551,520,491,463
	dc.w	437,413,390,368,347,328,309,292,276,260,245,232
	dc.w	219,206,195,184,174,164,155,146,138,130,123,116
; Tuning -2
	dc.w	868,820,774,730,689,651,614,580,547,516,487,460
	dc.w	434,410,387,365,345,325,307,290,274,258,244,230
	dc.w	217,205,193,183,172,163,154,145,137,129,122,115
; Tuning -1
	dc.w	862,814,768,725,684,646,610,575,543,513,484,457
	dc.w	431,407,384,363,342,323,305,288,272,256,242,228
	dc.w	216,203,192,181,171,161,152,144,136,128,121,114

* END OF PRORUNNER ***************************************************
Sprites:
	move.l	#$dff120, a5
	lea	Stab(pc), a4
	moveq	#7, d7
.lp	movem.w	(a4)+, d0-d1	;positions
	move.l	(a4)+, a3	;address
	move.l	a3, (a5)
;	moveq	#0, d2
	moveq	#0, d3
	move.w	d1, d2
	lsl	#8, d2
	ror.w	d0
	or.b	d0, d2		;d2 = SPRxPOS
	rol.w	d0
	move.w	d1, d3
	lsr	#6, d3
	and.b	#%100, d3
	and.b	#%1, d0
	or.b	d0, d3		;bits defined %101
	add.w	#16, d1		;Y-SIZE=16
	move.w	d1, d4
	lsl	#8, d4
	or.w	d4, d3
	lsr	#7, d1
	and.b	#%10, d1
	or.b	d1, d3
	;d2 = SPRxPOS, d3 = SPRxCTL
	move.w	d2, (a3)
	move.w	d3, 2(a3)
;-------------------------------------
	addq.l	#4, a5
	dbf	d7, .lp
	rts

BPS	equ	1
WRITE:	BSR	MagnoWrite
	cmp	#$bad0, mode
	bne	write
	rts

;MAGNOPIXIES V3.a
SCREENPOINTER:	dc.l	Ss
SCREENOFFSET:	dc.l	0
OldOffset:	dc.l	0
TEXTPOINTER:	dc.l	TEXT
MAGNOCOLOR:		DC.W	1
MODE:		DC.W	0
Magnowrite:	;a0=TextPointer.
	TST	MODE
	BNE.W	.CLEAR
	move.l	Textpointer(pc), a0
	lea	GFXTAB(pc), a1
	moveq	#0, d0
	move.b	(a0)+, d0
	beq.w	.NoMore
	cmp.b	#13, d0
	beq.w	.CReturn
	cmp.b	#32, d0
	beq.w	.SPACE
	cmp.b	#1, d0
	beq.w	.COLOR
	CMP.B	#2, D0
	BNE.B	.NC
	MOVE.W	#1, MODE
	move.l	#0, screenoffset
	rts
.NC
	sub.w	#33, d0
	move.l	SCREENPOINTER(PC), a2
	lsl	#3, d0
	moveq	#7, d1
	move.l	ScreenOffset(pc), d2
	lea	(a1,d0.w), a1	;A1=CHAR
	lea	(a2,d2.l), a2	;A2=SCREEN
.CHLP	moveq	#BPS-1, d3		;<<<--- aantal bitplanes -1
	move.w	MAGNOCOLOR(pc),d4
.BLP	btst	#0, d4
	beq.b	.NoD
	move.b	(a1), (a2)
.NoD	lea	40(a2), a2
	lsr	d4
	dbra	d3, .BLP
	addq.l	#1, a1
	dbra	d1, .CHLP
	addq.l	#1, ScreenOffset
	move.l	a0, Textpointer
	rts
.NoMore	subq.l	#1,a0
	move.l	a0, Textpointer
	move.w	#$bad0, MODE
	;MOVE.L	#TEXT, TEXTPOINTER
	rts
.CReturn
	add.l	#40*BPS*9, OldOffset
	move.l	OldOffset, ScreenOffset
	move.l	a0, Textpointer
	rts
.SPACE
	addq.l	#1, ScreenOffset
	move.l	a0, Textpointer
	rts
.COLOR	move.b	(a0)+, d0
	move.w	d0, COLOR
	move.l	a0, Textpointer
	rts
;clear checken!!!
.CLEAR	MOVE.L	SCREENOFFSET(PC), D0
	move.l	SCREENPOINTER(PC), A0
	LEA	(A0,D0.L), A0
	CMP.l	#$2800*BPS-40*BPS, D0
	BGE.B	.CLEAREND
	ADD.L	#40*BPS*3, SCREENOFFSET
	MOVE.W	#40*BPS/4*3-1, D1
	MOVEQ	#0, D0
.LP	MOVE.L	D0, (A0)+
	DBRA	D1, .LP
	RTS
.CLEAREND
	MOVE.L	#0, SCREENOFFSET
	MOVE.L	#0, OLDOFFSET
	MOVE.W	#0, MODE
	ADDQ.L	#1, TEXTPOINTER
	RTS

FadeMouse:
	move.l	Stab+48, Stab+56
	move.l	Stab+40, Stab+48
	move.l	Stab+32, Stab+40
	move.l	Stab+24, Stab+32
	move.l	Stab+16, Stab+24
	move.l	Stab+8, Stab+16
	move.l	Stab, Stab+8
	rts

LMOUSE:	DC.W	0
MOUSE:	move.w	$a(a6), d0
	move.w	Lmouse(pc), d2
	move.w	d0, Lmouse
	move.w	d0, d1
	lsr.w	#8, d1
	sub.b	d2, d0
	lsr.w	#8, d2
	sub.b	d2, d1
	ext.w	d0
	ext.w	d1
	add.w	d0, stab
	add.w	d1, stab+2
;Mouse pointer position checkings...
MCHK:	cmp	#MNY, stab+2
	bge	.NoYM
	move.w	#MNY, stab+2
.NoYM
	cmp	#MNX, stab
	bge	.NoXM
	move.w	#MNX, stab
.NoXM
	cmp	#MXX, stab
	ble	.NoXb
	move.w	#MXX, stab
.NoXb
	cmp	#MXY, stab+2
	ble	.NoYb
	move.w	#MXY, stab+2
.NoYb
	rts

MNY	EQU	$6c+[4*9]
MNX	EQU	$80
MXY	EQU	$6c+[4*9]+[11*9]-3	;$11C = ONDERAAN SCHERM
MXX	EQU	$1B0
STARTREGEL	equ	5+11
;Vul hierboven de eerste regel in waarop de selectie staat..., -1


; DC.B	"           'CAUSE SANCTUARY IS BECOMING ",13
TEXT:
 DC.B	"SELECTRO (C) 1992 SCEPTRE",13
 dc.b	13
 DC.B	"PLEASE SELECT ONE OF THE FOLLOWING,",13
 dc.b	13
 DC.B	"     -  SELECTION ONE!  -",13
 DC.B	"     -  SELECTION TWO!  -",13
 DC.B	"    -  SELECTION THREE!  -",13
 DC.B	"     -  SELECTION FOUR!  -",13
 DC.B	"     -  SELECTION FIVE!  -",13
 DC.B	"     -  SELECTION SIX!  -",13
 DC.B	"    -  SELECTION SEVEN!  -",13
 DC.B	"    -  SELECTION EIGHT!  -",13
 DC.B	"     -  SELECTION NINE!  -",13
 DC.B	"     -  SELECTION TEN!  -",13
 DC.B	"   -  SELECTION ELEVEN!  -",13
 DC.B	0

stab:	dc.w	210,100
	dc.l	sprite0
	dc.w	220,100
	dc.l	sprite1
	dc.w	230,100
	dc.l	sprite2
	dc.w	240,100
	dc.l	sprite3
	dc.w	250,100
	dc.l	sprite4
	dc.w	260,100
	dc.l	sprite5
	dc.w	270,100
	dc.l	sprite6
	dc.w	280,100
	dc.l	sprite7


GFXTAB:	;A-Z
 dc.b	%00011000	;>
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000

 dc.b	%01100110	;>
 dc.b	%01000100
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000

 dc.b	%0110110	;>
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0110110
 dc.b	%0110110
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0110110

 dc.b	%0111111	;>
 dc.b	%1111111
 dc.b	%1101000
 dc.b	%1111110
 dc.b	%0111111
 dc.b	%0001011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%01110011	;>
 dc.b	%11011111
 dc.b	%01111110
 dc.b	%00011100
 dc.b	%00111000
 dc.b	%01111110
 dc.b	%11111011
 dc.b	%11001110

 dc.b	%01111000	;>
 dc.b	%11111100
 dc.b	%11101100
 dc.b	%01111001
 dc.b	%11101111
 dc.b	%11000111
 dc.b	%11101111
 dc.b	%01111101

 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00110000
 dc.b	%00000000	;>
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000

 dc.b	%00001100	;>
 dc.b	%00011100
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011100
 dc.b	%00001100

 dc.b	%00110000	;>
 dc.b	%00111000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00111000
 dc.b	%00110000

 dc.b	%1100011	;>
 dc.b	%0110110
 dc.b	%0111110
 dc.b	%0011100
 dc.b	%0111110
 dc.b	%1110111
 dc.b	%1100011
 dc.b	%1000001

 dc.b	%0011000	;>
 dc.b	%0011000
 dc.b	%0011000
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0011000
 dc.b	%0011000
 dc.b	%0011000

 dc.b	%00000000	;>
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00110000

 dc.b	%00000000	;>
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000

 dc.b	%00000000	;>
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00000000

 dc.b	%00000011	;>
 dc.b	%00000111
 dc.b	%00001110
 dc.b	%00011100
 dc.b	%00111000
 dc.b	%01110000
 dc.b	%01100000
 dc.b	%01000000

 dc.b	%0111110	;>
 dc.b	%1111111
 dc.b	%1100111
 dc.b	%1101111
 dc.b	%1111111
 dc.b	%1111011
 dc.b	%1111111
 dc.b	%0111110

 dc.b	%00111000	;>
 dc.b	%00111000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00011000

 dc.b	%1111110	;>
 dc.b	%1111111
 dc.b	%0000011
 dc.b	%0111111
 dc.b	%1111110
 dc.b	%1100000
 dc.b	%1111111
 dc.b	%1111111

 dc.b	%1111110	;>
 dc.b	%1111111
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%1100110	;>
 dc.b	%1100110
 dc.b	%1100110
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000110
 dc.b	%0000110
 dc.b	%0000110

 dc.b	%1111111	;>
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1111110
 dc.b	%1111111
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%0111111	;>
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111110

 dc.b	%1111111	;>
 dc.b	%1111111
 dc.b	%0000111
 dc.b	%0001110
 dc.b	%0011100
 dc.b	%0011000
 dc.b	%0011000
 dc.b	%0011000

 dc.b	%0111110	;>
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111110

 dc.b	%0111110	;>
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111111
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%00000000	;:
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00000000

 dc.b	%00000000	;
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00000000
 dc.b	%00011000
 dc.b	%00011000
 dc.b	%00110000

 dc.b	%0001100	;<
 dc.b	%0011000
 dc.b	%0110000
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0110000
 dc.b	%0011000
 dc.b	%0001100

 dc.b	%00000000
 dc.b	%00000000
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000000
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%00000000

 dc.b	%0011000	;>
 dc.b	%0001100
 dc.b	%0000110
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000110
 dc.b	%0001100
 dc.b	%0011000

 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%0001111
 dc.b	%0001110
 dc.b	%0000000
 dc.b	%0001100
 dc.b	%0001100
 
 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1001001
 dc.b	%1001001
 dc.b	%1111111
 dc.b	%1011101
 dc.b	%1100011
 dc.b	%0111110
 
 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011

 dc.b	%1111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111110
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111110
 
 dc.b	%0111111
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1111111
 dc.b	%0111111
 
 dc.b	%1111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111110
 
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1111110
 dc.b	%1111110
 dc.b	%1100000
 dc.b	%1111111
 dc.b	%1111111

 dc.b	%1111111
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1111110
 dc.b	%1111110
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 
 dc.b	%0111111
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100111
 dc.b	%1100111
 dc.b	%1111111
 dc.b	%0111111

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011

 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%1111111
 dc.b	%1111111

 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000011
 dc.b	%0000011
 dc.b	%0000011
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%1100011
 dc.b	%1100110
 dc.b	%1101100
 dc.b	%1111000
 dc.b	%1111100
 dc.b	%1100110
 dc.b	%1100011
 dc.b	%1100001

 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1111111
 dc.b	%1111111

 dc.b	%1100011
 dc.b	%1110111
 dc.b	%1111111
 dc.b	%1101011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1110011
 dc.b	%1111011
 dc.b	%1101111
 dc.b	%1100111
 dc.b	%1100011
 dc.b	%1100011

 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111110

 dc.b	%1111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111110
 dc.b	%1100000
 dc.b	%1100000
 dc.b	%1100000

 dc.b	%0111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1101111
 dc.b	%1100111
 dc.b	%1111111
 dc.b	%0111111

 dc.b	%1111110
 dc.b	%1111111
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%1111110
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011

 dc.b	%0111111
 dc.b	%1111111
 dc.b	%1100000
 dc.b	%1111110
 dc.b	%0111111
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111110

 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0011100

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111111

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%0110110
 dc.b	%0011100
 dc.b	%0001000

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1101011
 dc.b	%1111111
 dc.b	%0111110

 dc.b	%1100011
 dc.b	%1110111
 dc.b	%0111110
 dc.b	%0011100
 dc.b	%0011100
 dc.b	%0111110
 dc.b	%1110111
 dc.b	%1100011

 dc.b	%1100011
 dc.b	%1100011
 dc.b	%1111111
 dc.b	%0111111
 dc.b	%0000011
 dc.b	%0000011
 dc.b	%1111111
 dc.b	%1111111

 dc.b	%1111111
 dc.b	%1111111
 dc.b	%0000111
 dc.b	%0001110
 dc.b	%0011100
 dc.b	%0111000
 dc.b	%1111111
 dc.b	%1111111

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	SECTION	MUSIC,DATA_C
pr_data:

	incbin	"df1:octave1"

;*****************************
;*			     *
;*      COPPER1 PROGRAM      *
;*			     *
;*****************************

	SECTION	Copper,DATA_C

COPLIST:
	dc.w	$010b,$fffe


	DC.W	$0100,$4200	; Bit-Plane control reg.
	DC.W	$0102,$0000	; Hor-Scroll
	DC.W	$0104,$0010	; Sprite/Gfx priority
	DC.W	$0108,$0078	; Modolu (odd)
	DC.W	$010A,$0078	; Modolu (even)
	DC.W	$008E,$2C81	; Screen Size
	DC.W	$0090,$2CC1	; Screen Size
	DC.W	$0092,$0038	; H-start
	DC.W	$0094,$00D0	; H-stop

	DC.W	$00e0
P1h	Dc.w	$0000
	DC.W	$00e2
P1l
	Dc.w	$0000
	DC.W	$00e4
P2h
	dc.w	$0000
	DC.W	$00e6
P2l
	Dc.w	$0000
	DC.W	$00e8
P3h	Dc.w	$0000
	DC.W	$00ea
P3L	dc.w	$0000
	DC.W	$00ec
P4h	Dc.w	$0000
	DC.W	$00ee
P4L	dc.w	$0000

	dc.w	$0180,$0000,$0182,$0aaa,$0184,$0555,$0186,$0fff
	dc.w	$0188,$0808,$018a,$0f4a,$018c,$0e00,$018e,$0620
	dc.w	$0190,$0f60,$0192,$0fa8,$0194,$0fe0,$0196,$0080
	dc.w	$0198,$00d0,$019a,$00ff,$019c,$008f,$019e,$000f

	
BM1	dc.w	$5b0b,$fffe
	dc.w	$0180,$0f00

	DC.W	$0100,$3200	; Bit-Plane control reg.
;	DC.W	$0102,$0000	; Hor-Scroll
;	DC.W	$0104,$0010	; Sprite/Gfx priority
;	DC.W	$008E,$2C81	; Screen Size
;	DC.W	$0090,$2CC1	; Screen Size
;	DC.W	$0092,$0038	; H-start
;	DC.W	$0094,$00D0	; H-stop
	
BM2	dc.w	$5c0b,$fffe
	dc.w	$0180,$0000

	DC.W	$00e0
B1h	Dc.w	$0000
	DC.W	$00e2
B1l
	Dc.w	$0000
	DC.W	$00e4
B2h
	dc.w	$0000
	DC.W	$00e6
B2l
	Dc.w	$0000
	DC.W	$00e8
B3h	Dc.w	$0000
	DC.W	$00ea
B3L	dc.w	$0000

	DC.W	$0108,$0028	; Modolu (odd)
	DC.W	$010A,$0000	; Modolu (even)


CTAB	DC.W	$0180,$0000	; Color #0 = 000
	DC.W	$0182,$0f00	; Color #1 = fff
	DC.W	$0184,$00f0	; Color #1 = fff
	DC.W	$0186,$000f	; Color #1 = fff
	DC.W	$0188,$0ff0	; Color #1 = fff
	DC.W	$018a,$00ff	; Color #1 = fff
	DC.W	$018c,$0f0f	; Color #1 = fff
	dc.w	$018e,$0fff
DTAB	dc.w	$01a0,$0f4b
	dc.w	$01a2,$0f4f
	dc.w	$01a4,$0f4e
	dc.w	$01a6,$0f4d
	dc.w	$01a8,$0f4c
	dc.w	$01aa,$0f4b
	dc.w	$01ac,$0f4a
	dc.w	$01ae,$0f49
	dc.w	$01b0,$0f48
	dc.w	$01b2,$0f47
	dc.w	$01b4,$0f46
	dc.w	$01b6,$0f45
	dc.w	$01b8,$0f44
	dc.w	$01ba,$0f43
	dc.w	$01bc,$0f42
	dc.w	$01be,$0f41
BAR1	dc.w	$fe0b,$fffe
	dc.w	$0180,$0808
BAR2	dc.w	$ff0b,$fffe
	dc.w	$0180,$0000
	dc.w	$ffe1,$fffe
	dc.w	$000b,$fffe
	dc.w	$0180,$0f00
Q1	dc.w	$010b,$fffe
	dc.w	$0180,$0000
	DC.L	$FFFFFFFE

Fades:	;dc.l	Addres
	;dc.w	FullColour
	dc.l	CTAB+2
	dc.w	$0000
	dc.l	CTAB+6
	dc.w	$0f00
	dc.l	CTAB+10
	dc.w	$00f0
	dc.l	CTAB+14
	dc.w	$000f
	dc.l	CTAB+18
	dc.w	$0ff0
	dc.l	CTAB+22
	dc.w	$00ff
	dc.l	CTAB+26
	dc.w	$0f0f
	dc.l	CTAB+30
	dc.w	$0fff
	dc.l	BM1+6
	dc.w	$0f00
	DC.L	dtab+2
	dc.w	$0f4b
	dc.l	dtab+6
	dc.w	$0f4f
	dc.l	Dtab+10
	dc.w	$0f4e
	dc.l	Dtab+14
	dc.w	$0f4d
	dc.l	Dtab+18
	dc.w	$0f4c
	dc.l	Dtab+22
	dc.w	$0f4b
	dc.l	Dtab+26
	dc.w	$0f4a
	dc.l	Dtab+30
	dc.w	$0f49
	dc.l	Dtab+34
	dc.w	$0f48
	dc.l	Dtab+38
	dc.w	$0f47
	dc.l	Dtab+42
	dc.w	$0f46
	dc.l	Dtab+46
	dc.w	$0f45
	dc.l	Dtab+50
	dc.w	$0f44
	dc.l	Dtab+54
	dc.w	$0f43
	dc.l	Dtab+58
	dc.w	$0f42
	dc.l	Dtab+62
	dc.w	$0f41
	dc.l	Bar2+6
	dc.w	$0000
	dc.l	Q1+6
	dc.w	$0000
	dc.l	Q1-2
	dc.w	$0f00	
	dc.l	-1
	dc.w	-1


sprite0:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0

;---------------------------------------------
sprite1:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite2:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite3:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite4:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite5:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite6:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0
;---------------------------------------------
sprite7:	dc.w	0,0
	dc.w	%1111111111111111
	dc.w	%1111111111111111
	dc.w	%1111111111111110
	dc.w	%1000000000000010
	dc.w	%1111111111111100
	dc.w	%1000000000000100
	dc.w	%1111111111111000
	dc.w	%1000000000001000
	dc.w	%1111111111110000
	dc.w	%1000000000010000
	dc.w	%1111111111100000
	dc.w	%1000000000100000
	dc.w	%1111111111000000
	dc.w	%1000000001000000
	dc.w	%1111111110000000
	dc.w	%1000000010000000
	dc.w	%1111111100000000
	dc.w	%1000000100000000
	dc.w	%1111111000000000
	dc.w	%1000001000000000
	dc.w	%1111110000000000
	dc.w	%1000010000000000
	dc.w	%1111100000000000
	dc.w	%1000100000000000
	dc.w	%1111000000000000
	dc.w	%1001000000000000
	dc.w	%1110000000000000
	dc.w	%1010000000000000
	dc.w	%1100000000000000
	dc.w	%1100000000000000
	dc.w	%1000000000000000
	dc.w	%1000000000000000
	dc.w	0,0

LOGO:	image	"df1:shitlogo.raw"
;*****************************
;*			     *
;*      SCREEN DATA AREA     *
;*			     *
;*****************************

	SECTION	Screen,BSS_C

SCREN	DS.B	120*256
Wrk	ds.b	120*256
SS	ds.b	80*256

	END

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
