; **************************************
; * INTRO NUMBER 5 (C) 1990 CRYPTIC    *
; * CODED BY: TANGO                    *
; * MUSIC BY: COUNT                    *
; **************************************

	opt c-
	section blitter,code_c			Chip Ram please !!
	include	df1:definitions			Give me some hardware reggies
	include	df1:macros				Give me some macros
	
		
;LOCAL CONSTANTS

icra		equ $bfed01				
;allocmem 	=-30-168				
;freemem 	=-30-180				


TAKEOVER:

	Move.l	#Blank,D1
	Move.w	D1,Blank1l+2
	Move.w	D1,Blank2l+2
	Move.w	D1,Blank3l+2
	Swap	D1
	Move.w	d1,Blank1h+2
	Move.w	d1,Blank2h+2
	Move.w	d1,Blank3h+2
	
	LEA custom,a5		
	LEA GFXLIB(PC),a1			 Point to 'graphics.library'
	MOVEQ #0,D0					 Doesn't matter which version
 	MOVE.L 4.w,a6				 EXECBASE
	jsr	-132(a6)				 task switching off (forbid)
 	JSR -$228(a6) 				 Openlibrary
 	MOVE.L D0,GFXBASE			 Store library address
	jsr	cyb_init
		
;Now put the graphic addresses in the CopperList 		

 	move.l	screenx,d1			Bitplane memory address
	move.w	d1,bp1lo+2			for scroll 1.
 	swap	d1
 	move.w	d1,bp1hi+2

 	move.l	screenx,d1			Bitplane memory address
	ADD.L	#10000,D1
	move.w	d1,bp3lo+2			for scroll 1.
 	swap	d1
 	move.w	d1,bp3hi+2

 	move.l	screenx,d1			Bitplane memory address
	ADD.L	#10000*2,D1
	move.w	d1,bp5lo+2			for scroll 1.
 	swap	d1
 	move.w	d1,bp5hi+2

 	move.l	screeny,d1			Bitplane memory address
	move.w	d1,abp1lo+2			for scroll 2.
 	swap	d1
 	move.w	d1,abp1hi+2

	move.l	screeny,d1			Bitplane memory address
	ADD.L	#10000,D1
	move.w	d1,abp3lo+2			for scroll 2.
 	swap	d1
 	move.w	d1,abp3hi+2

	move.l	screeny,d1			Bitplane memory address
	ADD.L	#10000*2,D1
	move.w	d1,abp5lo+2			for scroll 2.
 	swap	d1
 	move.w	d1,abp5hi+2


; ** SET UP EVEN BITPLANES 2,4,6 **

	MOVE.L	#PLAY2+18*44-2,D1
	MOVE.W	D1,BP2LO+2
	SWAP	D1
	MOVE.W	D1,BP2HI+2
	
	MOVE.L	#PLAY2+18*44-2,D1
	ADD.L	#44*290,D1
	MOVE.W	D1,BP4LO+2
	SWAP	D1
	MOVE.W	D1,BP4HI+2
	
	MOVE.L	#PLAY2+18*44-2,D1
	ADD.L	#44*290*2,D1
	MOVE.W	D1,BP6LO+2
	SWAP	D1
	MOVE.W	D1,BP6HI+2
	
 	move.l GFXBASE,d0			Move gfxbase offset to d0
 	MOVE.L D0,A6				
 	MOVE.W #$80,dmacon(a5)		Turn off copper whilst changing it
 	MOVE.L $32(A6),WBCOPPER	 	Store old (WBench) copper address
 	MOVE.L #OURCOPPER,$32(A6)	Point to new copper list (our own)
 	MOVE.W #$8080,dmacon(a5)    Re-enable copper
 	MOVE.W #$8010,intena(a5)		
 	MOVE.L $6c,old				Save work bench interrupt
 	MOVE.L #LEV3,$6c			Point to were to set up interrupt
	move.w	intenar(a5),systemints
	move.b	#%01111111,icra		Kill keyboard.
		
