*******************************************************************************
**	LIGHTSOURCED VECTOR
**	CODED BY CRADON/MATRIX
**	ASM-ONE FORMAT
*******************************************************************************
		section	aaa,code_c

AbsExecBase:		equ	$4
_LVOLoadView:		equ	-$DE
_LVOCloseLibrary:	equ	-$19E
_LVOOpenLibrary:	equ	-$228
_LVOWaitTOF:		equ	-$10E
_LVOCacheControl:	equ	-$288
_LVOSupervisor:		equ	-$1E
AttnFlags:		equ	$128
tv_UserIntVects:	equ	$100
tv_Lev3IntVect:		equ	$6C

intreq:			equ	$9C
cop1lch:		equ	$80
dmacon:			equ	$96
intenar:		equ	$1C
dmaconr:		equ	$2
copjmp1:		equ	$88
intena:			equ	$9A
spr0:			equ	$140
sd_dataa:		equ	$4
color0			equ	$180
bltafwm:		equ	$44

ExecBase:		equ	$0
LIB_VERSION:		equ	$14

*-------------- OS Shutdown..

ProgStart:	move.l	(AbsExecBase).w,a6
		moveq	#0,d0
		lea	GfxName(pc),a1
		jsr	_LVOOpenLibrary(a6)		;open gfx library
		lea	GfxBase(pc),a0
		move.l	d0,(a0)				;save base
		beq	GfxError

*-------------- Do "LoadView" to Reset all Copperlist regs to 0..

		move.l	a6,a5
		move.l	d0,a6
		lea	_OurView(pc),a0
		move.l	34(a6),(a0)
		sub.l	a1,a1
		jsr	_LVOLoadView(a6)		;get system copper
		jsr	_LVOWaitTOF(a6)			;(clears AGA Regs)
		jsr	_LVOWaitTOF(a6)			;wait for syslace

		move.l	a6,a1
		move.l	a5,a6
		jsr	_LVOCloseLibrary(a6)		;cloe gfxbase

*-------------- Determine what CPU we got...

		move.l	(AbsExecBase).w,a6
		jsr	-132(a6)			;forbid()


*-------------- Preserve OS DMA/Intena then turn it off

KillDMA:	lea	$DFF000,a6
		move.w	dmaconr(a6),OldDMA
		move.w	intenar(a6),OldINT
		move.l	#$7FFF7FFF,intena(a6)
		move.w	#$7FFF,dmacon(a6)

*-------------- setup screen

		move.l	#screen2,d0
		lea	planes,a0
		move.w  d0,6(a0)
		swap    d0
		move.w  d0,2(a0)
		swap    d0

		move.l	#copper,d0
		lea	adress,a0
		move.w	d0,6(a0)
		swap	d0
		move.w	d0,2(a0)

		move.w	#%1000001111000000,$dff096
		move.w 	#%1100000000110000,$dff09a

*-------------- turn on new copperlist

		move.l	#copper,$dff080

*-------------- Main vbl

loop		cmp.b	#255,$dff006
		bne.s	loop

		bsr.w	clear
		bsr.w	vector
		bsr.w	flip_screen

		btst	#6,$bfe001
		bne.b	loop

*-------------- restore os...

		lea	$dff000,a5
		move.l	#$7FFF7FFF,intena(a5)		;kill interrupts
		move.w	#$7FFF,dmacon(a5)		;and screen


		move.w	OldINT(pc),d0
		bset	#15,d0
		move.w	d0,intena(a5)			;restore intena

		move.w	OldDMA(pc),d0
		bset	#15,d0
		move.w	d0,dmacon(a5)			;restore dma

		move.l	4.w,a6
		jsr	-138(a6)			;forbid()

		move.l	GfxBase(pc),a6
		move.l	_OurView(pc),a1
		jsr	_LVOLoadView(a6)		;free system copview

		move.l	$26(a6),cop1lch(a5)		;restore system copper
GfxError:	moveq	#0,d0
		rts					;exit back to OS...

GfxName:	dc.b	'graphics.library',0,0
GfxBase:	dc.l	0
_OurView:	dc.l	0
OldDMA:		dc.w	0
OldINT:		dc.w	0
OldLev3:	dc.l	0
_VBR:		dc.l	0
		even
** FILLED VECTOR **************************************************************

vector	bsr.w	angles				; calculate new view angle
	lea.l	points(pc),a1			; point on next plane data
	lea.l	sin_table,a2			; point at sinus table
	lea.l	cos_table,a3			; point at cosinus table
obloop	cmpi.w	#$ffff,(a1)			; no more lines in this plane?
	beq.w	vecout
	move.l	screen_adress(pc),a0		; lets work on this frame
	move.w	(a1)+,d0			; x-normal
	move.w	(a1)+,d1			; y-normal
	move.w	(a1)+,d2			; z-normal
	bsr.w	normal				; rotate plane's vector-normal.
	move.w	(a1)+,d3			; get z-coord limit
	cmp.w	d3,d2				; front- or backside of plane?
	bgt.s	plane				; if front, then draw plane
	move.w	(a1)+,d0
	move.w	(a1)+,d0
	lsl.w	#3,d0				; *4 *2 = delta-adress in bytes
	ext.l	d0
	add.l	d0,a1				; point pÅ ny plan
	bra.b	obloop
plane	move.w	(a1)+,d0			; selected colour (bitplan)
	move.w	#10240,d1
	mulu	d0,d1
	add.l	d1,a0
	bsr.w	light				; lightsource this coming plane
	move.w	(a1)+,counter			; antal linier i plan
