; ****************************************
; ** 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:
	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 **
Acurent:
	DC.L	Texter
Texter:
	DC.B	" TANGO OF CRYPTIC TYPING  QUICK MESSAGE TO R-TYME"
	DC.B	" THE STARFIELD WILL BE IN NEXT TIME (HAVING TROUBLE WITH IT)"
	DC.B	" I DONT KNOW WHAT THE QUADRANT IS FOR IT OR THE COESENT OF DELTA 8 OVER OMEGA ???"
	DC.B	"  OH ANY IDEAS ON THE ROTATION BIT ??? AND DONT SAY LSR !! AND WHAT DO YOU MEAN BY A COMPRESS ROUTINE ON THE SCROLLER ???"
	DC.B	" ALL THE CODE FOR THE SCROLLER THAT KODAK DID HAS BEEN ALL RE-WROTE DUE TO THE FACT THAT WHEN I PUT MUSIC IN IT SLOOOOWED DOWN"
	DC.B	"  ALSO IT WASN'T SET UP IN DUAL PLAYFIELD AND I THOUGHT THE SOURCE CODE WAS A BIT ON THE LONG SIDE."
	DC.B	"  THIS CODE IS NOW 200K BUT WILL CRUNCH TO ABOUT 70K DUE TO THE FACT THERE ARE ALOT OF BLANK SCREENS IN THERE !!!"
	DC.B	"  WELL WRITE SOON OR PHONE AND I'LL SEE YA IN BLACKPOOL (WILDTHING SAYS THAT YOUR PAYING ???? IS IT TRUE !!!) WELL SEE YA RAY"
	DC.B	"        "
	DC.B	"   TANGO     ",254
	DC.B	"  THE COOL GUY OF CRYPTIC WITH THE MORE INTERESTING SCROLL TEXT THAN THAT SHIT ONE AT THE BOTTOM (NO DONT LOOK THERE!!)"
	DC.B	"  I THINK ITS BY WILDTHING (THE OTHER COOL GUY IN CRYPTIC) SO ITS ABOUT TO BE WEIRD AND FULL OF SPILLENG MASTIKES"
	DC.B	"  DONATELLO HAS BEEN BANNED FROM USING THE COOL CAR DUE TO THE FACT HIS DAD HAS BEEN WATCHING THE MILEAGE !!!  THE OTHER DAY WHEN WE HAD BEEN TO BLACKPOOL WE HAD CLOCKED UP"
	DC.B	" 200 MILES !!!  AND IN THE LAST WEEK OR SO WE HAVE CLOCKED UP AROUND 700 MILES !!!"
	DC.B	"   ARE YOU STILL HERE RAY OR HAVE YOU GONE TO THE OTHER BORING SHIT BLITSHIFT SCROLL ???"
	DC.B	"  WILDTHING GO AND FUK YOURSELF AND STOP TELLING ME TO HURRY UP !!!"
	DC.B	"  A MESSAGE TO THE 2 BIRDS IN BOLTON ON SATURDAY WE'D HAVE GIVEN YOU A LIFT IF PROTON WASN'T IN THE BACK (NO ROOM) SEE YA NEXT WEEK FOR A GOOD TALK AND A GOOD ....."
	DC.B	"  MESSAGE TO VIKI YOU TART WILDTHING WANTS HIS PACKET OF MATES BACK HE ONLY USED TWO, BY THE WAY YOU OWE HIM 50 QUID FOR THAT NIGHT !! HE SAYS !!!"
	DC.B	"     WELL I'M GOING NOW TO GO AND DO SOMETHING MORE INTERESTING LIKE A  GOOD .U.K  YOU CAN GO AND READ THAT BORING DIKS SCROLL NOW     GO ON READ IT AND FALL TO SLEEP         SEE YA"
	DC.B	"      WRAPPP                    "
	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	" WILD THING THE KNOB ED WARNING HALF OF THE SHIT IN THIS SCROLL TEXT IS NOT TRUE "
	Dc.b	" WILD THING",254," TYPING YET SOME MORE AMAZYING SCROLL TEXT"
	DC.B	" DID YOU NO THAT IF I BENT OVER I COULD FUCK MY SELF MY DICK IS THAT BIG!!!!!! "
	DC.B	" ASK VIKI SHE WILL TELL YOU I AM GOING TO SEND YOU THE FINISHED BOOT MENU ISTALLER IN THE NEXT FEW DAYS"
	DC.B	" COULD YOU SEND ME DOWN SPIDDYS PHONE NUMBER SO I CAN GIVE HIM SOME SERIOUS BULLSHIT ABOUT WHY THERE HAS BEEN SUCH A BIG DELAY"
	DC.B	" DID YOU NO THAT -3 SQUARED = 9 I DO HA HA CAN I THINK OF ANY MORE BULLSHIT TO TYPE"
	DC.B	" THAT SORCE YOU SENT ME OF THE VECTORS IS NOT KREATORS ITS SOME THING I HAD DONE AGES BACK ONLY KIDDING"
	DC.B	" IS FILM HEAD "
	DC.B	"   KODAK   ",254," THERE YES WELL WHY THE FUCK DID YOU NOT USE DUAL PLAYFIELD FOR THEM TWO SCROLLERS OR DID RAY NOT TELL YOU"
	DC.B	" HE WANTED A PICTURE BEHIND HIM DID YOU NO THAT PROTON WANTS TO GET BEHIND YOU YES HE IS GAY "
	DC.B	" SO HE SAYS NO I BETTER NOT START RYMING CAUSE I WILL GET YOU LOT CRYING BECAUSE IT IS NOT VERY GOOD UNDERSTOOD THERE I AM AT IT AGAIN"
	DC.B	" IS ENT LIFE A BITCH AND THEN YOU MARRY ONE BAD NEWS EH WHATS THE DIFFERENCE BETWEEN MARAGE AND PRISON YOU LIKE THE FOOD IN PRISON"
	DC.B	" THATS ALL FOR NOW NO IT ISNT I AM BLACK WELL I NO THAT I MEAN I AM BACK MESSAGE TO SPIDY RAY INFORMS ME THAT YOU DO MOST COMPS"
	DC.B	" HOW COME I HAVE NOT GOT NONE I AM WELL PISSED OFF YESS YESS YESS HARDER HARDER THOSE WHERE VIKI WORDS WHEN I FUCKED HER BRAINS OUT"
	DC.B	" YES I AM A MENTALY DERANGED BIG DICKED COOL PERSON I THINK"
	DC.B	" WHAT DO YOU THINK OF THE BORRING SCROLL TEXT ABOVE "
	DC.B	" NOW CLICK THAT PUSSY BUTTON AND QUIT THIS SHIT I MEAN COW DUNG I MEAN  FUCK IT PRESS IT OR I WILL",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 







	
	







	








