 	opt	c+,l+
;==============================================================
	incdir	"df0:Include/"
;==============================================================
	include	Exec/exec_lib.i
	include	Exec/memory.i
	include	Graphics/gfxbase.i
	include	Hardware/custom.i
;==============================================================
	xref	REPLAY_INIT,REPLAY_SONG
	xref	REPLAY_ENABLE,REPLAY_DISABLE
	xref	CHARSET
	xref	FRONTBALL,BACKBALL,BALLMASK
	xref	COSINUS,SINUS
	xref	BGNTEXT,ENDTEXT,HITEXT
;==============================================================
call:	macro	
	jsr	_LVO\1(A6)
	endm

col:	macro
	dc.w	(r<<8)!9,$fffe
	dc.w	color+2,\1+$222
	dc.w	color+4,\1
r:	set	r+2
	endm
;==============================================================
ExecBase:	equ	4
CustomBase:	equ	$dff000	
StartCol:	equ	$aa3
Depth:	equ	3
Width:	equ	320
Height:	equ	197
Size:	equ	(Width>>3)*Height
BallSize:	equ	2*16
ScrollSize:	equ	42*16	
CharLen:	equ	2*16
CharSize:	equ	CharLen*64
DXA:	equ	5
DYA:	equ	4	;default X/Y/Z adding rotation
DZA:	equ	3
DSCR:	equ	3	;default scroll speed
;--------------------------------------------------------------
FRONT:	equ	-1
BACK:	equ	0
cor_SIZEOF:	equ	6+5+6+4+8+6+6+6+7+8+5*11	;see below	

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

Begin:	movem.l	d0-d7/a0-a6,-(sp)
;--------------------------------------------------------------
	lea	CustomBase,a4
	move.l	ExecBase,a6
;--------------------------------------------------------------
	call	Forbid
;--------------------------------------------------------------
	move.l	#Data_SIZE,d0
	move.l	#MEMF_CLEAR!MEMF_CHIP,d1
	call	AllocMem
	move.l	d0,a5	;a5=DataTable
	beq	NoMemErr
;--------------------------------------------------------------
	move.w	#StartCol,BgnCol(a5)	;init col
	move.l	#DSCR,ScrollAdd(a5)	;scroll speed init
	move.w	#DXA,Xadd(a5)
	move.w	#DYA,Yadd(a5)	;rot add init
	move.w	#DZA,Zadd(a5)
	lea	DataTable(pc),a0
	move.l	a5,(a0)		;for irq use
;--------------------------------------------------------------
	lea	GfxName(pc),a1
	clr.l	d0
	call	OpenLibrary
	move.l	d0,GfxBase(a5)
	beq	NoGfxErr
;--------------------------------------------------------------
	move.l	d0,a0
	move.l	gb_copinit(a0),OldList(a5)
;--------------------------------------------------------------
	bsr	MakeRaster
	bsr	MakeScroll
	bsr	MakeScape
	bsr	MakeCoord
;--------------------------------------------------------------
	jsr	REPLAY_INIT
	jsr	REPLAY_ENABLE
;--------------------------------------------------------------
	lea	CopList(pc),a0
	move.l	a0,cop1lc(a4)
	clr.w	copjmp1(a4)		
;--------------------------------------------------------------
	move.w	intenar(a4),OldIntEna(a5)
	or.w	#$8000,OldIntEna(a5)
;--------------------------------------------------------------
	move.l	$6c.w,OldVBIrq(a5)
	lea	NewVBIrq(pc),a0
	move.l	a0,$6c.w
;--------------------------------------------------------------
	move.w	#$c020,intena(a4)
;--------------------------------------------------------------
BigLoop:	move.w	#-1,DoItFlag(a5)
WaitFlag:	tst.w	DoItFlag(a5)
	bne.s	WaitFlag
;-------------------------------------------------------------
	bsr	ClearRaster
	bsr	RotCoord
	bsr	SortCoord
	bsr	PutImage
	bsr	ChangeAngles
	bsr	ChangeAdd
;-------------------------------------------------------------
Mouse:	btst.b	#6,$bfe001
	bne.s	BigLoop