linier	move.w	(a1)+,d0			; get line coordinates
	move.w	(a1)+,d1
	move.w	(a1)+,d2
	sub.w	xcenter(pc),d0			; object with center in origo
	sub.w	ycenter(pc),d1
	sub.w	zcenter(pc),d2
	bsr.b	rotate				; rotate 3d point
	add.w	zcenter(pc),d2
	bsr.w	convert				; convert from 3d to 2d
	add.w	xcenter(pc),d0
	add.w	ycenter(pc),d1
	bsr.w	extrem				; note plane max and min
	bsr.w	line				; draw line from last point
	sub.w	#1,counter
	tst.w	counter				; plane finished?
	bne.b	linier				; if not: work on next line
	bsr.w	fill				; fill plane
	bsr.w	global				; note global extremes (clear)
	move.w	#256,ymin			; reset for next plane
	clr.w	ymax
	move.w	#320,xmin
	clr.w	xmax
	bra.w	obloop
vecout	rts	

** ROTATE 3D POINT ************************************************************

rotate	move.w	xvinkel(pc),d5			; x angle
	add.w	d5,d5				; x angle *2
	move.w	(a3,d5.w),d3			; cos(xgrad)
	muls	d1,d3				; y*cos(xgrad)
	move.w	(a2,d5.w),d4			; sin(xgrad)
	muls	d2,d4				; z*sin(xgrad)
	sub.l	d4,d3				; y*cos(xgrad) - z*sin(xgrad)
	add.l	d3,d3
	add.l	d3,d3				; 4*(y*cos(xgrad)-z*sin(xgrad))
	move.l	d3,y1				; y-coordinate around x axis

	move.w	(a2,d5.w),d3			; sin(xgrad)
	muls	d1,d3				; y*sin(xgrad)
	move.w	(a3,d5.w),d4			; cos(xgrad)
	muls	d2,d4				; z*cos(xgrad)
	add.l	d4,d3				; y*sin(xgrad) + z*cos(xgrad)
	add.l	d3,d3
	add.l	d3,d3				; 4*(y*sin(xgrad)+z*cos(xgrad))
	move.l	d3,z1				; z-coordinate around x axis

	move.w	yvinkel(pc),d6			; y angle
	add.w	d6,d6				; y angle *2
	move.w	(a3,d6.w),d3			; cos(ygrad)
	muls	d0,d3				; x*cos(ygrad)
	move.w	(a2,d6.w),d4			; sin(ygrad)
	muls	z1(pc),d4			; z*sin(ygrad)
	sub.l	d4,d3				; x*cos(ygrad) - z*sin(ygrad)
	add.l	d3,d3
	add.l	d3,d3				; 4*(x*cos(ygrad)-z*sin(ygrad))
	move.l	d3,x2				; x-coordinate around y axis

	move.w	(a2,d6.w),d2			; sin(ygrad)
	muls	d0,d2				; x*sin(ygrad)
	move.w	(a3,d6.w),d4			; cos(ygrad)
	muls	z1(pc),d4			; z*cos(ygrad)
	add.l	d4,d2				; x*sin(ygrad) + z*cos(ygrad)
	add.l	d2,d2
	add.l	d2,d2				; 4*(x*sin(ygrad)+z*cos(ygrad))
	swap	d2				; fast division by 65535
	ext.l	d2				; z-coordinate around y and x

	move.w	zvinkel(pc),d7			; z angle
	add.w	d7,d7				; z angle *2
	move.w	(a3,d7.w),d0			; cos(zgrad)
	muls	x2(pc),d0			; x*cos(zgrad)
	move.w	(a2,d7.w),d4			; sin(zgrad)
	muls	y1(pc),d4			; y*sin(zgrad)
	sub.l	d4,d0				; x*cos(zgrad) - y*sin(zgrad)
	add.l	d0,d0
	add.l	d0,d0				; 4*(x*cos(zgrad)-y*sin(zgrad))
	swap	d0				; fast division by 65535
	ext.l	d0				; x-coordinate around y and z

	move.w	(a2,d7.w),d1			; sin(zgrad)
	muls	x2(pc),d1			; x*sin(zgrad)
	move.w	(a3,d7.w),d3			; cos(zgrad)
	muls	y1(pc),d3			; y*cos(zgrad)
	add.l	d3,d1				; x*sin(zgrad) + y*cos(zgrad)
	add.l	d1,d1
	add.l	d1,d1				; 4*(x*sin(zgrad)+y*cos(zgrad))
	swap	d1				; fast division by 65535
	ext.l	d1				; y-coordinate around x and z
	rts

** ROTATE PLANES VECTOR NORMAL ************************************************

normal	move.w	xvinkel(pc),d5
	add.w	d5,d5
	move.w	yvinkel(pc),d6
	add.w	d6,d6
	move.w	(a2,d5.w),d3
	muls	d1,d3
	move.w	(a3,d5.w),d4
	muls	d2,d4
	add.l	d4,d3
	add.l	d3,d3
	add.l	d3,d3
	move.l	d3,z1
	move.w	(a2,d6.w),d2
	muls	d0,d2
	move.w	(a3,d6.w),d4
	muls	z1(pc),d4
	add.l	d4,d2
	add.l	d2,d2
	add.l	d2,d2
	swap	d2
	ext.l	d2
	rts

** CONVERT POINT FROM 3D TO 2D ************************************************

convert	muls	zoom(pc),d0
	divs	d2,d0
	muls	zoom(pc),d1
	divs	d2,d1
	rts