WAIT: 	
	BTST #6,$BFE001				This waits for the left
 	BNE.S	WAIT				mouse button to be pressed
	move.l	4.w,a6				EXECBASE
 	MOVE.L old,$6c				Restore system interrupts
	MOVE.L GFXBASE,A6
 	MOVE.W #$80,dmacon(a5)		Disable DMA
 	MOVE.L WBCOPPER,$32(A6)		Restore old copperlist
 	MOVE.W #$8080,dmacon(a5)	Enable DMA
 	move.w	systemints,d0		Systems interrupt
 	or.w	#$c000,d0
 	move.w	d0,intena(a5)		Enable OS interrupts
 	move.b	#%10011011,icra		Enable keyboard
	clr.w	$dff0a8				Clear music
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts


ERROR:	
	move.l 4.w,a6				Get EXECBASE
	jsr	-138(a6)				Permit ( multi-tasking on )
	moveq	#0,d0				Clear d0
 	RTS							Return to AmigaDOS


;This is the NEW level 3 interrupt

LEV3:
 	Save_all					Save all registers to the stack
	lea	custom,a5
	AND #$10,intreqr(a5)       	Check if interrupt is from Copper 
	BNE out
	move.w	#$8010,$9c			Cause Copper interrupt								

; ** Main Routines called every VBI **

	bsr	testscroll
	bsr	testscroll2
	bsr	bounce2
	bsr	bounce
	jsr	cyb_music
			
out: 	
	Return_all
	DC.W $4ef9					hex value for  JMP instruction
old: 	
	DC.L 0						will jump to normal interrupt


; ** THE SCROLL ROUTINE **

testscroll:
	tst.l	stopper
	beq.s	scroll
	sub.l	#1,stopper
	rts
scroll:
	cmp.l	#30,val					Blitshifted all <<<
	blo.s	coarse_scroll_it		No then get doing it !!
	bsr		blit_char				Blit letter to screen
	clr.l	val						Reset index
coarse_scroll_it:
	bsr		coarse					Scroll all line
	rts							

testscroll2:
	tst.l	stopper2				Test for pause.
	beq.s	scroll2
	sub.l	#1,stopper2
	rts
scroll2:
	cmp.l	#30,val2				Blitshifted all <<<
	blo.s	coarse_scroll_it2		No then get doing it blitter man !!
	bsr		blit_char2				Blit letter to screen
	clr.l	val2					Reset index
coarse_scroll_it2:
	bsr		coarse2					Scroll all line
	rts							

	
; ** BLIT LETTER ON THE SCREEN **

blit_char
	jsr		text
	lea		custom,a5				Get custom chip address
	move.l	screenx,a0			 	The screen on which scrolly is.
	move.l	#font,a1			 	Put font in blitter source
	add.l	d2,a1
	MOVE.L	#2,D1
	Sub.l	#4,A0
blit_test:
	btst	#14,$dff002			 	Blitter busy !!!
	bne	blit_test				 	Lets wait till she finishes !
	move.w	#$ffff,bltafwm(a5)		Mask 
	move.w	#$ffff,bltalwm(a5)		Mask 
	move.l	a0,bltdpth(a5)		 	Blitter dest D (BOTTOM OF SCREEN)
	move.l	a1,bltapth(a5)		 	Blitter source A (SCROLLING FONT)
	move.w	#36,bltamod(a5)		 	Modulo (20-1)*2
	move.w	#44,bltdmod(a5)		 	Modulo (20-1)*2
	move.w	#$9f0,bltcon0(a5)	 	Minterms D=A
	clr.w	bltcon1(a5)			 	Set Ascending mode
 	move.w	#34*64+2,bltsize(a5) 	Blit size (SIZE OF FONT)
	ADD.L	#10000,A0
	ADD.L	#40*200,A1
	DBF		D1,BLIT_TEST
	rts							  	Return


; ** BLITSHIFT THE ENTIRE SCROLL LINE **
;
;	 FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.

coarse:
	lea		custom,a5			 	
	move.l	screenx,a0				
	move.l	a0,a1
	add.l	#2,a1
	move.l	#2,d1
	move	#12,d2				
	incl	#4,val					
	ror		#4,d2					; Set to correct bits (12-15)
	or.w	#$09f0,d2
