; Optimized and generally improved in summer '95 by Ukulele


*-----------------------------------------------------------------------------*
	INCDIR	DF0:Include/
	INCLUDE	CUSTOM.i
	INCLUDE	CIA.i
	INCLUDE	OFFSETS.i

	INCLUDE	MACROS.i

*-----------------------------------------------------------------------------*
PlaneWidth 	= 45
PlaneHeigth	= 288
PlaneSize	= PlaneWidth*PlaneHeigth
Planes		= 4

Size		= 8

*-----------------------------------------------------------------------------*
START	movem.l	d0-a6,-(sp)

	move.l	$4.w,a6
	jsr	_LVOForbid(a6)

	moveq	#0,d0
	lea	GfxName(pc),a1
	jsr	_LVOOpenLibrary(a6)
	tst.l	d0
	beq.w	.Error

	move.l	d0,GfxBase
	move.l	d0,a6
	move.l	$22(a6),Temp_ActiView
	move.l	$26(a6),Temp_CopList1
	move.l	$32(a6),Temp_CopList2

	sub.l	a1,a1
	jsr	_LVOLoadView(a6)

	jsr	_LVOWaitTOF(a6)
	jsr	_LVOWaitTOF(a6)

	lea	$dff000,a6
	move.w	$02(a6),Temp_DMACON
	move.w	$10(a6),Temp_ADKCON
	move.w	$1c(a6),Temp_INTENA
	move.l	$6c.w,Temp_Lev3Int

	move.w	#$7fff,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$9c(a6)
	move.w	#$7f00,$9e(a6)

	lea	LEV3_INTERRUPT(pc),a0
	move.l	a0,$6c.w

	bsr.w	Calc_Tables

	move.w	#%1000001111000000,$96(a6)
	move.w	#%1100000000100000,$9a(a6)

*-----------------------------------------------------------------------------*
.Main	Frame	311

;	move.w	#$fff,$dff180
	bsr.w	Zoomer
;	move.w	#$777,$dff180

	addq.l	#1,Frames

	btst	#6,$bfe001
	bne.s	.Main

*-----------------------------------------------------------------------------*
	move.l	Temp_ActiView(pc),a1
	move.l	GfxBase(pc),a6
	jsr	_LVOLoadView(a6)

	lea	$dff000,a6
	move.w	#$7fff,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$7fff,$9e(a6)

	move.l	Temp_CopList1(pc),$80(a6)
	move.l	Temp_CopList2(pc),$84(a6)
	move.l	Temp_Lev3Int(pc),$6c.w

	move.w	Temp_ADKCON(pc),d0
	or.w	#$8000,d0
	move.w	d0,$9e(a6)

	move.w	Temp_DMACON(pc),d0
	or.w	#$8000,d0
	move.w	d0,$96(a6)

	move.w	Temp_INTENA(pc),d0
	or.w	#$c000,d0
	move.w	d0,$9a(a6)

	move.l	$4.w,a6
	move.l	GfxBase(pc),a1
	jsr	_LVOCloseLibrary(a6)

.Error	jsr	_LVOPermit(a6)

	movem.l	(sp)+,d0-a6
	moveq	#0,d0

	move.l	Time(pc),d0
	move.l	Frames(pc),d1
	move.l	d0,d2
	divs.w	d1,d2
	rts

; Optimized and generally improved in summer '95 by Ukulele

*-----------------------------------------------------------------------------*
Temp_ADKCON	dc.w	0
Temp_DMACON	dc.w	0
Temp_INTENA	dc.w	0
Temp_CopList1	dc.l	0
Temp_CopList2	dc.l	0
Temp_Lev3Int	dc.l	0
Temp_ActiView	dc.l	0

Time		dc.l	0
Frames		dc.l	0

GfxBase		dc.l	0

GfxName		dc.b	'graphics.library',0
		even

*-----------------------------------------------------------------------------*
LEV3_INTERRUPT
	movem.l	d0-a6,-(SP)

	addq.l	#1,Time

	movem.l	(SP)+,d0-a6
	move.w	#%0000000000100000,$dff09c
	rte

