;Retina burn source code written by S.Smith (CYLON/DIMENSION X)  hope you 
;like the demo.
;If you like any routine in this demo please use it your self I don't mind.
;A credit in your demo would not go amiss if you do.
;the demo is currently configed for a 1200 to set it back to 500 config
;just set dmawait in ptplay1200.i to 300.
;As you will discover some of my code is commented (shock horror) I hope it
;helps.
;
;Anyone wishing to swap source code PLEASE NOTE SEND ONLY YOUR OWN SOURCE
;I DO NOT WANT ANY RIPPED OFF SOURCE OR RESOURCED STUFF THANK YOU VERY MUCH
;I BELIEVE IN SHARING ANY KNOWLEDGE I GAIN, BUT I RESPECT ANY CODERS WISH
;TO KEEP THEIR CODE PRIVATE OK.
;
;PS yes some of the coding is not optimised and maybe some of it could be done
;better but in the end it does work and doesn't crash on any machine I've
;tried it on which is more than I can say for many other demos.
;
;Message to VECTOR DEMO CODERS boooooooorrrrrrrrrrrrrrinnnnggggggggg
;no more please I really do not want to see a 1200000000445475457 face
;wobbly glenz, the prospect of seeing one makes me reboot my machine.
;DO SOMETHING LIVELY SOME THING WITH A BIT OF GO IN IT AND NO MORE BLOODY
;SPACESHIPS.
;
;Possible influences on this demo
;
;hypnotic hammer, bubrain, kgb megademo.
;
;jesus on e's wasn't written when this demo was released.





	incdir "coding:projects/source/retinademo/"
;*-------------------------------------------------------------------------------*
	include include/hardware/custom.i
	include include/hardware/dmabits.i
	include include/libraries/dos_lib.i
	include include/libraries/dos.i
	include include/exec/exec_lib.i
	include include/exec/nodes.i
	include include/exec/memory.i
;*-------------------------------------------------------------------------------*
;                              USER DEFINES
;*-------------------------------------------------------------------------------*
custom 	equ 	$dff000
;*-------------------------------------------------------------------------------*
;                              PROGRAMME START
;*-------------------------------------------------------------------------------*
	section startup_code,code
;*-------------------------------------------------------------------------------*
	move.l	#text,textpos		set text pos to start
	move.l	#backdr1,back_ptr	set back drop to start pic
	move.l	#fl1,ack_ptr	set back drop to start pic
	move.l	#collist,x_ptr
	move.l	#introg+10240,screenpos
	move.l	#greets,greet_ptr
;*-------------------------------------------------------------------------------*
	move.l 4.w,a6			move exec.lib base addr a6
	move.l	#anim_data,anim_ptr	move start of data in to the anim ptr

	jsr 	_LVOForbid(a6)		suspend all tasks
;*-------------------------------------------------------------------------------*
	lea glib,a1			point a1 2 text for graphic lib
	moveq #0,d0			clr d0
	move.l 4.w,a6			move exec.lib base addr a6

	jsr 	_LVOOpenlibrary(a6)	open library

	tst d0				
	beq.w errorgfx			zero retcode=error opening

	move.l d0,gfxlib		store gfx lib address
;*-------------------------------------------------------------------------------*
	lea dlib,a1			point a1 2 text for dos lib
	moveq #0,d0
	move.l 4.w,a6			move exec.lib base addr a6

	jsr 	_LVOOpenlibrary(a6)	open library

	tst d0
	beq.w errordos			zero retcode=error opening

	move.l d0,doslib		store dos lib address
;*-------------------------------------------------------------------------------*
;	lea introp,a0			move address of colour table into a0
;	lea intro_list,a1		move addr colour list in copper int a1
;	move.w #31,d0			there are 16 colours in colour table
;
;intro_again:
;	move.w (a0)+,2(a1)		move a color in col tab into copper
;	addq.l #4,a1			add 4 2 addr in copper 4 next color
;	dbf d0,intro_again		do it again if less than 16 cols done
;*-------------------------------------------------------------------------------*
	move.l #dummysprite,d0		move address of blank sprite into d0
	move.w d0,sprite+6		put lo word of addr in copper
	move.w d0,mirsprite+6		put lo word of addr in copper
	move.w d0,intro_sprite+6	put lo word of addr in copper

	swap d0				
	move.w d0,sprite+2		put high word of addr in copper
	move.w d0,mirsprite+2		put high word of addr in copper
	move.w d0,intro_sprite+2	put high word of addr in copper

	bsr	bass_off
;*-------------------------------------------------------------------------------*
	move.l #TEXT_screen,d0		put addr of you ilbm graphic in d0

	move.w d0,bitplanes+p0l		put lo word of first bp in to bppointer
	move.w d0,replanes+p0l		put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,bitplanes+p0h		put hi word of first bp into bppointer
	move.w d0,replanes+p0h		put hi word of first bp into bppointer
	
	move.l #back_pic,d0		put addr of you ilbm graphic in d0

	move.w d0,bitplanes+p1l		put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,bitplanes+p1h		put hi word of first bp into bppointer

	move.l	#blank,d0		fill in blanks.

	move.w d0,blank1+p0l		put lo word of first bp in to bppointer
	move.w d0,blank2+p0l		put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,blank1+p0h		put hi word of first bp into bppointer
	move.w d0,blank2+p0h		put hi word of first bp into bppointer

	move.l #screen,d0		put addr of you ilbm graphic in d0

	move.w d0,gfxplanes+p0l		put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,gfxplanes+p0h		put hi word of first bp into bppointer
	swap d0
	
	move.l #xxxx,d0			put addr of you ilbm graphic in d0

	move.w d0,mirror_plane+p0l
	swap d0
	move.w d0,mirror_plane+p0h		scn address in copperlist
;*-------------------------------------------------------------------------------*
	move.l #introg,d0		put addr of you ilbm graphic in d0

	move.w d0,intro_planes+p0l	put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,intro_planes+p0h	put hi word of first bp into bppointer
	swap d0
	
	add.l #40,d0
	move.w d0,intro_planes+p1l
	swap d0
	move.w d0,intro_planes+p1h		scn address in copperlist
	swap d0
	
	add.l #40,d0
	move.w d0,intro_planes+p2l
	swap d0
	move.w d0,intro_planes+p2h		scn address in copperlist
	swap d0
	
	add.l #40,d0
	move.w d0,intro_planes+p3l
	swap d0
	move.w d0,intro_planes+p3h		scn address in copperlist
	swap d0

	add.l #40,d0
	move.w d0,intro_planes+p4l
	swap d0
	move.w d0,intro_planes+p4h		scn address in copperlist
;*-------------------------------------------------------------------------------*
	move.l gfxlib,a6		gfx lib address
	add.l #$32,a6			address of old copper
	move.l	a6,cgfxlib
	move.w #$80,$dff096		dma ctrl (disable copper)
	move.l (a6),oldcopper		save old copper address
	move.l #intro_copper,(a6)	replace old copper address with my 
;					copper list (lower down in my code)

	move.w #$8080,$dff096		dma ctrl (enable copper)
	move.w #$8010,$dff09a		copper interupt enabled

	move.l $6c.w,into_interupt	store old level 3 interupt
	move.l $6c.w,fred_interupt	store old level 3 interupt
	move.l $6c.w,old_interupt	store old level 3 interupt

	move.l #intro_interupt,$6c.w	point to my interupt rountine
;*-------------------------------------------------------------------------------*
	lea	black1,a1
	lea	introp,a0
	lea	intro_list,a3
	move.l	#31,d7
	bsr 	fade

	move.w	#200,Intro_counter
iouse:	
	btst 	#6,$bfe001		test mousebutton
	beq.w 	jmouse
	tst.w 	intro_counter
	bne.w 	iouse
jmouse	

	lea	black1,a1
	lea	black2,a0
	lea	intro_list,a3
	move.l	#31,d7
	bsr 	fade
	
;*-------------------------------------------------------------------------------*
	lea	mt_data,a0
	bsr.w 	mt_init			setup play routine
;*-------------------------------------------------------------------------------*
	move.w #$80,$dff096		dma ctrl (disable copper)
	move.l #my_copper,(a6)		replace old copper address with my 
;					copper list (lower down in my code)

	move.w #$8080,$dff096		dma ctrl (enable copper)
	move.w #$8010,$dff09a		copper interupt enabled


	move.l #new_interupt,$6c.w	point to my interupt rountine
;*-------------------------------------------------------------------------------*
	move.w	#100,Intro_counter
imouse:	tst.w 	intro_counter
	bne.w 	imouse

mouse	btst 	#6,$bfe001		test mousebutton
	bne.w 	mouse

	bsr.w 	mt_end			music end routine
	jsr	bass_off		turn off sprites
	move.w #$80,$dff096		dma ctrl (disable copper)
	move.l #my_copper,(a6)		replace old copper address with my 
;					copper list (lower down in my code)
	move.w	#$F00,colourlist+6      red anim colour
	move.w 	#$8080,$dff096		dma ctrl (enable copper)
	move.w 	#$8010,$dff09a		copper interupt enabled


	move.l 	#fredinterupt,$6c.w	point to my interupt rountine
	move.w	#1,gfxcmp
	move.l  #spin_data,spin_ptr
	move.w	#$00,bdr1+2      red anim colour
	move.w	#$00,bdr1+6      red anim colour
	move.w	#$00,colourlist+2      red anim colour
	move.w	#$0,text_cols+2      red anim colour
	move.w	#$0,text_cols+6      red anim colour
	move.w	#$0,lowcol+2      red anim colour
	move.w	#$00,bdr2+2      red anim colour

waitend:	
	tst.w	spindone
	beq	waitend
waitnextblank:
	tst.w	vbl
	beq	waitnextblank
	eor.w	#$ffff,vbl
	sub.w	#$100,colourlist+6
	tst.w	colourlist+6
	bne	waitnextblank
	
	lea	mt_data2,a0
	bsr.w 	mt_init			setup play routine
	

	move.w	#0,moddulo+2
	move.w	#0,moddulo+6
	lea	plane_start,a1
	lea	plane_store,a0
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+

	move.l	#backdr1,a0		move the address of first screen
	lea.l	introg,a1		dest address
	move.l 	#2559,d1		size -1
