
**	LIGHTSOURCED VECTOR
**	CODED BY CRADON/MATRIX
**	ASM-ONE FORMAT

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

	SECTION	A,CODE_C

START	MOVEM.L	D0-A6,-(A7)
	MOVE.W	$DFF01C,INTENA
	MOVE.W	$DFF002,DMACON
	MOVE.W	$DFF010,ADKCON
	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	JSR	INITCOP
	JSR	INITIRQ
	MOVE.W	#%1000001111000000,$DFF096
	MOVE.W 	#%1100000000110000,$DFF09A
LOOP	BTST	#6,$BFE001
	BNE.B	LOOP
ENDE	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	MOVE.L	OLDIRQ,$00006C
	MOVE.W	DMACON,D0			
	OR.W	#$8000,D0			
	MOVE.W	D0,$DFF096
	MOVE.W	ADKCON,D0			
	OR.W	#$8000,D0
	MOVE.W	D0,$DFF09E
	MOVE.W	INTENA,D0			
	OR.W	#$C000,D0
	MOVE.W	D0,$DFF09A
	MOVE.W	#0,$DFF088
	MOVEM.L	(A7)+,D0-A6
	RTS

** THIRD LEVEL INTERRUPT ******************************************************

MYIRQ	MOVEM.L	D0-A6,-(A7)
	JSR	CLEAR
	JSR	VECTOR
	JSR	FLIP_SCREEN
	MOVE.W	#$20,$DFF09C
	MOVEM.L	(A7)+,D0-A6 		
	RTE

** FILLED VECTOR **************************************************************

VECTOR	JSR	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,A0		; LETS WORK ON THIS FRAME
	MOVE.W	(A1)+,D0			; X-NORMAL
	MOVE.W	(A1)+,D1			; Y-NORMAL
	MOVE.W	(A1)+,D2			; Z-NORMAL
	JSR	NORMAL				; ROTATE PLANE'S VECTOR-NORMAL.
	MOVE.W	(A1)+,D3			; GET Z-COORD LIMIT
	CMP.W	D3,D2				; FRONT- OR BACKSIDE OF PLANE?
	BGT.B	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
	JSR	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,D0			; OBJECT WITH CENTER IN ORIGO
	SUB.W	YCENTER,D1
	SUB.W	ZCENTER,D2
	BSR.B	ROTATE				; ROTATE 3D POINT
	ADD.W	ZCENTER,D2
	JSR	CONVERT				; CONVERT FROM 3D TO 2D
	ADD.W	XCENTER,D0
	ADD.W	YCENTER,D1
	JSR	EXTREM				; NOTE PLANE MAX AND MIN
	JSR	LINE				; DRAW LINE FROM LAST POINT
	SUB.W	#1,COUNTER
	TST.W	COUNTER				; PLANE FINISHED?
	BNE.B	LINIER				; IF NOT: WORK ON NEXT LINE
	JSR	FILL				; FILL PLANE
	JSR	GLOBAL				; NOTE GLOBAL EXTREMES (CLEAR)
	MOVE.W	#256,YMIN			; RESET FOR NEXT PLANE
	MOVE.W	#0,YMAX
	MOVE.W	#320,XMIN
	MOVE.W	#0,XMAX
	BRA.W	OBLOOP
VECOUT	RTS	

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

