;3DAM
;               *********************************************
;                *  ROTAZIONE ATTORNO AD UN ASSE A PIACERE *
;                 *****************************************
;
;                            by Antonio Martini
;                   Hardware support by Simone Rancitelli
;
;
;                          Assembler: ASM-One V1.0
;
;
; ---------------------------------------------------------------------------
; 	                 [ RESETTARE PER USCIRE ]
;     [DA DEBUGGER: PREMERE IL PULSANTE SINISTRO DEL MOUSE PER "ILLEGAL"]   
; ---------------------------------------------------------------------------
;
; ASSE ROTAZIONE:
; prova a cambiare i seguenti parametri (N.B. devono essere moltiplicati
; *4).
; ±1*4= incremento di ±360/512 gradi 

v1 = 128*4		; angolo y asse rotazione	
v0 = 64*4		; angolo x asse rotazione
vx = -700		; traslazione x asse rotazione
vy = 550		; traslazione y asse rotazione
vz = 900		; traslazione z asse rotazione

incob= 2*4		; angolo di incremento rotazione oggetto attorno asse
			; rotazione
			
dist = -2500		; distanza scena dall'osservatore

; parametri clipping 2d schermo:
X_max = 319
Y_max = 255

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

bltddat	    EQU	  $000
dmaconr	    EQU	  $002
vposr	    EQU	  $004
vhposr	    EQU	  $006

bltcon0	    EQU	  $040
bltcon1	    EQU	  $042
bltafwm	    EQU	  $044
bltalwm	    EQU	  $046
bltcpt	    EQU	  $048
bltbpt	    EQU	  $04C
bltapt	    EQU	  $050
bltdpt	    EQU	  $054
bltsize	    EQU	  $058

bltcmod	    EQU	  $060
bltbmod	    EQU	  $062
bltamod	    EQU	  $064
bltdmod	    EQU	  $066

bltcdat	    EQU	  $070
bltbdat	    EQU	  $072
bltadat	    EQU	  $074

bplcon0	    EQU	  $100
bplcon1	    EQU	  $102
bplcon2	    EQU	  $104
bpl1mod	    EQU	  $108
bpl2mod	    EQU	  $10A

; --------------------------------------
; MACRO CLIPPING 2D
; registri usati D0,D1,D2,D3,D4,D5

CLXMIN0	MACRO
	sub.w	d2,d0	; -(x2-x1)
	sub.w	d3,d1	; -(y2-y1)
	muls	d2,d1	; d1*-x2
	divs	d0,d1		
	sub.w	d0,d0	; x=xmin
	neg.w	d1
	add.w	d3,d1	; y
	ENDM

CLXMIN1	MACRO
	move.w	d1,d5	; y1
	sub.w	d3,d5	; -y2-y1
	muls	d2,d5	; *-x2
	sub.w	d0,d2	; x2-x1
	divs	d2,d5
	sub.w	d2,d2
	add.w	d5,d3	; +y2
	ENDM

CLYMIN0	MACRO
	sub.w	d2,d0	; -(x2-x1)
	sub.w	d3,d1	; -(y2-y1)
	neg.w	d1	; y2-y1
	muls	d3,d0	; *-y2
	divs	d1,d0			
	sub.w	d1,d1	; y=ymin
	add.w	d2,d0	; x
	ENDM

CLYMIN1	MACRO
	move.w	d0,d5	; x2
	sub.w	d2,d5	; -(x2-x1)
	muls	d3,d5	; *-y2
	sub.w	d1,d3	; y2-y1
	divs	d3,d5
	add.w	d5,d2	
	sub.w	d3,d3
	ENDM

CLXMAX1	MACRO
	move.w	a1,d5
	sub.w	d2,d5	; xmax-x2
	sub.w	d0,d2	; x2-x1
	move.w	d3,d4	; y2
	sub.w	d1,d3	; y2-y1
	muls	d5,d3
	divs	d2,d3
	move.w	a1,d2	; x=xmax
	add.w	d4,d3	; y	
	ENDM

CLXMAX0	MACRO
	move.w	a1,d5
	sub.w	d0,d5	; xmax-x2
	sub.w	d2,d0	; x2-x1
	move.w	d1,d4	; y2
	sub.w	d3,d1	; y2-y1
	muls	d5,d1
	divs	d0,d1
	move.w	a1,d0
	add.w	d4,d1
	ENDM

CLYMAX1	MACRO
	move.w	d2,d4	; x2
	sub.w	d0,d2	; x2-x1
	move.w	a3,d5
	sub.w	d3,d5	; ymax-y2
	sub.w	d1,d3	; y2-y1
	muls	d5,d2
	divs	d3,d2
	add.w	d4,d2	; x
	move.w	a3,d3   ; y=xmax
	ENDM

CLYMAX0	MACRO
	move.w	d0,d4
	sub.w	d2,d0	; x2-x1
	move.w	a3,d5
	sub.w	d1,d5	; ymax-y2
	sub.w	d3,d1	; y2-y1
	muls	d5,d0
	divs	d1,d0
	add.w	d4,d0
	move.w	a3,d1
	ENDM

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

	SECTION	MAIN,CODE_P

MAIN_PRG
	move.l	4.w,a6
	jsr	-132(a6)	; Disabilita Multitasking

	lea.l	$dff000,a5

; attende Vertical Blank
waitvrt	move.w	$06(a5),d0
	and.w	#$000f,d0
	bne.s	waitvrt

; azzera puntatori sprites
	moveq	#0,d0
	move.l	d0,$144(a5)	
	move.l	d0,$140(a5)

; disabilita canali DMA
	move.w	#$01a0,$dff096

; imposta parametri bufferizzazione video
	lea.l	sc_cont,a0
	move.l	#$00070000,(a0)+
	move.w	#-1,(a0)+

; dirotta vettori IRQ livello 3 + imposta Copperlist
	move.l	#$7fff7fff,$9a(a5)
	move.l	#copperlist,$80(a5)
	move.l	#irq_prg,$6c.w

	move.l	#$c0207fff,$9a(a5)	; DMA enable
	move.w	#$83c0,$96(a5)

	move.w	d0,$88(a5)		; start Copperlist
	bra.s	main2

sc_cont		dc.b	0,7
change0		dc.w	0
change1		dc.w	-1

; indirizzi piani di bit

lbp	equ	(y_max+1)*40
	
bplane1		dc.l	extmem+(lbp*0)	;1 bitmap
bplane2		dc.l	extmem+(lbp*1)	;2 bitmap
bplane3		dc.l	extmem+(lbp*2)	;3 bitmap

bmap		dc.l	extmem+(lbp*0)	; puntatore bitplane tracciamento

; ------------------
; GESTIONE 3o BUFFER
; ------------------

MAIN2	lea.l	change1(pc),a0		; contatore buffer
	move.w	(a0),d0
	addq.w	#1,d0
	cmp.w	#2,d0
	ble.s	NORS0
	sub.w	d0,d0
NORS0	move.w	d0,(a0)			; buffer counter

Waitblk	btst	d0,-3(a0)		; controlla se buffer libero
	bne.s	Waitblk
	move.w	d0,-(sp)

	add.w	d0,d0
	add.w	d0,d0
	move.l	2(a0,d0.w),d0		; 2
	move.l	d0,Bmap			; ^.l schermo

; CLEAR SCREEN
	lea.l	$dff000,a6
Wblt0	btst	#6,2(a6)
	bne.s	Wblt0

	move.l	d0,bltdpt(a6)		; ^ bitmap
	move.w	#0,bltdmod(a6)
	move.l	#$01000000,bltcon0(a6)
	move.w	#((y_max+1)<<6)!20,bltsize(a6)

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

	BSR.W	PROGRAM			; -> PROGRAMMA PRINCIPALE

; -----------------------------------------------------
ENDFRAME
	move.w	(sp)+,d0
	lea.l	sc_cont+1(pc),a0
	bset	d0,(a0)		; 1 = Buffer che puo' essere visualizzato

	btst	#6,$bfe001	
	bne.w	MAIN2	 
	ILLEGAL			; EXIT

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

; 	----------------------
;	     IRQ-Routine
;        (scambia bitplanes)
;       ----------------------

irq_prg movem.l	d0-a6,-(sp)
	lea.l	change0(pc),a0
	move.w	(a0),d0
	move.w	d0,d1
	addq.w	#1,d0
	cmp.w	#2,d0
	ble.s	lab_cd
	sub.w	d0,d0

