*****************************************************************************
*                                                                           *
*  			      Very Fast Bob Routine			    *
*                                                                           *
*  Start Date : 26/2/91                                                     *
* Last Update : 26/2/91                                                     *
* 	          				   Code : Melt Down / Arena *
*                                                                           *
*****************************************************************************

; Include the macros

	Incdir	Df1:
	Include	Source/Macro

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

; Dont forget to use chip ram

	Chip
	
*****************************************************************************

; Kill the operating system for good mesure

	Kill		
	
*****************************************************************************

; Load custom and set up copper list

	Lea	Custom,A5
	Move.l	#Copper,Cop1lch(a5)
	
*****************************************************************************

; Clear Some Mem

	Blitwait
	Move.l	#$70000,Bltdpth(a5)
	Move.l	#-1,Bltafwm(a5)
	Move.w	#0,Bltdmod(a5)
	Move.l	#$01000000,Bltcon0(a5)
	Move.w	#256*64+60,Bltsize(a5)

	Blitwait
	Move.l	#$77a00,Bltdpth(a5)
	Move.l	#-1,Bltafwm(a5)
	Move.w	#0,Bltdmod(a5)
	Move.l	#$01000000,Bltcon0(a5)
	Move.w	#256*64+60,Bltsize(a5)
	
*****************************************************************************

; Just Wait For The Main Man

	Blitwait

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

; Main routine here

Mouse
	Move.l	$dff004,d2
	And.l	#$1ff00,d2	
	Cmp.l	#$100,d2
	Bne.s	Mouse
	Bsr	DBuf
	Bsr	ClearAll
	Bsr	BlitAll
	Tstmice	Mouse				; Pressed the mouse
	
*****************************************************************************

; Return operating system and go back to user

	Heal
	Clr.l	D0				; No error
	Rts
	
*****************************************************************************

DBuf
	Eor.w	#$7a00,ScreenPtr+2
	Eor.w	#$7a00,b1l+2
	Eor.w	#$7a00,b2l+2
	Eor.w	#$7a00,b3l+2
	Rts
	
*****************************************************************************

ClearAll
Clear
	Blitwait				; Blitter Nasty But Why Do
	Move.l	#$01000000,Bltcon0(a5)		; Clear
	Move.w	#$0000,Bltdmod(a5)		; Skip No Bytes
	Move.l	ScreenPtr,A1
	Move.l	a1,Bltdpth(A5)			; Set Dest
	Move.l	#-1,Bltafwm(a5)			; Use All Bits
	Move.w	#108*64+60,Bltsize(a5)		; Fill Half Screen
	Movem.l	a0-a6/d0-d7,-(a7)		; Save The Regs
	Movem.l	RegFiller(pc),a1-a6/d0-d7	; Clear The Regs
	Move.l	ScreenPtr,A0
	Add.l	#25920,A0

	Rept	232
	Movem.l	a1-a6/d0-d7,-(a0)		; Clear 56 Butes
	Endr					; End repeat
	Movem.l	(a7)+,a0-a6/d0-d7		; Restor Regs
	Rts
RegFiller
	Dcb.l	16,0
	Rts

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

BlitAll
	Blitwait
	Move.w	#-2,Bltamod(a5)
	Move.w	#-2,Bltbmod(a5)
	Move.w	#36,Bltcmod(a5)
	Move.w	#36,Bltdmod(a5)
	Move.l	#$ffff0000,Bltafwm(a5)
	Move.l	ScreenPtr,a0
	Lea	Shifts,A1
	Lea	Xsin,A2
	Lea	Ysin,A3
	Move.l	#BobMask,a4
	Lea	Form1,A6
	Move.w	(a6)+,D7
	Move.l	#Bob,d2
	Move.w	#48*64+2,d4
	Move.l	#$01fe01fe,D5
	Move.w	(a6)+,D3				; Xinc
	Swap	d3
	Move.w	(a6)+,D3				; Yinc
	Move.l	a0,bltcpth(A5)
	Move.l	a0,bltdpth(A5)
	Move.w	A0,D6
	Move.l	a4,bltapth(A5)
	Move.l	d2,bltbpth(A5)
DoBobs
	Move.w	d6,a0
	Add.l	d3,(a6)
	And.l	D5,(a6)
	Move.w	(a6)+,D0				; Get X
	Move.w	(a6)+,D1				; Get Y
	Move.w	(a2,d0),d0
	Add.w	(a3,d1),A0
	Add.w	(a1,d0),A0
	Move.l	2(a1,d0),Bltcon0(a5)
	Move.w	a4,bltaptl(A5)
	Move.w	d2,bltbptl(A5)
	Move.w	a0,bltcptl(A5)
	Move.w	a0,bltdptl(A5)
	move.w	d4,bltsize(A5)
	Dbf	D7,DoBobs
	Rts
	