a_loop:
	move.l	(a0)+,(a1)+		move a longword
	dbr	d1,a_loop		do it until all done

	move.l 	#introg+10240,d0	put addr of you ilbm graphic in d0
	move.l 	d0,a1			put addr of you ilbm graphic in d0

	move.l 	#(2559*2)+1,d1		size -1
b_loop:
	move.l	#0,(a1)+		move a longword
	dbr	d1,b_loop		do it until all done


	move.w 	d0,intro_planes+p1l
	swap 	d0
	move.w 	d0,intro_planes+p1h	scn address in copperlist

	move.w	#$00,intro_list+6	blue fg
	eor.w	#$ccc,intro_list+38	change colour
	bsr	plonk
	eor.w	#$FFFF,toggle

	move.l gfxlib,a6		gfx lib address
	add.l #$32,a6			address of old copper
	move.w #$80,$dff096		dma ctrl (disable copper)
	move.l #intro_copper,(a6)	replace old copper address with my 
;					copper list (lower down in my code)

	move.w #$8080,$dff096		dma ctrl (enable copper)
	move.w #$8010,$dff09a		copper interupt enabled

	move.l #intro_interupt,$6c.w	point to my interupt rountine

;*-------------------------------------------------------------------------------*
wnextblank:
	tst.w	vbl
	beq	wnextblank
	eor.w	#$ffff,vbl
	add.w	#$001,intro_list+6
	cmp.w	#$009,intro_list+6
	bne	wnextblank
;*-------------------------------------------------------------------------------*
	move.w	#100,Intro_counter
hmouse:	tst.w 	intro_counter
	bne.w 	hmouse
	

fmouse	btst 	#6,$bfe001		test mousebutton
	bne.w 	fmouse

wxtblank:
	tst.w	vbl
	beq	wxtblank
	eor.w	#$ffff,vbl
	sub.w	#$111,intro_list+38
	tst.w	intro_list+38
	bne	wxtblank

wextblank:
	tst.w	vbl
	beq	wextblank
	eor.w	#$ffff,vbl
	sub.w	#$001,intro_list+6
	tst.w	intro_list+6
	bne	wextblank

	bchg 	#1,$bfe001		audio filter toggle

;*-------------------------------------------------------------------------------*
	move.l old_interupt,$6c.w	restore old level 3 interupt
	move.w #$10,$dff09a		disable level 3 interupt
	
	move.l gfxlib,a6		put the base address of gfx library >a6

	add.l #$32,a6			add $32 to base addr of lib as this is
;					the mem location that points to active
;					copper list

	move.w #$0080,$dff096		dma ctrl disable copper must be done
;					before restoring old copper

	move.l oldcopper,(a6)		retore old copper
	move.w #$8080,$dff096		dma enable copper

	move.l doslib,a1		close dos lib
	move.l 4.w,a6
	jsr _LVOCloselibrary(a6)
	bsr.w mt_end			music end routine

;*-------------------------------------------------------------------------------*
errordos:	
	move.l gfxlib,a1		close graphics lib
	move.l 4.w,a6
	jsr _LVOCloselibrary(a6)
;*-------------------------------------------------------------------------------*
errorgfx:
	move.l 4.w,a6			enable multitasking again
	jsr _LVOpermit(a6)
;*-------------------------------------------------------------------------------*
error	moveq #0,d0
	rts
;*-------------------------------------------------------------------------------*


fade
	swap d7
	move #14,d0
bright
	moveq #2,d1
nibble
	swap d7
	move d7,d2
	swap d7
col
	move d2,d3
	lsl #1,d3
	move 0(a0,d3.w),d4
	move 0(a1,d3.w),d5
	cmp #2,d1
	bne.w not2

	and #$f00,d4
	and #$f00,d5
	cmp d5,d4
	beq.w doneadd
	blo.w sub2
	add #$100,0(a1,d3.w)
	bra.w doneadd
sub2
	sub #$100,0(a1,d3.w)
	bra.w doneadd
not2
	cmp #1,d1
	bne.w not1
	and #$f0,d4
	and #$f0,d5
	cmp d5,d4
	beq.w doneadd
	blo.w sub1
	add #$10,0(a1,d3.w)
	bra.w doneadd
sub1
	sub #$10,0(a1,d3.w)
	bra.w doneadd
not1
	cmp #0,d1
	bne.w doneadd
	and #$f,d4
	and #$f,d5
	cmp d5,d4
	beq.w doneadd
	blo.w sub0
	addq #$1,0(a1,d3.w)
	bra.w doneadd
sub0
	subq #$1,0(a1,d3.w)
doneadd
	dbra d2,col
; change immediate value in d6 the higher it is the slower the fade
	moveq #1,d6
	bsr.w pause

	move.l a1,a2
	swap d7
	move.w d7,d2
	swap d7
	move.l a3,-(sp)

copy3	move.w (a2)+,2(a3)
	addq.l #4,a3
	dbra d2,copy3

	move.l (sp)+,a3
	
	dbra d1,nibble

	dbra d0,bright
	rts


;================================================
; pause
; d6.w = pause time in 1/50 sec
;================================================

pause
	move.w vbl,d7
waitframe
	cmp vbl,d7
	beq.w waitframe

	dbra d6,pause
	rts




**************************************************
; in interupt routine put:-


; in variables put:-


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



;*-------------------------------------------------------------------------------*

plonk:
	move.l 	greet_ptr,a1		move address of next char into a1	
	cmp.b	#"@",(a1)
	bne	no_scroll_pause
	addq.l	#1,a1
	move.w	#100,scroll_wait
no_scroll_pause:
	moveq.l	#0,d2

	move.l 	screenpos,a0		load LINE pos on screen.
	add.l	#10240,a0

	bsr.w wblit			clear line
	move.l #$ffffffff,BLTAFWM+Custom
	MOVE.W	#0,BLTADAT+CUSTOM
	move.w #0,BLTDMOD+Custom
	move.l a0,BLTDPT+Custom
	move.w #%0000000111110000,BLTCON0+Custom
	move.w #0,BLTCON1+Custom
	move.w #(64*32)+20,BLTSIZE+Custom	32lines by 1 word

get_next_l:
	move.b 	(a1)+,d1		get char from scrolltext
	add.w	#1,d2			add one line length counter
	cmp.b	#10,d1			are we at eol
	bne.w	get_next_l			no read another ltr

	subq.l	#1,d2			remove cr from counter for disp loop
	move.l  #20,d4			1/2 scrn size in bytes
	sub.l	d2,d4			1/2 txt len - 1/2 scrn width = offset

	add.l	d4,a0			add offset to the base addr of screen

	move.l 	greet_ptr,a1		move address of next char into a1	
	cmp.b	#"@",(a1)
	bne	no_scroll_paus
	addq.l	#1,a1
no_scroll_paus:
	moveq.l #0,d1
	moveq.l #0,d5
nextchar:
	move.b 	(a1)+,d1		char into d1
	tst.b 	d1			if val in d0 is 0
	beq 	textended        	it is the end of the text
	move.l 	a1,greet_ptr
	cmp.b 	#10,d1			is it eol
	beq.w 	eol			end of line exit routine	
	sub.l 	#32,d1			remove ctrl codes from ascii char value
	lsl.l 	d1			mult by two to get off. in font.
	lea 	font16,a2		load base address of font.
	add.l d1,a2			add offset to base address.
	bsr.w doblt			go blit char from font to screen.
	addq.l #2,a0			add 2 bytes for pos of next char.
	bra.w nextchar
eol:
	rts

textended:	
	move.l	#greets,greet_ptr
	rts

doblt	

	bsr.w wblit
	move.l #$ffffffff,BLTAFWM+Custom
	move.w #39,BLTDMOD+Custom
	move.w #(91*2)-1,BLTAMOD+Custom
	move.l a0,BLTDPT+Custom
	move.l a2,BLTAPT+Custom
	move.w #%0000100111110000,BLTCON0+Custom
	move.w #0,BLTCON1+Custom
	move.w #(64*32)+1,BLTSIZE+Custom	32lines by 1 word

	rts
copyline:

	move.l 	screenpos,a3		load pos on screen.
	move.l	a3,a4			used for copy blit
	sub.l	#40*32,a3
	add.l	#10240,a4

	bsr.w wblit
	move.l #$ffffffff,BLTAFWM+Custom
	move.w #0,BLTDMOD+Custom
	move.w #0,BLTAMOD+Custom
	move.l a3,BLTDPT+Custom
	move.l a4,BLTAPT+Custom
	move.w #%0000100111110000,BLTCON0+Custom
	move.w #0,BLTCON1+Custom
	move.w #(64*32)+20,BLTSIZE+Custom	32lines by 20 words
	rts




wblit:
	btst.b #DMAB_BltDone-8,DMAConR+custom
BlitWait1:
	btst.b #DMAB_BltDone-8,DMAConR+Custom
	bne.w BlitWait1
	rts
;*-------------------------------------------------------------------------------*
;                            MY INTERUPT ROUTINE
;*-------------------------------------------------------------------------------*
fredinterupt:
	movem.l d0-d7/a0-a6,-(sp)	store registers
	
	
	and.w 	#$10,$dff01e		is the interupt a copper interupt?
	beq.w 	no_fred  		if not skip copper routines
	move.w 	#$10,$dff09c		acknowledge interupt

	eor.w	#$ffff,vbl
	cmp.w	#13,gfxcmp
	bgt	still
	sub.w	#1,gfxcount
	tst.w 	gfxcount
	bne.b 	no_spin
	bsr.w	dospin2
	sub.w	#1,acounter
	tst.w	acounter
	bne	notslow
	move.w	#2,acounter
still:
	add.w	#1,gfxcmp
speedslow:
	cmp.w	#50,gfxcmp
	blt	notslow
	move.w	#$FFFF,spindone
notslow:
	move.w	gfxcmp,gfxcount
no_spin:
no_fred:
	movem.l (sp)+,d0-d7/a0-a6	restore registers so code out of
;					interupt does not cock up

fred_interupt:	equ *+2
	jmp $12345678			jump to old routine
;*------------------------------------------------------------------------------
;	GFX spin routine 
;*------------------------------------------------------------------------------
dospin2:
	move.l	spin_ptr,a0		put ptr to anim sequ > a0
	move.l	A0,d0			clr d0
	cmp.l	#spin_fin,d0
	blt 	.inrange1
	move.l	#spin_data,a0		move start of data in to the anim ptr
	move.l	#spin_data,anim_ptr	move start of data in to the anim ptr