*-----------------------------------------------------------------------------*
CALC_TABLES
	lea	ColTab1,a0
	lea	Uncle,a1
	lea	Palette1,a2
	move.w	#16*128-1,d2
.Loop2	moveq	#7,d1
.Loop1	moveq	#0,d0
	btst	d1,0*16*128(a1)
	beq.s	.B0
	bset	#0,d0
.B0	btst	d1,1*16*128(a1)
	beq.s	.B1
	bset	#1,d0
.B1	btst	d1,2*16*128(a1)
	beq.s	.B2
	bset	#2,d0
.B2	btst	d1,3*16*128(a1)
	beq.s	.B3
	bset	#3,d0
.B3	add.w	d0,d0
	add.w	d0,d0
	move.w	2(a2,d0.w),(a0)+
	dbf	d1,.Loop1
	addq.l	#1,a1
	dbf	d2,.Loop2		

CALC_TABLE2
	lea	ColTab2,a0
	lea	Uncle,a1
	lea	Palette2,a2
	move.w	#16*128-1,d2
.Loop2	moveq	#7,d1
.Loop1	moveq	#0,d0
	btst	d1,0*16*128(a1)
	beq.s	.B0
	bset	#0,d0
.B0	btst	d1,1*16*128(a1)
	beq.s	.B1
	bset	#1,d0
.B1	btst	d1,2*16*128(a1)
	beq.s	.B2
	bset	#2,d0
.B2	btst	d1,3*16*128(a1)
	beq.s	.B3
	bset	#3,d0
.B3	add.w	d0,d0
	add.w	d0,d0
	move.w	2(a2,d0.w),(a0)+
	dbf	d1,.Loop1
	addq.l	#1,a1
	dbf	d2,.Loop2		

CALC_TABLE3
	lea	ColTab3,a0
	lea	Uncle,a1
	lea	Palette3,a2
	move.w	#16*128-1,d2
.Loop2	moveq	#7,d1
.Loop1	moveq	#0,d0
	btst	d1,0*16*128(a1)
	beq.s	.B0
	bset	#0,d0
.B0	btst	d1,1*16*128(a1)
	beq.s	.B1
	bset	#1,d0
.B1	btst	d1,2*16*128(a1)
	beq.s	.B2
	bset	#2,d0
.B2	btst	d1,3*16*128(a1)
	beq.s	.B3
	bset	#3,d0
.B3	add.w	d0,d0
	add.w	d0,d0
	move.w	2(a2,d0.w),(a0)+
	dbf	d1,.Loop1
	addq.l	#1,a1
	dbf	d2,.Loop2		

; Optimized and generally improved in summer '95 by Ukulele

CALC_COPLIST
	lea	CopCol1(pc),a0
	lea	CopCol2,a1
	move.w	#PlaneHeigth/2-1,d0
	move.l	#$1b31fffe,d1
.Loop	add.l	#$00020000,d1
	move.l	d1,(a0)+
	move.l	d1,(a1)+
	REPT	PlaneWidth
	move.l	#$01800000,(a0)+
	move.l	#$01800000,(a1)+
	ENDR
	add.l	#$01000000,d1
	sub.l	#$00020000,d1
	move.l	d1,(a0)+
	move.l	d1,(a1)+
	REPT	PlaneWidth
	move.l	#$01800000,(a0)+
	move.l	#$01800000,(a1)+
	ENDR
	add.l	#$01000000,d1
	dbf	d0,.Loop
	rts

*-----------------------------------------------------------------------------*
SWAP_PLANES
	lea	$dff000,a6

	movem.l	ShowCop(pc),d0-d1
	exg.l	d0,d1
	movem.l	d0-d1,ShowCop

	move.l	ShowCop(pc),$80(a6)
	tst.w	$88(a6)
	rts

ShowCop	dc.l	Copperlist1
WorkCop	dc.l	Copperlist2