*****************************************************************************

StShift	Macro
	Dc.w	\1,$0fca,$0000
	Dc.w	\1,$1fca,$1000
	Dc.w	\1,$2fca,$2000
	Dc.w	\1,$3fca,$3000
	Dc.w	\1,$4fca,$4000
	Dc.w	\1,$5fca,$5000
	Dc.w	\1,$6fca,$6000
	Dc.w	\1,$7fca,$7000
	Dc.w	\1,$8fca,$8000
	Dc.w	\1,$9fca,$9000
	Dc.w	\1,$afca,$a000
	Dc.w	\1,$bfca,$b000
	Dc.w	\1,$cfca,$c000
	Dc.w	\1,$dfca,$d000
	Dc.w	\1,$efca,$e000
	Dc.w	\1,$ffca,$f000
	Endm
Shifts
	StShift	0
	StShift	2
	StShift	4
	StShift	6
	StShift	8
	StShift	10
	StShift	12
	StShift	14
	StShift	16
	StShift	18
	StShift	20
	StShift	22
	StShift	24
	StShift	26
	StShift	28
	StShift	30
	StShift	32
	StShift	34
	StShift	36
	StShift	38
	StShift	40
	
*****************************************************************************

; All copper list after here

Copper

	Spr_Off					; Switch sprites off
	Cmove	$2c81,Diwstrt
	Cmove	$2cc1,Diwstop
	Cmove	$0038,Ddfstrt
	Cmove	$00d0,Ddfstop
	Cmove	$0050,Bpl1mod			
	Cmove	$0050,Bpl2mod
	Cmove	$0000,Color00
	Cmove	$0ffa,Color01
	Cmove	$0ab0,Color02
	Cmove	$0a80,Color03
	Cmove	$0960,Color04
	Cmove	$0730,Color05
	CMove	$0610,Color06
	Cmove	$0500,Color08
	Cmove	$0007,Bpl1pth
B1l
	Cmove	$0000,Bpl1ptl
	Cmove	$0007,Bpl2pth
B2l
	Cmove	$0028,Bpl2ptl
	Cmove	$0007,Bpl3pth
B3l
	Cmove	$0050,Bpl3ptl
	Cmove	$3200,Bplcon0
	Endcop

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

; Inc Files For The Bobs

Bob
	Incbin	Gfx/Bobs.bm
BobMask
	Incbin	Gfx/BobsMask.Bm
	
*****************************************************************************

XSin
	Rept	2
	dc.w	300*6,300*6,300*6,300*6,299*6,299*6,298*6,298*6
	dc.w	297*6,296*6,296*6,295*6,294*6,292*6,291*6,290*6
	dc.w	289*6,287*6,286*6,284*6,282*6,281*6,279*6,277*6
	dc.w	275*6,273*6,270*6,268*6,266*6,264*6,261*6,259*6
	dc.w	256*6,253*6,251*6,248*6,245*6,242*6,239*6,236*6
	dc.w	233*6,230*6,227*6,224*6,221*6,217*6,214*6,211*6
	dc.w	207*6,204*6,201*6,197*6,194*6,190*6,186*6,183*6
	dc.w	179*6,176*6,172*6,168*6,165*6,161*6,157*6,154*6
	dc.w	150*6,146*6,143*6,139*6,135*6,132*6,128*6,124*6
	dc.w	121*6,117*6,114*6,110*6,106*6,103*6,99*6,96*6
	dc.w	93*6,89*6,86*6,83*6,79*6,76*6,73*6,70*6
	dc.w	67*6,64*6,61*6,58*6,55*6,52*6,49*6,47*6
	dc.w	44*6,41*6,39*6,36*6,34*6,32*6,30*6,27*6
	dc.w	25*6,23*6,21*6,19*6,18*6,16*6,14*6,13*6
	dc.w	11*6,10*6,9*6,8*6,6*6,5*6,4*6,4*6
	dc.w	3*6,2*6,2*6,1*6,1*6,0*6,0*6,0*6
	dc.w	0*6,0*6,0*6,0*6,1*6,1*6,2*6,2*6
	dc.w	3*6,4*6,4*6,5*6,6*6,8*6,9*6,10*6
	dc.w	11*6,13*6,14*6,16*6,18*6,19*6,21*6,23*6
	dc.w	25*6,27*6,30*6,32*6,34*6,36*6,39*6,41*6
	dc.w	44*6,47*6,49*6,52*6,55*6,58*6,61*6,64*6
	dc.w	67*6,70*6,73*6,76*6,79*6,83*6,86*6,89*6
	dc.w	93*6,96*6,99*6,103*6,106*6,110*6,114*6,117*6
	dc.w	121*6,124*6,128*6,132*6,135*6,139*6,143*6,146*6
	dc.w	150*6,154*6,157*6,161*6,165*6,168*6,172*6,176*6
	dc.w	179*6,183*6,186*6,190*6,194*6,197*6,201*6,204*6
	dc.w	207*6,211*6,214*6,217*6,221*6,224*6,227*6,230*6
	dc.w	233*6,236*6,239*6,242*6,245*6,248*6,251*6,253*6
	dc.w	256*6,259*6,261*6,264*6,266*6,268*6,270*6,273*6
	dc.w	275*6,277*6,279*6,281*6,282*6,284*6,286*6,287*6
	dc.w	289*6,290*6,291*6,292*6,294*6,295*6,296*6,296*6
	dc.w	297*6,298*6,298*6,299*6,299*6,300*6,300*6,300*6
	Endr

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

