	Incdir	Df1:
	Include Source/CustomRegisters

Ciaapra = $BFE001
Openlibrary = -30-522	
Disable	    = -120
Enable	    = -126
Startlist   = 38
Execbase = 4
Planesize = 32*82
Spincllen = 20
Nobobs = 196
Memforbobs = ((Nobobs+14)/15+1)*225*2*4*2

Main:
	Move.l	Execbase,a6
	Jsr	Disable(a6)

	Move.l	#Ypos1,d0
	Eor.l	#Ypos2,d0
	Move.l	d0,Yeor

	Move.l	#$78000,Bobmem

;------ Copy bobs into Bobmem --------

	Move	#Memforbobs/225/16,d0
	Move.l	Bobmem(pc),a0
	Move.l	a0,a2
	Add.l	#Memforbobs/2,a2
Bobloop2:
	Move	#449,d1
	Lea	Ball,a1
	Lea	Mask,a3
Bobloop:
	Move.l	(a1)+,(a0)+
	Move.l	(a3)+,(a2)+
	Dbf	d1,Bobloop
	Dbf	d0,Bobloop2

;------- Create second ypos -----------

	Lea 	Ypos2,a0
	Move	#$4000,d1
	Move	#4095,d0
Yloop
	Add	d1,(a0)+
	Dbf	d0,Yloop
	
;--------- Switch Copper DMA ----------

	Move.l	#Clstart,Cop1lc
	Clr	Copjmp1

	Move.w	#$8780,Dmacon
	Move.w	#$002f,Dmacon

	Moveq	#7,d0
	Lea	Spr0data,a0
Clclr
	Clr.l	(a0)
	Addq	#8,a0
	Dbf	d0,Clclr

;---------- Demo loop ------------

Wait:	Move.b	$dff006,d2
	Bne.s	Wait
	Move.b	$dff005,d2
	Bne.s	Wait

;----------- Move the bobs -----------
Bobs:
	Move	#$4000,d0
	Eor	d0,Bobplst+2
	Eor	d0,Bobplst+10
	Eor	d0,Bobbank+2
	Move.l	Yeor(pc),d0
	Eor.l	d0,Ytab

	Clr	Bltdmod
	Move.l	#$ffffffff,Bltafwm
	Move.l	#$01000000,Bltcon0

	Move.l	a7,Store
	Move.l	Bobbank(pc),a0
	Move.l	a0,Bltdpth
	Move	#104*64+40,Bltsize
	Movem.l	Blank,d0-d7/a1-a7
	Lea	$3e80(a0),a0

	Rept	128
	Movem.l	d0-d7/a1-a7,-(a0)
	Endr	
	Move.l	Store(pc),a7

	Add	#9,Xpt1
	And	#$7ff,Xpt1
	Add	#4,Ypt1
	And	#$7ff,Ypt1

	Lea	$dff04a,a0
	Lea	$dff056,a1
	Lea	$dff040,a2
	Lea	$dff058,a3

	Move	Xpt1(pc),d0
	Add	d0,d0
	Move	d0,d1
	Add	d1,d1
	Move	Ypt1(pc),d2
	Add	d2,d2
	Move.l	Ytab(pc),a4
	Lea	(a4,d2.w),a4
	Lea	Xpos(pc),a5
	Lea	(a5,d0.w),a5
	Lea	Shift(pc),a6
	Lea	(a6,d1.w),a6

	Subq	#1,Count
	Bne.s	Nobegin
	Move	#4,Count
	Add.l	#120,Anim
	Cmp.l	#120*15,Anim
	Bne.s	Nobegin
	Clr.l	Anim
Nobegin
	Move	#2+30*$40,d7
	Move.l	#$24,$24(a2)
	Move.l	#$240000,$20(a2)
	Move	#(Nobobs-1)*4,d5
	Move.l	Bobmem(pc),d0
	Add.l	Anim(pc),d0
	Move.l	d0,$10(a2)
	Add.l	#Memforbobs/2,d0
	Move.l	d0,$0c(a2)
	Move	#7,$14(a2)
	Move	#7,$08(a2)

A set 0
	Rept	Nobobs
	Move	(45*A*2)&$ffe(a4),d2
	Add	(69*A*2)&$ffe(a5),d2
	Move	d2,(a0)
	Move	d2,(a1)
	Move.l	(69*A*4)&$1ffc(a6),(a2)
	Move	d7,(a3)
A set A+1
	Endr

	Btst	#6,Ciaapra
	Bne	Wait

;--------- End Program ------------

;---- Restore old Copper list -----

	Move.l	Execbase,a6
	Move.l	Bobmem,a1
	Move.l	#Memforbobs,d0
	Jsr	-$d2(a6)
Nobobmem:
	Move.l	#$70000,a1
	Move.l	#$8000,d0
	Jsr	-$d2(a6)