lab_cd	btst	d0,-1(a0)
	beq.s	irq_esc
	move.w	d0,(a0)
	bclr	d1,-1(a0)

	add.w	d0,d0
	add.w	d0,d0		; *4
	lea.l	4(a0,d0.w),a0
	lea.l	bitplane1+2,a1
	
	move.w	(a0)+,(a1)
	move.w	(a0)+,4(a1)

irq_esc	movem.l	(sp)+,d0-a6
	move.w	#$4020,$dff09c
	rte

; ------------
; MAIN PROGRAM
; ------------

PROGRAM
; incrementa angoli rotazione:
; prova a cambiare questi valori (N.B. devono essere moltiplicati per 4)
; 1*4= incremento di 360/512 gradi 

	move.w	Z_ANGLE(pc),d4
	add.w	#INCOB,d4		; c=c+(360/512)
	and.w	#$7ff,d4		; Z angle
	movem.w	d4,Z_ANGLE		; angolo rotaz. oggetto 
					; attorno asse

					; attorno asse 
	move.w	#v0,d2			; angolo X asse rotazione
	move.w	#v1,d0			; angolo Y asse rotazionr
	move.w	#vx,a0			; parametri traslazione asse
	move.w	#vy,a1
	move.w	#vz,a2
	lea.l	sincos(pc),a3		; ^ tabella sin,cos
	movem.w	0(a3,d0.w),d0-d1	; sin(b),cos(b)
	movem.w	0(a3,d2.w),d2-d3	; sin(a),cos(a)
	lea.l	MAT_Tyx(pc),a5
	bsr.w	CLC_Tyx			; -> calcola T*(Y*X)

	bsr.w	draxis			; posiziona asse rotazione

; ------------------------
; angoli rotazione oggetto
	move.w	Z_ANGLE(pc),d4		; angolo rotazione oggetto
					; attorno asse 
	move.w	#v0,d2			; angolo X asse rotazione
	move.w	#v1,d0			; angolo Y asse rotazionr
	move.w	#vx,a0			; parametri traslazione asse
	move.w	#vy,a1
	move.w	#vz,a2
	lea.l	sincos(pc),a3		; ^ tabella sin,cos
	movem.w	0(a3,d0.w),d0-d1	; sin(b),cos(b)
	movem.w	0(a3,d2.w),d2-d3	; sin(a),cos(a)
	movem.w	0(a3,d4.w),d4-d5	; sin(c),cos(c)
	movem.w	a0/a1/a2,TRAS
	lea.l	MAT_zxy(pc),a5		; ^ array destinazione 
	bsr.w	CLC_Rzxy		; -> calcola coefficienti 
					; matrice rotazione 
	lea.l	MAT_Tyx(pc),a0
	lea.l	MAT_zxy(pc),a1
	lea.l	Rzxy(pc),a5
	bsr.w	CLC_m0m1

	lea.l	Rzxy(pc),a3		; ^ A,B,...,I
	add.w	#DIST,11*2(a3)
	bsr.s	TRANSFORM		; -> esegue rotazione
	bsr.w	OBJ_TR			; -> disegna oggetto ruotato 

	rts

TRAS
	dc.w	0,0,0

	
draxis	move.w	#v0,d2			; angolo X asse rotazione
	move.w	#v1,d0			; angolo Y asse rotazionr
	move.w	#vx,a0			; parametri traslazione asse
	move.w	#vy,a1
	move.w	#vz,a2
	lea.l	sincos(pc),a3		; ^ tabella sin,cos
	movem.w	0(a3,d0.w),d0-d1	; sin(b),cos(b)
	movem.w	0(a3,d2.w),d2-d3	; sin(a),cos(a)
	lea.l	MAT_xyt(pc),a5
	bsr.w	CLC_xyt

	lea.l	MAT_xyt(pc),a3
	add.w	#DIST,11*2(a3)
	lea.l	axis3d(pc),a0
	lea.l	axis2d(pc),a2
	moveq	#2-1,d7
	bsr.w	TRANSF2			; -> posiziona asse
	rts

AXIS3D
	dc.w	0,0,-2000
	dc.w	0,0,2000
AXIS2d
	dc.w	0,0
	dc.w	0,0

; ------------------------------
; RUOTA + PROIETTA PUNTI OGGETTO
; ------------------------------
;
;       |  A   D   G  0  | 
;       |                | 
;       |  B   E   H  0  | 
;  M =  |                | 
;       |  C   F   I  0  |  
;       |                |  
;       |  L   M   N  1  |    
;
;  x = x*A+y*B+z*C+L
;  y = x*D+y*E+z*F+M
;  z = x*G+y*H+z*I+N
;

TRANSFORM
	lea.l	points3d(pc),a0		; ^ punti da ruotare 
	lea.l	points2d(pc),a2		; ^ punti ruotati
	move.w	#numpoint-1,d7		; n-1 punti da ruotare
TRANSF2
	lea.l	centr_TAB-192*2,a4	; ^ tabella per proiezione 
	move.w	#320/2,a6
	move.w	#256/2,d6

objaxi2	movem.w	(a0)+,d3-d5	; x,y,z

; ROTAZIONE
	move.w	d3,d0		
	move.w	d4,d1
	move.l	a3,a5		; a5= ^A,B,...,I
	muls	(a5)+,d0        ; x*A
	muls	(a5)+,d1	; y*B	
	add.l	d1,d0
	move.w	d5,d1
	muls	(a5)+,d1	; z*C	
	add.l	d1,d0
	swap	d0		; x

	move.w	d3,d1
	move.w	d4,d2
	muls	(a5)+,d1	; x*D
	muls	(a5)+,d2	; y*E	
	add.l	d2,d1
	move.w	d5,d2
	muls	(a5)+,d2	; z*F
	add.l	d2,d1
	swap	d1		; y
		
	muls	(a5)+,d3	; x*G
	muls	(a5)+,d4	; y*H	
	muls	(a5)+,d5	; z*I	
	add.l	d5,d3
	add.l	d4,d3
	swap	d3

; TRASLAZIONE

	add.w	(a5)+,d0	; x=x+L
	add.w	(a5)+,d1	; y=y+M	
	add.w	(a5)+,d3	; z=z+N

; PROIEZIONE  ( posizione osservatore = 256 )
; massimo valore z per punti = 192

	add.w	d3,d3		; proiezione
	move.w	0(a4,d3.w),d3
	muls	d3,d0
	muls	d3,d1
	asl.l	#3,d0
	asl.l	#3,d1
	swap	d0
	swap	d1
	add.w	a6,d0
	add.w	d6,d1
	move.w	d0,(a2)+	; x punto 2d
	move.w	d1,(a2)+	; y	

	dbra	d7,objaxi2	; -> prossimo punto

	rts

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

; angoli rotazione:

Y_angle	dc.w	0	; b = angolo rotazione asse Y	
X_angle	dc.w	0	; a = angolo rotazione asse X
Z_angle	dc.w	230*4	; c = angolo rotazione asse Z

; coefficienti matrice rotazione:

Rzxy	dc.w	0	; A
	dc.w	0	; B
	dc.w	0	; C
	dc.w	0	; D
	dc.w	0	; E
	dc.w	0	; F
	dc.w	0	; G
	dc.w	0	; H
	dc.w	0	; I

	dc.w	0	; tx
	dc.w	0	; ty
	dc.w	0	; tz

	ds.l	5

MAT_Tyx
	ds.l	20
MAT_xyt
	ds.l	20	
MAT_zxy
	ds.l	20

; --------------------------
; MOLTIPLICA DUE MATRICI M*N
; --------------------------
;
; R = M*N
;
;      |  m0   m3   m6  0  |     |  n0   n3   n6   0  |
;      |                   |     |                    |
;      |  m1   m4   m7  0  |     |  n1   n4   n7   0  |
;   =  |                   |  *  |                    |
;      |  m2   m5   m8  0  |     |  n2   n5   n8   0  |
;      |                   |     |                    |
;      |  m9  m10  m11  1  |     |  n9  n10  n11   1  |
;
;      |  r0   r3   r6  0  | 
;      |                   | 
;      |  r1   r4   r7  0  | 
;   =  |                   | 
;      |  r2   r5   r8  0  |  
;      |                   |  
;      |  r9  r10  r11  1  |    
;
; M0M1
;  C     L 
;
;  0	 0	R0=  m0*n0+m3*n1+m6*n2
;  0	 1	R1=  m1*n0+m4*n1+m7*n2
;  0	 2	R2=  m2*n0+m5*n1+m8*n2
;  0	 3	R9=  mx*n0+my*n1+mz*n2+n9
;
;  1	 0	R3 = m0*n3+m3*n4+m6*n5
;  1	 1	R4 = m1*n3+m4*n4+m7*n5
;  1	 2	R5 = m2*n3+m5*n4+m8*n5
;  1	 3	R10= mx*n3+my*n4+mz*n5+10
;
;  2	 0	R6 = m0*n6+m3*n7+m6*n8
;  2	 1	R7 = m1*n6+m4*n7+m7*n8
;  2	 2	R8 = m2*n6+m5*n7+m8*n8
;  2	 3	R11= mx*n6+my*n7+mz*n8+n11
;
;  3	 0	0
;  3	 1	0
;  3	 2	0
;  3	 3	1
;