blit_wait:
	btst	#14,$dff002			
	bne		blit_wait
	move.l	#-1,bltafwm(a5)
	move.l	a1,bltapth(a5)
	move.l	a0,bltdpth(a5)
	move.w	#0,bltamod(a5)
	move.w	#0,bltdmod(a5)
	move.w	d2,bltcon0(a5)	
	move.w	#34*64+20,bltsize(a5)
	add.l	#10000,a0
	add.l	#10000,a1
	dbf		d1,blit_wait
	rts	



; ** SCROLL NUMBER TWO **
;
; DOCUMENTED IN SCROLL NUMBER ONE.

blit_char2:
	jsr		text2
	lea		custom,a5				
	move.l	screeny,a0			 	
	move.l	#font,a1			 	
	add.l	d2,a1
	MOVE.L	#2,D6
	Sub.l	#4,A0

blit_test2:
	btst	#14,$dff002			 	
	bne	blit_test2				 	
	move.w	#$ffff,bltafwm(a5)		
	move.w	#$ffff,bltalwm(a5)		
	move.l	a0,bltdpth(a5)		 	
	move.l	a1,bltapth(a5)		 	
	move.w	#36,bltamod(a5)		 	
	move.w	#44,bltdmod(a5)		 	
	move.w	#$9f0,bltcon0(a5)	 	
	clr.w	bltcon1(a5)			 	
 	move.w	#34*64+2,bltsize(a5) 	
	ADD.L	#10000,A0
	ADD.L	#40*200,A1
	DBF		D6,BLIT_TEST2
	rts							  	

coarse2:
	lea		custom,a5			 	
	move.l	screeny,a0				
	move.l	a0,a1
	add.l	#2,a1
	move.l	#2,d4
	incl	#4,val2					
	move	#12,d7				
	ror		#4,d7					
	or		#%100111110000,d7		
blit_wait2:
	btst	#14,$dff002			
	bne		blit_wait2
	move.l	#-1,bltafwm(a5)
	move.l	a1,bltapth(a5)
	move.l	a0,bltdpth(a5)
	move.w	#0,bltamod(a5)
	move.w	#0,bltdmod(a5)
	move.w	d7,bltcon0(a5)	
	move.w	#34*64+20,bltsize(a5)
	add.l	#10000,a0
	add.l	#10000,a1
	dbf		d4,blit_wait2
	rts
	



; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
;
;	 ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
;			 : DELTAY-WAIT COMMAND IN COPPERLIST.
;	 FUNCTION: BOUNCE THE SCROLLY MESSAGE.

bounce:
	cmp.l	#66,ycord
	beq.s	up
	add.l	#1,ycord
	sub.b	#1,deltay
	rts
up: cmp.l	#66,ycordminus
	beq.s	rst_cord
	add.l	#1,ycordminus
	add.b	#1,deltay
	rts
rst_cord:
	clr.l	ycord
	clr.l	ycordminus
	rts
	
	even


; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
;
;	 ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
;			 : DELTAY2-WAIT COMMAND IN COPPERLIST.
;	 FUNCTION: BOUNCE THE SCROLLY MESSAGE.

bounce2:
	cmp.l	#66,ycord2
	beq.s	up2
	add.l	#1,ycord2
	add.b	#1,deltay2
	rts
up2:cmp.l	#66,ycordminus2
	beq.s	rst_cord2
	add.l	#1,ycordminus2
	sub.b	#1,deltay2
	rts
rst_cord2:
	clr.l	ycord2
	clr.l	ycordminus2
	rts
	
	even


; ** CHARACTER DECODER ROUTINE **

;    CHARACTER BASE ADDRESS RETURNED IN D2
;	 JUST ADD THIS TO YOUR FONT ADDREES.

text:
	Clr.l	d1
	move.l	acurent,a2
	move.b	(A2),d1
	cmp.b	#254,d1
	beq.s	stop_scroll
	Cmp.b	#255,d1
	bne		over
	Move.l	#Texter,a2
	MOVE.L	#TEXTER,ACURENT
	Move.b	(a2),d1
Over
	Add.l	#1,Acurent
	Lea		Char,a1
	Sub.l	#32,d1
	Add.l	d1,d1
	Clr.l	d2
	Move.w	(a1,d1),d2				; CHAR BASE ADDRESS IN D2.
	Rts