** DRAW LINE ******************************************************************

line	ext.l	d0				; rule out any crap!
	ext.l	d1
	tst.w	(a1)+				; draw line from last point?
	bne.b	draw
	move.w	d0,lastx			; no! then just save this point
	move.w	d1,lasty
	rts
draw	move.w	lastx(pc),d2
	move.w	d0,lastx
	move.w	lasty(pc),d3
	move.w	d1,lasty
	exg	d1,d2	
	cmp	d2,d3
	beq.w	drawout
	bpl.b	bline
	exg	d0,d1
	exg	d2,d3
bline	subq	#1,d3
	move	d1,d6
	sub	d0,d6
	bmi.s	xl0
	move.w	d3,d7
	sub.w	d2,d7
	bmi.s	xg0yl0
	move.w	d7,d5
	sub.w	d6,d5
	bmi.s	o4
	move.b	#1,bltc1
	bra.s	octok
o4	move.b	#17,bltc1
	bra.s	octok
xg0yl0	neg.w	d7
	move.w	d7,d5
	sub.w	d6,d5
	bmi.s	o6
	move.b	#5,bltc1
	bra.s	octok
o6	move.b	#25,bltc1
	bra.s	octok
xl0	neg.w	d6
	move.w	d3,d7
	sub.w	d2,d7
	bmi.s	xl0yl0
	move.w	d7,d5
	sub.w	d6,d5
	bmi.s	o5
	move.b	#9,bltc1
	bra.s	octok
o5	move.b	#21,bltc1
	bra.s	octok
xl0yl0	neg.w	d7
	move.w	d7,d5
	sub.w	d6,d5
	bmi.s	o7
	move.b	#13,bltc1
	bra.s	octok
o7	move.b	#29,bltc1
octok	moveq	#0,d4
	move.w	d0,d4
	and.w	#15,d4
	swap	d4
	lsr.l	#4,d4
	or.w	#$b4a,d4
	moveq	#0,d3
	lsl	#3,d2
	move	d2,d3
	lsl	#2,d2
	add	d2,d3
	lsr	#3,d0
	and.b	#$fe,d0
	add	d0,d3
	add.l	a0,d3
	tst	d5
	bmi.s	xmaxi
	exg	d6,d7
	neg.w	d5
xmaxi	move.w	d6,d1
	add.w	#1,d1
	lsl.w	#6,d1
	add.w	#2,d1
	move.w	d5,d0
	add.w	d7,d0
	lsl.w	#2,d7
	move.w	d0,d2
	sub.w	d6,d2
	add.w	d2,d2
	tst.w	d0
	bpl.s	plus
	or.b	#64,bltc1
plus	add.w	d0,d0
	ext.l	d0
wdraw	btst	#6,$dff002
	bne.s	wdraw
	clr	d6
	move.b	bltc1,d6
	or.w	#2,d6
	move.w	d6,$dff042
	move.w	d4,$dff040
	clr	$dff070
	move.w	#$8000,$dff074
	move.w	#$ffff,$dff072
	move.l	#$ffffffff,$dff044
	move.w	#40,$dff060
	move.w	#40,$dff066
	move.w	d7,$dff062
	move.w	d2,$dff064
	move.l	d3,$dff048
	move.l	d3,$dff054
	move.l	d0,$dff050
	move.w	d1,$dff058
drawout	rts

** NOTE MIN AND MAX FOR THIS PLANE ********************************************

extrem	cmp.w	ymin(pc),d1
	bhi.b	noymin
	move.w	d1,ymin
noymin	cmp.w	ymax(pc),d1
	blt.b	noymax
	move.w	d1,ymax
noymax	cmp.w	xmin(pc),d0
	bhi.b	noxmin
	move.w	d0,xmin
noxmin	cmp.w	xmax(pc),d0
	blt.b	noxmax
	move.w	d0,xmax
noxmax	rts

** NOTE MIN AND MAX FOR ALL PLANES ********************************************

global	move.w	xmin(pc),d0
	cmp.w	globalxmin(pc),d0
	bhi.b	noglobx
	move.w	d0,globalxmin
noglobx	move.w	xmax(pc),d0
	cmp.w	globalxmax(pc),d0
	blt.b	globoy1
	move.w	d0,globalxmax
globoy1	move.w	ymin(pc),d0
	cmp.w	globalymin(pc),d0
	bhi.b	nogloby
	move.w	d0,globalymin
nogloby	move.w	ymax(pc),d0
	cmp.w	globalymax(pc),d0
	blt.b	globout
	move.w	d0,globalymax
globout	rts	

** CLACULATE NEW VIEW ANGLE ***************************************************

angles	move.w	ydelta(pc),d0
	add.w	d0,yvinkel			; new y angle
	cmp.w	#512,yvinkel
	blt.b	xangle
	sub.w	#512,yvinkel
xangle	move.w	xdelta(pc),d0
	add.w	d0,xvinkel			; new x angle
	cmp.w	#512,xvinkel
	blt.b	zangle
	sub.w	#512,xvinkel
zangle	move.w	zdelta(pc),d0
	add.w	d0,zvinkel			; new z angle
	cmp.w	#512,zvinkel
	blt.b	anglout	
	sub.w	#512,zvinkel
anglout	rts

** LIGHTSOURCE CURRENT PLANE **************************************************