MATR	MACRO
	move.w	d0,d3
	move.w	d1,d4
	move.w	d2,d5
	muls	\1*2(a0),d3
	muls	\2*2(a0),d4
	muls	\3*2(a0),d5
	add.l	d5,d4
	add.l	d4,d3
	add.l	d3,d3
	swap	d3
	move.w	d3,(a5)+
	ENDM

MATR2	MACRO
	muls	\1*2(a0),d0
	muls	\2*2(a0),d1
	muls	\3*2(a0),d2
	add.l	d2,d1
	add.l	d1,d0
	add.l	d0,d0
	swap	d0
	add.w	(a4)+,d0	; +nx
	move.w	d0,(a6)+
	ENDM

CLC_M0M1

	lea.l	9*2(a1),a4
	lea.l	9*2(a5),a6

; m0*n0+m3*n1+m6*n2

	movem.w	(a1)+,d0-d2	; n0,n1,n2

	MATR	0,3,6

; m1*n0+m4*n1+m7*n2

	MATR	1,4,7

; m2*n0+m5*n1+m8*n2

	MATR	2,5,8

; mx*n0+my*n1+mz*n2+nx

	MATR2	9,10,11,(9-3)

; m0*n3+m3*n4+m6*n5

	movem.w	(a1)+,d0-d2	; n3,n4,n5

	MATR	0,3,6	

; m1*n3+m4*n4+m7*n5

	MATR	1,4,7

; m2*n3+m5*n4+m8*n5

	MATR	2,5,8

; mx*n3+my*n4+mz*n5+ny

	MATR2	9,10,11,(10-6)

; m0*n6+m3*n7+m6*n8

	movem.w	(a1)+,d0-d2	; n6,n7,n8

	MATR	0,3,6

; m1*n6+m4*n7+m7*n8

	MATR	1,4,7

; m2*n6+m5*n7+m8*n8

	MATR	2,5,8

; mx*n6+my*n7+mz*n8+nz

	MATR2	9,10,11,(11-9)

	rts

; -------------------
; CALCOLA MATRICE TYX
; -------------------

CLC_TYX
; d1
	move.w	d1,(a5)+	; m0
; 0
	clr.w	(a5)+		; m1
; -d0
	neg.w	d0
	move.w	d0,(a5)+	; m2
	neg.w	d0
; d0*d2
	move.w	d2,d6
	muls	d0,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; m3
; d3
	move.w	d3,(a5)+	; m4
; d1*d2
	move.w	d2,d6
	muls	d1,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; m5
; d0*d3
	move.w	d3,d6
	muls	d0,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; m6
; -d2
	neg.w	d2
	move.w	d2,(a5)+	; m7
	neg.w	d2
; d1*d3
	move.w	d3,d6
	muls	d1,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; m8

; -a0*d1+a2*d0

	move.w	a2,d7
	muls	d0,d7		; a2*d0
	move.w	a0,d6
	muls	d1,d6		;a0*d1
	sub.l	d6,d7
	add.l	d7,d7
	swap	d7
	move.w	d7,(a5)+	; m9	

; ---
	move.w	a0,d7
	neg.w	d7
	muls	d0,d7
	add.l	d7,d7
	swap	d7		; -a0*d0

	move.w	a2,d4
	muls	d1,d4	
	add.l	d4,d4
	swap	d4		; a2*d1	

; ---
; -a0*d0*d2-a1*d3-a2*d1*d2

	move.w	d7,d5		; -a0*d0
	muls	d2,d5		; -a0*d0*d2

	move.w	a1,d0
	muls	d3,d0		; a1*d3
	sub.l	d0,d5

	move.w	d2,d0		
	muls	d4,d0
	sub.l	d0,d5		; a2*d1*d2
	add.l	d5,d5
	swap	d5
	move.w	d5,(a5)+	; m10	

; -a0*d0*d3+a1*d2-a2*d1*d3

	muls	d3,d7		; -a0*d0*d3

	move.w	a1,d0
	muls	d2,d0
	add.l	d0,d7

	muls	d3,d4		; a2*d1*d3
	sub.l	d4,d7
	add.l	d7,d7
	swap	d7
	move.w	d7,(a5)+	; m11

	rts

; -------------------------
; CALCOLA COEFFICIENTI Rxyt
; -------------------------
; d2,d3 = sin(a),cos(a)
; d0,d1 = sin(b),cos(b)
; a0,a1,a2 = xc,yc,zc

CLC_XYT
; d1
	move.w	d1,(a5)+	; a0
; d2*d0
	move.w	d2,d6
	muls	d0,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; a1
; d3*d0
	move.w	d3,d6
	muls	d0,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; a2
; 0
	clr.w	(a5)+		; a3
; d3
	move.w	d3,(a5)+	; a4
; -d2
	neg.w	d2
	move.w	d2,(a5)+	; a5
	neg.w	d2
; -d0
	neg.w	d0
	move.w	d0,(a5)+	; a6
; d2*d1
	move.w	d1,d6
	muls	d2,d6
	add.l	d6,d6
	swap	d6
	move.w	d6,(a5)+	; a7
; d3*d1
	muls	d3,d1
	add.l	d1,d1
	swap	d1
	move.w	d1,(a5)+	; a8

	movem.w	a0/a1/a2,(a5)   ; a9,a10,a11

	rts	
	
; ----------------------------------------
; CALCOLA COEFFICIENTI MATRICE (A,B,...,I)
; ----------------------------------------
; d2,d3 = sin(a),cos(a)
; d0,d1 = sin(b),cos(b)
; d4,d5 = sin(c),cos(c)
; a5    = ^ array destinazione

CLC_Rzxy

; A=d5*d1+d4*d2*d0
	move.w	d5,d7	
	muls	d1,d7	
	move.l	d7,a0	
	move.w	d4,d6	
	muls	d0,d6	
	move.l	d6,a1	
	add.l	d6,d6
	swap	d6
	muls	d2,d6	
	add.l	d6,d7
	add.l	d7,d7
	swap	d7
	move.w	d7,(a5)+ ; n0

; B=-d4*d1+d5*d2*d0
	move.w	d4,d7
	muls	d1,d7	
	move.l	d7,a2	
	move.w	d0,d6	
	muls	d5,d6
	move.l	d6,a3	
	add.l	d6,d6
	swap	d6
	muls	d2,d6	
	sub.l	d7,d6	
	add.l	d6,d6
	swap	d6
	move.w	d6,(A5)+ ; n1

; C=d3*d0
	move.w	d0,d7	
	muls	d3,d7	
	add.l	d7,d7  	 ; n2	

; D=d4*d3
	move.w	d4,d6	
	muls	d3,d6	
	add.l	d6,d6
	swap	d6
	move.w	d6,d7	 ; n3
	move.l	d7,(a5)+ 		

; E=d5*d3
	move.w	d5,d7	
	muls	d3,d7	
	add.l	d7,d7	 ; n4
; F=-d2
	move.w	d2,d7
	neg.w	d7	 ; n5	
	move.l	d7,(a5)+	

; G= -d5*d0+d4*d2*d1
; a3=d5*d0
; a2=d4*d1
	move.l	a2,d7
	add.l	d7,d7
	swap	d7	
	muls	d2,d7	
	sub.l	a3,d7
	add.l	d7,d7
	swap	d7
	move.w	d7,(a5)+  ; n6		

; H=d4*d0+d5*d2*d1
; a1=d4*d0
; a0=d5*d1		

	move.l	a0,d7
	add.l	d7,d7
	swap	d7
	muls	d2,d7
	add.l	a1,d7	
	add.l	d7,d7	  ; n7	