stop_scroll:
	move.l	#5136,d2				; Blank letter.
	add.l	#1,acurent
	move.l	#150,stopper
	rts


; ** CHARACTER OFFSETS TO FONT **
	even
Char:
	dc.w	5136,3864,0,0,0,0,0,5132,3868,3872,0,0
	dc.w	5128,3876,5124,0,3860,2584,2588,2592,2596,3840
	dc.w	3844,3848,3852,3856,0,0,0,0,0,5120,0
	dc.w	0,4,8,12,16,20,24,28,32,36,1280,1284,1288,1292,1296
	dc.w	1300,1304,1308,1312,1316,2560,2564,2568,2572,2576,2580
	dc.w	0,0,0
	even


; ** MESSAGE NUMBER ONE **

; 254=STOP_SCROLL
; 255=WRAP AROUND

Acurent:
	DC.L	Texter
Texter:
	DC.B	"    TANGO  ",254
	DC.B	" HELLO RAY    THIS IS THE DUAL SCROLLER  AND I KNOW THERE'S SOMERT MISSING    THE STARS AND THE ROTATION BIT"
	DC.B	" WHEN I'VE SUSSED IT OUT PROPERLY THEY WILL BE IN."
	DC.B	"   I KNOW THAT THIS CODE IS LONG BUT ITS FULL OF BLANK SPACES SO IT WILL EASILY CRUNCH TO 70K"
	DC.B	"  I NEEDED THE BLANK SCREENS SO AS TO NOT GET ANY CRAP AT THE TOPE AND BOTTOM OF THE SCREEN DUE TO THE FACT OF MOVING THE SCROLLERS UP AND DOWN"
	DC.B	"  THE PICTURE IN THE BACKGROUND CAN BE 8 COLOURS AND THE SIZE IS IN OVERSCAN OR 352 X 290 BYTES"
	DC.B	"   IS THE ENLARGING ON THE FONT OK ????     ASK KODAK IF HE HAS ANY ALGORITHMS ON STARFIELDS OR VECTORS     SEE YA SOON RAY        WRAP"
	DC.B	255
	even
 

text2:
	Clr.l	d1
	move.l	acurent2,a2
	move.b	(A2),d1
	cmp.b	#254,d1
	beq		pause_scroll
	Cmp.b	#255,d1
	bne		over2
	Move.l	#Texter2,a2
	MOVE.L	#TEXTER2,ACURENT2		; RESET TO BEGINING OF MESSAGE.
	Move.b	(a2),d1
Over2:
	Add.l	#1,Acurent2
	Lea		Char,a1
	Sub.l	#32,d1
	Add.l	d1,d1
	Clr.l	d2
	Move.w	(a1,d1),d2				; CHAR BASE ADDRESS IN D2.
	rts
pause_scroll:
	move.l	#5136,d2
	add.l	#1,acurent2
	move.l	#150,stopper2
	rts


; ** MESSAGE NUMBER TWO **
	even
Acurent2
	Dc.l	Texter2
Texter2:
	DC.B	" THIS IS SCROLLER NUMBER 2 AND I CAN'T BE BOTHERED TO DO ANY SCROLLTEXT...            ",255
	even


;				**********************************************
;				** THE MUZAX PLAY ROUTINE FOR NOISE TRACKER ** 
;				  ******************************************


MUZAX:

	jsr	CYB_init

end:	rts
CYB_init:lea	CYB_data,a0
	add.l	#$03b8,a0
	moveq	#$7f,d0
	moveq	#0,d1
CYB_init1:
	move.l	d1,d2
	subq.w	#1,d0
CYB_init2:
	move.b	(a0)+,d1
	cmp.b	d2,d1
	bgt.s	CYB_init1
	dbf	d0,CYB_init2
	addq.b	#1,d2
CYB_init3:
	lea	CYB_data,a0
	lea	CYB_sample1(pc),a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	#$438,d2
	add.l	a0,d2
	moveq	#$1e,d0
CYB_init4:
	move.l	d2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,d2
	add.l	#$1e,a0
	dbf	d0,CYB_init4
	lea	CYB_sample1(PC),a0
	moveq	#0,d0