light	add.l	d0,d0				; d0 = offset in offset-table!
	lea	colour,a4
	lea	offset(pc),a5
	lea	colours(pc),a6
	move.w	(a5,d0.w),d1			; d1 = offset from colour label
	divu	#7,d2				; adjust to colourstable offset
	add.l	d2,d2
	move.w	(a6,d2.w),d0
	move.w	d0,(a4,d1.w)
	rts

** FLIP BETWEEN FRAMESBUFFERS *************************************************

flip_screen
	cmp.l 	#screen1,screen_adress		
	beq.s	flip_to_screen2
	lea.l	planes,a0
	move.l	#screen2,d0
	move.w	d0,6(a0)
	swap 	d0
	move.w	d0,2(a0)
	move.l	#screen2+[256*40],d0
	move.w	d0,14(a0)
	swap 	d0
	move.w	d0,10(a0)
	move.l	#screen2+[512*40],d0
	move.w	d0,22(a0)
	swap 	d0
	move.w	d0,18(a0)
	move.l	#screen1,screen_adress	
	rts
flip_to_screen2
	lea.l	planes,a0
	move.l	#screen1,d0
	move.w	d0,6(a0)
	swap 	d0
	move.w	d0,2(a0)
	move.l	#screen1+[256*40],d0
	move.w	d0,14(a0)
	swap 	d0
	move.w	d0,10(a0)
	move.l	#screen1+[512*40],d0
	move.w	d0,22(a0)
	swap 	d0
	move.w	d0,18(a0)
	move.l	#screen2,screen_adress
	rts

** CLEAR SCREEN ***************************************************************

clear	moveq	#0,d1
	move.l	d1,d2
	move.l	d1,d3
	move.l	screen_adress(pc),d0
	move.w	globalxmin(pc),d1	
	move.w	globalxmax(pc),d2
	sub.w	d1,d2				; d2 = clear width in pixels
	lsr.w	#3,d1				; d1 = left pixels in bytes
	ext.l	d1
	subq.w	#1,d1
	add.l	d1,d0				; d0 = start address
	lsr.w	#4,d2				; d2 = clear width in words
	add.w	#3,d2				; for safety	
	move.w	d2,d1
	mulu	#2,d1				; d1 = clear width in bytes
	move.w	#40,d3
	sub.w	d1,d3				; d3 = clear modulo
	move.w	globalymin(pc),d4
	sub.w	safety(pc),d4
	move.w	globalymax(pc),d5
	sub.w	d4,d5				; hight
	add.w	safety(pc),d5
	mulu	#40,d4
	ext.l	d4
	add.l	d4,d0
	lsl.w	#6,d5
	or.w	d5,d2				; hight and width

wait1	btst	#14,$dff002
	bne.s	wait1
	move.w	#$0100,$dff040
	move.w	#$0000,$dff042
	move.l	#$ffffffff,$dff044
	move.l	d0,$dff054
	move.w	d3,$dff066
	move.w	d2,$dff058
	add.l	#10240,d0			; point on next plane
wait2	btst	#14,$dff002
	bne.s	wait2
	move.w	#$0100,$dff040
	move.w	#$0000,$dff042
	move.l	d0,$dff054
	move.w	d3,$dff066
	move.w	d2,$dff058
	add.l	#10240,d0			; point on next plane
wait3	btst	#14,$dff002
	bne.s	wait3
	move.w	#$0100,$dff040
	move.w	#$0000,$dff042
	move.l	d0,$dff054
	move.w	d3,$dff066
	move.w	d2,$dff058
	move.w	#320,globalxmin			; reset globals
	move.w	#0,globalxmax
	move.w	#256,globalymin
	move.w	#0,globalymax
	rts

** blitter fill (descending mode) *********************************************

fill	move.l	a0,d0				; screen address
	moveq	#0,d1
	move.l	d1,d2
	move.l	d1,d3
	move.w	ymax(pc),d1
	mulu	#40,d1	
	add.l	d1,d0				; d0 = buttom vertical line
	move.w	#320,d2
	sub.w	xmax(pc),d2
	lsr.w	#3,d2				; 16 pixel precision
	ext.l	d2
	sub.l	d2,d0				; d0 = start address 
	move.w	xmax(pc),d1
	sub.w	xmin(pc),d1			; d1 = fill width in pixels
	lsr.w	#4,d1				; d1 = fill width in words
	addq.w	#3,d1
	move.w	d1,d2
	move.w	#40,d3				; full screen modulo
	add.w	d2,d2				; d2 = fill width in bytes
	sub.w	d2,d3				; d3 = fill modulo
	move.w	ymax(pc),d2
	sub.w	ymin(pc),d2			; d2 = hight in pixels
	lsl.w	#6,d2				; place hight on right bits
	or.w	d2,d1				; d1 = fill hight and width
fready	btst	#14,$dff002
	bne.b	fready
	move.l	d0,$dff050
	move.l	d0,$dff054
	move.w	#$09f0,$dff040			; minterm d=a
	move.w	#%0000000000010010,$dff042	; exclusive fill (bit 4)
	move.l	#$ffffffff,$dff044		; masks
	move.w	d3,$dff064			; a modulo
	move.w	d3,$dff066			; d modulo
	move.w	d1,$dff058			; fill hight and start address
we3draw	btst	#6,$dff002
	bne.s	we3draw
	rts
		
** DATA ***********************************************************************
	