;--------------------------------------------------------------
	jsr	REPLAY_DISABLE
;--------------------------------------------------------------
	move.w	#$8220,dmacon(a4)
;--------------------------------------------------------------
	move.w	OldIntEna(a5),intena(a4)
	move.l	OldVBIrq(a5),$6c.w
;--------------------------------------------------------------
	move.l	OldList(a5),cop1lc(a4)
;--------------------------------------------------------------
	bsr	FreeScroll
	bsr	FreeRasters
;--------------------------------------------------------------
	move.l	GfxBase(a5),a1
	call	CloseLibrary
;--------------------------------------------------------------
NoGfxErr:	move.l	a5,a1
	move.l	#Data_SIZE,d0
	call	FreeMem
;--------------------------------------------------------------
NoMemErr:	call	Permit
;--------------------------------------------------------------
	movem.l	(sp)+,d0-d7/a0-a6
	rts
;==============================================================
NewVBIrq:	movem.l	d0-d7/a0-a6,-(sp)	
	move.l	DataTable(pc),a5
	lea	$dff000,a4
;--------------------------------------------------------------
	move.w	intreqr(a4),d0
	move.w	d0,intreq(a4)
	btst	#5,d0
	beq.s	NoVB
;--------------------------------------------------------------
	tst.w	DoItFlag(a5)
	beq.s	DoNothing
	bsr	SwapRaster
	clr.w	DoItFlag(a5)
	clr.w	copjmp1(a4)	;restart copper
;--------------------------------------------------------------
DoNothing:
	bsr	MakeScape
	bsr	ScrollRout
	jsr	REPLAY_SONG
;--------------------------------------------------------------
NoVB:	movem.l	(sp)+,d0-d7/a0-a6
	rte
***************************************************************
MakeRaster:
* make RastPort
* allocate Depth rasters

	move.l	#6*Size,d0
	move.l	#MEMF_CHIP!MEMF_CLEAR,d1
	call	AllocMem
;--------------------------------------------------------------
	lea	Planes(a5),a0
	move.w	#5,d7
;--------------------------------------------------------------
SetPlanes:	move.l	d0,(a0)+
	add.l	#Size,d0
	dbra	d7,SetPlanes
	rts
;==============================================================
FreeRasters:
	move.l	#6*Size,d0
	move.l	Planes(a5),a1
	call	FreeMem
	rts
;==============================================================
SwapRaster:	lea	Planes(a5),a0
	add.l	CurBP(a5),a0
	lea	bp_pnt(pc),a1
	move.w	#Depth-1,d7
Swapping:	move.l	(a0)+,d0
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	addq.l	#8,a1
	dbra	d7,Swapping
	eor.l	#3*4,CurBP(a5)
	rts
;==============================================================
ClearRaster:
	lea	Planes(a5),a0
	add.l	CurBP(a5),a0
;--------------------------------------------------------------
	move.w	#$0100,bltcon0(a4)
	clr.w	bltcon1(a4)
	clr.w	bltdmod(a4)
	bsr	BltWait
;--------------------------------------------------------------
Clearing:	move.l	(a0),bltdpt(a4)
	move.w	#(3*Height<<6)!(Width>>4),bltsize(a4)
	rts
;==============================================================
BltWait:	btst.b	#14-8,dmaconr(a4)
	bne.s	BltWait
	rts
***************************************************************
MakeScroll:	move.l	#ScrollSize*2,d0
	move.l	#MEMF_CLEAR!MEMF_CHIP,d1
	call	AllocMem
	move.l	d0,ScrollAdr(a5)
;--------------------------------------------------------------
	lea	sp_pnt(pc),a0
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
;--------------------------------------------------------------
	add.l	#ScrollSize,d0
	move.w	d0,14(a0)
	swap	d0
	move.w	d0,10(a0)
;--------------------------------------------------------------
	rts
;==============================================================
FreeScroll:	move.l	#ScrollSize*2,d0
	move.l	ScrollAdr(a5),a1
	call	FreeMem
	rts