; I=d3*d1
	muls	d3,d1
	add.l	d1,d1
	swap	d1
	move.w	d1,d7	  ; n8
	move.l	d7,(a5)+

	movem.w	tras(pc),a0/a1/a2
	movem.w	a0/a1/a2,(a5)	; n9,n10,n11

	rts


; ---------------
; DISEGNA OGGETTO 
; ---------------

OBJ_TR
	lea.l	$dff048,a6
	lea.l	$40-$48(a6),a2		; = $dff040
	lea.l	tabella2(pc),a5		; tabella calcolo (x*64)or2
	move.l	#$0bea000f,d6

	move.l	Bmap(pc),d7		; bitplane tracciamento
	lea.l	lines(pc),a0		; ^ linee
	lea.l	points2D(pc),a4		; ^ punti proiettati

	moveq	#-1,d4
	moveq	#40,d0
wblt9	btst	#6,2-$48(a6)
	bne.s	wblt9

	move.l	d4,Bltafwm-$48(a6)
	move.l 	#$aaaa8000,Bltbdat-$48(a6)
	move.w 	d0,Bltcmod-$48(a6)
	move.w 	d0,Bltdmod-$48(a6)

	movem.w	AXIS2D(PC),d0/d1/d2/d3
	bsr.w	LINE			; traccia asse rotazione

wblt10	btst	#6,2-$48(a6)
	bne.s	wblt10
	move.w	#$ffff,Bltbdat-$48(a6)

	bra.s	trace1

trace2	movem.w	0(a4,d0.w),d0-d1 	; x1,y1
	movem.w	0(a4,d2.w),d2-d3  	; x2,y2	
	bsr.w	LINE		  	; -> traccia linea
trace1	move.w	(a0)+,d0   	  	; p1	
	move.w	(a0)+,d2          	; p2
	bpl.s	trace2

	rts

; -------------
; TRACCIA LINEA
; -------------
; d0,d1 = x1,y1
; d2,d3 = x2,y2
; d7    = ^ bitplane destinazione
; a2    = $dff040
; a4    = ^ tabella y*40
; a6    = $dff048

LINE

; CLIPPING
	move.w	#x_max,a1
	move.w	#y_max,a3

	cmp.w	a1,d0	; intersezione x_max ?
	ble.s	bxma11
	cmp.w	a1,d2
	bgt.b	bvtnov3
	CLXMAX0
	bra.s	bxmi00
bvtnov3	rts
bxma11	cmp.w	a1,d2
	ble.s	bxmi00	
	CLXMAX1
; --------
bxmi00	tst.w	d0	; intersezione x_min ?
	bpl.s	bxmi11
	tst.w	d2
	bmi.b	bvtnov2
	CLXMIN0
	bra.s	bymi00
bvtnov2	rts
bxmi11	tst.w	d2
	bpl.s	bymi00	
	CLXMIN1
; --------
bymi00	tst.w	d1	; intersezione y_min ?
	bpl.s	bymi11
	tst.w	d3
	bmi.s	bvtnov1
	CLYMIN0
	bra.s	byma00
bvtnov1	rts
bymi11	tst.w	d3
	bpl.s	byma00				
	CLYMIN1
; --------
byma00	cmp.w	a3,d1	; intersezione y_max ?
	ble.s	byma11	
	cmp.w	a3,d3
	bgt.s	bnovis
	CLYMAX0
	bra.s	bVCOLL
bnovis	rts
byma11	cmp.w	a3,d3
	ble.s	bVCOLL
	CLYMAX1
; --------

bvcoll	ext.l	d0
	ext.l	d1
	ext.l	d2
	ext.l	d3

; TRACCIAMENTO
	move.l	d7,a1 		; ^ bitplane

	sub.w 	d1,d3
	bpl.s 	uline1
	add.w	d3,d1
	neg.w	d3
	exg 	d0,d2
uline1	sub.w 	d0,d2
	bpl.s 	uline2
	neg.w 	d2
	moveq 	#9,d4
	cmp.w 	d3,d2
	bcs.s 	uline3
	moveq 	#21,d4
	bra.s 	ugne3
uline2	moveq 	#1,d4
	cmp.w 	d3,d2
	bcs.s 	uline3
	moveq 	#17,d4
ugne3	exg 	d2,d3

uline3	add.w 	d2,d2
	move.w	d2,d5
	sub.w 	d3,d2
	bpl.s 	gline4
	add.w	a2,d4

gline4	swap	d5
	move.w	d2,d5
	sub.w	d3,d5
	add.w	d3,d3

	add.w	d1,d1
	add.w	TABELLA(pc,d1.w),a1	 ; +y*40

	ror.l	#4,d0
	add.w	d0,d0		 ; bytes position
	add.w	d0,a1		 ; ^ primo punto
	or.l	d6,d0
	move.w	d4,d0

	lea.l	$52-$48(a6),a3
gwbl10	btst 	#6,2-$48(a6)
	bne.s	gwbl10

	move.l 	a1,(a6)		 ; bltcpt
	move.w	d2,(a3)+	 ; $48 - bltaptl
	move.l	a1,(a3)+ 	 ; $52 - bltdpt	
	move.l 	d5,$62-$48(a6)	 ; bltamod
	move.l 	d0,(a2)		 ; a2 = $dff040 bltcon0 / bltcon1
	move.w	0(a5,d3.w),(a3)  ; bltsize / traccia linea	
	rts

TABELLA
	dc.w $0,$28,$50,$78,$A0,$C8,$F0,$118,$140,$168,$190,$1B8
	dc.w $1E0,$208,$230,$258,$280,$2A8,$2D0,$2F8,$320,$348,$370,$398
	dc.w $3C0,$3E8,$410,$438,$460,$488,$4B0,$4D8,$500,$528,$550,$578
	dc.w $5A0,$5C8,$5F0,$618,$640,$668,$690,$6B8,$6E0,$708,$730,$758
	dc.w $780,$7A8,$7D0,$7F8,$820,$848,$870,$898,$8C0,$8E8,$910,$938
	dc.w $960,$988,$9B0,$9D8,$A00,$A28,$A50,$A78,$AA0,$AC8,$AF0,$B18
	dc.w $B40,$B68,$B90,$BB8,$BE0,$C08,$C30,$C58,$C80,$CA8,$CD0,$CF8
	dc.w $D20,$D48,$D70,$D98,$DC0,$DE8,$E10,$E38,$E60,$E88,$EB0,$ED8
	dc.w $F00,$F28,$F50,$F78,$FA0,$FC8,$FF0,$1018,$1040,$1068,$1090,$10B8
	dc.w $10E0,$1108,$1130,$1158,$1180,$11A8,$11D0,$11F8,$1220,$1248,$1270,$1298
	dc.w $12C0,$12E8,$1310,$1338,$1360,$1388,$13B0,$13D8,$1400,$1428,$1450,$1478
	dc.w $14A0,$14C8,$14F0,$1518,$1540,$1568,$1590,$15B8,$15E0,$1608,$1630,$1658
	dc.w $1680,$16A8,$16D0,$16F8,$1720,$1748,$1770,$1798,$17C0,$17E8,$1810,$1838
	dc.w $1860,$1888,$18B0,$18D8,$1900,$1928,$1950,$1978,$19A0,$19C8,$19F0,$1A18
	dc.w $1A40,$1A68,$1A90,$1AB8,$1AE0,$1B08,$1B30,$1B58,$1B80,$1BA8,$1BD0,$1BF8
	dc.w $1C20,$1C48,$1C70,$1C98,$1CC0,$1CE8,$1D10,$1D38,$1D60,$1D88,$1DB0,$1DD8
	dc.w $1E00,$1E28,$1E50,$1E78,$1EA0,$1EC8,$1EF0,$1F18,$1F40,$1F68,$1F90,$1FB8
	dc.w $1FE0,$2008,$2030,$2058,$2080,$20A8,$20D0,$20F8,$2120,$2148,$2170,$2198
	dc.w $21C0,$21E8,$2210,$2238,$2260,$2288,$22B0,$22D8,$2300,$2328,$2350,$2378
	dc.w $23A0,$23C8,$23F0,$2418,$2440,$2468,$2490,$24B8,$24E0,$2508,$2530,$2558
	dc.w $2580,$25A8,$25D0,$25F8,$2620,$2648,$2670,$2698,$26C0,$26E8,$2710,$2738
	dc.w $2760,$2788,$27B0,$27D8,$2800,$2828
	
; -----------------------------------------------

points2D	
	ds.w	140*2		  ; spazio per 100 punti 2d

; -----------------------------------------------
; DATI OGGETTO:

lines
	DC.W 61*4,62*4
	DC.W 61*4,63*4
	DC.W 61*4,65*4
	DC.W 62*4,64*4
	DC.W 62*4,66*4
	DC.W 63*4,64*4
	DC.W 63*4,67*4
	DC.W 66*4,62*4
	DC.W 66*4,68*4
	DC.W 64*4,68*4
	DC.W 68*4,67*4
	DC.W 65*4,66*4
	DC.W 65*4,67*4

	DC.W 38*4,37*4
	DC.W 37*4,36*4
	DC.W 36*4,35*4
	DC.W 35*4,34*4
	DC.W 33*4,32*4
	DC.W 32*4,31*4
	DC.W 31*4,30*4
	DC.W 29*4,28*4
	DC.W 27*4,26*4
	DC.W 26*4,25*4
	DC.W 24*4,23*4
	DC.W 23*4,22*4
	DC.W 22*4,27*4
	DC.W 20*4,21*4
	DC.W 20*4,19*4
	DC.W 40*4,39*4
	DC.W 42*4,41*4
	DC.W 44*4,43*4
	DC.W 45*4,44*4
	DC.W 46*4,51*4
	DC.W 47*4,46*4
	DC.W 48*4,47*4
	DC.W 50*4,49*4
	DC.W 51*4,50*4
	DC.W 53*4,52*4
	DC.W 19*4,18*4
	DC.W 17*4,16*4
	DC.W 15*4,14*4
	DC.W 14*4,13*4
	DC.W 13*4,12*4
	DC.W 11*4,10*4
	DC.W 9*4,8*4
	DC.W 8*4,7*4
	DC.W 7*4,6*4
	DC.W 5*4,4*4
	DC.W 4*4,3*4
	DC.W 2*4,1*4
	DC.W 0*4,5*4
	DC.W 55*4,54*4
	DC.W 56*4,55*4
	DC.W 57*4,56*4
	DC.W 58*4,57*4
	DC.W 59*4,58*4
	DC.W 60*4,59*4
	DC.W 67*4,65*4
	DC.W 61*4,63*4
	DC.W 61*4,65*4
	DC.W 63*4,67*4
	DC.L -1		  ; -1 fine array

points3d
	DC.W 485*-2,220*-2,20*2
	DC.W 425*-2,160*-2,20*2
	DC.W 365*-2,160*-2,20*2
	DC.W 485*-2,100*-2,20*2
	DC.W 365*-2,100*-2,20*2
	DC.W 365*-2,220*-2,20*2
	DC.W 345*-2,100*-2,20*2
	DC.W 345*-2,220*-2,20*2
	DC.W 225*-2,100*-2,20*2
	DC.W 225*-2,220*-2,20*2
	DC.W 205*-2,100*-2,20*2
	DC.W 205*-2,220*-2,20*2
	DC.W 185*-2,220*-2,20*2
	DC.W 65*-2,220*-2,20*2
	DC.W 185*-2,100*-2,20*2
	DC.W 65*-2,100*-2,20*2
	DC.W 45*-2,160*-2,20*2
	DC.W -75*-2,160*-2,20*2
	DC.W 45*-2,220*-2,20*2
	DC.W 45*-2,100*-2,20*2
	DC.W -75*-2,100*-2,20*2
	DC.W -75*-2,220*-2,20*2
	DC.W -95*-2,220*-2,20*2
	DC.W -95*-2,160*-2,20*2
	DC.W -155*-2,160*-2,20*2
	DC.W -95*-2,100*-2,20*2
	DC.W -215*-2,100*-2,20*2
	DC.W -215*-2,220*-2,20*2
	DC.W -235*-2,160*-2,20*2
	DC.W -355*-2,160*-2,20*2
	DC.W -235*-2,220*-2,20*2
	DC.W -235*-2,100*-2,20*2
	DC.W -355*-2,100*-2,20*2
	DC.W -355*-2,220*-2,20*2
	DC.W -375*-2,220*-2,20*2
	DC.W -375*-2,100*-2,20*2
	DC.W -435*-2,140*-2,20*2
	DC.W -495*-2,100*-2,20*2
	DC.W -495*-2,220*-2,20*2
	DC.W -345*-2,-75*-2,-35*2
	DC.W -455*-2,-75*-2,-35*2
	DC.W 440*-2,-75*-2,-35*2
	DC.W 330*-2,-75*-2,-35*2
	DC.W 495*-2,40*-2,-35*2
	DC.W 385*-2,-185*-2,-35*2
	DC.W 270*-2,40*-2,-35*2
	DC.W 215*-2,40*-2,-35*2
	DC.W 215*-2,-75*-2,-35*2
	DC.W 160*-2,-75*-2,-35*2
	DC.W 215*-2,-185*-2,-35*2
	DC.W 50*-2,-185*-2,-35*2
	DC.W 50*-2,40*-2,-35*2
	DC.W -10*-2,-185*-2,-35*2
	DC.W -10*-2,40*-2,-35*2
	DC.W -65*-2,40*-2,-35*2
	DC.W -65*-2,-185*-2,-35*2
	DC.W -175*-2,-75*-2,-35*2
	DC.W -290*-2,-185*-2,-35*2
	DC.W -290*-2,40*-2,-35*2
	DC.W -400*-2,-185*-2,-35*2
	DC.W -510*-2,40*-2,-35*2
	DC.W 560*-2,280*-2,280*2
	DC.W -560*-2,280*-2,280*2
	DC.W 560*-2,280*-2,-280*2
	DC.W -560*-2,280*-2,-280*2
	DC.W 560*-2,-280*-2,280*2
	DC.W -560*-2,-280*-2,280*2
	DC.W 560*-2,-280*-2,-280*2
	DC.W -560*-2,-280*-2,-280*2

numpoint = (*-points3d)/6

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