.inrange1:
	moveq.l	#0,d0			clr d0
	move.b	(a0)+,d0		put anim sequ into d0
	tst.b	d0			is it end of anim char?(0)
	bne.w	.not_last_anim		no so skip next three insts
	move.l	#spin_data,a0		move start of data in to the anim ptr
.goforit:
	move.b	(a0)+,d0		move fresh char to d0
.not_last_anim:
	move.l	a0,spin_ptr		store new ptr addr
	move.l	#screen,d1		base addr of anims
	sub.b	#1,d0			remove extra from d0
	mulu	#5600,d0		multiply frame no. by frame size
	add.l	d1,d0			add base addr to frame offset
.put_new_bm:
	move.w 	d0,gfxplanes+p0l	put lo word of first bp in to bppointer
	swap 	d0			in copper list
	move.w 	d0,gfxplanes+p0h	put hi word of first bp into bppointer
	swap d0
	rts
;*-------------------------------------------------------------------------------*
;                            MY INTERUPT ROUTINE
;*-------------------------------------------------------------------------------*
intro_interupt:
	movem.l d0-d7/a0-a6,-(sp)	store registers
	
	
	and.w 	#$10,$dff01e		is the interupt a copper interupt?
	beq.w 	no_int  		if not skip copper routines
	move.w 	#$10,$dff09c		acknowledge interupt

 	eor.w 	#$FFFF,vbl
	sub.w	#1,intro_counter	
	tst.w	toggle			are we at the second usage
	bne	no_int			no then bog off
	sub.w	#1,scroll_wait
	tst.w	scroll_wait
	bne	no_greet
	move.w	#1,scroll_wait

	add.l	#40,screenpos		add a line
	move.l	screenpos,d0		move current screen pos in
	move.w 	d0,intro_planes+p1l	and bop it to copper list
	swap 	d0
	move.w 	d0,intro_planes+p1h	scn address in copperlist

	moveQ.l	#0,d0
	sub.w	#1,scrollcount		dec line scrolled by 1 
	tst.w	scrollcount		have we scrolled 32 pix lines
	bne	no_greet		no then no need to reset counter

	move.w	#32,scrollcount		restore line pix lines scrolled

	sub.b	#1,linecount		sub one from no lines scrolled
	tst.b	linecount		has the screen reached its end yet?
	bne	not_BOT			no then bog off

	bsr.w copyline			copy line
	move.l	#introg+10240,screenpos	set to screen start

	move.b	#9,linecount
	bsr	plonk			write line to be scrolled
	bra	no_greet
not_bot:

	bsr	plonk	
	bsr.w copyline			go blit char from font to screen.

no_greet:

	bsr.w 	mt_music		call music player
no_int
	movem.l (sp)+,d0-d7/a0-a6	restore registers so code out of
;					interupt does not cock up

into_interupt:	equ *+2
	jmp $12345678			jump to old routine

;*-------------------------------------------------------------------------------*
new_interupt
	movem.l d0-d7/a0-a6,-(sp)	store registers
	
	
	and.w 	#$10,$dff01e		is the interupt a copper interupt?
	beq.w 	no_music		if not skip copper routines
	move.w 	#$10,$dff09c		acknowledge interupt

	sub.w	#1,intro_counter	
	cmp.w	#$fff,equalizer3
	bne.b	no_beat
	addq.w	#2,beatcount
no_beat:
	cmp.w 	#10,beatcount
	bgt.b	ten
	move.w	#1,wait
	move.w 	#$0,colourlist+2
	jsr 	strobe2
	bsr.w	clang
        jsr     hitthebass
	bsr.w	bdrstrobe
	jsr	Do_text
	jmp	out
ten:
	cmp.w 	#20,beatcount
	bgt.b	twenty
	jsr 	strobe3
	bsr.w	clang
        jsr     hitthebass
	bsr.w	bdrstrobe
	jsr	Do_text
	jmp	out
twenty:
	cmp.w 	#30,beatcount
	bgt.b	thirty
	jsr 	strobe4
	move.w	#$FFF,bdr1+6
	bsr.w	clang
        jsr     hitthebass
	jsr	strobe2
	jsr	Do_text
	jmp	out
thirty:
	cmp.w 	#40,beatcount
	bgt.b	forty
	jsr 	strobe5
	jsr	strobe2
	bsr.w	clang
        jsr     hitthebass
	move.w	#3,wait
	jsr	Do_text
	jmp	out
forty:
	cmp.w 	#50,beatcount
	bgt.b	fifty
	jsr 	strobe6
	bsr.w	clang
        jsr     hitthebass
	jsr	Do_text
	jmp	out
fifty:
	cmp.w 	#60,beatcount
	bgt.b	sixty
	jsr 	strobe8
	bsr.w	bdrstrobe
	bsr.w	clang
        jsr     hitthebass
	move.w	#$FFF,bdr1+6
	jsr	strobe2
	jsr	Do_text
	jmp	out
sixty:
	cmp.w 	#70,beatcount
	bgt.b	seventy
	move.w	#$FFF,bdr1+6
	bsr.w	clang
        jsr     hitthebass
	move.w	#7,wait
	jsr 	strobe9
	jsr	Do_text
	jmp	out
seventy:
	cmp.w 	#80,beatcount
	bgt.b	eighty
	move.l	cgfxlib,a6
	move.l 	#mirror_cop,(a6)	replace old copper address with my 
	jsr 	xbounce
        jsr     hitthebass
	jmp	no_gfx
eighty:
	cmp.w 	#90,beatcount
	bgt.b	ninety
        jsr     hitthebass
	tst.w	cytog
	bne	rightcop
	jsr	cyclemap
	eor.w	#$FFFF,cytog
rightcop:
	jsr 	cycle
	jmp	no_gfx
ninety:
	eor.w	#$FFFF,cytog
	move.l	a6,cgfxlib
	move.l 	#my_copper,(a6)		replace old copper address with my 
	move.w 	#$0,colourlist+2
	move.w 	#$0,Text_cols+2
	move.w	#0,beatcount
	sub.b	#1,cycount		change cycle routine
	tst.b	cycount			check if 3 routine done
	bne	out			no
	move.b	#3,cycount		reset to routine 3
out:
	bsr.w	strobe1
	bsr.w	back_strobe

	sub.w	#1,gfxcount
	tst.w 	gfxcount
	bne.b 	no_gfx
	bsr.w	gfxchange
	move.w	gfxcmp,gfxcount
no_gfx:

	bsr.w 	mt_music		call music player
	
	
no_music
	movem.l (sp)+,d0-d7/a0-a6	restore registers so code out of
;					interupt does not cock up

old_interupt	equ *+2
	jmp $12345678			jump to old routine

;*-------------------------------------------------------------------------------*
	include include/pt-playa1200.s	yep good old pt-play
;*-------------------------------------------------------------------------------*
clang:
	cmp.w	#$8,chan1
	bne.w	nobass1
	bsr.w	change_back
	move.w	#0,chan1
	rts	
nobass1:
	cmp.w	#$8,chan2
	bne.w	nobass2
	bsr.w	change_back
	move.w	#0,chan2
	rts	
nobass2:
	cmp.w	#$8,chan3
	bne.w	nobass3
	bsr.w	change_back
	move.w	#0,chan3
	rts	
nobass3:
	cmp.w	#$8,chan4
	bne.w	nobass4
	bsr.w	change_back
	move.w	#0,chan4
	rts
nobass4:
        bra	nothin_doin
;*-------------------------------------------------------------------------------*
;		backdrop swap
;*-------------------------------------------------------------------------------*

change_back:

	move.l 	back_ptr,d0		move current screen 
	cmp.l	#back_end,d0		are we past the last screen ?
	bne.w	back_ok			no lets move on
	move.l	#backdr1,D0		move the address of first screen
	move.l	d0,back_ptr		and store it.
back_ok:
	move.l	d0,a0			source address
	lea.l	back_pic,a1		dest address
	move.l 	#2559,d1		size -1
bdr_loop:
	move.l	(a0)+,(a1)+		move a longword
	dbr	d1,bdr_loop		do it until all done
	add.l	#10240,back_ptr		set ptr to next screen	
	move.w	#100,bored
	rts


nothin_doin:
	sub.w	#1,bored
	tst.w	bored
	bne	not_bored

	move.l 	ack_ptr,d0		move current screen 
	cmp.l	#fl_rend,d0		are we past the last screen ?
	bne.w	back_okay		no lets move on
	move.l	#fl1,D0		move the address of first screen
	move.l	d0,ack_ptr		and store it.
back_okay:
	move.l	d0,a0			source address
	lea.l	back_pic,a1		dest address
	move.l 	#2559,d1		size -1
acopy_loop:
	move.l	(a0)+,(a1)+		move a longword
	dbr	d1,acopy_loop		do it until all done
	add.l	#10240,ack_ptr		set ptr to next screen	
	move.w	#3,bored
not_bored:
	rts
	
;*-------------------------------------------------------------------------------*
;		Text display test
;*-------------------------------------------------------------------------------*
do_text:
	sub.w	#1,textcount
	tst.w 	textcount
	bne.w 	no_ext1
	bsr.w 	bigtext
	move.w	#50,textcount
no_ext1:
	rts
	
;*-------------------------------------------------------------------------------*
;               Test for let the bass kick sample.
;*-------------------------------------------------------------------------------*

hitthebass:
	cmp.w	#$9,chan1
	bne.w	.nobass1
	bsr.w	bass_on
	move.w	#0,chan1
	rts	
.nobass1:
	cmp.w	#$9,chan2
	bne.w	.nobass2
	bsr.w	bass_on
	move.w	#0,chan2
	rts	
.nobass2:
	cmp.w	#$9,chan3
	bne.w	.nobass3
	bsr.w	bass_on
	move.w	#0,chan3
	rts	
.nobass3:
	cmp.w	#$9,chan4
	bne.w	.nobass4
	bsr.w	bass_on
	move.w	#0,chan4
	rts
.nobass4:
	sub.w	#1,bass_wait
	tst.w	bass_wait
	bne	no_bass_off
	move.w	#$ffff,bass_wait
	bsr	bass_off
no_bass_off:
        Rts