screen_adress	dc.l	screen1
xcenter		dc.w	159
ycenter		dc.w	128
zcenter		dc.w	460
zoom		dc.w	210
safety		dc.w	6	; high safety takes more raster
counter		dc.w	0
xvinkel		dc.w	0
yvinkel		dc.w	0
zvinkel		dc.w	0
ydelta		dc.w	2
xdelta		dc.w	3
zdelta		dc.w	1
y1		dc.l	0
z1		dc.l	0
x2		dc.l	0
lastx		dc.w	0
lasty		dc.w	0
ymin		dc.w	256
ymax		dc.w	0
xmin		dc.w	320
xmax		dc.w	0
globalymin	dc.w	120
globalymax	dc.w	140
globalxmin	dc.w	150
globalxmax	dc.w	170
offset		dc.w	2,6,10,2,2,2,2,2
colours		dc.w	$000,$002,$013,$024,$035,$046,$057,$068
		dc.w	$079,$08a,$09b,$0ac,$0bd,$0ce,$0df,$fff
bltc1		dc.b	0
		even

** OBJECT DATA ****************************************************************
**
** STRUCTURE:	DC.W	XN,YN,ZX,LIMIT,BITPLAN,COUNT
**		DC.W	X,Y,Z,S
**
** (XN,YN,ZN):	PLANE NORMAL-VECTOR (MUST STAND IN AN 90° ANGLE ON PLANE).
** LIMIT:	ZN LIMIT (TO DETERMINE WHEN WE ARE SEEING FRONT OR BACKSIDE).
** BITPLAN:	SELECT COLOUR FOR THIS PLANE 0,1,2.
** COUNT:	NUMBER OF POINTS THAT THIS PLANE CONSISTS OF.
** (X,Y,Z):	POINT COORDINATES.
** S:		0:MOVE TO THIS POINT. 1:DRAW LINE FROM THIS POINT TO LAST ONE.
**

points	dc.w	0,0,100,27,0,5
	dc.w	29,-2,330,0
	dc.w	29,258,330,1
	dc.w	289,258,330,1
	dc.w	289,-2,330,1
	dc.w	29,-2,330,1
	dc.w	100,0,0,27,1,5	
	dc.w	29,-2,590,0
	dc.w	29,258,590,1
	dc.w	29,258,330,1
	dc.w	29,-2,330,1
	dc.w	29,-2,590,1
	dc.w	-100,0,0,27,1,5	
	dc.w	289,-2,590,0
	dc.w	289,258,590,1
	dc.w	289,258,330,1
	dc.w	289,-2,330,1
	dc.w	289,-2,590,1
	dc.w	0,0,-100,27,0,5
	dc.w	29,-2,590,0
	dc.w	29,258,590,1
	dc.w	289,258,590,1
	dc.w	289,-2,590,1
	dc.w	29,-2,590,1
	dc.w	0,-100,0,27,2,5
	dc.w	29,258,330,0
	dc.w	29,258,590,1
	dc.w	289,258,590,1
	dc.w	289,258,330,1
	dc.w	29,258,330,1
	dc.w	0,100,0,27,2,5
	dc.w	29,-2,330,0
	dc.w	29,-2,590,1
	dc.w	289,-2,590,1
	dc.w	289,-2,330,1
	dc.w	29,-2,330,1

	dc.w	$ffff,$ffff	; signal: no more planes to draw!
	even
	
	section	b,data_c

** copperlist *****************************************************************

copper	dc.w	$0106,$0000,$01fc,$0000
	dc.w    $008e,$2c81,$0090,$2cc1
	dc.w    $0092,$0038,$0094,$00d0
	dc.w    $0102,$0000,$0104,$0000
	dc.w	$0108,$0000,$010a,$0000

colour	dc.w	$0182,$0400	; 2
	dc.w	$0184,$0600	; 6
	dc.w	$0188,$0800	; 10

	dc.w	$0186,$0999,$018a,$00f0
	dc.w	$018c,$00f0,$018e,$0813

planes	dc.w    $00e0,$0000,$00e2,$0000
	dc.w    $00e4,$0000,$00e6,$0000
	dc.w	$00e8,$0000,$00ea,$0000
	dc.w    $3001,$ff00,$0100,$3200
	dc.w	$ffe1,$fffe,$2901,$ff00
	dc.w	$0100,$0200

adress	dc.w	$0084,$0000
	dc.w	$0086,$0000
	dc.w	$008a,$0000	; restart copperlist
	dc.w	$ffff,$fffe

** SCREEN *********************************************************************

	even
screen1	ds.b	[320/8*768]
screen2	ds.b	[320/8*768]
	even