;==============================================================
PutLetter:
* d0=X-offset/d1=ASCII
	asl.w	#1,d0
	ext.l	d0
	move.l	ScrollAdr(a5),a0	;a0=destination
	add.l	d0,a0
;--------------------------------------------------------------
	and.w	#$003f,d1
	asl.w	#5,d1		;*(2*16)
	ext.l	d1
	lea	CHARSET,a1		;a1=source
	add.l	d1,a1
;--------------------------------------------------------------
	move.w	#15,d0
;--------------------------------------------------------------
SetLetter:	move.w	CharSize(a1),ScrollSize(a0)
	move.w	(a1)+,(a0)
	add.l	#42,a0
	dbra	d0,SetLetter
	rts
;==============================================================
ScrollRout:	lea	Scroll+3(pc),a0
	move.l	ScrollVal(a5),d0
	and.b	#$0f,d0
	eor.b	#$0f,d0
	move.b	d0,(a0)
	lsl.b	#4,d0
	or.b	d0,(a0)
;--------------------------------------------------------------
	move.l	ScrollVal(a5),d0
	lsr.l	#4,d0
	lea	BGNTEXT,a2
	add.l	d0,a2
	moveq	#0,d2
;--------------------------------------------------------------
SetScroll:	move.w	d2,d0
	clr.w	d1
	move.b	(a2)+,d1
	bsr	PutLetter
;--------------------------------------------------------------
	cmp.l	#ENDTEXT,a2
	bne.s	NextLet
	lea	BGNTEXT,a2
;--------------------------------------------------------------
NextLet:	addq.b	#1,d2
	cmp.b	#21,d2
	bne.s	SetScroll
;--------------------------------------------------------------
	move.l	ScrollVal(a5),d0
	add.l	ScrollAdd(a5),d0
;--------------------------------------------------------------
	tst.l	d0
	bpl.l	NoToLo
	add.l	#HITEXT,d0
;--------------------------------------------------------------
NoToLo:	cmp.l	#HITEXT,d0
	blt.s	Replace
	sub.l	#HITEXT,d0
;--------------------------------------------------------------
Replace:	move.l	d0,ScrollVal(a5)
;--------------------------------------------------------------
sr_out:	rts
***************************************************************
ChangeAngles:
	movem.w	Xadd(a5),d0/d1/d2
	add.w	d0,Xangle(a5)
	and.w	#$ff,Xangle(a5)
	add.w	d1,Yangle(a5)
	and.w	#$ff,Yangle(a5)
	add.w	d2,Zangle(a5)
	and.w	#$ff,Zangle(a5)
	rts
;==============================================================
* d7=A
* >(d0,d1)=(X0,Y0)
* <(d0,d1)=(X',Y')
* X'=X0*cos(A)-Y0*sin(A)
* Y'=X0*sin(A)+Y0*cos(A)

ReplcRot:	movem.l	d2/d3/d7/a0/a1,-(sp)
;--------------------------------------------------------------
	lea	COSINUS,a0
	lea	SINUS,a1
	asl.w	#1,d7
;--------------------------------------------------------------
	move.l	d0,d2
	move.l	d1,d3
;--------------------------------------------------------------
	muls	(a0,d7),d0
	muls	(a1,d7),d3
	sub.w	d3,d0
	asr.w	#8,d0
;--------------------------------------------------------------
	muls	(a1,d7),d2
	muls	(a0,d7),d1
	add.w	d2,d1
	asr.w	#8,d1
;--------------------------------------------------------------
	movem.l	(sp)+,d2/d3/d7/a0/a1
	rts
;==============================================================
Rotate:	move.w	Xold(a5),Xnew(a5)
	move.w	Yold(a5),Ynew(a5)
	move.w	Zold(a5),Znew(a5)
;--------------------------------------------------------------
	move.w	Ynew(a5),d0
	move.w	Znew(a5),d1
	move.w	Xangle(a5),d7
	bsr	ReplcRot
	move.w	d0,Ynew(a5)
	move.w	d1,Znew(a5)	
;--------------------------------------------------------------
	move.w	Xnew(a5),d0
	move.w	Znew(a5),d1
	move.w	Yangle(a5),d7
	bsr	ReplcRot
	move.w	d0,Xnew(a5)
	move.w	d1,Znew(a5)	