YSin
	Rept	2
	dc.w	184*120,184*120,184*120,184*120,184*120,183*120,183*120,183*120
	dc.w	182*120,182*120,181*120,181*120,180*120,179*120,179*120,178*120
	dc.w	177*120,176*120,175*120,174*120,173*120,172*120,171*120,170*120
	dc.w	168*120,167*120,166*120,165*120,163*120,162*120,160*120,159*120
	dc.w	157*120,155*120,154*120,152*120,150*120,149*120,147*120,145*120
	dc.w	143*120,141*120,139*120,137*120,135*120,133*120,131*120,129*120
	dc.w	127*120,125*120,123*120,121*120,119*120,117*120,114*120,112*120
	dc.w	110*120,108*120,105*120,103*120,101*120,99*120,97*120,94*120
	dc.w	92*120,90*120,87*120,85*120,83*120,81*120,79*120,76*120
	dc.w	74*120,72*120,70*120,67*120,65*120,63*120,61*120,59*120
	dc.w	57*120,55*120,53*120,51*120,49*120,47*120,45*120,43*120
	dc.w	41*120,39*120,37*120,35*120,34*120,32*120,30*120,29*120
	dc.w	27*120,25*120,24*120,22*120,21*120,19*120,18*120,17*120
	dc.w	16*120,14*120,13*120,12*120,11*120,10*120,9*120,8*120
	dc.w	7*120,6*120,5*120,5*120,4*120,3*120,3*120,2*120
	dc.w	2*120,1*120,1*120,1*120,0*120,0*120,0*120,0*120
	dc.w	0*120,0*120,0*120,0*120,0*120,1*120,1*120,1*120
	dc.w	2*120,2*120,3*120,3*120,4*120,5*120,5*120,6*120
	dc.w	7*120,8*120,9*120,10*120,11*120,12*120,13*120,14*120
	dc.w	16*120,17*120,18*120,19*120,21*120,22*120,24*120,25*120
	dc.w	27*120,29*120,30*120,32*120,34*120,35*120,37*120,39*120
	dc.w	41*120,43*120,45*120,47*120,49*120,51*120,53*120,55*120
	dc.w	57*120,59*120,61*120,63*120,65*120,67*120,70*120,72*120
	dc.w	74*120,76*120,79*120,81*120,83*120,85*120,87*120,90*120
	dc.w	92*120,94*120,97*120,99*120,101*120,103*120,105*120,108*120
	dc.w	110*120,112*120,114*120,117*120,119*120,121*120,123*120,125*120
	dc.w	127*120,129*120,131*120,133*120,135*120,137*120,139*120,141*120
	dc.w	143*120,145*120,147*120,149*120,150*120,152*120,154*120,155*120
	dc.w	157*120,159*120,160*120,162*120,163*120,165*120,166*120,167*120
	dc.w	168*120,170*120,171*120,172*120,173*120,174*120,175*120,176*120
	dc.w	177*120,178*120,179*120,179*120,180*120,181*120,181*120,182*120
	dc.w	182*120,183*120,183*120,183*120,184*120,184*120,184*120,184*120
	Endr
	
*****************************************************************************

XY	Macro
	Dc.w	(\1*2)&$1fe,(\2*2)&$1fe
	Endm
Form1
	Dc.w	85-1
	Dc.w	2,2
A	Set	0
B	Set	256

	Rept	85
	XY	a,b
A	Set	a+2
b	Set	b-2	
	Endr

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

ScreenPtr
	Dc.l	$70000
	
*****************************************************************************