sin_table
	dc.w	 0 
	dc.w	 201 
	dc.w	 402 
	dc.w	 603 
	dc.w	 803 
	dc.w	 1004 
	dc.w	 1205 
	dc.w	 1405 
	dc.w	 1605 
	dc.w	 1805 
	dc.w	 2005 
	dc.w	 2204 
	dc.w	 2404 
	dc.w	 2602 
	dc.w	 2801 
	dc.w	 2998 
	dc.w	 3196 
	dc.w	 3393 
	dc.w	 3589 
	dc.w	 3785 
	dc.w	 3980 
	dc.w	 4175 
	dc.w	 4369 
	dc.w	 4563 
	dc.w	 4756 
	dc.w	 4948 
	dc.w	 5139 
	dc.w	 5329 
	dc.w	 5519 
	dc.w	 5708 
	dc.w	 5896 
	dc.w	 6083 
	dc.w	 6269 
	dc.w	 6455 
	dc.w	 6639 
	dc.w	 6822 
	dc.w	 7005 
	dc.w	 7186 
	dc.w	 7366 
	dc.w	 7545 
	dc.w	 7723 
	dc.w	 7900 
	dc.w	 8075 
	dc.w	 8249 
	dc.w	 8423 
	dc.w	 8594 
	dc.w	 8765 
	dc.w	 8934 
	dc.w	 9102 
	dc.w	 9268 
	dc.w	 9434 
	dc.w	 9597 
	dc.w	 9759 
	dc.w	 9920 
	dc.w	 10079 
	dc.w	 10237 
	dc.w	 10393 
	dc.w	 10548 
	dc.w	 10701 
	dc.w	 10853 
	dc.w	 11002 
	dc.w	 11150 
	dc.w	 11297 
	dc.w	 11442 
	dc.w	 11585 
	dc.w	 11726 
	dc.w	 11866 
	dc.w	 12003 
	dc.w	 12139 
	dc.w	 12273 
	dc.w	 12406 
	dc.w	 12536 
	dc.w	 12665 
	dc.w	 12791 
	dc.w	 12916 
	dc.w	 13038 
	dc.w	 13159 
	dc.w	 13278 
	dc.w	 13395 
	dc.w	 13510 
	dc.w	 13622 
	dc.w	 13733 
	dc.w	 13842 
	dc.w	 13948 
	dc.w	 14053 
	dc.w	 14155 
	dc.w	 14255 
	dc.w	 14353 
	dc.w	 14449 
	dc.w	 14543 
	dc.w	 14634 
	dc.w	 14723 
	dc.w	 14810 
	dc.w	 14895 
	dc.w	 14978 
	dc.w	 15058 
	dc.w	 15136 
	dc.w	 15212 
	dc.w	 15286 
	dc.w	 15357 
	dc.w	 15426 
	dc.w	 15492 
	dc.w	 15557 
	dc.w	 15618 
	dc.w	 15678 
	dc.w	 15735 
	dc.w	 15790 
	dc.w	 15842 
	dc.w	 15892 
	dc.w	 15940 
	dc.w	 15985 
	dc.w	 16028 
	dc.w	 16069 
	dc.w	 16107 
	dc.w	 16142 
	dc.w	 16175 
	dc.w	 16206 
	dc.w	 16234 
	dc.w	 16260 
	dc.w	 16284 
	dc.w	 16305 
	dc.w	 16323 
	dc.w	 16339 
	dc.w	 16353 
	dc.w	 16364 
	dc.w	 16372 
	dc.w	 16379 