CYB_clear:
	move.l	(a0,d0.w),a1
	clr.l	(a1)
	addq.w	#4,d0
	cmp.w	#$7c,d0
	bne.s	CYB_clear
	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.l	CYB_partnrplay
	clr.l	CYB_partnote
	clr.l	CYB_partpoint
	move.b	CYB_data+$3b6,CYB_maxpart+1
	rts
	rts
CYB_music:
	addq.w	#1,CYB_counter
CYB_cool:cmp.w	#6,CYB_counter
	bne.s	CYB_notsix
	clr.w	CYB_counter
	bra	CYB_rout2
CYB_notsix:
	lea	CYB_aud1temp(PC),a6
	tst.b	3(a6)
	beq.s	CYB_arp1
	lea	$dff0a0,a5		
	bsr.s	CYB_arprout
CYB_arp1:lea	CYB_aud2temp(PC),a6
	tst.b	3(a6)
	beq.s	CYB_arp2
	lea	$dff0b0,a5
	bsr.s	CYB_arprout
CYB_arp2:lea	CYB_aud3temp(PC),a6
	tst.b	3(a6)
	beq.s	CYB_arp3
	lea	$dff0c0,a5
	bsr.s	CYB_arprout
CYB_arp3:lea	CYB_aud4temp(PC),a6
	tst.b	3(a6)
	beq.s	CYB_arp4
	lea	$dff0d0,a5
	bra.s	CYB_arprout
CYB_arp4:	rts
CYB_arprout:
	move.b	2(a6),d0
	and.b	#$0f,d0
	tst.b	d0
	beq	CYB_arpegrt
	cmp.b	#$01,d0
	beq.s	CYB_portup
	cmp.b	#$02,d0
	beq.s	CYB_portdwn
	cmp.b	#$0a,d0
	beq.s	CYB_volslide
	rts
CYB_portup:
	moveq	#0,d0
	move.b	3(a6),d0
	sub.w	d0,22(a6)
	cmp.w	#$71,22(a6)
	bpl.s	CYB_ok1
	move.w	#$71,22(a6)
CYB_ok1:	move.w	22(a6),6(a5)
	rts
CYB_portdwn:
	moveq	#0,d0
	move.b	3(a6),d0
	add.w	d0,22(a6)
	cmp.w	#$538,22(a6)
	bmi.s	CYB_ok2
	move.w	#$538,22(a6)
CYB_ok2:	move.w	22(a6),6(a5)
	rts
CYB_volslide:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	CYB_voldwn
	add.w	d0,18(a6)
	cmp.w	#64,18(a6)
	bmi.s	CYB_ok3
	move.w	#64,18(a6)
CYB_ok3:	move.w	18(a6),8(a5)
	rts
CYB_voldwn:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	sub.w	d0,18(a6)
	bpl.s	CYB_ok4
	clr.w	18(a6)
CYB_ok4:	move.w	18(a6),8(a5)
	rts
CYB_arpegrt:
	move.w	CYB_counter(PC),d0
	cmp.w	#1,d0
	beq.s	CYB_loop2
	cmp.w	#2,d0
	beq.s	CYB_loop3
	cmp.w	#3,d0
	beq.s	CYB_loop4
	cmp.w	#4,d0
	beq.s	CYB_loop2
	cmp.w	#5,d0
	beq.s	CYB_loop3
	rts
CYB_loop2:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	bra.s	CYB_cont
CYB_loop3:
	moveq	#$00,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	bra.s	CYB_cont
CYB_loop4:
	move.w	16(a6),d2
	bra.s	CYB_endpart
CYB_cont:
	add.w	d0,d0
	moveq	#0,d1
	move.w	16(a6),d1
	and.w	#$fff,d1
	lea	CYB_arpeggio(PC),a0
CYB_loop5:
	move.w	(a0,d0),d2
	cmp.w	(a0),d1
	beq.s	CYB_endpart
	addq.l	#2,a0
	bra.s	CYB_loop5
CYB_endpart:
	move.w	d2,6(a5)
	rts