*-----------------------------------------------------------------------------*
CALC_COORDS
	lea	Sin(pc),a0
	lea	Cos(pc),a1
	lea	Coords(pc),a2
	lea	XYcoord(pc),a3

.loop	movem.w	(a2)+,d0/d1/d2		;x1,y1,z1

	move.w	(a1),d3
	move.w	d3,d4
	move.w	(a0),d5
	move.w	d5,d6
	muls.w	d0,d3
	muls.w	d2,d5
	add.l	d3,d5
	asr.l	#8,d5			;x2

	muls.w	d0,d6
	muls.w	d2,d4
	sub.l	d6,d4
	asr.l	#8,d4			;z2

	move.w	(a1),d0
	move.w	d0,d2
	move.w	(a0),d3
	move.w	d3,d6
	muls.w	d1,d0
	muls.w	d4,d3
	sub.l	d3,d0
	asr.l	#8,d0			;y3

	muls.w	d1,d6
	muls.w	d4,d2
	add.l	d6,d2
	asr.l	#8,d2			;z3

	move.w	(a1,d7.w),d1
	move.w	d1,d3
	move.w	(a0,d7.w),d4
	move.w	d4,d6		
	muls.w	d5,d1
	muls.w	d0,d4
	sub.l	d4,d1
	asr.l	#8,d1

	muls.w	d5,d6
	muls.w	d0,d3
	add.l	d6,d3
	asr.l	#8,d3

	muls.w	Dist(pc),d1
	asr.l	#8,d1
	add.w	Xcentre(pc),d1
	move.w	d1,(a3)+

	muls.w	Dist(pc),d3
	asr.l	#8,d3
	add.w	Ycentre(pc),d3
	move.w	d3,(a3)+	

	cmp.w	#9999,(a2)
	bne.w	.loop
	rts

; Optimized and generally improved in summer '95 by Ukulele

*-----------------------------------------------------------------------------*
SetByt1	MACRO
	move.w	d0,d2
	move.w	d1,d3
	asr.w	#7,d2
	and.w	d4,d2
	and.w	d5,d3
	add.w	d2,d3
	move.w	(a0,d3.w),\1*4+0*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+1*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+2*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+3*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+4*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+5*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+6*[PlaneWidth*4+4](a1)
	move.w	(a0,d3.w),\1*4+7*[PlaneWidth*4+4](a1)
	add.w	a3,d0
	add.w	a4,d1
	ENDM

SetByt2	MACRO
	move.w	d0,d2
	move.w	d1,d3
	asr.w	#7,d2
	and.w	d4,d2
	and.w	d5,d3
	add.w	d2,d3
	move.w	(a0,d3.w),d3
	add.w	d3,\1*4+0*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+1*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+2*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+3*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+4*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+5*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+6*[PlaneWidth*4+4](a1)
	add.w	d3,\1*4+7*[PlaneWidth*4+4](a1)

	add.w	a3,d0
	add.w	a4,d1
	ENDM

*-----------------------------------------------------------------------------*
ZOOMER	bsr.w	Swap_Planes

;	add.w	#9,Xcentre
;	add.w	#3,Ycentre
	and.w	#511,Xcentre
	and.w	#511,Ycentre

	movem.w	Zptrs(pc),d0-d2
	add.w	#8,d0                ; Ohoh, muutin nama. En muista
	add.w	#10,d1		     ; alkuperaisia arvoja... Kjah!
	add.w	#14,d2		     ; alkuperaisia arvoja... Kjah!
	and.w	#511,d0
	and.w	#511,d1
	and.w	#511,d2
	movem.w	d0-d2,Zptrs

	lea	Sin(pc),a0
	move.w	(a0,d0.w),d0
	add.w	#412,d0
	move.w	d0,Dist1

	move.w	(a0,d1.w),d1
	add.w	#412,d1
	move.w	d1,Dist2

	move.w	(a0,d2.w),d2
	add.w	#412,d2
	move.w	d2,Dist3



	move.w	Kz1(pc),d7
	move.w	Dist1(pc),d0
	move.w	d0,Dist
	bsr.w	Calc_Coords
	bsr.w	Rotate1
	
	move.w	Kz2(pc),d7
	move.w	Dist2(pc),d0
	move.w	d0,Dist
	bsr.w	Calc_Coords
	bsr.w	Rotate2

	move.w	Kz3(pc),d7
	move.w	Dist3(pc),d0
	move.w	d0,Dist
	bsr.w	Calc_Coords
	bsr.w	Rotate3


	movem.w	Kz1(pc),d0-d2
	add.w   #-4,d0		; ja namakin nayttaa ihan kivalta
	add.w	#6,d1
	add.w	#2,d2
	and.w	#511,d0
	and.w	#511,d1
	and.w	#511,d2
	movem.w	d0-d2,Kz1
	rts