bass_off:
	move.l #dummysprite,d0		move address of blank sprite into d0
	move.w d0,d_sprite1+6		put lo word of addr in copper
	move.w d0,d_sprite2+6		put lo word of addr in copper
	move.w d0,d_sprite3+6		put lo word of addr in copper
	move.w d0,d_sprite4+6		put lo word of addr in copper
	swap d0				
	move.w d0,d_sprite1+2		put high word of addr in copper
	move.w d0,d_sprite2+2		put high word of addr in copper
	move.w d0,d_sprite3+2		put high word of addr in copper
	move.w d0,d_sprite4+2		put high word of addr in copper
	rts
bass_on:
	move.l 	#ltbk_sprite1,d0	move address of blank sprite into d0
	move.w 	d0,d_sprite1+6		put lo word of addr in copper
	swap 	d0				
	move.w 	d0,d_sprite1+2		put high word of addr in copper
	move.l 	#ltbk_sprite2,d0	move address of blank sprite into d0
	move.w 	d0,d_sprite2+6		put lo word of addr in copper
	swap 	d0				
	move.w 	d0,d_sprite2+2		put high word of addr in copper
	move.l 	#ltbk_sprite3,d0	move address of blank sprite into d0
	move.w 	d0,d_sprite3+6		put lo word of addr in copper
	swap 	d0				
	move.w 	d0,d_sprite3+2		put high word of addr in copper
	move.l 	#ltbk_sprite4,d0	move address of blank sprite into d0
	move.w 	d0,d_sprite4+6		put lo word of addr in copper
	swap	d0				
	move.w 	d0,d_sprite4+2		put high word of addr in copper
	move.w	#30,bass_wait
	rts
;*-------------------------------------------------------------------------------*
cyclemap:
	move.l #dummysprite,d0		move address of blank sprite into d0
	move.w d0,cyclesprite+6		put lo word of addr in copper
	swap d0				
	move.w d0,cyclesprite+2		put high word of addr in copper

	move.l #cyclescreen,d0		put addr of you ilbm graphic in d0

	move.w d0,cycleplanes+p0l	put lo word of first bp in to bppointer
	swap d0				in copper list
	move.w d0,cycleplanes+p0h	put hi word of first bp into bppointer
	swap d0
	
	add.l #40,d0
	move.w d0,cycleplanes+p1l
	swap d0
	move.w d0,cycleplanes+p1h		scn address in copperlist
	swap d0
	
	add.l #40,d0
	move.w d0,cycleplanes+p2l
	swap d0
	move.w d0,cycleplanes+p2h		scn address in copperlist
	swap d0
	
	add.l #40,d0
	move.w d0,cycleplanes+p3l
	swap d0
	move.w d0,cycleplanes+p3h		scn address in copperlist

	move.l gfxlib,a6		gfx lib address
	add.l #$32,a6			address of old copper
	move.w #$80,$dff096		dma ctrl (disable copper)
	move.l #cycle_copper,(a6)	replace old copper address with my 
;					copper list (lower down in my code)

	move.w #$8080,$dff096		dma ctrl (enable copper)
	move.w #$8010,$dff09a		copper interupt enabled

	rts
;*-------------------------------------------------------------------------------*
cycle:
	cmp.b	#1,cycount
	beq	forwards
	cmp.b	#2,cycount
	beq	forandequ
forwards:
	moveq.l	#0,d2
	move.l 	#15,d0
	move.l 	#cyclelist+2,a0
	move.l 	#cyclelist+6,a4
cpy_down:
	move.w	(a4),(a0)
	addq.l	#4,a0
	addq.l	#4,a4
	dbr	d0,cpy_down

	lea	collist,a1
	move.w	tabpos,d2
	addq.w	#2,d2
	cmp.w	#217,d2
	blt	no_pob
	move.w	#0,d2
no_pob:
	move.w	d2,tabpos
	move.w	(a1,d2.w),(a0)
	eor.w	#$FFFF,direction
	rts
forandequ:
	moveq.l	#0,d2
	move.l 	#15,d0
	move.l 	#cyclelist+2,a0
	move.l 	#cyclelist+6,a4
cy_down:
	move.w	(a4),(a0)
	addq.l	#4,a0
	addq.l	#4,a4
	dbr	d0,cy_down

	move.w	equalizer1,d2
	add.w	equalizer2,d2
	tst.b	direction
	bne	noadd
	add.w	equalizer4,d2
noadd:
	move.w	d2,(a0)
	eor.w	#$FFFF,direction
	rts
;*------------------------------------------------------------------------------
;	GFX CHANGE routine 
;*------------------------------------------------------------------------------
gfxchange:
	move.l	anim_ptr,a0		put ptr to anim sequ > a0
	move.l	A0,d0			clr d0
	cmp.l	#an_fin,d0
	blt 	inrange1
	move.l	#anim_data,a0		move start of data in to the anim ptr
	move.l	#anim_data,anim_ptr	move start of data in to the anim ptr
inrange1:
	moveq.l	#0,d0			clr d0
	move.b	(a0)+,d0		put anim sequ into d0
	tst.b	d0			is it end of anim char?(0)
	bne.w	not_last_anim		no so skip next three insts
	move.l	#anim_data,a0		move start of data in to the anim ptr
goforit:
	move.b	(a0)+,d0		move fresh char to d0
	move.w	wait,gfxcmp		move 5 into frame counter for anims
not_last_anim:
	move.l	a0,anim_ptr		store new ptr addr
	move.l	#screen,d1		base addr of anims
	sub.b	#1,d0			remove extra from d0
	mulu	#5600,d0		multiply frame no. by frame size
	add.l	d1,d0			add base addr to frame offset
put_new_bm:
	move.w 	d0,gfxplanes+p0l	put lo word of first bp in to bppointer
	swap 	d0			in copper list
	move.w 	d0,gfxplanes+p0h	put hi word of first bp into bppointer
	swap d0
	rts
;*------------------------------------------------------------------------------
;	TEXT routine 
;*-------------------------------------------------------------------------------*
bigTEXT:

	moveq.l #0,d1			make sure d1 is clear
	moveq.l #0,d2			make sure d1 is clear
	move.l 	textpos,a1		move start of scroll text a1
	move.l	#TEXT_screen,a3		base addr of screen
	
	move.b 	(a1),d1			get char from scrolltext
	cmp #$0,d1			is it the last letter
	bne.w notend			if not skip to setting blitter up

	lea text,a1			get start addr of text
	move.l 	a1,textpos		move to start of scroll text
notend:

nextltr:
	move.b 	(a1)+,d1		get char from scrolltext
	add.w	#1,d2			add one line length counter
	cmp.b	#13,d1			are we at eol
	bne.w	nextltr			no read another ltr

	move.l	d2,d3			d3 is temp work reg	
	subq.l	#2,d2			remove cr from counter for disp loop
	subq.l	#1,d3			remove cr from counter for disp loop
	lsl.l	#1,d3			1/2 txt length in bytes 
	move.l  #20,d4			1/2 scrn size in bytes
	sub.l	d3,d4			1/2 txt len - 1/2 scrn width = offset
	add.l	d4,a3			add offset to the base addr of screen
	
	move.l 	textpos,a2		move start of scroll text a2
	move.l 	a1,textpos		and store for next time
readchar:
	moveq.l #0,d1			make sure d1 is clear
	move.b 	(a2)+,d1		get char from scrolltext
		
	sub.b 	#$20,d1			remove 32 from ascii val to get offset
;					in font eg spc=32 so spc first char
	tst.b	d1			if d1 = 0 then spc is at end of this 
;					char set
	bne.w 	not_spc			it`s not space
	move.b	#92-33,d1		set to correct pos for space
not_spc:
	sub.b	#32,d1			a is char 0 in this fnt so remove crap
	lsl #$2,d1			multiply by 4 as font is 32 pixels 
;					wide
	lea font32,a1			base addr of font into a1
	add.l d1,a1			add char offset to a1


	btst.b #DMAB_BltDone-8,DMAConR+custom
BlitWait2:
	btst.b #DMAB_BltDone-8,DMAConR+Custom
	bne.w BlitWait2

	move.l 	#$ffffffff,BLTAFWM+Custom
	move.w 	#36,BLTDMOD+Custom
	move.w 	#(27-1)*4,BLTAMOD+Custom
	move.l 	a3,BLTDPT+Custom
	move.l 	a1,BLTAPT+Custom
	move.w 	#%0000100111110000,BLTCON0+Custom
	move.w 	#0,BLTCON1+Custom
	move.w 	#(40*64)+2,BLTSIZE+Custom	40lines by 2 word

	addq.l	#4,a3
	dbr	d2,readchar			have we done a full line
	rts	

;*------------------------------------------------------------------------------
;	strobe routine 1
;*-------------------------------------------------------------------------------*
	
strobe1:
	sub.w	#1,count		add 1 to counter
	tst.w 	count			are no. counts the same as amount in
	bne.w 	noflash			count amount? 

	tst.w 	upordown		change flash speed up or down
	beq.w	countdown		if 0 then count = down

	bsr.w 	Text_flash			flash screen	

	add.w	#1,countamount		add 1 to amount of time to wait
	move.w  countamount,count	reset counter	
	cmp.w 	#10,countamount		is delay at maximum
	
	bne.w 	noflash 		no don`t change direction
	eor.w 	#$FFFF,upordown		yes change direction
	bra.w 	noflash
