; ****************************************
; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
; ** 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				
fontmemory	=4000
MEMF_CHIP	EQU	1<<1		
MEMF_CLEAR	EQU	1<<16		
MEMORY	EQU	MEMF_CHIP+MEMF_CLEAR	;allocates chip ram and clears it



TAKEOVER:
	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,D1
	MOVE.W	D1,BP2LO+2
	SWAP	D1
	MOVE.W	D1,BP2HI+2
	
	MOVE.L	#PLAY2,D1
	ADD.L	#10240,D1
	MOVE.W	D1,BP4LO+2
	SWAP	D1
	MOVE.W	D1,BP4HI+2
	
	MOVE.L	#PLAY2,D1
	ADD.L	#10240*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	bounce2
	bsr	testscroll
;	bsr	bounce
;	bsr	testscroll2
	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	d1,a1
	MOVE.L	#2,D2
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	#36,bltdmod(a5)		 	Modulo (20-1)*2
	move.w	#$9f0,bltcon0(a5)	 	Minterms D=A
	clr.w	bltcon1(a5)			 	Set Ascending mode
 	move.w	#32*64+2,bltsize(a5) 	Blit size (SIZE OF FONT)
	ADD.L	#10000,A0
	ADD.L	#40*200,A1
	DBF		D2,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	#32*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
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	#36,bltdmod(a5)		 	
	move.w	#$9f0,bltcon0(a5)	 	
	clr.w	bltcon1(a5)			 	
 	move.w	#32*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	#32*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:
	move.l	acurent,a2				
	clr.l	d1						
	move.b	(a2)+,d1				
	move.b	d1,letter				
	cmp.b	#255,d1					
	beq.w	rst_text				
	cmp.b	#254,d1
	beq		stop
	sub.l	#32,d1					
	asl		d1						
	asl		d1
	SUB.L	#12,D1
	move.l	a2,acurent				
;	CMP.B	#"4",letter			
;	BPL.s	add_more
	rts								
add_more:
	CMP.B	#"H",letter			
	BPL.S	add_more3
	add.l	#40*15,d1				
	rts
add_more3:					
	add.l	#40*30,d1				
	rts
rst_text:
	move.l	#0,d1
	move.l	#message,d2			
	move.l	d2,acurent				
	rts								
stop:
	move.l	#0,d1
	add.l	#1,acurent
	move.l	#150,stopper
	rts


; ** MESSAGE NUMBER ONE **
Acurent:
	DC.L	message
message:
	DC.B	"ABCDEFGHIJK"
	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
	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	"WOW !!!  THIZ IS SCROLLER NUMBER 2 ",254," AND ITS COOOOOL... ",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:
		dc.w	$120,0
		dc.w	$122,0
		dc.w	bpl1mod,-2,bpl2mod,-2
		dc.w	diwstrt,$2c81+16,diwstop,$2cc1-16
		dc.w	bplcon0,$6600,bplcon1,$0000
		dc.w	ddfstrt,$30,ddfstop,$d0
		dc.w	color01,$000
		dc.w	color08,$000,color09,$f00,color10,$0f0,color11,$fff
		dc.w	color12,$eaf,color13,$145,color14,$a00,color15,$eee
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
		dc.w	color01,$eee
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
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,$eee,color02,$dde
		DC.W	color03,$bbd
		DC.W	color04,$aac
		DC.W	color05,$88c
		DC.W	color06,$77b
		DC.W	color07,$65a
		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


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







	
	







	








	
	