;--------------------------------------------------------------
	move.w	Xnew(a5),d0
	move.w	Ynew(a5),d1
	move.w	Zangle(a5),d7
	bsr	ReplcRot
	move.w	d0,Xnew(a5)
	move.w	d1,Ynew(a5)	
;--------------------------------------------------------------
	rts
;==============================================================
RotCoord:	lea	OrgCoord(a5),a0
	lea	NewCoord(a5),a1
	move.w	#cor_SIZEOF-1,d6
;--------------------------------------------------------------
rc_loop1:	move.w	#2,d5
	lea	Xold(a5),a2
;--------------------------------------------------------------
rc_loop2:	move.b	(a0)+,d0
	ext.w	d0
	move.w	d0,(a2)+
	dbra	d5,rc_loop2
;--------------------------------------------------------------
	bsr	Rotate
;--------------------------------------------------------------
	move.w	#2,d5
	lea	Xnew(a5),a2
;--------------------------------------------------------------
rc_loop3:	move.w	(a2)+,d0
	move.b	d0,(a1)+
	dbra	d5,rc_loop3
;--------------------------------------------------------------
	move.b	(a0)+,(a1)+	;copy mode
	dbra	d6,rc_loop1
;--------------------------------------------------------------
	rts
;==============================================================
SortCoord:	move.w	#cor_SIZEOF-1,d7
;--------------------------------------------------------------
SortLoop1:	subq.b	#1,d7
	move.w	d7,d6	;d6=counter
	moveq	#0,d4	;d4=flag
	lea	NewCoord(a5),a0
;--------------------------------------------------------------
SortLoop2:	move.l	(a0)+,d1
	move.b	-2(a0),d0
	cmp.b	2(a0),d0	;compare z's
	ble.s	NoChange
	move.l	(a0),-4(a0)
	move.l	d1,(a0)
	moveq	#-1,d4
;--------------------------------------------------------------
NoChange:	dbra	d6,SortLoop2
;--------------------------------------------------------------
	tst.b	d7
	beq.s	StopSort
	tst.b	d4
	bne.s	SortLoop1
StopSort:	rts
;==============================================================
Xcenter:	equ	160-8
Ycenter:	equ	100-8
;--------------------------------------------------------------
PutImage:	lea	NewCoord(a5),a3
	move.w	#cor_SIZEOF-1,d6
;--------------------------------------------------------------
ImPutting:	move.b	(a3)+,d0
	ext.w	d0
	add.w	#Xcenter,d0
;--------------------------------------------------------------
	move.b	(a3)+,d1
	ext.w	d1
	add.w	#Ycenter,d1
;--------------------------------------------------------------
	move.w	(a3)+,d2	;skip z-cor
	lea	FRONTBALL,a0
	tst.b	d2
	bne.s	ItsFRONT
	lea	BACKBALL,a0
;--------------------------------------------------------------
ItsFRONT:	bsr	SetBall
;--------------------------------------------------------------
skip:	dbra	d6,ImPutting
;--------------------------------------------------------------
	rts
;==============================================================
SetBall:
* d0=x d1=y a0=pointer to ball (front or back)
;--------------------------------------------------------------
	move.w	d0,d2
	and.w	#15,d2	;d2=shift value
	ror.w	#4,d2
;--------------------------------------------------------------
	lsr.w	#4,d0
	mulu	#20,d1	;d1=offset
	add.w	d0,d1	
	lsl.w	#1,d1		
	ext.l	d1
;--------------------------------------------------------------
	move.w	#$ffff,bltafwm(a4)
	move.w	#$0000,bltalwm(a4)
;--------------------------------------------------------------
	move.w	#-2,bltamod(a4)
	move.w	#-2,bltbmod(a4)
;--------------------------------------------------------------
	move.w	#36,bltcmod(a4)
	move.w	#36,bltdmod(a4)
;--------------------------------------------------------------
	move.w	d2,bltcon1(a4)
	or.w	#$0fca,d2		;cookie cut
	move.w	d2,bltcon0(a4)
;--------------------------------------------------------------
	lea	BALLMASK,a1	;a1=pointer to ballmask
	lea	Planes(a5),a2
	add.l	CurBP(a5),a2
	move.w	#Depth-1,d7
;--------------------------------------------------------------
BallSet:	bsr	BltWait
	move.l	a1,bltapt(a4)	;A=mask
	move.l	a0,bltbpt(a4)	;B=ball
	move.l	(a2)+,d0		;raster
	add.l	d1,d0		;add offset
	move.l	d0,bltcpt(a4)	;C=background
	move.l	d0,bltdpt(a4)	;D=destination(=C)
	move.w	#16<<6!2,bltsize(a4)
	add.l	#BallSize,a0
	dbra	d7,BallSet
	rts 
;==============================================================
Xmid:	equ	10
Ymid:	equ	2

MakeCoord:	lea	DefCoord(pc),a0
	lea	OrgCoord(a5),a1
	move.w	#2,d7
;--------------------------------------------------------------
CorReading:	move.b	(a0)+,d1	;d1=z-cor
	move.b	(a0)+,d2	;d2=mode
	clr.b	d3	;d3=y-cor
CorGetLen:	move.b	(a0)+,d4	;d4=number of x-cors	
	beq.s	GetNextCor
;--------------------------------------------------------------
	subq.b	#1,d4
	ext.w	d4
CorGetting:	move.b	(a0)+,d0
	sub.b	#Xmid,d0	;fix x-cor
	asl.b	#3,d0
	move.b	d0,(a1)+
;--------------------------------------------------------------
	move.b	d3,d0
	sub.b	#Ymid,d0	;fix y-cor
	asl.b	#4,d0
	move.b	d0,(a1)+
;--------------------------------------------------------------
	move.b	d1,d0
	asl.b	#4,d0	;fix z-cor
	move.b	d0,(a1)+
;--------------------------------------------------------------
	move.b	d2,(a1)+	;fix mode
;--------------------------------------------------------------
	dbra	d4,CorGetting
;--------------------------------------------------------------
	addq.b	#1,d3
	bra.s	CorGetLen
;--------------------------------------------------------------
GetNextCor:	dbra	d7,CorReading
	rts
***************************************************************
ReadKey:	clr.l	d0
	move.b	$bfec01,d0
	eor.b	#$ff,d0
	ror.b	#1,d0
	rts
;==============================================================
ChangeAdd:	bsr	ReadKey
;--------------------------------------------------------------
CrsrRight:	cmp.b	#$4e,d0
	bne.s	CrsrLeft
	cmp.l	#-32,ScrollAdd(a5)
	beq.s	ca_out
	subq.l	#1,ScrollAdd(a5)
;--------------------------------------------------------------
CrsrLeft:	cmp.b	#$4f,d0
	bne.s	Help
	cmp.l	#32,ScrollAdd(a5)
	beq.s	ca_out
	addq.l	#1,ScrollAdd(a5)
;--------------------------------------------------------------
Help:	cmp.b	#$5f,d0
	bne.s	F123
	clr.w	Xadd(a5)
	clr.w	Yadd(a5)
	clr.w	Zadd(a5)
;--------------------------------------------------------------
F123:	sub.b	#$50,d0
	bmi.s	ca_out	
	cmp.b	#3,d0
	bge.s	F678
	asl.w	#1,d0
	cmp.w	#16,Xadd(a5,d0)
	beq.s	ca_out
	add.w	#1,Xadd(a5,d0)
;--------------------------------------------------------------
F678:	sub.b	#$05,d0
	bmi.s	ca_out
	cmp.b	#3,d0
	bge.s	ca_out
	asl.w	#1,d0
	cmp.w	#-16,Xadd(a5,d0)
	beq.s	ca_out
	sub.w	#1,Xadd(a5,d0)
;--------------------------------------------------------------
ca_out:	rts
***************************************************************
WaitRaster:	move.l	vposr(a4),d0
	and.l	#$00010000,d0
	beq.s	WaitRaster
	rts