countdown:
	bsr.w	Text_flash			flaash screen

	sub.w	#1,countamount		add 1 to amount of time to wait
	move.w  countamount,count	reset counter	
	tst.w 	countamount		is delay at maximum
	
	bne.w 	noflash 		no don`t change direction
	move.w	#1,countamount
	move.w	#1,count
	eor.w 	#$FFFF,upordown		yes change direction
noflash:
	RTS

Text_flash:
	tst.w 	Text_cols+6
	bne.w 	.setzero
	move.w 	#$FFF,Text_cols+6
	move.w 	#$FFF,lowcol+2
	bra.w	.skipzero
.setzero:
	move.w 	#$0,Text_cols+6
	move.w 	#$0,lowcol+2
.skipzero:
	rts

flash:
	tst.w 	colourlist+2
	bne.w 	setzero
	move.w 	#$fff,Text_cols+2
	move.w 	#$fff,colourlist+2
	bra.w	skipzero
setzero:
	move.w 	#$0,Text_cols+2
	move.w 	#$0,colourlist+2
skipzero:
	rts
dflash:
	tst.w 	colourlist+2
	bne.w 	.setzero
	move.w 	#$fff,Text_cols+2
	move.w 	#$fff,colourlist+2
	move.w 	#$0,colourlist+6
	bra.w	.skipzero
.setzero:
	move.w 	#$0,Text_cols+2
	move.w 	#$0,colourlist+2
	move.w 	#$fff,colourlist+6
.skipzero:
	rts
cflash:
	tst.w 	colourlist+2
	bne.w 	.sezero
	lea	strobelist,a0
	moveq.l	#0,d0
	move.b	strobecount,d0
	add.l	d0,d0
	add.l	d0,a0
	move.w 	(a0),Text_cols+2
	move.w 	(a0),colourlist+2
	bra.w	.sipzero
.sezero:
	move.w 	#$0,Text_cols+2
	move.w 	#$0,colourlist+2
.sipzero:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 2		
;*-------------------------------------------------------------------------------*
strobe2:
	move.w	equalizer2,colourlist+6
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 3		
;*-------------------------------------------------------------------------------*
strobe3:
	sub.w #1,counts3
	tst.w 	counts3			are no. counts the same as amount in
	bne.w 	.noflas			count amount?
	bsr.w	flash			change scrn colour
	move.w	#3,counts3		reset counter
.noflas:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 4		
;*-------------------------------------------------------------------------------*
strobe4:
	sub.w #1,counts3
	tst.w 	counts3			are no. counts the same as amount in
	bne.w 	.noflash		count amount?
	bsr.w	flash			change scrn colour
	move.w	#2,counts3		reset counter
.noflash:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 5		
;*-------------------------------------------------------------------------------*
strobe5:
	sub.w #1,counts3
	tst.w 	counts3			are no. counts the same as amount in
	bne.w 	.nflash		count amount?
	bsr.w	flash			change scrn colour
	move.w	#1,counts3		reset counter
.nflash:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 6		
;*-------------------------------------------------------------------------------*
strobe6:
	sub.w #1,counts3
	tst.w 	counts3			are no. counts the same as amount in
	bne.w 	.oflash		count amount?
	bsr.w	dflash			change scrn colour
	move.w	#3,counts3		reset counter
.oflash:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 7		
;*-------------------------------------------------------------------------------*
strobe7:
	move.w 	equalizer3,Text_cols+2
	move.w	equalizer3,colourlist+2
	move.w	equalizer1,colourlist+6
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 8		
;*-------------------------------------------------------------------------------*
strobe8:
	sub.w 	#1,counts3
	tst.w 	counts3			are no. counts the same as amount in
	bne.w 	n			count amount?
	sub.b	#1,strobecount
	tst.b	strobecount
	bne.w	notstrobing
	move.b 	#7,strobecount
notstrobing:
	bsr.w	cflash			change scrn colour
	move.w	#6,counts3		reset counter
n:
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine 9		
;*-------------------------------------------------------------------------------*
strobe9:
	move.w	equalizer3,colourlist+6
	move.w 	equalizer2,Text_cols+2
	move.w	equalizer2,colourlist+2
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine border		
;*-------------------------------------------------------------------------------*
bdrstrobe:
	move.w	equalizer4,bdr1+2
	move.w	equalizer4,bdr2+2
	rts
;*-------------------------------------------------------------------------------*
;	strobe routine back pic		
;*-------------------------------------------------------------------------------*
back_strobe:
	move.w	equalizer4,bdr1+6
	rts
;*-------------------------------------------------------------------------------*
;	xbounce routine 		
;*-------------------------------------------------------------------------------*
xbounce:
	move.l	x_ptr,d0
	move.l	#bar_top+6,a0
	move.l	#13,d1
next_bar:
	move.w	8(a0),(a0)+
	addq.l	#6,a0
	dbr	d1,next_bar	
	addq.l	#2,d0
	cmp.l	#coll_finish,d0
	blt.w	not_fin_list
	move.l	#collist,d0
not_fin_list:
	move.l	d0,x_ptr
	move.l	d0,a1
	move.w	(a1),(a0)

	move.l	#5,d1
	move.l	#bar_bottom-2,a0
wtrye:
	move.w	(a0),8(a0)
	subq.l	#8,a0
	dbr	d1,wtrye
	move.w	bar_mid1-2,bar_mid2+6	

	move.l	#7,d1
	move.l	#bar_mid1-2,a0
trye:
	move.w	(a0),8(a0)
	subq.l	#8,a0
	dbr	d1,trye
	move.w	(a1),bar_bot+6


	moveq.l #0,d0
	move.w	equalizer3,d0
	and.l	#$f,d0
	cmp.w	#$c,d0
	bgt	x1
	cmp.w	#$7,d0
	bgt	x2
	cmp.w	#$3,d0
	bgt	x3
	move.l #xxx1,d0			put addr of you ilbm graphic in d0
	move.w d0,mirror_plane+p0l
	swap d0
	move.w d0,mirror_plane+p0h		scn address in copperlist
	rts
x1:
	move.l #xxxx,d0			put addr of you ilbm graphic in d0
	move.w d0,mirror_plane+p0l
	swap d0
	move.w d0,mirror_plane+p0h		scn address in copperlist
	rts
x2:
	move.l #xxx3,d0			put addr of you ilbm graphic in d0
	move.w d0,mirror_plane+p0l
	swap d0
	move.w d0,mirror_plane+p0h		scn address in copperlist
	rts
x3:
	move.l #xxx2,d0			put addr of you ilbm graphic in d0
	move.w d0,mirror_plane+p0l
	swap d0
	move.w d0,mirror_plane+p0h		scn address in copperlist
	rts
;*-------------------------------------------------------------------------------*
;this is a copper list consult hw ref manual for explanation of copper cmds
;*-------------------------------------------------------------------------------*
	section copperlist,data_c	

my_copper
	dc.w 	BPLCON0,$0200		0 bp - lores bitplane control reg 0
	dc.w 	BPLCON2,%00100100	bp ctrl reg
	dc.w 	BPL1MOD,0		bp modulo odd
	dc.w 	BPL2MOD,0		bp modulo even
bdr1:	dc.w 	COLOR,$428		colour reg 0 (background) 
	dc.w 	COLOR+18,0		colour reg 0 (background) 

scroll:
	dc.w 	BPLCON1,$0		this is the bitplane contol register 1
;					see hardware ref for details.

sprite:	
	dc.w 	SPRPT,0			this tells sprite 0 where to look
	dc.w 	SPRPT+2,0		for it's graphic and pos data set by

d_sprite1:	
	dc.w 	SPRPT+8,0			this tells sprite 0 where to look
	dc.w 	SPRPT+10,0		for it's graphic and pos data set by
d_sprite2:	
	dc.w 	SPRPT+12,0			this tells sprite 0 where to look
	dc.w 	SPRPT+14,0		for it's graphic and pos data set by
d_sprite3:	
	dc.w 	SPRPT+16,0			this tells sprite 0 where to look
	dc.w 	SPRPT+18,0		for it's graphic and pos data set by
d_sprite4:	
	dc.w 	SPRPT+20,0			this tells sprite 0 where to look
	dc.w 	SPRPT+22,0		for it's graphic and pos data set by
	
	dc.w 	DDFSTRT,$38		start of display horiz
	dc.w 	DDFSTOP,$d0		stop of display horiz
	dc.w 	DIWSTRT,$2c81		visible window top left
	dc.w 	DIWSTOP,$2cc1		visible window bottom right

; this loads the pointers that tell custom chips where in mem you bps are
; the section near start of code fill in the addresses after
bitplanes
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0
	dc.w 	BPLPT+4,0
	dc.w 	BPLPT+6,0
p0h	equ 2
p0l	equ 6
p1h	equ 10
p1l	equ 14
p2h	equ 18
p2l	equ 22
p3h	equ 26
p3l	equ 30
p4h	equ 34
p4l	equ 38

		
	dc.w 	$2b01,$ff00
spritepall:
	dc.w 	color+40,0
	dc.w	color+42,$ff0
	dc.w	color+44,$880
	dc.w	color+46,$440
	dc.w	color+48,0
	dc.w	color+50,$FF0
	dc.w	color+52,$880
	dc.w	color+54,$440

	
	dc.w 	$2c01,$ff00		start gfx (text1)
	dc.w 	BPLCON0,$2600
text_cols:
	dc.w	color,$0
	dc.w	color+2,$FFF
	dc.w 	$5401,$ff00		end gfx
blank1:
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0

	dc.w 	$6601,$ff00		start gfx (anims)
gfxplanes
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0

ColourList:
	dc.w	color,$0
	dc.w	color+2,$0

	dc.w 	$f201,$ff00		end gfx
blank2:
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0

	dc.w 	$ffe1,$fffe		end ntsc

	dc.w	$0401,$ff00		start gfx (text2)
replanes
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0
lowcol:
	dc.w	color+2,$000
	dc.w 	$2c01,$ff00		end gfx
	dc.w 	BPLCON0,$0200
bdr2:	dc.w 	COLOR,$428			colour reg 0 (background) 

	dc.w 	$2d01,$ff00		end pal
	dc.w 	INTREQ,$8010			strobe for interupt
	dc.w 	$ffff,$fffe		end copper
;*-------------------------------------------------------------------------------*
;copper list 2  consult hw ref manual for explanation of copper cmds
;*-------------------------------------------------------------------------------*

mirror_cop:
	dc.w 	BPLCON0,$0200		0 bp - lores bitplane control reg 0
	dc.w 	BPLCON2,$a		bp ctrl reg
	dc.w 	BPL1MOD,0		bp modulo odd
	dc.w 	BPL2MOD,0		bp modulo even
	dc.w 	COLOR,$428		colour reg 0 (background) 

	dc.w 	BPLCON1,$0		this is the bitplane contol register 1
;					see hardware ref for details.

mirsprite:	
	dc.w 	SPRPT,0			this tells sprite 0 where to look
	dc.w 	SPRPT+2,0		for it's graphic and pos data set by
;					the code higher up
	
	dc.w 	DDFSTRT,$38		start of display horiz
	dc.w 	DDFSTOP,$d0		stop of display horiz
	dc.w 	DIWSTRT,$2c81		visible window top left
	dc.w 	DIWSTOP,$2cc1		visible window bottom right

; this loads the pointers that tell custom chips where in mem you bps are
; the section near start of code fill in the addresses after
mirror_plane:
	dc.w 	BPLPT,0
	dc.w 	BPLPT+2,0
	dc.w 	$2b01,$ff00

	
	dc.w 	$2c01,$ff00		start gfx 
	dc.w 	BPLCON0,$1200
	dc.w	color+2,$a70
bar_top:
f:	set	$2d
c:	set	$FFF
	rept	15
	dc.b	f,01,$ff,00
	dc.w	color,c
f:	set	f+6
c:	set	c-$111
	endr
	
	dc.w 	$ab01,$ff00		mirror gfx
	dc.w 	BPL1MOD,-80		bp modulo odd
	dc.w 	BPL2MOD,-80		bp modulo even
bar_bot:
	dc.w	$d001,$ff00
	dc.w	color,$FFF
	dc.w	$d601,$ff00
	dc.w	color,$EEE
	dc.w	$dc01,$ff00
	dc.w	color,$ddd
	dc.w	$e201,$ff00
	dc.w	color,$ccc
	dc.w	$e801,$ff00
	dc.w	color,$bbb
	dc.w	$ee01,$ff00
	dc.w	color,$aaa
	dc.w	$f401,$ff00
	dc.w	color,$999
	dc.w	$fa01,$ff00
	dc.w	color,$888
bar_mid1:
	dc.w 	$ffe1,$fffe		end ntsc
bar_mid2:
	dc.w	$0101,$ff00
	dc.w	color,$777
	dc.w	$0701,$ff00
	dc.w	color,$666
	dc.w	$0d01,$ff00
	dc.w	color,$555
	dc.w	$1301,$ff00
	dc.w	color,$444
	dc.w	$1901,$ff00
	dc.w	color,$333
	dc.w	$1f01,$ff00
	dc.w	color,$222
bar_bottom:
	dc.w	$2501,$ff00		
	dc.w	color,$111

	dc.w	$2b01,$ff00
	dc.w	color,0
	dc.w 	$2c01,$ff00		end gfx 
	dc.w 	BPLCON0,$0200
	dc.w 	COLOR,$428		colour reg 0 (background) 
	dc.w 	$2d01,$ff00		end pal
	dc.w 	INTREQ,$8010		strobe for interupt
	dc.w 	$ffff,$fffe		end copper
;*-------------------------------------------------------------------------------*
;this is  copper list 3 consult hw ref manual for explanation of copper cmds
;*-------------------------------------------------------------------------------*
cycle_copper
	dc.w BPLCON0,$0200		0 bp - lores bitplane control reg 0
	dc.w BPLCON2,$a			bp ctrl reg
	dc.w BPL1MOD,120		bp modulo odd
	dc.w BPL2MOD,120		bp modulo even
	dc.w COLOR,0			colour reg 0 (background) 

	dc.w BPLCON1,$0			this is the bitplane contol register 1
;					see hardware ref for details.

cyclesprite:	
	dc.w SPRPT,0			this tells sprite 0 where to look
	dc.w SPRPT+2,0			for it's graphic and pos data set by
;					the code higher up
	
	dc.w DDFSTRT,$38		start of display horiz
	dc.w DDFSTOP,$d0		stop of display horiz
	dc.w DIWSTRT,$2c81		visible window top left
	dc.w DIWSTOP,$2cc1		visible window bottom right

; this loads the pointers that tell custom chips where in mem you bps are
; the section near start of code fill in the addresses after
cycleplanes
	dc.w BPLPT,0
	dc.w BPLPT+2,0
	dc.w BPLPT+4,0
	dc.w BPLPT+6,0
	dc.w BPLPT+8,0
	dc.w BPLPT+10,0
	dc.w BPLPT+12,0
	dc.w BPLPT+14,0
	dc.w BPLPT+16,0
	dc.w BPLPT+18,0
		
	dc.w $2b01,$ff00
cycleList:
c:	set COLOR
	rept 32
	dc.w c,0
c:	set c+2
	endr
listend:
	
	dc.w $2c01,$ff00		start gfx

	dc.w BPLCON0,$4200
	
	dc.w $ac01,$ff00
	dc.w BPL1MOD,-200		bp modulo odd
	dc.w BPL2MOD,-200		bp modulo even

	dc.w $ffe1,$fffe		end ntsc

	dc.w $2c01,$ff00		end gfx
	dc.w BPLCON0,$0200

	dc.w $2d01,$ff00		end pal
	dc.w INTREQ,$8010			strobe for interupt
	
	dc.w $ffff,$fffe		end copper

;*-------------------------------------------------------------------------------*
;intro copper list consult hw ref manual for explanation of copper cmds
;*-------------------------------------------------------------------------------*
intro_copper
	dc.w BPLCON0,$0200		0 bp - lores bitplane control reg 0
	dc.w BPLCON2,$4a			bp ctrl reg
moddulo:
	dc.w BPL1MOD,160		bp modulo odd
	dc.w BPL2MOD,160		bp modulo even
	dc.w COLOR,0			colour reg 0 (background) 

	dc.w BPLCON1,$0			this is the bitplane contol register 1
;					see hardware ref for details.

intro_sprite:	
	dc.w SPRPT,0			this tells sprite 0 where to look
	dc.w SPRPT+2,0			for it's graphic and pos data set by
;					the code higher up
	
	dc.w DDFSTRT,$38		start of display horiz
	dc.w DDFSTOP,$d0		stop of display horiz
	dc.w DIWSTRT,$2c81		visible window top left
	dc.w DIWSTOP,$2cc1		visible window bottom right

; this loads the pointers that tell custom chips where in mem you bps are
; the section near start of code fill in the addresses after
intro_planes
	dc.w BPLPT,0
	dc.w BPLPT+2,0
	dc.w BPLPT+4,0
	dc.w BPLPT+6,0
	dc.w BPLPT+8,0
	dc.w BPLPT+10,0
	dc.w BPLPT+12,0
	dc.w BPLPT+14,0
	dc.w BPLPT+16,0
	dc.w BPLPT+18,0
		
	dc.w $2b01,$ff00

intro_List:
c:	set COLOR
	rept 32
	dc.w c,0
c:	set c+2
	endr

	
	dc.w $2c01,$ff00		start gfx
plane_start:
	dc.w BPLCON0,$5200
	dc.w $f401,$ff00
	dc.w BPLCON0,$0200

	dc.w $ffe1,$fffe		end ntsc

	dc.w $2c01,$ff00		end gfx

	dc.w INTREQ,$8010		strobe for interupt
	
	dc.w $ffff,$fffe		end copper
;*-------------------------------------------------------------------------------*
;                                DATA SECTION
;*-------------------------------------------------------------------------------*
	section spritedata,data_c

dummysprite:
	dc.w 0,0,0,0

ltbk_sprite1:
	dc.b	83,128,8,2

	dc.w $0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001f,$0000,$001f,$0000,$001f,$0000
	dc.w $001f,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$00ff,$0000,$00ff,$0000,$00ff,$0000
	dc.w $00ff,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0007,$0000
	dc.w $0007,$0000,$0007,$0000,$0007,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$07f0,$080c,$0ffe,$0002
	dc.w $0ffe,$0001,$0ffe,$0001,$0f2f,$00b0,$0f17,$0018
	dc.w $0f0f,$0008,$0f07,$0000,$0f07,$0000,$0f07,$0000
	dc.w $0f07,$0000,$0f07,$0000,$0f07,$0000,$0f0f,$0008
	dc.w $0f07,$0008,$0f1e,$0091,$0fff,$0001,$0fff,$0001
	dc.w $0ffe,$0001,$0fff,$0000,$0f17,$0098,$0f03,$0004
	dc.w $0f03,$0000,$0f03,$0000,$0f03,$0000,$0f03,$0000
	dc.w $0f03,$0000,$0f03,$0000,$0f03,$0000,$0f03,$0000
	dc.w $0f07,$0004,$0f03,$0004,$0f0f,$0008,$0f0f,$0090
	dc.w $0fff,$0000,$0ffe,$0001,$0ffe,$0002,$07f8,$0804
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0181,$0242,$03c3,$0004,$03c7,$0000,$03c7,$0008
	dc.w $03cf,$0000,$03cf,$0010,$03df,$0000,$03df,$0020
	dc.w $03fe,$0001,$03fe,$0000,$03fc,$0002,$03fc,$0000
	dc.w $03f8,$0004,$03f8,$0000,$03f0,$0008,$03f0,$0000
	dc.w $03e0,$0010,$03e0,$0010,$03f0,$0000,$03f0,$0008
	dc.w $03f8,$0000,$03f8,$0004,$03fc,$0000,$03fc,$0002
	dc.w $03fe,$0000,$03fe,$0001,$03df,$0020,$03df,$0000
	dc.w $03cf,$0010,$03cf,$0000,$03c7,$0008,$03c7,$0000
	dc.w $03c3,$0004,$03c3,$0000,$03c1,$0002,$03c1,$0000
	dc.w $03c0,$0001,$0180,$0240,$0000,$0000,$0000,$0000
	dc.w $0000,$0000
	dc.w 0,0

ltbk_sprite2:

	dc.b	83,136,8,2
	dc.w $0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$00ff,$0000
	dc.w $00ff,$0000,$00ff,$0000,$00ff,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00ff,$0000
	dc.w $00ff,$0000,$00ff,$0000,$00ff,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00f0,$0000
	dc.w $00f0,$0000,$00f0,$0000,$00f0,$0000,$00f0,$0000
	dc.w $00f0,$0000,$fcff,$0000,$fcff,$0000,$fcff,$0000
	dc.w $fcff,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$ffc0,$0000,$ffc0,$0000,$ffc0,$0000
	dc.w $ffc0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83ff,$0000,$83ff,$0000,$83ff,$0000
	dc.w $83ff,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$83c0,$0000
	dc.w $83c0,$0000,$83c0,$0000,$83c0,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $00f0,$0090,$00f0,$0000,$80f0,$8000,$81f8,$8108
	dc.w $00f0,$8108,$80f0,$0108,$83fc,$0204,$83fc,$0204
	dc.w $81f8,$0204,$81f8,$0204,$81f8,$0204,$07fe,$8402
	dc.w $87fe,$8402,$07fe,$0402,$039c,$0462,$039c,$0402
	dc.w $039c,$0402,$879e,$8000,$079e,$8000,$cf9f,$4861
	dc.w $8fff,$4801,$cfff,$0801,$c7fe,$0801,$c7fe,$0801
	dc.w $cf0f,$0090,$cf0f,$0000,$cf0f,$0000,$cf0f,$0000
	dc.w $cf0f,$0000,$8f0f,$4000,$cf0f,$4000,$0f0f,$8000
	dc.w $8f0f,$8000,$0f0f,$0000,$0f0f,$0000,$0f0f,$0909
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $c180,$2240,$e3c0,$0000,$c3c0,$2001,$c3c3,$0002
	dc.w $83c1,$4002,$83c3,$0000,$03c7,$8004,$03c7,$0004
	dc.w $03c3,$0004,$03c7,$0000,$03c7,$0000,$03c7,$0000
	dc.w $03c7,$0000,$03c7,$0000,$03c7,$0000,$03c7,$0000
	dc.w $03c7,$0000,$03c7,$0000,$03c7,$0000,$03c7,$0000
	dc.w $03c7,$0000,$03c7,$0000,$03c7,$0000,$03c7,$0000
	dc.w $03c7,$0000,$03c7,$0000,$03c7,$0000,$03c7,$8000
	dc.w $83c7,$0000,$83c3,$4004,$c3c7,$0004,$c3c7,$2004
	dc.w $e3c3,$0000,$e3c1,$1002,$f3c3,$0002,$f3c0,$0001
	dc.w $f3c0,$0000,$6180,$9240,$0000,$0000,$0000,$0000
	dc.w $0000,$0000
	dc.w 0,0

ltbk_sprite3:
	dc.b	83,144,8,2
	dc.w $0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$f3ff,$0000
	dc.w $f3ff,$0000,$f3ff,$0000,$f3ff,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$e01e,$0000
	dc.w $e01e,$0000,$e01e,$0000,$e01e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$001e,$0000,$001e,$0000,$001e,$0000
	dc.w $001e,$0000,$f01e,$0000,$f01e,$0000,$f01e,$0000
	dc.w $f01e,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$f1ff,$0000,$f1ff,$0000,$f1ff,$0000
	dc.w $f1ff,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1ff,$0000,$f1ff,$0000,$f1ff,$0000
	dc.w $f1ff,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1e0,$0000,$f1e0,$0000,$f1e0,$0000
	dc.w $f1e0,$0000,$f1e0,$0000,$f1e0,$0000,$f1ff,$0000
	dc.w $f1ff,$0000,$f1ff,$0000,$f1ff,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$01e0,$0210,$03f8,$0408
	dc.w $07f8,$0804,$0ffe,$0002,$1ffe,$00c0,$1e1e,$2120
	dc.w $3f3e,$0120,$3c1e,$0200,$3e1e,$0200,$3c1e,$0012
	dc.w $3c00,$0000,$3e00,$0200,$3c00,$0200,$3e00,$0100
	dc.w $3fc0,$2040,$0fe0,$1020,$0fe0,$0810,$03f8,$0408
	dc.w $02f8,$0304,$01fc,$0100,$00fe,$0080,$003f,$0041
	dc.w $003e,$0021,$001f,$0000,$000f,$0010,$001f,$0010
	dc.w $000f,$0000,$000f,$0000,$3c1f,$2410,$3c0f,$0010
	dc.w $3c1f,$0000,$3e3e,$0221,$1e3f,$2101,$3ffe,$20c0
	dc.w $1ffe,$0002,$0ff8,$1004,$0ff8,$0808,$03e0,$0410
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $3c03,$4204,$ff07,$8100,$ff07,$0080,$ffc7,$0040
	dc.w $ff87,$1840,$c3e7,$2420,$e7c7,$2420,$81e7,$4200
	dc.w $c3e7,$4200,$c1e7,$4000,$c1e7,$4000,$80c7,$0120
	dc.w $8007,$0000,$8007,$0000,$8007,$0000,$8007,$0000
	dc.w $8007,$0000,$8007,$0000,$8007,$0000,$8007,$0000
	dc.w $8007,$0000,$8007,$0000,$8007,$0000,$8007,$0000
	dc.w $8007,$0000,$8007,$0000,$80c7,$0120,$c1e7,$4000
	dc.w $c1e7,$4000,$c3e7,$4200,$81e7,$4200,$e7c7,$2420
	dc.w $c3e7,$2420,$ff87,$1840,$ffc7,$0040,$ff07,$0080
	dc.w $ff07,$8100,$3c03,$4204,$0000,$0000,$0000,$0000
	dc.w $0000,$0000
	dc.w 0,0

ltbk_sprite4:
	dc.b	83,152,8,2
	dc.w $0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$f000,$0000
	dc.w $f000,$0000,$f000,$0000,$f000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$e000,$0000,$e000,$0000,$e000,$0000
	dc.w $e000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$c000,$0000,$c000,$0000,$c000,$0000
	dc.w $c000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$e000,$0000
	dc.w $e000,$0000,$e000,$0000,$e000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$03c0,$0420,$07f0,$0810
	dc.w $0ff0,$1008,$1ffc,$0004,$3ffc,$0180,$3c3c,$4240
	dc.w $7e7c,$0240,$783c,$0400,$7c3c,$0400,$783c,$0024
	dc.w $7800,$0000,$7c00,$0400,$7800,$0400,$7c00,$0200
	dc.w $7f80,$4080,$1fc0,$2040,$1fc0,$1020,$07f0,$0810
	dc.w $05f0,$0608,$03f8,$0200,$01fc,$0100,$007e,$0082
	dc.w $007c,$0042,$003e,$0000,$001e,$0020,$003e,$0020
	dc.w $001e,$0000,$001e,$0000,$783e,$4820,$781e,$0020
	dc.w $783e,$0000,$7c7c,$0442,$3c7e,$4202,$7ffc,$4180
	dc.w $3ffc,$0004,$1ff0,$2008,$1ff0,$1010,$07c0,$0820
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
	dc.w $0380,$8440,$87c0,$0800,$8f80,$0040,$8f80,$1000
	dc.w $9f00,$0080,$9f00,$2000,$be00,$0100,$be00,$4000
	dc.w $fc00,$0200,$fc00,$0000,$f800,$0400,$f800,$0000
	dc.w $f000,$0800,$f000,$0000,$e000,$1000,$e000,$0000
	dc.w $c000,$2000,$c000,$2000,$e000,$0000,$e000,$1000
	dc.w $f000,$0000,$f000,$0800,$f800,$0000,$f800,$0400
	dc.w $fc00,$0000,$fc00,$0200,$be00,$4000,$be00,$0100
	dc.w $9f00,$2000,$9f00,$0080,$8f80,$1000,$8f80,$0040
	dc.w $87c0,$0800,$87c0,$0020,$83e0,$0400,$83e0,$0000
	dc.w $81e0,$0200,$00c0,$8120,$0000,$0000,$0000,$0000
	dc.w $0000,$0000
	dc.w 0,0





;*-------------------------------------------------------------------------------*
	section musicdata,data_c
	incdir coding:projects/source/retinademo/
mt_data:	
	incbin mod.rave3
	even	
MT_DATA2:
	incbin mod.menu
;*-------------------------------------------------------------------------------*
	section variables,data
	
glib	        dc.b "graphics.library",0
dlib	        dc.b "dos.library",0
	even
greet_ptr	dc.l 0
screenpos	dc.l 0
textpos		dc.l 0
x_ptr		dc.l 0
gfxlib	        dc.l 0
cgfxlib	        dc.l 0
doslib	        dc.l 0
oldcopper	dc.l 0
anim_ptr	dc.l 0
spin_ptr	dc.l 0
back_ptr	dc.l 0
ack_ptr		dc.l 0
scroll_wait	dc.w 1
bass_wait	dc.w 1
textcount	dc.w 10
gfxcount	dc.w 5
gfxcmp		dc.w 5
count		dc.w 10
counts3		dc.w 10
alternator	dc.w 100
countamount	dc.w 6
BEATcount	dc.w 4
acounter	dc.w 4
upordown	dc.w 0
direction	dc.w 0
stselect	dc.w 0
delay		dc.w 1
cytog		dc.w 0	
toggle		dc.w $ffff
scrollcount	dc.w 32
vbl		dc.w 0
spindone		dc.w 0
bored		dc.w 100
intro_counter	dc.w $200
wait		dc.w 5
strobelist	dc.w 	$FFF
		dc.w	$f00
		dc.w	$ff0
		dc.w	$0f0
		dc.w	$0ff
		dc.w	$00f
		dc.w	$f0f

plane_store:
	dc.w BPLCON0,$2600
	dc.w $ffe1,$fffe		end ntsc
	dc.w $2c01,$ff00		end gfx
	dc.w BPLCON0,$0200
	dc.w $2d01,$ff00		end copper

strobecount	dc.b 	6
linecount	dc.b	9		
cycount		dc.b	2
greets:
;		 12345678901234567890
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"THANK YOU FOR",10
	dc.b	"WATCHING OUR LITTLE",10
	dc.b	"RAVE DEMO",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"@ ",10

	dc.b	"This demo is",10
	dc.b	"dedicated to a",10
	dc.b	"scene member who",10
	dc.b	"died this week",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"@ ",10
	dc.b	" ",10
	dc.b	" Master of the",10
	dc.b	" Puppets",10
	dc.b	" Rest in Peace",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"@ ",10
	dc.b	"CREDITS AND GREETS",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"====================",10
	dc.b	"PROGRAMMING",10
	dc.b	"====================",10
	dc.b	10
	dc.b	"*CYLON (DMX)*",10
	dc.b	10,10,10,"@",10
	dc.b	"====================",10
	dc.b	"GRAPHICS",10
	dc.b	"====================",10
	dc.b	"GIG (DMX)",10
	dc.b	"Title picture",10
	dc.b	"Font1",10
	dc.b	"Small still GFX",10
	dc.b	" ",10
	dc.b	"@ ",10
	dc.b	"*CYLON (DMX)*",10
	dc.b	"Back drops",10
	dc.b	"This font lowercase",10
	dc.b	"Animated GFX",10
	dc.b	"Cycle GFX",10
	dc.b	"ZADD (DMX)",10
	dc.b	"This font uppercase",10
	dc.b	" ",10
	dc.b	"@====================",10
	dc.b	"MUSIC",10
	dc.b	"====================",10
	dc.b	10
	dc.b	"ZADD  (DMX) RAVE",10
	dc.b	"ACCEL (DMX) END.",10
	dc.b	10,10
	dc.b	"@====================",10
	dc.b	"UNUSED MUSIC",10
	dc.b	"====================",10
	dc.b	10,10
	dc.b	"THE ASSASSIN (DMX)",10
	dc.b	10,10
	dc.b	"@====================",10
	dc.b	"INSPIRATION AND",10
	dc.b	"MORAL SUPPORT",10
	dc.b	"====================",10
	dc.b	10
	dc.b	"Andy           Jim",10
	dc.b	"Stuart         Lee",10
	dc.b	10
	dc.b	"@====================",10
	dc.b	"THE SHORT GREETINGS",10
	dc.b	"====================",10
	dc.b	"DJ RAZ FUTURE SOUNDS",10
	dc.b	"DISCO KICKIN",10
	dc.b	"ANDY      MICHELLE",10
	dc.b	"JOFF         DARYL",10
	dc.b	"CLAIRE       CHRIS",10
	dc.b	"ROSY          PHIL",10
	dc.b	"LES           EMMA",10
	dc.b	"PAUL          ALAN",10
	dc.b	"LISA         KELLY",10
	dc.b	"SARAH       PHILIP",10
	dc.b	"VICKY         ALAN",10
	dc.b	"KEVIN       JOSHUA",10
	dc.b	" ",10
	incbin	greets.i
	dc.b	" ",10
	dc.b	"====================",10
	dc.b	"ADDRESSES FOLLOW",10
	dc.b	"====================",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	"Cylon               ",10
	dc.b	"@46 Willingham Road ",10
	dc.b	"@Knaith Park        ",10
	dc.b	"@Lincs              ",10
	dc.b	"@DN21 5ES           ",10
	dc.b	"@ ",10
	dc.b	"Zadd                ",10
	dc.b	"(Deadlock Arts)     ",10
	dc.b	"@31 Coroners Lane   ",10
	dc.b	"@Farnsworth         ",10
	dc.b	"@Widnes             ",10
	dc.b	"@Cheshire           ",10
	dc.b	"@WA8 9JN            ",10
	dc.b	"@ ",10
	dc.b	"Mint sauce          ",10
	dc.b	"(Deadlock Arts)     ",10
	dc.b	"@46 Churncote       ",10
	dc.b	"@Stirchley          ",10
	dc.b	"@Telford            ",10
	dc.b	"@Shropshire         ",10
	dc.b	"@TF3 1YL            ",10
	dc.b	"@ ",10
	dc.b	"R9 Sorry I couldn't ",10
	dc.b	"find your addr.     ",10
	dc.b	" ",10
	dc.b	"====================",10
	dc.b	"THE BORING WAFFLE",10
	dc.b	" ",10
	dc.b	"Stu sorry no logo",10
	dc.b	"my brain stalled at",10
	dc.b	"the last minute",10
	dc.b	"@ ",10
	dc.b	"Minty it's all going",10
	dc.b	"in AR4 matey 50 quid",10
	dc.b	"and I'll take it out",10
	dc.b	"100 quid and I'll",10
	dc.b	"give you the",10
	dc.b	"negatives and the",10
	dc.b	"sheeps statement.",10
	dc.b	"@ ",10
	dc.b	"Tango OH NO!!!",10
	dc.b	"Sorry for the delay",10
	dc.b	"@ ",10
	dc.b	"Speed a parcel is",10
	dc.b	"comming.",10
	dc.b	" ",10
	dc.b	"Ghost where are you?",10
	dc.b	" ",10
	dc.b	"Rotox giz a call",10
	dc.b	"@ ",10
	dc.b	"mUb now I wonder",10
	dc.b	"when the modem is",10
	dc.b	"comming back HINT",10
	dc.b	"HINT!",10
	dc.b	"@====================",10
	dc.b	" ",10
	dc.b	" ",10

	dc.b	"!text ends!",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10
	dc.b	" ",10

	dc.b 	0
text:
;		 1234567890
	dc.b	"WELCOME",13
	DC.B	"          ",13
	DC.B	"TO RETINA",13
	DC.B	"          ",13
	DC.B	"BURN ONE",13
	DC.B	"          ",13
	DC.B	"BY CYLON",13
	DC.B	"          ",13
	DC.B	"DIMENSION",13
	DC.B	"          ",13
	DC.B	"X",13
	DC.B	"          ",13
	DC.B	"RAVE MUSIC",13
	DC.B	"          ",13
	DC.B	"BY ZADD",13
	DC.B	"          ",13
	DC.B	"NOW",13
	DC.B	"          ",13
	DC.B	"RAVE",13
	DC.B	"          ",13
	DC.B	"ON",13
	DC.B	"          ",13
	DC.B	"THE",13
	DC.B	"          ",13
	DC.B	"EXTASY",13
	DC.B	"          ",13
	DC.B	"OF",13
	DC.B	"          ",13
	DC.B	"DIMENSION",13
	DC.B	"          ",13
	DC.B	"X",13
	DC.B	"          ",13
	DC.B	"SOURCECODE",13
	DC.B	"          ",13
	DC.B	"SIZE",13
	DC.B	"          ",13
	DC.B	"SIXTY FOUR",13
	DC.B	"          ",13
	DC.B	"KILO BYTES",13
	DC.B	"          ",13
	DC.B	"HI ARE YOU",13
	DC.B	"          ",13
	DC.B	"HAPPY GUYZ",13
	DC.B	"          ",13
	DC.B	"I AM DEAD",13
	DC.B	"          ",13
	DC.B	"TIRED I",13
	DC.B	"          ",13
	DC.B	"HAVE BEEN",13
	DC.B	"          ",13
	DC.B	"CODING FOR",13
	DC.B	"          ",13
	DC.B	"EIGHTEEN",13
	DC.B	"          ",13
	DC.B	"HOURS NOW",13
	DC.B	"          ",13
	DC.B	"AND STU",13
	DC.B	"          ",13
	DC.B	"HAS BEEN",13
	DC.B	"          ",13
	DC.B	"ON THE",13
	DC.B	"          ",13
	DC.B	"PHONE FOR",13
	DC.B	"          ",13
	DC.B	"AN HOUR",13
	DC.B	"          ",13
	DC.B	"OR MORE",13
	DC.B	"          ",13
	DC.B	"I NEED",13
	DC.B	"          ",13
	DC.B	"SLEEP",13
	DC.B	"          ",13
	DC.B	"LET ME GO",13
	DC.B	"          ",13
	DC.B	"TO BED ITS",13
	DC.B	"          ",13
	DC.B	"TWO AM",13
	DC.B	"          ",13
	DC.B	"GOOD",13
	DC.B	"          ",13
	DC.B	"NIGHT",13
	DC.B	"ZZZZZZZZZZ",13
	DC.B	"  ",13
	DC.B	"    ",13
	DC.B	"      ",13
	DC.B	"        ",13
	DC.B	"          ",13
	DC.B	0

anim_data:
 	dc.b	1,3,1,3,1,3,1,3,1,3,3,3,8,9,10,11,8,9,10,11,8,9,10,11
	dc.b	12,12,12,4,5,6,7,4,5,6,7,4,5,6,7,2,2,12,12
	dc.b	7,6,5,4,7,6,5,4,7,6,5,4,2,2,13,14,15,16,13,14,15,16
	dc.b	2,2,2,2,2,16,16,16,13,13,13,14,14,14,15,15,15,16,16,16
	dc.b	1,1,3,3,12,12,12,12
	dc.b 	0
an_fin:
spin_data:
	dc.b	4,5,6,7,0	
spin_fin:
	even

black1:
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
black2:
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0
	dc.w 	0,0,0,0

block1:		dc.w 0
tabpos:		dc.w 0
block2:		dc.w 0
collist:
	dc.w $f,$c,$a,7,5,2,0,0,0,0,0,0,0,0,0
	dc.w $f0,$c0,$a0,$70,$50,$20,0,0,0,0,0,0,0,0,0
	dc.w $f00,$c00,$a00,$700,$500,$200,0,0,0,0,0,0,0,0,0
	dc.w $ff0,$cc0,$aa0,$770,$550,$220,0,0,0,0,0,0,0,0,0
	dc.w $ff,$77,$22,0,0,0,0,0,0,0,0,0,0,0,0
	dc.w $ff0,$550,$220,0,0,0,0,0,0,0,0,0,0,0,0
	dc.w $f0f,$707,$505,$202,0,0,9,0,0,0,0,0,0,0,0
	dc.w $fff,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	dc.w $fff,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
coll_finish:
;*-------------------------------------------------------------------------------*

	section screendata,data_c
	even	

TEXT_SCREEN:
	ds.b	40*40
screen:	
	incbin graf1.BIN
	incbin TEKNO.BIN
	incbin graf2.BIN
cog:
	incbin frame.BIN
cogend:
	incbin spin.bin
	incbin dmx.bin
	incbin arrow001.bin
	incbin arrow002.bin
	incbin arrow003.bin
	incbin arrow004.bin
animend:
xxxx:	incbin xxxx001
xxx3:	incbin xxxx002
xxx2:	incbin xxxx003
xxx1:	incbin xxxx004
	
	section screendata2,data_c
	even	
cyclescreen:	incbin halfCYcLepic 
	even
blank:	ds.b	40*18			;16 blank lines
font32:
	incbin oval_font.bin	
font16:
	incbin	testfont.bin	16*32-1456 91 chars
	section screendata3,data_c
	even	
introp:	incbin roundx.bin
introg: equ introp+64	
back_pic:
	incbin xpic.bin
;*-------------------------------------------------------------------------------*
	section nonechipgfx,data

backdr1:	incbin xpic.bin
backdr2:	incbin back2.bin
backdr3:	incbin back3.bin
backdr4:	incbin back4.bin
backdr5:	incbin back5.bin
back_end:

fl1:		incbin flare001
fl2:		incbin flare002
fl3:		incbin flare003
fl4:		incbin flare004
fl5:		incbin flare005
fl_rend:
