
*	(C)1990 MIKE CROSS . MARCH/AUGUST 1990

*	EXAMPLE PROGRAM TO SET UP AN INTERUPT

*	SORRY ABOUT THE LAME ROUTINE, I AM LACKING TIME!

*	USE STICK UP/DOWN TO ALTER SPEED AND FIRE TO PAUSE BOUNCE


	
	section	Tina,code_c		* My Girl
	
	
	opt	C-			* Case sensitivity - goodbye!
	
	
	move.w	$dff002,SaveDMA		* Save current DMA settings
	
	move.w	#$0020,$dff096		* Disable sprites (Mouse)
	
	move.l	$4,a6
	jsr	-132(a6)		* Disable()
	
	move.l	$4,a6
	moveq	#0,d0
	lea	GfxName,a1
	jsr	-408(a6)		* OpenLibrary()
	beq	Error
	move.l	d0,GfxBase
	
	lea	$7e000,a0		* Clear some screen memory
	move.w	#2000,d0		
Hussein	move.l	#$0,(a0)+
	dbra	d0,Hussein
	
	jsr	Set_Bar			* Setup the Bar
	
	move.l	#Copper,$dff080		* Insert new Copper list
	clr.w	$dff088			* And strobe it
	
	move.l	$6c,OldInt+2		* Save old interupt
	move.l	#NewInt,$6c		* And insert mine
	jmp	Wait
			
NewInt	movem.l	a0-a6/d0-d7,-(a7)	* Save all registers


	btst	#7,$bfe001		* Fire = Pause
	beq.s	Fbp

	jsr	Down			* Move Bar Down
	
	jsr	Up			* Move Bar Up

	jsr	Check_Stick		* Check State Of Stick
	
Fbp	movem.l	(a7)+,a0-a6/d0-d7	* Bring back registers

OldInt	jmp	$0			* naughty - but nice !
	
Wait	btst	#6,$bfe001	
	beq.s	quit
	bne.s	Wait
	
Quit	move.l	OldInt+2,$6c		
		
	move.l	GfxBase,a0
	move.l	38(a0),$dff080		* Find old copperlist
	
	move.w	SaveDMA,d0		* Restore old DMA
	bset	#$f,d0			* Enable copper DMA
	move.w	d0,$dff096		* Put it back in it`s place		
	
	move.l	$4,a6
	move.l	GfxBase,a1	
	jsr	-414(a6)		* Closelib() - graphics
	
	jsr	-138(a6)		* Enable()
	
	moveq	#0,d0			* Keep CLI happy
Error	rts
	
	
Set_Bar	lea	SPos,a0		* Setup Bar
	lea	Col,a1
	lea	Bar,a2
	
	move.w	#7,d0
Pos1	move.w	(a0)+,(a2)
	add.w	#8,a2
	dbra	d0,Pos1
	
	lea	Bar+6,a2	* Setup Bar colours
	
	move.w	#7,d0
Col1	move.w	(a1)+,(a2)
	add.w	#8,a2
	dbra	d0,Col1
	rts
	
Down	cmpi.w	#1,Flag		* Bounce Bar down
	beq.s	OB1
	
	lea	Bar,a0
	cmpi.w	#$f009,(a0)
	bne.s	BN
	move.w	#1,Flag
	jmp	OB1
BN	move.w	#7,d0
B1	add.w	#$100,(a0)
	add.w	#8,a0
	dbra	d0,B1
OB1	rts
	
	
Up	cmpi.w	#0,Flag			* And back up again
	beq.s	OB2
	
	lea	Bar,a0
	cmpi.w	#$3009,(a0)
	bne.s	BN2
	move.w	#0,Flag
	jmp	OB2
BN2	move.w	#7,d0
B2	sub.w	#$100,(a0)
	add.w	#8,a0
	dbra	d0,B2
OB2	rts
	
Check_Stick

	move.w	$dff00c,d0		* Read Joystick
	move.w	d0,d1
	lsr.w	#1,d1			* Needed for checking up/down
	eor.w	d0,d1
	btst	#0,d1
	bne	Stick_Back
	btst	#8,d1
	bne	Stick_Forward
	rts
		
Stick_Back
	cmpi.w	#0,Flag
	bne.s	Osf2
	
	lea	Bar,a0
	cmpi.w	#$f009,(a0)		* If limit - no more up.
	beq.s	Osf2
	
	move.w	#7,d0
Sfl2	addi.w	#$100,(a0)		* Double `Up' speed
	add.w	#8,a0
	dbra	d0,Sfl2
Osf2	rts
	
Stick_Forward
	cmpi.w	#1,Flag
	bne.s	Osf
	
	lea	Bar,a0
	cmpi.w	#$3009,(a0)
	beq.s	Osf
	
	move.w	#7,d0
Sfl	subi.w	#$100,(a0)
	add.w	#8,a0
	dbra	d0,Sfl
Osf	rts
	
	
	
	
Copper	dc.l	$00e0007e
	dc.l	$00e20000
	dc.l	$008e2c81
	dc.l	$0090f4c1
	dc.l	$009200d0
	dc.l	$00940038
	dc.l	$01001200
	dc.l	$01080000
	dc.l	$010a0000
	dc.l	$01800000
	dc.l	$01820fff
	
Bar	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	dc.w	$0000,$fffe,$0180,$0000
	
	dc.l	$fffffffe		* End Copper list 
	
SPos	dc.w	$3009,$3209,$3409,$3609,$3809,$3a09,$3c09,$3e09
	
Col	dc.w	$0444,$0555,$0666,$0777,$0888,$0999,$0aaa,$0000

Flag	dc.w	0

GfxBase	dc.l	0

SaveDMA	dc.l	0
	
GfxName	dc.b	"graphics.library",0