Rotate1	lea	XYcoord(pc),a0

	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	04(a0),d2
	move.w	06(a0),d3

	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd1

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd1
	
	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	08(a0),d2
	move.w	10(a0),d3
	
	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd2

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd2

	moveq	#0,d0
	move.w	0(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a5

	moveq	#0,d0
	move.w	2(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a6


	lea	ColTab1,a0

	move.l	WorkCop(pc),a1
	lea	CopCol1-Copperlist1+6(a1),a1

;	move.l	WorkLin(pc),a3
;	add.l	(a3),a1

	move.w	Xadd1(pc),a3
	move.w	Yadd1(pc),a4

	move.w	#256-2,d4
	move.w	#$7f00,d5
	move.w	#PlaneHeigth/Size-1,d7

.Loop2	move.w	a5,d0
	move.w	a6,d1

	SetByt1	00
	SetByt1	01
	SetByt1	02
	SetByt1	03
	SetByt1	04
	SetByt1	05
	SetByt1	06
	SetByt1	07
	SetByt1	08
	SetByt1	09
	SetByt1	10
	SetByt1	11
	SetByt1	12
	SetByt1	13
	SetByt1	14
	SetByt1	15
	SetByt1	16
	SetByt1	17
	SetByt1	18
	SetByt1	19
	SetByt1	20
	SetByt1	21
	SetByt1	22
	SetByt1	23
	SetByt1	24
	SetByt1	25
	SetByt1	26
	SetByt1	27
	SetByt1	28
	SetByt1	29
	SetByt1	30
	SetByt1	31
	SetByt1	32
	SetByt1	33
	SetByt1	34
	SetByt1	35
	SetByt1	36
	SetByt1	37
	SetByt1	38
	SetByt1	39
	SetByt1	40
	SetByt1	41
	SetByt1	42
	SetByt1	43
	
	lea	Size*[PlaneWidth*4+4](a1),a1
	add.w	Xadd2(pc),a5
	add.w	Yadd2(pc),a6
	dbf	d7,.Loop2
	rts

Rotate2	lea	XYcoord(pc),a0

	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	04(a0),d2
	move.w	06(a0),d3

	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd1

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd1
	
	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	08(a0),d2
	move.w	10(a0),d3
	
	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd2

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd2

	moveq	#0,d0
	move.w	0(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a5

	moveq	#0,d0
	move.w	2(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a6


	lea	ColTab2,a0

	move.l	WorkCop(pc),a1
	lea	CopCol1-Copperlist1+6(a1),a1

;	move.l	WorkLin(pc),a3
;	add.l	(a3),a1

	move.w	Xadd1(pc),a3
	move.w	Yadd1(pc),a4

	move.w	#256-2,d4
	move.w	#$7f00,d5
	move.w	#PlaneHeigth/Size-1,d7

.Loop2	move.w	a5,d0
	move.w	a6,d1

	SetByt2	00
	SetByt2	01
	SetByt2	02
	SetByt2	03
	SetByt2	04
	SetByt2	05
	SetByt2	06
	SetByt2	07
	SetByt2	08
	SetByt2	09
	SetByt2	10
	SetByt2	11
	SetByt2	12
	SetByt2	13
	SetByt2	14
	SetByt2	15
	SetByt2	16
	SetByt2	17
	SetByt2	18
	SetByt2	19
	SetByt2	20
	SetByt2	21
	SetByt2	22
	SetByt2	23
	SetByt2	24
	SetByt2	25
	SetByt2	26
	SetByt2	27
	SetByt2	28
	SetByt2	29
	SetByt2	30
	SetByt2	31
	SetByt2	32
	SetByt2	33
	SetByt2	34
	SetByt2	35
	SetByt2	36
	SetByt2	37
	SetByt2	38
	SetByt2	39
	SetByt2	40
	SetByt2	41
	SetByt2	42
	SetByt2	43
	
	lea	Size*[PlaneWidth*4+4](a1),a1
	add.w	Xadd2(pc),a5
	add.w	Yadd2(pc),a6
	dbf	d7,.Loop2
	rts

; Optimized and generally improved in summer '95 by Ukulele

Rotate3	lea	XYcoord(pc),a0

	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	04(a0),d2
	move.w	06(a0),d3

	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd1

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd1
	
	move.w	00(a0),d0
	move.w	02(a0),d1
	move.w	08(a0),d2
	move.w	10(a0),d3
	
	move.w	d2,d4
	sub.w	d0,d4
	muls.w	#128,d4
	divs.w	#PlaneWidth*8/Size,d4
	move.w	d4,Xadd2

	move.w	d3,d5
	sub.w	d1,d5
	muls.w	#128,d5
	divs.w	#PlaneWidth*8/Size,d5
	move.w	d5,Yadd2

	moveq	#0,d0
	move.w	0(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a5

	moveq	#0,d0
	move.w	2(a0),d0
	muls.w	#128/2,d0
	move.w	d0,a6


	lea	ColTab3,a0

	move.l	WorkCop(pc),a1
	lea	CopCol1-Copperlist1+6(a1),a1

;	move.l	WorkLin(pc),a3
;	add.l	(a3),a1

	move.w	Xadd1(pc),a3
	move.w	Yadd1(pc),a4

	move.w	#256-2,d4
	move.w	#$7f00,d5
	move.w	#PlaneHeigth/Size-1,d7

.Loop2	move.w	a5,d0
	move.w	a6,d1

	SetByt2	00
	SetByt2	01
	SetByt2	02
	SetByt2	03
	SetByt2	04
	SetByt2	05
	SetByt2	06
	SetByt2	07
	SetByt2	08
	SetByt2	09
	SetByt2	10
	SetByt2	11
	SetByt2	12
	SetByt2	13
	SetByt2	14
	SetByt2	15
	SetByt2	16
	SetByt2	17
	SetByt2	18
	SetByt2	19
	SetByt2	20
	SetByt2	21
	SetByt2	22
	SetByt2	23
	SetByt2	24
	SetByt2	25
	SetByt2	26
	SetByt2	27
	SetByt2	28
	SetByt2	29
	SetByt2	30
	SetByt2	31
	SetByt2	32
	SetByt2	33
	SetByt2	34
	SetByt2	35
	SetByt2	36
	SetByt2	37
	SetByt2	38
	SetByt2	39
	SetByt2	40
	SetByt2	41
	SetByt2	42
	SetByt2	43
	
	lea	Size*[PlaneWidth*4+4](a1),a1
	add.w	Xadd2(pc),a5
	add.w	Yadd2(pc),a6
	dbf	d7,.Loop2
	rts

*-----------------------------------------------------------------------------*
; Optimized and generally improved in summer '95 by Ukulele

Zptrs	dc.w	0,0,0

Xadd1	dc.w	0
Yadd1	dc.w	0
Xadd2	dc.w	0
Yadd2	dc.w	0

Kz1	dc.w	0*2
Kz2	dc.w	0*2
Kz3	dc.w	0*2

Dist1	dc.w	512
Dist2	dc.w	512
Dist3	dc.w	512

Dist	dc.w	512
XCentre	dc.w	0
YCentre	dc.w	0

Coords	dc.w	-63,-63,000
	dc.w	+63,-63,000
	dc.w	-63,+63,000
	dc.w	+63,+63,000
	dc.w	9999

XYcoord	blk.w	128,0

Sin	DC.W	$0000,$0006,$000C,$0012,$0019,$001F,$0025,$002B
	DC.W	$0031,$0037,$003E,$0044,$004A,$0050,$0056,$005B
	DC.W	$0061,$0067,$006D,$0072,$0078,$007D,$0083,$0088
	DC.W	$008D,$0093,$0098,$009D,$00A2,$00A6,$00AB,$00B0
	DC.W	$00B4,$00B9,$00BD,$00C1,$00C5,$00C9,$00CD,$00D0
	DC.W	$00D4,$00D7,$00DB,$00DE,$00E1,$00E4,$00E6,$00E9
	DC.W	$00EC,$00EE,$00F0,$00F2,$00F4,$00F6,$00F7,$00F9
	DC.W	$00FA,$00FB,$00FC,$00FD,$00FE,$00FE,$00FF,$00FF
Cos	DC.W	$00FF,$00FF,$00FF,$00FE,$00FE,$00FD,$00FC,$00FB
	DC.W	$00FA,$00F9,$00F7,$00F6,$00F4,$00F2,$00F0,$00EE
	DC.W	$00EC,$00E9,$00E6,$00E4,$00E1,$00DE,$00DB,$00D7
	DC.W	$00D4,$00D0,$00CD,$00C9,$00C5,$00C1,$00BD,$00B9
	DC.W	$00B4,$00B0,$00AB,$00A6,$00A2,$009D,$0098,$0093
	DC.W	$008D,$0088,$0083,$007D,$0078,$0072,$006D,$0067
	DC.W	$0061,$005B,$0056,$0050,$004A,$0044,$003E,$0037
	DC.W	$0031,$002B,$0025,$001F,$0019,$0012,$000C,$0006
	DC.W	$0000,$FFF9,$FFF3,$FFED,$FFE6,$FFE0,$FFDA,$FFD4
	DC.W	$FFCE,$FFC8,$FFC1,$FFBB,$FFB5,$FFAF,$FFA9,$FFA4
	DC.W	$FF9E,$FF98,$FF92,$FF8D,$FF87,$FF82,$FF7C,$FF77
	DC.W	$FF72,$FF6C,$FF67,$FF62,$FF5D,$FF59,$FF54,$FF4F
	DC.W	$FF4B,$FF46,$FF42,$FF3E,$FF3A,$FF36,$FF32,$FF2F
	DC.W	$FF2B,$FF28,$FF24,$FF21,$FF1E,$FF1B,$FF19,$FF16
	DC.W	$FF13,$FF11,$FF0F,$FF0D,$FF0B,$FF09,$FF08,$FF06
	DC.W	$FF05,$FF04,$FF03,$FF02,$FF01,$FF01,$FF00,$FF00
	DC.W	$FF00,$FF00,$FF00,$FF01,$FF01,$FF02,$FF03,$FF04
	DC.W	$FF05,$FF06,$FF08,$FF09,$FF0B,$FF0D,$FF0F,$FF11
	DC.W	$FF13,$FF16,$FF19,$FF1B,$FF1E,$FF21,$FF24,$FF28
	DC.W	$FF2B,$FF2F,$FF32,$FF36,$FF3A,$FF3E,$FF42,$FF46
	DC.W	$FF4B,$FF4F,$FF54,$FF59,$FF5D,$FF62,$FF67,$FF6C
	DC.W	$FF72,$FF77,$FF7C,$FF82,$FF87,$FF8D,$FF92,$FF98
	DC.W	$FF9E,$FFA4,$FFA9,$FFAF,$FFB5,$FFBB,$FFC1,$FFC8
	DC.W	$FFCE,$FFD4,$FFDA,$FFE0,$FFE6,$FFED,$FFF3,$FFF9
	DC.W	$0000,$0006,$000C,$0012,$0019,$001F,$0025,$002B
	DC.W	$0031,$0037,$003E,$0044,$004A,$0050,$0056,$005B
	DC.W	$0061,$0067,$006D,$0072,$0078,$007D,$0083,$0088
	DC.W	$008D,$0093,$0098,$009D,$00A2,$00A6,$00AB,$00B0
	DC.W	$00B4,$00B9,$00BD,$00C1,$00C5,$00C9,$00CD,$00D0
	DC.W	$00D4,$00D7,$00DB,$00DE,$00E1,$00E4,$00E6,$00E9
	DC.W	$00EC,$00EE,$00F0,$00F2,$00F4,$00F6,$00F7,$00F9
	DC.W	$00FA,$00FB,$00FC,$00FD,$00FE,$00FE,$00FF,$00FF
	DC.W	$00FF,$00FF,$00FF,$00FE,$00FE,$00FD,$00FC,$00FB

*-----------------------------------------------------------------------------*
COPPERLIST1
	dc.w	$0001,$fffe,$0100,$0000

	dc.w	$0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000
	dc.w	$0128,$0000,$012a,$0000,$012c,$0000,$012e,$0000
	dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
	dc.w	$0138,$0000,$013a,$0000,$013c,$0000,$013e,$0000

	dc.w	$008e,$2881,$0090,$28c1
	dc.w	$0092,$0048,$0094,$00c0
	dc.w	$0108,$0000,$010a,$0000
	dc.w	$0102,$0000,$0104,$0000
	dc.w	$0100,$0200

	dc.w	$00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000
	dc.w	$00e8,$0000,$00ea,$0000,$00ec,$0000,$00ee,$0000

CopCol1	blk.b	PlaneHeigth*[PlaneWidth*4+4],0

	dc.w	$ffff,$fffe

COPPERLIST2
	dc.w	$0001,$fffe,$0100,$0000

	dc.w	$0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000
	dc.w	$0128,$0000,$012a,$0000,$012c,$0000,$012e,$0000
	dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
	dc.w	$0138,$0000,$013a,$0000,$013c,$0000,$013e,$0000

	dc.w	$008e,$2881,$0090,$28c1
	dc.w	$0092,$0048,$0094,$00c0
	dc.w	$0108,$0000,$010a,$0000
	dc.w	$0102,$0000,$0104,$0000
	dc.w	$0100,$0200

	dc.w	$00e0,$0000,$00e2,$0000,$00e4,$0000,$00e6,$0000
	dc.w	$00e8,$0000,$00ea,$0000,$00ec,$0000,$00ee,$0000

CopCol2	blk.b	PlaneHeigth*[PlaneWidth*4+4],0

	dc.w	$ffff,$fffe

*-----------------------------------------------------------------------------*
Palette1
	dc.w	$0180,$001,$0182,$001,$0184,$001,$0186,$001
	dc.w	$0188,$002,$018a,$002,$018c,$003,$018e,$003
	dc.w	$0190,$004,$0192,$004,$0194,$005,$0196,$005
	dc.w	$0198,$005,$019a,$005,$019c,$006,$019e,$006

Palette2
	dc.w	$0180,$000,$0182,$001,$0184,$001,$0186,$001
	dc.w	$0188,$002,$018a,$002,$018c,$003,$018e,$003
	dc.w	$0190,$004,$0192,$004,$0194,$005,$0196,$005
	dc.w	$0198,$005,$019a,$005,$019c,$005,$019e,$005

Palette3
	dc.w	$0180,$000,$0182,$001,$0184,$001,$0186,$001
	dc.w	$0188,$002,$018a,$002,$018c,$003,$018e,$003
	dc.w	$0190,$004,$0192,$004,$0194,$005,$0196,$005
	dc.w	$0198,$005,$019a,$005,$019c,$005,$019e,$005

	incdir	df1:
Uncle	incbin	lulla.raw

ColTab1	blk.w	128*128,0
ColTab2	blk.w	128*128,0
ColTab3	blk.w	128*128,0