tabella2
	dc.w $42,$82,$C2,$102,$142,$182,$1C2,$202,$242,$282,$2C2
	dc.w $302,$342,$382,$3C2,$402,$442,$482,$4C2,$502,$542,$582,$5C2
	dc.w $602,$642,$682,$6C2,$702,$742,$782,$7C2,$802,$842,$882,$8C2
	dc.w $902,$942,$982,$9C2,$A02,$A42,$A82,$AC2,$B02,$B42,$B82,$BC2
	dc.w $C02,$C42,$C82,$CC2,$D02,$D42,$D82,$DC2,$E02,$E42,$E82,$EC2
	dc.w $F02,$F42,$F82,$FC2,$1002,$1042,$1082,$10C2,$1102,$1142,$1182,$11C2
	dc.w $1202,$1242,$1282,$12C2,$1302,$1342,$1382,$13C2,$1402,$1442,$1482,$14C2
	dc.w $1502,$1542,$1582,$15C2,$1602,$1642,$1682,$16C2,$1702,$1742,$1782,$17C2
	dc.w $1802,$1842,$1882,$18C2,$1902,$1942,$1982,$19C2,$1A02,$1A42,$1A82,$1AC2
	dc.w $1B02,$1B42,$1B82,$1BC2,$1C02,$1C42,$1C82,$1CC2,$1D02,$1D42,$1D82,$1DC2
	dc.w $1E02,$1E42,$1E82,$1EC2,$1F02,$1F42,$1F82,$1FC2,$2002,$2042,$2082,$20C2
	dc.w $2102,$2142,$2182,$21C2,$2202,$2242,$2282,$22C2,$2302,$2342,$2382,$23C2
	dc.w $2402,$2442,$2482,$24C2,$2502,$2542,$2582,$25C2,$2602,$2642,$2682,$26C2
	dc.w $2702,$2742,$2782,$27C2,$2802,$2842,$2882,$28C2,$2902,$2942,$2982,$29C2
	dc.w $2A02,$2A42,$2A82,$2AC2,$2B02,$2B42,$2B82,$2BC2,$2C02,$2C42,$2C82,$2CC2
	dc.w $2D02,$2D42,$2D82,$2DC2,$2E02,$2E42,$2E82,$2EC2,$2F02,$2F42,$2F82,$2FC2
	dc.w $3002,$3042,$3082,$30C2,$3102,$3142,$3182,$31C2,$3202,$3242,$3282,$32C2
	dc.w $3302,$3342,$3382,$33C2,$3402,$3442,$3482,$34C2,$3502,$3542,$3582,$35C2
	dc.w $3602,$3642,$3682,$36C2,$3702,$3742,$3782,$37C2,$3802,$3842,$3882,$38C2
	dc.w $3902,$3942,$3982,$39C2,$3A02,$3A42,$3A82,$3AC2,$3B02,$3B42,$3B82,$3BC2
	dc.w $3C02,$3C42,$3C82,$3CC2,$3D02,$3D42,$3D82,$3DC2,$3E02,$3E42,$3E82,$3EC2
	dc.w $3F02,$3F42,$3F82,$3FC2,$4002,$4042,$4082,$40C2,$4102,$4142,$4182,$41C2
	dc.w $4202,$4242,$4282,$42C2,$4302,$4342,$4382,$43C2,$4402,$4442,$4482,$44C2
	dc.w $4502,$4542,$4582,$45C2,$4602,$4642,$4682,$46C2,$4702,$4742,$4782,$47C2
	dc.w $4802,$4842,$4882,$48C2,$4902,$4942,$4982,$49C2,$4A02,$4A42,$4A82,$4AC2
	dc.w $4B02,$4B42,$4B82,$4BC2,$4C02,$4C42,$4C82,$4CC2,$4D02,$4D42,$4D82,$4DC2
	dc.w $4E02,$4E42,$4E82,$4EC2,$4F02,$4F42,$4F82,$4FC2,$5002,$5042,$5082,$50C2
	dc.w $5102,$5142,$5182,$51C2,$5202,$5242,$5282,$52C2,$5302,$5342,$5382,$53C2
	dc.w $5402,$5442,$5482,$54C2,$5502,$5542,$5582,$55C2,$5602,$5642,$5682,$56C2
	dc.w $5702,$5742,$5782,$57C2,$5802,$5842,$5882,$58C2,$5902,$5942,$5982,$59C2
	dc.w $5A02,$5A42,$5A82,$5AC2,$5B02,$5B42,$5B82,$5BC2,$5C02,$5C42,$5C82,$5CC2
	dc.w $5D02,$5D42,$5D82,$5DC2,$5E02,$5E42,$5E82,$5EC2,$5F02,$5F42,$5F82,$5FC2
	dc.w $6002,$6042,$6082,$60C2,$6102,$6142,$6182,$61C2,$6202,$6242,$6282,$62C2
	dc.w $6302,$6342,$6382,$63C2,$6402,$6442,$6482,$64C2,$6502,$6542,$6582,$65C2
	dc.w $6602,$6642,$6682,$66C2,$6702,$6742,$6782,$67C2,$6802,$6842,$6882,$68C2
	dc.w $6902,$6942,$6982,$69C2,$6A02,$6A42,$6A82,$6AC2,$6B02,$6B42,$6B82,$6BC2
	dc.w $6C02,$6C42,$6C82,$6CC2,$6D02,$6D42,$6D82,$6DC2,$6E02,$6E42,$6E82,$6EC2
	dc.w $6F02,$6F42,$6F82,$6FC2,$7002,$7042,$7082,$70C2,$7102,$7142,$7182,$71C2
	dc.w $7202,$7242,$7282,$72C2,$7302,$7342,$7382,$73C2,$7402,$7442,$7482,$74C2
	dc.w $7502,$7542,$7582,$75C2,$7602,$7642,$7682,$76C2,$7702,$7742,$7782,$77C2
	dc.w $7802,$7842,$7882,$78C2,$7902,$7942,$7982,$79C2,$7A02,$7A42,$7A82,$7AC2
	dc.w $7B02,$7B42,$7B82,$7BC2,$7C02,$7C42,$7C82,$7CC2,$7D02,$7D42,$7D82,$7DC2
	dc.w $7E02,$7E42,$7E82,$7EC2,$7F02,$7F42,$7F82,$7FC2,$8002,$8042,$8082,$80C2
	dc.w $8102,$8142,$8182,$81C2,$8202,$8242,$8282,$82C2,$8302,$8342,$8382,$83C2
	dc.w $8402,$8442,$8482,$84C2,$8502,$8542,$8582,$85C2,$8602,$8642,$8682,$86C2
	dc.w $8702,$8742,$8782,$87C2,$8802,$8842,$8882,$88C2,$8902,$8942,$8982,$89C2
	dc.w $8A02,$8A42,$8A82,$8AC2,$8B02,$8B42,$8B82,$8BC2,$8C02,$8C42,$8C82,$8CC2
	dc.w $8D02,$8D42,$8D82,$8DC2,$8E02,$8E42,$8E82,$8EC2,$8F02,$8F42,$8F82,$8FC2
	dc.w $9002,$9042,$9082,$90C2,$9102,$9142,$9182,$91C2,$9202,$9242,$9282,$92C2
	dc.w $9302,$9342,$9382,$93C2,$9402,$9442,$9482,$94C2,$9502,$9542,$9582,$95C2
	dc.w $9602,$9642,$9682,$96C2,$9702,$9742,$9782,$97C2,$9802,$9842,$9882,$98C2
	dc.w $9902,$9942,$9982,$99C2,$9A02,$9A42,$9A82,$9AC2,$9B02,$9B42,$9B82,$9BC2
	dc.w $9C02,$9C42,$9C82,$9CC2,$9D02,$9D42,$9D82,$9DC2,$9E02,$9E42,$9E82,$9EC2
	dc.w $9F02,$9F42,$9F82,$9FC2,$A002,$A042,$A082,$A0C2,$A102,$A142,$A182,$A1C2
	dc.w $A202,$A242,$A282,$A2C2,$A302,$A342,$A382,$A3C2,$A402,$A442,$A482,$A4C2
	dc.w $A502,$A542,$A582,$A5C2,$A602,$A642,$A682,$A6C2,$A702,$A742,$A782,$A7C2
	dc.w $A802,$A842,$A882,$A8C2,$A902,$A942,$A982,$A9C2,$AA02,$AA42,$AA82,$AAC2
	dc.w $AB02,$AB42,$AB82,$ABC2,$AC02,$AC42,$AC82,$ACC2,$AD02,$AD42,$AD82,$ADC2
	dc.w $AE02,$AE42,$AE82,$AEC2,$AF02,$AF42,$AF82,$AFC2,$B002,$B042,$B082,$B0C2
	dc.w $B102,$B142,$B182,$B1C2,$B202,$B242,$B282,$B2C2,$B302,$B342,$B382,$B3C2
	dc.w $B402,$B442,$B482,$B4C2,$B502,$B542,$B582,$B5C2,$B602,$B642,$B682,$B6C2
	dc.w $B702,$B742,$B782,$B7C2,$B802,$B842,$B882,$B8C2,$B902,$B942,$B982,$B9C2
	dc.w $BA02,$BA42,$BA82,$BAC2,$BB02,$BB42,$BB82,$BBC2,$BC02,$BC42,$BC82,$BCC2
	dc.w $BD02,$BD42,$BD82,$BDC2,$BE02,$BE42,$BE82,$BEC2,$BF02,$BF42,$BF82,$BFC2
	dc.w $C002,$C042,$C082,$C0C2,$C102,$C142,$C182,$C1C2,$C202,$C242,$C282,$C2C2
	dc.w $C302,$C342,$C382,$C3C2,$C402,$C442,$C482,$C4C2,$C502,$C542,$C582,$C5C2
	dc.w $C602,$C642,$C682,$C6C2,$C702,$C742,$C782,$C7C2,$C802,$C842,$C882,$C8C2
	dc.w $C902,$C942,$C982,$C9C2,$CA02,$CA42,$CA82,$CAC2,$CB02,$CB42,$CB82,$CBC2
	dc.w $CC02,$CC42,$CC82,$CCC2,$CD02,$CD42,$CD82,$CDC2,$CE02,$CE42,$CE82,$CEC2
	dc.w $CF02,$CF42,$CF82,$CFC2,$D002,$D042,$D082,$D0C2,$D102,$D142,$D182,$D1C2
	dc.w $D202,$D242,$D282,$D2C2,$D302,$D342,$D382,$D3C2,$D402,$D442,$D482,$D4C2
	dc.w $D502,$D542,$D582,$D5C2,$D602,$D642,$D682,$D6C2,$D702,$D742,$D782,$D7C2
	dc.w $D802,$D842,$D882,$D8C2,$D902,$D942,$D982,$D9C2,$DA02,$DA42,$DA82,$DAC2
	dc.w $DB02,$DB42,$DB82,$DBC2,$DC02,$DC42,$DC82,$DCC2,$DD02,$DD42,$DD82,$DDC2
	dc.w $DE02,$DE42,$DE82,$DEC2,$DF02,$DF42,$DF82,$DFC2,$E002,$E042,$E082,$E0C2
	dc.w $E102,$E142,$E182,$E1C2,$E202,$E242,$E282,$E2C2,$E302,$E342,$E382,$E3C2
	dc.w $E402,$E442,$E482,$E4C2,$E502,$E542,$E582,$E5C2,$E602,$E642,$E682,$E6C2
	dc.w $E702,$E742,$E782,$E7C2,$E802,$E842,$E882,$E8C2,$E902,$E942,$E982,$E9C2
	dc.w $EA02,$EA42,$EA82,$EAC2,$EB02,$EB42,$EB82,$EBC2,$EC02,$EC42,$EC82,$ECC2
	dc.w $ED02,$ED42,$ED82,$EDC2,$EE02,$EE42,$EE82,$EEC2,$EF02,$EF42,$EF82,$EFC2
	dc.w $F002,$F042,$F082,$F0C2,$F102,$F142,$F182,$F1C2,$F202,$F242,$F282,$F2C2
	dc.w $F302,$F342,$F382,$F3C2,$F402,$F442,$F482,$F4C2,$F502,$F542,$F582,$F5C2
	dc.w $F602,$F642,$F682,$F6C2,$F702,$F742,$F782,$F7C2,$F802,$F842,$F882,$F8C2
	dc.w $F902,$F942,$F982,$F9C2,$FA02,$FA42,$FA82,$FAC2,$FB02,$FB42,$FB82,$FBC2
	dc.w $FC02,$FC42,$FC82,$FCC2,$FD02,$FD42,$FD82,$FDC2,$FE02,$FE42,$FE82,$FEC2
	dc.w $FF02,$FF42,$FF82,$FFC2