***************************************************************
Step:	equ	4
Number:	equ	10
Factor:	equ	1024*Number
StartX:	equ	18*Number
OverFlow:	equ	$de
FirstRast:	equ	18
;--------------------------------------------------------------
MakeScape:	lea	NextCop(a5),a0
	move.l	a0,d0
	lea	NextJump(pc),a0
	move.w	d0,6(a0)		;lo word
	swap	d0		
	move.w	d0,2(a0)		;hi word
;--------------------------------------------------------------
	move.w	#StartX,d6		;d6 = x
	add.w	Offset(a5),d6
;--------------------------------------------------------------
	move.w	BgnCol(a5),d4	;d4 = color
	lea	SmoothCol+2(pc),a0
	move.w	d4,(a0)
;--------------------------------------------------------------
	lea	NextCop(a5),a2	;a2 = pnt to copper list
;--------------------------------------------------------------
MSCloop:	move.l	#Factor,d0
	divu	d6,d0		;d5 = y=Factor/x
	move.w	d0,d5
	beq	MSCskip
;--------------------------------------------------------------
	add.w	#FirstRast,d0
	add.w	#FirstRast+1,d5
	cmp.w	#OverFlow,d5
	bge	MSCout
;--------------------------------------------------------------
	asl.w	#8,d0
	or.w	#7,d0		;d5=cop.rast.wait
	move.w	d0,(a2)+
	move.w	#$fffe,(a2)+	;copper-wait
	move.w	#color,(a2)+
	move.w	#$000,(a2)+		;copper-move color
;--------------------------------------------------------------
	asl.w	#8,d5
	or.w	#1,d5		;d5=cop.rast.wait
	move.w	d5,(a2)+
	move.w	#$fffe,(a2)+	;copper-wait
	move.w	#color,(a2)+
	eor.w	#$221,d4		
	move.w	d4,(a2)+		;copper-move color
;--------------------------------------------------------------
MSCskip:	sub.w	#Number,d6
	bne	MSCloop
;--------------------------------------------------------------
MSCout:	lea	LastCop(pc),a0
	move.l	a0,d0
	move.w	#cop2lc+0,0(a2)
	move.w	#cop2lc+2,4(a2)
	move.w	d0,6(a2)
	swap	d0
	move.w	d0,2(a2)
	move.w	#copjmp2,8(a2)
	move.w	#0,10(a2)
;--------------------------------------------------------------
	sub.w	#1,Offset(a5)
	bpl.s	NoSwitch
;--------------------------------------------------------------
	move.w	#Number*(Step-1),Offset(a5)
	lea	BgnCol(a5),a0
	eor.w	#$221,(a0)
;--------------------------------------------------------------
NoSwitch:	rts
;==============================================================
CopList:	dc.w	dmacon,$20
	dc.w	spr,0
;--------------------------------------------------------------
	dc.w	bplcon0,$3000
	dc.w	bplcon1,0
	dc.w	bplcon2,0
;--------------------------------------------------------------
	dc.w	bpl1mod,0
	dc.w	bpl2mod,0
;--------------------------------------------------------------
	dc.w	ddfstrt,$0038
	dc.w	ddfstop,$00d0
;--------------------------------------------------------------
	dc.w	diwstrt,$1c81
	dc.w	diwstop,$f4c1
;--------------------------------------------------------------
bp_pnt:	dc.w	bplpt+00,0	;lo word
	dc.w	bplpt+02,0	;hi word
	dc.w	bplpt+04,0	
	dc.w	bplpt+06,0	
	dc.w	bplpt+08,0	
	dc.w	bplpt+10,0	
;--------------------------------------------------------------
	dc.w	color+00,$05f
	dc.w	color+02,$06c
	dc.w	color+04,$05a
	dc.w	color+06,$048
	dc.w	color+08,$000
	dc.w	color+10,$fff
	dc.w	color+12,$ddd
	dc.w	color+14,$bbb
;--------------------------------------------------------------
	dc.w	$4607,$fffe
SmoothCol:	dc.w	color,StartCol
;--------------------------------------------------------------
NextJump:	dc.w	cop2lc+0,0	;hi word
	dc.w	cop2lc+2,0	;lo word
	dc.w	copjmp2,0	;jmp to next list