CYB_rout2:
	lea	CYB_data,a0
	move.l	a0,a3
	add.l	#$0c,a3
	move.l	a0,a2
	add.l	#$3b8,a2
	add.l	#$43c,a0
	move.l	CYB_partnrplay(PC),d0
	moveq	#0,d1
	move.b	(a2,d0),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.l	CYB_partnote(PC),d1
	move.l	d1,CYB_partpoint
	clr.w	CYB_dmacon
	lea	$dff0a0,a5
	lea	CYB_aud1temp(PC),a6
	bsr	CYB_playit
	lea	$dff0b0,a5
	lea	CYB_aud2temp(PC),a6
	bsr	CYB_playit
	lea	$dff0c0,a5
	lea	CYB_aud3temp(PC),a6
	bsr	CYB_playit
	lea	$dff0d0,a5
	lea	CYB_aud4temp(PC),a6
	bsr	CYB_playit
	move.w	#$01f4,d0
CYB_rls:	dbf	d0,CYB_rls
	move.w	#$8000,d0
	or.w	CYB_dmacon,d0
	move.w	d0,$dff096
	lea	CYB_aud4temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	CYB_voice3
	move.l	10(a6),$dff0d0
	move.w	#1,$dff0d4
CYB_voice3:
	
	lea	CYB_aud3temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	CYB_voice2
	move.w	#1,$dff0c4
CYB_voice2:
	
	lea	CYB_aud2temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	CYB_voice1
	move.l	10(a6),$dff0b0
	move.w	#1,$dff0b4
CYB_voice1:
	lea	CYB_aud1temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	CYB_voice0
	move.l	10(a6),$dff0a0
	move.w	#1,$dff0a4
CYB_voice0:
	move.l	CYB_partnote(PC),d0
	add.l	#$10,d0
	move.l	d0,CYB_partnote
	cmp.l	#$400,d0
	bne.s	CYB_stop
CYB_higher:
	clr.l	CYB_partnote
	addq.l	#1,CYB_partnrplay
	moveq	#0,d0
	move.w	CYB_maxpart(PC),d0
	move.l	CYB_partnrplay(PC),d1
	cmp.l	d0,d1
	bne.s	CYB_stop
	clr.l	CYB_partnrplay
	;st	Pflag
CYB_stop:tst.w	CYB_status
	beq.s	CYB_stop2
	clr.w	CYB_status
	bra.s	CYB_higher
CYB_stop2:
	rts