; --------------------------------------------------------------------
; tabella sin(a),cos(a)
; calcolata da 0 a 360 gradi con passo 350/512°

sincos	DC.W $0,$7FFF,$192,$7FFD,$324,$7FF6,$4B6,$7FE9,$647,$7FD8
	DC.W $7D9,$7FC2,$96A,$7FA7,$AFB,$7F87,$C8B,$7F62,$E1B,$7F38
	DC.W $FAB,$7F09,$1139,$7ED5,$12C8,$7E9D,$1455,$7E5F,$15E2,$7E1D
	DC.W $176D,$7DD6,$18F8,$7D8A,$1A82,$7D39,$1C0B,$7CE3,$1D93,$7C89
	DC.W $1F19,$7C29,$209F,$7BC5,$2223,$7B5D,$23A6,$7AEF,$2528,$7A7D
	DC.W $26A8,$7A05,$2826,$798A,$29A3,$7909,$2B1F,$7884,$2C98,$77FA
	DC.W $2E11,$776C,$2F87,$76D9,$30FB,$7641,$326E,$75A5,$33DE,$7504
	DC.W $354D,$745F,$36BA,$73B5,$3824,$7307,$398C,$7255,$3AF2,$719E
	DC.W $3C56,$70E2,$3DB8,$7023,$3F17,$6F5F,$4073,$6E96,$41CE,$6DCA
	DC.W $4325,$6CF9,$447A,$6C24,$45CD,$6B4A,$471C,$6A6D,$4869,$698C
	DC.W $49B4,$68A6,$4AFB,$67BD,$4C3F,$66CF,$4D81,$65DD,$4EBF,$64E8
	DC.W $4FFB,$63EF,$5133,$62F2,$5269,$61F1,$539B,$60EC,$54CA,$5FE3
	DC.W $55F5,$5ED7,$571D,$5DC7,$5842,$5CB4,$5964,$5B9D,$5A82,$5A82
	DC.W $5B9D,$5964,$5CB4,$5842,$5DC7,$571D,$5ED7,$55F5,$5FE3,$54CA
	DC.W $60EC,$539B,$61F1,$5269,$62F2,$5133,$63EF,$4FFB,$64E8,$4EBF
	DC.W $65DD,$4D81,$66CF,$4C3F,$67BD,$4AFB,$68A6,$49B4,$698C,$4869
	DC.W $6A6D,$471C,$6B4A,$45CD,$6C24,$447A,$6CF9,$4325,$6DCA,$41CE
	DC.W $6E96,$4073,$6F5F,$3F17,$7023,$3DB8,$70E2,$3C56,$719E,$3AF2
	DC.W $7255,$398C,$7307,$3824,$73B5,$36BA,$745F,$354D,$7504,$33DE
	DC.W $75A5,$326E,$7641,$30FB,$76D9,$2F87,$776C,$2E11,$77FA,$2C98
	DC.W $7884,$2B1F,$7909,$29A3,$798A,$2826,$7A05,$26A8,$7A7D,$2528
	DC.W $7AEF,$23A6,$7B5D,$2223,$7BC5,$209F,$7C29,$1F19,$7C89,$1D93
	DC.W $7CE3,$1C0B,$7D39,$1A82,$7D8A,$18F8,$7DD6,$176D,$7E1D,$15E2
	DC.W $7E5F,$1455,$7E9D,$12C8,$7ED5,$1139,$7F09,$FAB,$7F38,$E1B
	DC.W $7F62,$C8B,$7F87,$AFB,$7FA7,$96A,$7FC2,$7D9,$7FD8,$647
	DC.W $7FE9,$4B6,$7FF6,$324,$7FFD,$192,$7FFF,$0,$7FFD,$FE6E
	DC.W $7FF6,$FCDC,$7FE9,$FB4A,$7FD8,$F9B9,$7FC2,$F827,$7FA7,$F696
	DC.W $7F87,$F505,$7F62,$F375,$7F38,$F1E5,$7F09,$F055,$7ED5,$EEC7
	DC.W $7E9D,$ED38,$7E5F,$EBAB,$7E1D,$EA1E,$7DD6,$E893,$7D8A,$E708
	DC.W $7D39,$E57E,$7CE3,$E3F5,$7C89,$E26D,$7C29,$E0E7,$7BC5,$DF61
	DC.W $7B5D,$DDDD,$7AEF,$DC5A,$7A7D,$DAD8,$7A05,$D958,$798A,$D7DA
	DC.W $7909,$D65D,$7884,$D4E1,$77FA,$D368,$776C,$D1EF,$76D9,$D079
	DC.W $7641,$CF05,$75A5,$CD92,$7504,$CC22,$745F,$CAB3,$73B5,$C946
	DC.W $7307,$C7DC,$7255,$C674,$719E,$C50E,$70E2,$C3AA,$7023,$C248
	DC.W $6F5F,$C0E9,$6E96,$BF8D,$6DCA,$BE32,$6CF9,$BCDB,$6C24,$BB86
	DC.W $6B4A,$BA33,$6A6D,$B8E4,$698C,$B797,$68A6,$B64C,$67BD,$B505
	DC.W $66CF,$B3C1,$65DD,$B27F,$64E8,$B141,$63EF,$B005,$62F2,$AECD
	DC.W $61F1,$AD97,$60EC,$AC65,$5FE3,$AB36,$5ED7,$AA0B,$5DC7,$A8E3
	DC.W $5CB4,$A7BE,$5B9D,$A69C,$5A82,$A57E,$5964,$A463,$5842,$A34C
	DC.W $571D,$A239,$55F5,$A129,$54CA,$A01D,$539B,$9F14,$5269,$9E0F
	DC.W $5133,$9D0E,$4FFB,$9C11,$4EBF,$9B18,$4D81,$9A23,$4C3F,$9931
	DC.W $4AFB,$9843,$49B4,$975A,$4869,$9674,$471C,$9593,$45CD,$94B6
	DC.W $447A,$93DC,$4325,$9307,$41CE,$9236,$4073,$916A,$3F17,$90A1
	DC.W $3DB8,$8FDD,$3C56,$8F1E,$3AF2,$8E62,$398C,$8DAB,$3824,$8CF9
	DC.W $36BA,$8C4B,$354D,$8BA1,$33DE,$8AFC,$326E,$8A5B,$30FB,$89BF
	DC.W $2F87,$8927,$2E11,$8894,$2C99,$8806,$2B1F,$877C,$29A3,$86F7
	DC.W $2826,$8676,$26A8,$85FB,$2528,$8583,$23A6,$8511,$2223,$84A3
	DC.W $209F,$843B,$1F19,$83D7,$1D93,$8377,$1C0B,$831D,$1A82,$82C7
	DC.W $18F8,$8276,$176D,$822A,$15E2,$81E3,$1455,$81A1,$12C8,$8163
	DC.W $1139,$812B,$FAB,$80F7,$E1B,$80C8,$C8B,$809E,$AFB,$8079
	DC.W $96A,$8059,$7D9,$803E,$647,$8028,$4B6,$8017,$324,$800A
	DC.W $192,$8003,$0,$8001,$FE6E,$8003,$FCDC,$800A,$FB4A,$8017
	DC.W $F9B9,$8028,$F827,$803E,$F696,$8059,$F505,$8079,$F375,$809E
	DC.W $F1E5,$80C8,$F055,$80F7,$EEC7,$812B,$ED38,$8163,$EBAB,$81A1
	DC.W $EA1E,$81E3,$E893,$822A,$E708,$8276,$E57E,$82C7,$E3F5,$831D
	DC.W $E26D,$8377,$E0E7,$83D7,$DF61,$843B,$DDDD,$84A3,$DC5A,$8511
	DC.W $DAD8,$8583,$D958,$85FB,$D7DA,$8676,$D65D,$86F7,$D4E1,$877C
	DC.W $D368,$8806,$D1EF,$8894,$D079,$8927,$CF05,$89BF,$CD92,$8A5B
	DC.W $CC22,$8AFC,$CAB3,$8BA1,$C946,$8C4B,$C7DC,$8CF9,$C674,$8DAB
	DC.W $C50E,$8E62,$C3AA,$8F1E,$C248,$8FDD,$C0E9,$90A1,$BF8D,$916A
	DC.W $BE32,$9236,$BCDB,$9307,$BB86,$93DC,$BA33,$94B6,$B8E4,$9593
	DC.W $B797,$9674,$B64C,$975A,$B505,$9843,$B3C1,$9931,$B27F,$9A23
	DC.W $B141,$9B18,$B005,$9C11,$AECD,$9D0E,$AD97,$9E0F,$AC65,$9F14
	DC.W $AB36,$A01D,$AA0B,$A129,$A8E3,$A239,$A7BE,$A34C,$A69C,$A463
	DC.W $A57E,$A57E,$A463,$A69C,$A34C,$A7BE,$A239,$A8E3,$A129,$AA0B
	DC.W $A01D,$AB36,$9F14,$AC65,$9E10,$AD97,$9D0E,$AECD,$9C11,$B005
	DC.W $9B18,$B141,$9A23,$B27F,$9931,$B3C1,$9843,$B505,$975A,$B64C
	DC.W $9674,$B797,$9593,$B8E4,$94B6,$BA33,$93DC,$BB86,$9307,$BCDB
	DC.W $9236,$BE32,$916A,$BF8D,$90A1,$C0E9,$8FDD,$C248,$8F1E,$C3AA
	DC.W $8E62,$C50E,$8DAB,$C674,$8CF9,$C7DC,$8C4B,$C946,$8BA1,$CAB3
	DC.W $8AFC,$CC22,$8A5B,$CD92,$89BF,$CF05,$8927,$D079,$8894,$D1EF
	DC.W $8806,$D367,$877C,$D4E1,$86F7,$D65D,$8676,$D7DA,$85FB,$D958
	DC.W $8583,$DAD8,$8511,$DC5A,$84A3,$DDDD,$843B,$DF61,$83D7,$E0E7
	DC.W $8377,$E26D,$831D,$E3F5,$82C7,$E57E,$8276,$E708,$822A,$E893
	DC.W $81E3,$EA1E,$81A1,$EBAB,$8163,$ED38,$812B,$EEC7,$80F7,$F055
	DC.W $80C8,$F1E5,$809E,$F375,$8079,$F505,$8059,$F696,$803E,$F827
	DC.W $8028,$F9B9,$8017,$FB4A,$800A,$FCDC,$8003,$FE6E,$8001,$0
	DC.W $8003,$192,$800A,$324,$8017,$4B6,$8028,$647,$803E,$7D9
	DC.W $8059,$96A,$8079,$AFB,$809E,$C8B,$80C8,$E1B,$80F7,$FAB
	DC.W $812B,$1139,$8163,$12C8,$81A1,$1455,$81E3,$15E2,$822A,$176D
	DC.W $8276,$18F8,$82C7,$1A82,$831D,$1C0B,$8377,$1D93,$83D7,$1F19
	DC.W $843B,$209F,$84A3,$2223,$8511,$23A6,$8583,$2528,$85FB,$26A8
	DC.W $8676,$2826,$86F7,$29A3,$877C,$2B1F,$8806,$2C98,$8894,$2E11
	DC.W $8927,$2F87,$89BF,$30FB,$8A5B,$326E,$8AFC,$33DE,$8BA1,$354D
	DC.W $8C4B,$36BA,$8CF9,$3824,$8DAB,$398C,$8E62,$3AF2,$8F1E,$3C56
	DC.W $8FDD,$3DB8,$90A1,$3F17,$916A,$4073,$9236,$41CE,$9307,$4325
	DC.W $93DC,$447A,$94B6,$45CD,$9593,$471C,$9674,$4869,$975A,$49B4
	DC.W $9843,$4AFB,$9931,$4C3F,$9A23,$4D81,$9B18,$4EBF,$9C11,$4FFB
	DC.W $9D0E,$5133,$9E0F,$5269,$9F14,$539B,$A01D,$54CA,$A129,$55F5
	DC.W $A239,$571D,$A34C,$5842,$A463,$5964,$A57E,$5A82,$A69C,$5B9D
	DC.W $A7BE,$5CB4,$A8E3,$5DC7,$AA0B,$5ED7,$AB36,$5FE3,$AC65,$60EC
	DC.W $AD97,$61F0,$AECD,$62F1,$B005,$63EF,$B141,$64E8,$B27F,$65DD
	DC.W $B3C1,$66CF,$B505,$67BD,$B64C,$68A6,$B797,$698C,$B8E4,$6A6D
	DC.W $BA33,$6B4A,$BB86,$6C24,$BCDB,$6CF9,$BE32,$6DCA,$BF8D,$6E96
	DC.W $C0E9,$6F5F,$C248,$7023,$C3AA,$70E2,$C50E,$719E,$C674,$7255
	DC.W $C7DC,$7307,$C946,$73B5,$CAB3,$745F,$CC22,$7504,$CD92,$75A5
	DC.W $CF05,$7641,$D079,$76D9,$D1EF,$776C,$D367,$77FA,$D4E1,$7884
	DC.W $D65D,$7909,$D7DA,$798A,$D958,$7A05,$DAD8,$7A7D,$DC5A,$7AEF
	DC.W $DDDD,$7B5D,$DF61,$7BC5,$E0E7,$7C29,$E26D,$7C89,$E3F5,$7CE3
	DC.W $E57E,$7D39,$E708,$7D8A,$E893,$7DD6,$EA1E,$7E1D,$EBAB,$7E5F
	DC.W $ED38,$7E9D,$EEC7,$7ED5,$F055,$7F09,$F1E5,$7F38,$F375,$7F62
	DC.W $F505,$7F87,$F696,$7FA7,$F827,$7FC2,$F9B9,$7FD8,$FB4A,$7FE9
	DC.W $FCDC,$7FF6,$FE6E,$7FFD,$0,$7FFF,-1