;==============================================================
Ras:	equ	$f4-20
;==============================================================
LastCop:	dc.w	7!((Ras+00)<<8),$fffe
	dc.w	color,$08f
;--------------------------------------------------------------
	dc.w	7!((Ras+01)<<8),$fffe
	dc.w	color,$06a
;--------------------------------------------------------------
	dc.w	bplcon0,$0000
	dc.w	ddfstrt,$0030
;--------------------------------------------------------------
	dc.w	color+06,$000
;--------------------------------------------------------------
	dc.w	7!((Ras+02)<<8),$fffe
;--------------------------------------------------------------
Scroll:	dc.w	bplcon1,0
	dc.w	bplcon0,$2000
sp_pnt:	dc.w	bplpt+00,0
	dc.w	bplpt+02,0
	dc.w	bplpt+04,0
	dc.w	bplpt+06,0
;--------------------------------------------------------------
r:	set	Ras+2

	col	$ddd
	col	$ccc
	col	$bbb
	col	$aaa
	col	$999
	col	$888
	col	$777
	col	$666
	col	$555
		
;--------------------------------------------------------------
	dc.w	7!((Ras+18)<<8),$fffe
	dc.w	bplcon0,0
;--------------------------------------------------------------
	dc.w	7!((Ras+19)<<8),$fffe
	dc.w	color,$048
;--------------------------------------------------------------
	dc.w	7!((Ras+20)<<8),$fffe
	dc.w	color,$000
;--------------------------------------------------------------
	dc.w	$ffff,$fffe
EndCop:
***************************************************************
DataTable:	dc.l	0	;pointer to structure below
;==============================================================
GfxName:	dc.b	"graphics.library",0
	even
;==============================================================
DefCoord:
;--------------------------------------------------------------
TKTcor:	dc.b	-1,FRONT
	dc.b	6,02,04,08,12,16,20
	dc.b	6,00,02,08,12,16,20
	dc.b	6,00,04,08,10,16,20
	dc.b	7,00,04,08,12,16,18,20
	dc.b	8,00,02,04,08,10,12,16,20
	dc.b	0
;--------------------------------------------------------------
BETWEENcor:	dc.b	0,BACK
	dc.b	11,00,02,04,06,08,10,12,14,16,18,20
	dc.b	11,00,02,04,06,08,10,12,14,16,18,20
	dc.b	11,00,02,04,06,08,10,12,14,16,18,20
	dc.b	11,00,02,04,06,08,10,12,14,16,18,20
	dc.b	11,00,02,04,06,08,10,12,14,16,18,20
	dc.b	0
;--------------------------------------------------------------
BS1cor:	dc.b	1,FRONT
	dc.b	6,00,02,08,10,12,18
	dc.b	5,00,04,08,16,18
	dc.b	6,00,02,08,10,12,18
	dc.b	4,00,04,12,18
	dc.b	8,00,02,08,10,12,16,18,20
	dc.b	0
;==============================================================
	rsset	0

Offset:	rs.w	1
OldList:	rs.l	1
GfxBase:	rs.l	1
OldVBIrq:	rs.l	1
OldIntEna:	rs.w	1

BgnCol:	rs.w	1
DoItFlag:	rs.w	1

Xold:	rs.w	1
Yold:	rs.w	1
Zold:	rs.w	1
 
Xnew:	rs.w	1
Ynew:	rs.w	1
Znew:	rs.w	1

Xangle:	rs.w	1
Yangle:	rs.w	1
Zangle:	rs.w	1

Xadd:	rs.w	1
Yadd:	rs.w	1
Zadd:	rs.w	1

ScrollAdr:	rs.l	1
ScrollVal:	rs.l	1
ScrollAdd:	rs.l	1

Planes:	rs.l	Depth*2
CurBP:	rs.l	1

NextCop:	rs.l	200
OrgCoord:	rs.l	cor_SIZEOF
NewCoord:	rs.l	cor_SIZEOF

Data_SIZE:	rs.w	0
	