Noplanemem:
	Move.l	#Grname,a1
	Clr.l	d0
	Jsr	Openlibrary(a6)
	Move.l	d0,a4
	Move.l	Startlist(a4),Cop1lc
	Clr.w	Copjmp1
	Move.l	a4,a1
	Jsr	-$19e(a6)
	Move.w	#$83E0,Dmacon
	Jsr	Enable(a6)
	Moveq.l	#0,d0
	Rts
	
;------------- Variables ----------------

Pointers:
Xpt1		Dc.w $40
Ypt1		Dc.w 0

Bobbank		Dc.l $74000

Ytab		Dc.l Ypos2
Yeor		Dc.l 0

Pressedit	Dc.w 0
Sinuspt		Dc.w 0
Bobmem		Dc.l 0

Bobplane1	Dc.l $70000

Store		Dc.l 0

Anim		Dc.l 0
Count		Dc.w 4

;------------- Constants --------------

Grname:	Dc.b	"graphics.library",0

	Even


;---------- The Copperlists -------------
Clstart:
	Wait	0,6
Bobplst:
	Mov	0,Bpl1ptl
	Mov	7,Bpl1pth
	Mov	40,Bpl2ptl
	Mov	7,Bpl2pth
	Mov	$3281,Diwstrt
	Mov	$fac1,Diwstop
	Mov	$0038,Ddfstrt
	Mov	$00d0,Ddfstop
	Mov	$0000,Color00
	Mov	$0fcc,Color01
	Mov	$0f00,Color02
	Mov	$0a00,Color03
	Mov	40,Bpl1mod
	Mov	40,Bpl2mod
	Mov	0,Bplcon1
	Mov	0,Bplcon2
	Wait	0,50
	Mov	$2200,Bplcon0

	Wait	0,250
	Mov	0,Bplcon0
	Wait	$fe,$ff
Clend:
Clsize Equ  Clend-Clstart
	Even

;-------- Various table etc. ---------

Blank:	Dcb.w	30,0

;--------- Sintable -------------	
Ypos1	Incbin	Binary/Ypos
	Incbin	Binary/Ypos

Ypos2	Incbin	Binary/Ypos
	Incbin	Binary/Ypos

Xpos	Incbin	Binary/Xpos
	Incbin	Binary/Xpos

Shift	Incbin	Binary/Shifts
	Incbin	Binary/Shifts

;--------- Bob data -------------
Ball	Incbin	Binary/Balls

Mask	Incbin	Binary/Mask

Sinuses:
	Dc.w	$0140,$0040,$0100,$0000
	Dc.w	$0002,$0003,$0004,$0005
	Dc.w	$0004,$0003,$0005,$0004

	Dc.w	$0240,$0040,$0000,$0200
	Dc.w	$00fe,$00ff,$0001,$0002
	Dc.w	$0005,$0007,$0003,$0008

	Dc.w	$0340,$0340,$0300,$0300
	Dc.w	$00ff,$0001,$0001,$00ff
	Dc.w	$0002,$0003,$0003,$0002

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$0002,$0001,$0003,$00ff
	Dc.w	$00fe,$0003,$0003,$00fe

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$0004,$0003,$0003,$0004
	Dc.w	$00f8,$0004,$0004,$00f8

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$0002,$0004,$0004,$0002
	Dc.w	$0007,$0009,$0009,$0007

	Dc.w	$0140,$0040,$0000,$0100
	Dc.w	$00ff,$0002,$00ff,$0002
	Dc.w	$0084,$0080,$0080,$0084
	
	Dc.w	$0220,$0070,$0000,$0000
	Dc.w	$0001,$0004,$0004,$0001
	Dc.w	$0003,$0006,$0006,$0003

	Dc.w	$0240,$0240,$0200,$0200
	Dc.w	$0002,$0001,$0001,$00fe
	Dc.w	$0084,$0084,$0084,$0084

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$00fd,$00fe,$00fe,$00fd
	Dc.w	$007d,$007f,$007f,$007d

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$0003,$0002,$0002,$0003
	Dc.w	$004e,$004f,$004f,$004e

	Dc.w	$0340,$0240,$0100,$0200
	Dc.w	$0001,$0002,$0003,$0004
	Dc.w	$0004,$0003,$0002,$0003

	Dc.w	$0040,$0040,$0000,$0000
	Dc.w	$0001,$0002,$0002,$0001
	Dc.w	$0074,$0002,$0002,$0074

	Dc.w	$0213,$0134,$0054,$0078
	Dc.w	$0003,$0001,$0003,$0005
	Dc.w	$0004,$0004,$0005,$0007

	Dc.w	$0040,$0000,$0000,$00c0
	Dc.w	$0001,$0002,$0002,$0001
	Dc.w	$0044,$00c4,$00c4,$0044