cos_table
	dc.w	 16382 
	dc.w	 16384 
	dc.w	 16382 
	dc.w	 16379 
	dc.w	 16372 
	dc.w	 16364 
	dc.w	 16353 
	dc.w	 16339 
	dc.w	 16323 
	dc.w	 16305 
	dc.w	 16284 
	dc.w	 16260 
	dc.w	 16234 
	dc.w	 16206 
	dc.w	 16175 
	dc.w	 16142 
	dc.w	 16107 
	dc.w	 16069 
	dc.w	 16028 
	dc.w	 15985 
	dc.w	 15940 
	dc.w	 15892 
	dc.w	 15842 
	dc.w	 15790 
	dc.w	 15735 
	dc.w	 15678 
	dc.w	 15618 
	dc.w	 15557 
	dc.w	 15492 
	dc.w	 15426 
	dc.w	 15357 
	dc.w	 15286 
	dc.w	 15212 
	dc.w	 15136 
	dc.w	 15058 
	dc.w	 14978 
	dc.w	 14895 
	dc.w	 14810 
	dc.w	 14723 
	dc.w	 14634 
	dc.w	 14543 
	dc.w	 14449 
	dc.w	 14353 
	dc.w	 14255 
	dc.w	 14155 
	dc.w	 14053 
	dc.w	 13948 
	dc.w	 13842 
	dc.w	 13733 
	dc.w	 13622 
	dc.w	 13510 
	dc.w	 13395 
	dc.w	 13278 
	dc.w	 13159 
	dc.w	 13038 
	dc.w	 12916 
	dc.w	 12791 
	dc.w	 12665 
	dc.w	 12536 
	dc.w	 12406 
	dc.w	 12273 
	dc.w	 12139 
	dc.w	 12003 
	dc.w	 11866 
	dc.w	 11726 
	dc.w	 11585 
	dc.w	 11442 
	dc.w	 11297 
	dc.w	 11150 
	dc.w	 11002 
	dc.w	 10853 
	dc.w	 10701 
	dc.w	 10548 
	dc.w	 10393 
	dc.w	 10237 
	dc.w	 10079 
	dc.w	 9920 
	dc.w	 9759 
	dc.w	 9597 
	dc.w	 9434 
	dc.w	 9268 
	dc.w	 9102 
	dc.w	 8934 
	dc.w	 8765 
	dc.w	 8594 
	dc.w	 8423 
	dc.w	 8249 
	dc.w	 8075 
	dc.w	 7900 
	dc.w	 7723 
	dc.w	 7545 
	dc.w	 7366 
	dc.w	 7186 
	dc.w	 7005 
	dc.w	 6822 
	dc.w	 6639 
	dc.w	 6455 
	dc.w	 6269 
	dc.w	 6083 
	dc.w	 5896 
	dc.w	 5708 
	dc.w	 5519 
	dc.w	 5329 
	dc.w	 5139 
	dc.w	 4948 
	dc.w	 4756 
	dc.w	 4563 
	dc.w	 4369 
	dc.w	 4175 
	dc.w	 3980 
	dc.w	 3785 
	dc.w	 3589 
	dc.w	 3393 
	dc.w	 3196 
	dc.w	 2998 
	dc.w	 2801 
	dc.w	 2602 
	dc.w	 2404 
	dc.w	 2204 
	dc.w	 2005 
	dc.w	 1805 
	dc.w	 1605 
	dc.w	 1405 
	dc.w	 1205 
	dc.w	 1004 
	dc.w	 803 
	dc.w	 603 
	dc.w	 402 
	dc.w	 201 
	dc.w	-1 
	dc.w	-202 
	dc.w	-403 
	dc.w	-604 
	dc.w	-804 
	dc.w	-1005 
	dc.w	-1206 
	dc.w	-1406 
	dc.w	-1606 
	dc.w	-1806 
	dc.w	-2006 
	dc.w	-2205 
	dc.w	-2405 
	dc.w	-2603 
	dc.w	-2802 
	dc.w	-2999 
	dc.w	-3197 
	dc.w	-3394 
	dc.w	-3590 
	dc.w	-3786 
	dc.w	-3981 
	dc.w	-4176 
	dc.w	-4370 
	dc.w	-4564 
	dc.w	-4757 
	dc.w	-4949 
	dc.w	-5140 
	dc.w	-5330 
	dc.w	-5520 
	dc.w	-5709 
	dc.w	-5897 
	dc.w	-6084 
	dc.w	-6270 
	dc.w	-6456 
	dc.w	-6640 
	dc.w	-6823 
	dc.w	-7006 
	dc.w	-7187 
	dc.w	-7367 
	dc.w	-7546 
	dc.w	-7724 
	dc.w	-7901 
	dc.w	-8076 
	dc.w	-8250 
	dc.w	-8424 
	dc.w	-8595 
	dc.w	-8766 
	dc.w	-8935 
	dc.w	-9103 
	dc.w	-9269 
	dc.w	-9435 
	dc.w	-9598 
	dc.w	-9760 
	dc.w	-9921 
	dc.w	-10080 
	dc.w	-10238 
	dc.w	-10394 
	dc.w	-10549 
	dc.w	-10702 
	dc.w	-10854 
	dc.w	-11003 
	dc.w	-11151 
	dc.w	-11298 
	dc.w	-11443 
	dc.w	-11586 
	dc.w	-11727 
	dc.w	-11867 
	dc.w	-12004 
	dc.w	-12140 
	dc.w	-12274 
	dc.w	-12407 
	dc.w	-12537 
	dc.w	-12666 
	dc.w	-12792 
	dc.w	-12917 
	dc.w	-13039 
	dc.w	-13160 
	dc.w	-13279 
	dc.w	-13396 
	dc.w	-13511 
	dc.w	-13623 
	dc.w	-13734 
	dc.w	-13843 
	dc.w	-13949 
	dc.w	-14054 
	dc.w	-14156 
	dc.w	-14256 
	dc.w	-14354 
	dc.w	-14450 
	dc.w	-14544 
	dc.w	-14635 
	dc.w	-14724 
	dc.w	-14811 
	dc.w	-14896 
	dc.w	-14979 
	dc.w	-15059 
	dc.w	-15137 
	dc.w	-15213 
	dc.w	-15287 
	dc.w	-15358 
	dc.w	-15427 
	dc.w	-15493 
	dc.w	-15558 
	dc.w	-15619 
	dc.w	-15679 
	dc.w	-15736 
	dc.w	-15791 
	dc.w	-15843 
	dc.w	-15893 
	dc.w	-15941 
	dc.w	-15986 
	dc.w	-16029 
	dc.w	-16070 
	dc.w	-16108 
	dc.w	-16143 
	dc.w	-16176 
	dc.w	-16207 
	dc.w	-16235 
	dc.w	-16261 
	dc.w	-16285 
	dc.w	-16306 
	dc.w	-16324 
	dc.w	-16340 
	dc.w	-16354 
	dc.w	-16365 
	dc.w	-16373 
	dc.w	-16380 
	dc.w	-16383 
	dc.w	-16384 
	dc.w	-16383 
	dc.w	-16380 
	dc.w	-16373 
	dc.w	-16365 
	dc.w	-16354 
	dc.w	-16340 
	dc.w	-16324 
	dc.w	-16306 
	dc.w	-16285 
	dc.w	-16261 
	dc.w	-16235 
	dc.w	-16207 
	dc.w	-16176 
	dc.w	-16143 
	dc.w	-16108 
	dc.w	-16070 
	dc.w	-16029 
	dc.w	-15986 
	dc.w	-15941 
	dc.w	-15893 
	dc.w	-15843 
	dc.w	-15791 
	dc.w	-15736 
	dc.w	-15679 
	dc.w	-15619 
	dc.w	-15558 
	dc.w	-15493 
	dc.w	-15427 
	dc.w	-15358 
	dc.w	-15287 
	dc.w	-15213 
	dc.w	-15137 
	dc.w	-15059 
	dc.w	-14979 
	dc.w	-14896 
	dc.w	-14811 
	dc.w	-14724 
	dc.w	-14635 
	dc.w	-14544 
	dc.w	-14450 
	dc.w	-14354 
	dc.w	-14256 
	dc.w	-14156 
	dc.w	-14054 
	dc.w	-13949 
	dc.w	-13843 
	dc.w	-13734 
	dc.w	-13623 
	dc.w	-13511 
	dc.w	-13396 
	dc.w	-13279 
	dc.w	-13160 
	dc.w	-13039 
	dc.w	-12917 
	dc.w	-12792 
	dc.w	-12666 
	dc.w	-12537 
	dc.w	-12407 
	dc.w	-12274 
	dc.w	-12140 
	dc.w	-12004 
	dc.w	-11867 
	dc.w	-11727 
	dc.w	-11586 
	dc.w	-11443 
	dc.w	-11298 
	dc.w	-11151 
	dc.w	-11003 
	dc.w	-10854 
	dc.w	-10702 
	dc.w	-10549 
	dc.w	-10394 
	dc.w	-10238 
	dc.w	-10080 
	dc.w	-9921 
	dc.w	-9760 
	dc.w	-9598 
	dc.w	-9435 
	dc.w	-9269 
	dc.w	-9103 
	dc.w	-8935 
	dc.w	-8766 
	dc.w	-8595 
	dc.w	-8424 
	dc.w	-8250 
	dc.w	-8076 
	dc.w	-7901 
	dc.w	-7724 
	dc.w	-7546 
	dc.w	-7367 
	dc.w	-7187 
	dc.w	-7006 
	dc.w	-6823 
	dc.w	-6640 
	dc.w	-6456 
	dc.w	-6270 
	dc.w	-6084 
	dc.w	-5897 
	dc.w	-5709 
	dc.w	-5520 
	dc.w	-5330 
	dc.w	-5140 
	dc.w	-4949 
	dc.w	-4757 
	dc.w	-4564 
	dc.w	-4370 
	dc.w	-4176 
	dc.w	-3981 
	dc.w	-3786 
	dc.w	-3590 
	dc.w	-3394 
	dc.w	-3197 
	dc.w	-2999 
	dc.w	-2802 
	dc.w	-2603 
	dc.w	-2405 
	dc.w	-2205 
	dc.w	-2006 
	dc.w	-1806 
	dc.w	-1606 
	dc.w	-1406 
	dc.w	-1206 
	dc.w	-1005 
	dc.w	-804 
	dc.w	-604 
	dc.w	-403 
	dc.w	-202 
	dc.w	-1 
	dc.w	 201 
	dc.w	 402 
	dc.w	 603 
	dc.w	 803 
	dc.w	 1004 
	dc.w	 1205 
	dc.w	 1405 
	dc.w	 1605 
	dc.w	 1805 
	dc.w	 2005 
	dc.w	 2204 
	dc.w	 2404 
	dc.w	 2602 
	dc.w	 2801 
	dc.w	 2998 
	dc.w	 3196 
	dc.w	 3393 
	dc.w	 3589 
	dc.w	 3785 
	dc.w	 3980 
	dc.w	 4175 
	dc.w	 4369 
	dc.w	 4563 
	dc.w	 4756 
	dc.w	 4948 
	dc.w	 5139 
	dc.w	 5329 
	dc.w	 5519 
	dc.w	 5708 
	dc.w	 5896 
	dc.w	 6083 
	dc.w	 6269 
	dc.w	 6455 
	dc.w	 6639 
	dc.w	 6822 
	dc.w	 7005 
	dc.w	 7186 
	dc.w	 7366 
	dc.w	 7545 
	dc.w	 7723 
	dc.w	 7900 
	dc.w	 8075 
	dc.w	 8249 
	dc.w	 8423 
	dc.w	 8594 
	dc.w	 8765 
	dc.w	 8934 
	dc.w	 9102 
	dc.w	 9268 
	dc.w	 9434 
	dc.w	 9597 
	dc.w	 9759 
	dc.w	 9920 
	dc.w	 10079 
	dc.w	 10237 
	dc.w	 10393 
	dc.w	 10548 
	dc.w	 10701 
	dc.w	 10853 
	dc.w	 11002 
	dc.w	 11150 
	dc.w	 11297 
	dc.w	 11442 
	dc.w	 11585 
	dc.w	 11726 
	dc.w	 11866 
	dc.w	 12003 
	dc.w	 12139 
	dc.w	 12273 
	dc.w	 12406 
	dc.w	 12536 
	dc.w	 12665 
	dc.w	 12791 
	dc.w	 12916 
	dc.w	 13038 
	dc.w	 13159 
	dc.w	 13278 
	dc.w	 13395 
	dc.w	 13510 
	dc.w	 13622 
	dc.w	 13733 
	dc.w	 13842 
	dc.w	 13948 
	dc.w	 14053 
	dc.w	 14155 
	dc.w	 14255 
	dc.w	 14353 
	dc.w	 14449 
	dc.w	 14543 
	dc.w	 14634 
	dc.w	 14723 
	dc.w	 14810 
	dc.w	 14895 
	dc.w	 14978 
	dc.w	 15058 
	dc.w	 15136 
	dc.w	 15212 
	dc.w	 15286 
	dc.w	 15357 
	dc.w	 15426 
	dc.w	 15492 
	dc.w	 15557 
	dc.w	 15618 
	dc.w	 15678 
	dc.w	 15735 
	dc.w	 15790 
	dc.w	 15842 
	dc.w	 15892 
	dc.w	 15940 
	dc.w	 15985 
	dc.w	 16028 
	dc.w	 16069 
	dc.w	 16107 
	dc.w	 16142 
	dc.w	 16175 
	dc.w	 16206 
	dc.w	 16234 
	dc.w	 16260 
	dc.w	 16284 
	dc.w	 16305 
	dc.w	 16323 
	dc.w	 16339 
	dc.w	 16353 
	dc.w	 16364 
	dc.w	 16372 
	dc.w	 16379 
	dc.w	 16382 