; -------------------------------------
; TABELLA PER PROIEZIONE CENTRALE

	incbin	"CT_TAB"
CENTR_TAB

; -------------------------------------
; COPPERLIST

	SECTION	COPPER,DATA_C

CWAIT	EQU	$FFFE
CEND	EQU	$FFFFFFFE

COPPERLIST
	DC.W	$0100,$0200
	
	dc.w	$0180,$000		; COLOR 0	
	dc.w	$0182,$0d9		; COLOR 1	

	dc.w	$0108,$0000		;MODULO
	dc.w	$010a,$0000		;MODULO 
	dc.w	$0102,$0000		;SCROLL
	dc.w	$0104,$0000
	dc.w	$008e,$2c81,$0090,$2cc1	;DIWSTART,DIWSTOP
	dc.w	$0092,$0038,$0094,$00d0	;DDFSTART,DDFSTOP
	dc.w	$2501,CWAIT

bitplane1
	dc.w	$00e0,$0005,$00e2,$0000

	dc.w	$0100,$1200		; 1 bitplanes 320*256
	dc.w	$FFDF,CWAIT
	dc.w	$Fe01,CWAIT
	dc.w	$0100,$0200
	dc.l	CEND			; END COPPERLIST

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

	SECTION	extmem,BSS_C	

	ds.l	100
extmem	ds.b	lbp*4			; area bitplanes

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