ROTATE	MOVE.W	XVINKEL,D5			; X ANGLE
	MOVE.W	YVINKEL,D6			; Y ANGLE
	MOVE.W	ZVINKEL,D7			; Z ANGLE
	LSL.W	#1,D5				; X ANGLE *2
	LSL.W	#1,D6				; Y ANGLE *2
	LSL.W	#1,D7				; Z ANGLE *2
	MOVE.W	(A3,D5.W),D3			; COS(XGRAD)
	MOVE.W	(A2,D5.W),D4			; SIN(XGRAD)
	MULS	D1,D3				; Y*COS(XGRAD)
	MULS	D2,D4				; Z*SIN(XGRAD)
	SUB.L	D4,D3				; Y*COS(XGRAD) - Z*SIN(XGRAD)
	LSL.L	#2,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)
	MOVE.W	(A3,D5.W),D4			; COS(XGRAD)
	MULS	D1,D3				; Y*SIN(XGRAD)
	MULS	D2,D4				; Z*COS(XGRAD)
	ADD.L	D4,D3				; Y*SIN(XGRAD) + Z*COS(XGRAD)
	LSL.L	#2,D3				; 4*(Y*SIN(XGRAD)+Z*COS(XGRAD))
	MOVE.L	D3,Z1				; Z-COORDINATE AROUND X AXIS
	MOVE.W	(A3,D6.W),D3			; COS(YGRAD)
	MOVE.W	(A2,D6.W),D4			; SIN(YGRAD)
	MULS	D0,D3				; X*COS(YGRAD)
	MULS	Z1,D4				; Z*SIN(YGRAD)
	SUB.L	D4,D3				; X*COS(YGRAD) - Z*SIN(YGRAD)
	LSL.L	#2,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)
	MOVE.W	(A3,D6.W),D4			; COS(YGRAD)
	MULS	D0,D2				; X*SIN(YGRAD)
	MULS	Z1,D4				; Z*COS(YGRAD)
	ADD.L	D4,D2				; X*SIN(YGRAD) + Z*COS(YGRAD)
	LSL.L	#2,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	(A3,D7.W),D0			; COS(ZGRAD)
	MOVE.W	(A2,D7.W),D4			; SIN(ZGRAD)
	MULS	X2,D0				; X*COS(ZGRAD)
	MULS	Y1,D4				; Y*SIN(ZGRAD)
	SUB.L	D4,D0				; X*COS(ZGRAD) - Y*SIN(ZGRAD)
	LSL.L	#2,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)
	MOVE.W	(A3,D7.W),D3			; COS(ZGRAD)
	MULS	X2,D1				; X*SIN(ZGRAD)
	MULS	Y1,D3				; Y*COS(ZGRAD)
	ADD.L	D3,D1				; X*SIN(ZGRAD) + Y*COS(ZGRAD)
	LSL.L	#2,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,D5
	MOVE.W	YVINKEL,D6
	LSL.W	#1,D5
	LSL.W	#1,D6
	MOVE.W	(A2,D5.W),D3
	MOVE.W	(A3,D5.W),D4
	MULS	D1,D3
	MULS	D2,D4
	ADD.L	D4,D3
	LSL.L	#2,D3
	MOVE.L	D3,Z1
	MOVE.W	(A2,D6.W),D2
	MOVE.W	(A3,D6.W),D4
	MULS	D0,D2
	MULS	Z1,D4
	ADD.L	D4,D2
	LSL.L	#2,D2
	SWAP	D2
	EXT.L	D2
	RTS

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

CONVERT	MULS	ZOOM,D0
	MULS	ZOOM,D1
	DIVS	D2,D0
	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,D2
	MOVE.W	LASTY,D3
	MOVE.W	D0,LASTX
	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,D1
	BHI	NOYMIN
	MOVE.W	D1,YMIN
NOYMIN	CMP.W	YMAX,D1
	BLT	NOYMAX
	MOVE.W	D1,YMAX
NOYMAX	CMP.W	XMIN,D0
	BHI	NOXMIN
	MOVE.W	D0,XMIN
NOXMIN	CMP.W	XMAX,D0
	BLT	NOXMAX
	MOVE.W	D0,XMAX
NOXMAX	RTS

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

GLOBAL	MOVE.W	XMIN,D0
	CMP.W	GLOBALXMIN,D0
	BHI	NOGLOBX
	MOVE.W	D0,GLOBALXMIN
NOGLOBX	MOVE.W	XMAX,D0
	CMP.W	GLOBALXMAX,D0
	BLT	GLOBOY1
	MOVE.W	D0,GLOBALXMAX
GLOBOY1	MOVE.W	YMIN,D0
	CMP.W	GLOBALYMIN,D0
	BHI	NOGLOBY
	MOVE.W	D0,GLOBALYMIN
NOGLOBY	MOVE.W	YMAX,D0
	CMP.W	GLOBALYMAX,D0
	BLT	GLOBOUT
	MOVE.W	D0,GLOBALYMAX
GLOBOUT	RTS	

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

ANGLES	MOVE.W	YDELTA,D0
	ADD.W	D0,YVINKEL			; NEW Y ANGLE
	CMP.W	#512,YVINKEL
	BLT.B	XANGLE
	SUB.W	#512,YVINKEL
XANGLE	MOVE.W	XDELTA,D0
	ADD.W	D0,XVINKEL			; NEW X ANGLE
	CMP.W	#512,XVINKEL
	BLT.B	ZANGLE
	SUB.W	#512,XVINKEL
ZANGLE	MOVE.W	ZDELTA,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	LSL.W	#1,D0				; D0 = OFFSET IN OFFSET-TABLE!
	LEA.L	COLOUR,A4
	LEA.L	OFFSET(PC),A5
	LEA.L	COLOURS(PC),A6
	MOVE.W	(A5,D0.W),D1			; D1 = OFFSET FROM COLOUR LABEL
	DIVU	#7,D2				; ADJUST TO COLOURSTABLE OFFSET
	LSL.W	#1,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
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	MOVE.L	SCREEN_ADRESS,D0
	MOVE.W	GLOBALXMIN,D1	
	MOVE.W	GLOBALXMAX,D2
	SUB.W	D1,D2				; D2 = CLEAR WIDTH IN PIXELS
	DIVU	#8,D1				; D1 = LEFT PIXELS IN BYTES
	EXT.L	D1
	SUB.W	#1,D1
	ADD.L	D1,D0				; D0 = START ADDRESS
	DIVU	#16,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,D4
	SUB.W	SAFETY,D4
	MOVE.W	GLOBALYMAX,D5
	SUB.W	D4,D5				; HIGHT
	ADD.W	SAFETY,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
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	MOVE.W	YMAX,D1
	MULU	#40,D1	
	ADD.L	D1,D0				; D0 = BUTTOM VERTICAL LINE
	MOVE.W	#320,D2
	SUB.W	XMAX,D2
	LSR.W	#3,D2				; 16 PIXEL PRECISION
	EXT.L	D2
	SUB.L	D2,D0				; D0 = START ADDRESS 
	MOVE.W	XMAX,D1
	SUB.W	XMIN,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
	LSL.W	#1,D2				; D2 = FILL WIDTH IN BYTES
	SUB.W	D2,D3				; D3 = FILL MODULO
	MOVE.W	YMAX,D2
	SUB.W	YMIN,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
	RTS
	
** SET COPPER FOR SELFACTIVATION **********************************************

INITCOP	LEA     PLANES,A0
	MOVE.L  #SCREEN2,D0
	MOVE.W  D0,6(A0)
	SWAP    D0
	MOVE.W  D0,2(A0)
	SWAP    D0
	MOVE.L	#COPPER,D0
	LEA.L	ADRESS,A0
	MOVE.W	D0,6(A0)
	SWAP	D0
	MOVE.W	D0,2(A0)
	MOVE.L	#COPPER,$DFF084
	MOVE.B	#$00,$DFF08A
	RTS
INITIRQ	MOVE.L 	$6C,OLDIRQ
	MOVE.L 	#MYIRQ,$6C
	RTS
	
** DATA ***********************************************************************
	
OLDIRQ		DC.L	0
INTENA		DC.W	0
DMACON		DC.W	0
ADKCON		DC.W	0
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!
	
	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 *********************************************************************

SCREEN1	BLK.B	[320/8*768],$00
SCREEN2	BLK.B	[320/8*768],$00

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 