CYB_playit:
	
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2
	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	CYB_nosamplechange
	moveq	#0,d3
	lea	CYB_samples(PC),a1
	move.l	d2,d4
	asl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2),4(a6)
	move.w	(a3,d4.l),8(a6)
	move.w	2(a3,d4.l),18(a6)
	move.w	4(a3,d4.l),d3
	tst.w	d3
	beq.s	CYB_displace
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,4(a6)
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),8(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
	bra.s	CYB_nosamplechange
CYB_displace:
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
CYB_nosamplechange:
	move.w	(a6),d0
	and.w	#$fff,d0
	tst.w	d0
	beq.s	CYB_retrout
	move.w	(a6),16(a6)
	move.w	20(a6),$dff096
	move.l	4(a6),(a5)
	move.w	8(a6),4(a5)
	move.w	(a6),d0
	and.w	#$fff,d0
	move.w	d0,6(a5)
	move.w	20(a6),d0
	or.w	d0,CYB_dmacon
CYB_retrout:
	tst.w	(a6)
	beq.s	CYB_nonewper
	move.w	(a6),22(a6)
CYB_nonewper:
	move.b	2(a6),d0
	and.b	#$0f,d0
	cmp.b	#$0b,d0
	beq.s	CYB_posjmp
	cmp.b	#$0c,d0
	beq.s	CYB_setvol
	cmp.b	#$0d,d0
	beq.s	CYB_break
	cmp.b	#$0e,d0
	beq.s	CYB_setfil
	cmp.b	#$0f,d0
	beq.s	CYB_setspeed
	rts
CYB_posjmp:
	not.w	CYB_status
	moveq	#0,d0
	move.b	3(a6),d0
	subq.b	#1,d0
	move.l	d0,CYB_partnrplay
	rts
CYB_setvol:
	move.b	3(a6),8(a5)
	rts
CYB_break:
	not.w	CYB_status
	rts
CYB_setfil:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#1,d0
	rol.b	#1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts
CYB_setspeed:
	move.b	3(a6),d0
	and.b	#$0f,d0
	beq.s	CYB_back
	clr.w	CYB_counter
	move.b	d0,CYB_cool+3
CYB_back:	rts
CYB_aud1temp:
	dcb.w	10,0
	dc.w	1
	dcb.w	2,0
CYB_aud2temp:
	dcb.w	10,0
	dc.w	2
	dcb.w	2,0
CYB_aud3temp:
	dcb.w	10,0
	dc.w	4
	dcb.w	2,0
CYB_aud4temp:
	dcb.w	10,0
	dc.w	8
	dcb.w	2,0
CYB_partnote:	dc.l	0
CYB_partnrplay:	dc.l	0
CYB_counter:	dc.w	0
CYB_partpoint:	dc.l	0
CYB_samples:	dc.l	0
CYB_sample1:	dcb.l	31,0
CYB_maxpart:	dc.w	0
CYB_dmacon:	dc.w	0
CYB_status:	dc.w	0
CYB_arpeggio:
	dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
	dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
	dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
	dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
	dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000


			

; ** THE COPPERLIST **
OURCOPPER:
Blank1L	dc.w	bpl1ptl,$0000
Blank1H	dc.w	bpl1pth,$0000
Blank2L	dc.w	bpl3ptl,$0000
Blank2H	dc.w	bpl3pth,$0000
Blank3L	dc.w	bpl5ptl,$0000
Blank3H	dc.w	bpl5pth,$0000
		dc.w	$120,0
		dc.w	$122,0
		dc.w	bpl1mod,4,bpl2mod,0
		dc.w	diwstrt,$2c81-32,diwstop,$2cc1+32
		dc.w	bplcon0,$6600,bplcon1,$0000
		dc.w	ddfstrt,$28,ddfstop,$d0
		dc.w	color01,$000
		dc.w	color08,$F00,color09,$ff0,color10,$ee0,color11,$dd0
		dc.w	color12,$de0,color13,$dc0,color14,$db0,color15,$da0
bp2lo:	dc.w	bpl2ptl,$0000
bp2hi:	dc.w	bpl2pth,$0000
bp4lo:	dc.w	bpl4ptl,$0000
bp4hi:	dc.w	bpl4pth,$0000
bp6lo:	dc.w	bpl6ptl,$0000
bp6hi:	dc.w	bpl6pth,$0000
deltay2:wait	$3909,$fffe
bp1lo:	dc.w	bpl1ptl,$0000
bp1hi:	dc.w	bpl1pth,$0000
bp3lo:	dc.w	bpl3ptl,$0000
bp3hi:	dc.w	bpl3pth,$0000
bp5lo:	dc.w	bpl5ptl,$0000
bp5hi:	dc.w	bpl5pth,$0000
 		DC.W	color01,$eee
 		Dc.w	color02,$dde
		DC.W	color03,$bbd
		DC.W	color04,$aac
		DC.W	color05,$88c
		DC.W	color06,$77b
		DC.W	color07,$65a
		dc.w	color01,$eee
		wait	$5109,$fffe
		dc.w	bpl1mod,-44
		wait	$5209,$fffe
		dc.w	bpl1mod,4
		wait	$5309,$fffe
		dc.w	bpl1mod,-44
		wait	$5409,$fffe
		dc.w	bpl1mod,4
		wait	$5509,$fffe
		dc.w	bpl1mod,-44
		wait	$5609,$fffe
		dc.w	bpl1mod,4
		wait	$5709,$fffe
		dc.w	bpl1mod,-44
		wait	$5809,$fffe
		dc.w	bpl1mod,4
		wait	$5909,$fffe
		dc.w	bpl1mod,-44
		wait	$5a09,$fffe
		dc.w	bpl1mod,4
		wait	$5b09,$fffe
		dc.w	bpl1mod,-44
		wait	$5c09,$fffe
		dc.w	bpl1mod,4
		wait	$5d09,$fffe
		dc.w	bpl1mod,-44
		wait	$5e09,$fffe
		dc.w	bpl1mod,4
		wait	$5f09,$fffe
		dc.w	bpl1mod,-44
		wait	$6009,$fffe
		dc.w	bpl1mod,4
		wait	$6109,$fffe
		dc.w	bpl1mod,-44
		wait	$6209,$fffe
		dc.w	bpl1mod,4
		wait	$6309,$fffe
		dc.w	bpl1mod,-44
		wait	$6409,$fffe
		dc.w	bpl1mod,4
		wait	$6509,$fffe
		dc.w	bpl1mod,-44
		wait	$6609,$fffe
		dc.w	bpl1mod,4
		wait	$6709,$fffe
		dc.w	bpl1mod,-44
		wait	$6809,$fffe
		dc.w	bpl1mod,4
		wait	$6909,$fffe
		dc.w	bpl1mod,-44
		wait	$6a09,$fffe
		dc.w	bpl1mod,4
		wait	$6b09,$fffe
		dc.w	bpl1mod,-44
		wait	$6c09,$fffe
		dc.w	bpl1mod,4
		wait	$6d09,$fffe
		dc.w	bpl1mod,-44
		wait	$6e09,$fffe
		dc.w	bpl1mod,4
		wait	$6f09,$fffe
		dc.w	bpl1mod,-44
		wait	$7009,$fffe
		dc.w	bpl1mod,4
		wait	$7109,$fffe
		dc.w	bpl1mod,-44
		wait	$7209,$fffe
		dc.w	bpl1mod,4
		wait	$7309,$fffe
		dc.w	bpl1mod,-44
		wait	$7409,$fffe
		dc.w	bpl1mod,4
		wait	$7509,$fffe
		dc.w	bpl1mod,-44
		wait	$7609,$fffe
		dc.w	bpl1mod,4
		wait	$7709,$fffe
		dc.w	bpl1mod,-44
		wait	$7809,$fffe
		dc.w	bpl1mod,4
		wait	$7909,$fffe
		dc.w	bpl1mod,-44
		wait	$7a09,$fffe
		dc.w	bpl1mod,4
		wait	$7b09,$fffe
		dc.w	bpl1mod,-44
		wait	$7c09,$fffe
		dc.w	bpl1mod,4
		wait	$7d09,$fffe
		dc.w	bpl1mod,-44
		wait	$7e09,$fffe
		dc.w	bpl1mod,4
		wait	$7f09,$fffe
		dc.w	bpl1mod,-44
		wait	$8009,$fffe
		dc.w	bpl1mod,4

deltay:	wait	$da09,$fffe
abp1lo:	dc.w	bpl1ptl,$0000
abp1hi:	dc.w	bpl1pth,$0000
abp3lo:	dc.w	bpl3ptl,$0000
abp3hi:	dc.w	bpl3pth,$0000
abp5lo:	dc.w	bpl5ptl,$0000
abp5hi:	dc.w	bpl5pth,$0000

		DC.W	color01,$F11
 		Dc.w	color02,$F22
		DC.W	color03,$F33
		DC.W	color04,$F44
		DC.W	color05,$F55
		DC.W	color06,$F66
		DC.W	color07,$F77
		end_copper
		

;LOCAL CONSTANTS

WBCOPPER:		DC.L	0
GFXLIB:			DC.B 	"graphics.library",0
GFXBASE:		DC.L	0
systemints:		dc.l	0
scroll_offset:	dc.l	0
screenx:		dc.l	picture
screeny:		dc.l	picture2
letter:			dc.b	0
letter2:		dc.b	0
val:			dc.l	0
val2:			dc.l	0
stopper:		dc.l	0
stopper2:		dc.l	0
speed:			dc.w	12
ycord:			dc.l	0
ycordminus:		dc.l	0
ycord2:			dc.l	0
ycordminus2:	dc.l	0
XPOS:			DC.L	300
YPOS:			DC.L	200
Blank			Dcb.b	4000,0


;BINARY FILES TO BE INCLUDED
	EVEN
FONTSPACE:
font:	
	incbin	df1:METALCHARS
picture2	
	dcb.b	10000*3,0
picture:
	dcb.b	10000*3,0
PLAY2:
	INCBIN	DF1:PIC.IFF2
cyb_data:
	incbin	df1:mod.count 







	
	







	








