SHORT BOB BY PSYCHO OF DOMINATORS

start:
	MOVE.L	#$DFF000,A5
	jsr	INITIALIZE(pc)
	jsr	setcolors(pc)
	jsr	setup_copperlist(pc)
	jsr	setupscreen(pc)
	jsr	show_background(pc)
	jsr	calc_cursorpos(pc)
	jsr	movebrush(pc)
main_loop:
	jsr	movebrush(pc)
	BTST	#6,$BFE001
	bne	main_loop
	jsr	RESTORE(pc)
	rts

picx=320 ; pixels
picy=256 ; pixels
antal_farver=32
antal_bpl=5
antal_bobbpl=3
brushx=32 ; pixels
brushy=16 ; pixels

picxword=picx/16
picxbyte=picx/8
bplsize=picxbyte*picy
picsize=bplsize*antal_bpl

brushxword=brushx/16
brushxbyte=brushx/8
brushsize=brushxbyte*brushy


CloseLib=-414
ExecBase=4
OpenLib=-408

BLTCPTH=$048
BLTBPTH=$04c
BLTAPTH=$050
BLTDPTH=$054
BLTCMOD=$060
BLTBMOD=$062
BLTAMOD=$064
BLTDMOD=$066
BLTCON0=$040
BLTCON1=$042
BLTSIZE=$058
BPL1MOD=$108
BPLCON0=$100
BPLCON1=$102
COP1LCH=$080
COPJMP1=$088
DDFSTRT=$092
DDFSTOP=$094
DIWSTRT=$08e
DIWSTOP=$090
DMACON= $096
DMACONR=$002


setcolors:
	move.l   #collist,a0
   	move.l   #colour1+2,a1
   	move.w   #antal_farver-1,d0
fill2:  move.w   (a0)+,(a1)
        adda.l   #4,a1
        dbf   	 d0,fill2
        rts   


setup_copperlist:
	move.l	#bpl1,d0
	move.w	d0,LO1+2
	lsr.l	#8,d0
	lsr.l	#8,d0
	move.w	d0,HI1+2
	move.l	#bpl2,d0
	move.w	d0,LO2+2
	lsr.l	#8,d0
	lsr.l	#8,d0
	move.w	d0,HI2+2
	move.l	#bpl3,d0
	move.w	d0,LO3+2
	lsr.l	#8,d0
	lsr.l	#8,d0
	move.w	d0,HI3+2
	move.l	#bpl4,d0
	move.w	d0,LO4+2
	lsr.l	#8,d0
	lsr.l	#8,d0
	move.w	d0,HI4+2
	move.l	#bpl5,d0
	move.w	d0,LO5+2
	lsr.l	#8,d0
	lsr.l	#8,d0
	move.w	d0,HI5+2
	rts

show_background:
	move.b	#antal_bpl,d0
	move.w	#picxword,d1
	move.w	#picy,d2
	move.w	#0,d3
	move.w	#0,d4
	move.l	#picbuffer,a0
	move.l	#screenbuffer,a1
	jsr	SHOWSCREEN(pc)
	rts

calc_cursorpos:
	move.l	#0,a0
	move.w	xpos(pc),d2
	divu	#8,d2
	move.w	xpos(pc),d3
	andi.w	#$000f,d3
	lsr.l	#8,d3
	lsr.l	#8,d3
	lsr.l	#8,d3
	adda.w	d2,a0
	move.w	d3,smoothxpos
	move.w	ypos(pc),d2
	mulu	#40,d2
	adda.l	d2,a0
	move.l	a0,cursor_position
	rts

restorebehind_brush1:
	move.b	#antal_bobbpl,d0
	move.w	#brushxword,d1
	move.w	#brushy,d2
	move.w	#picxbyte-brushxbyte,d3
	move.w	#picxbyte-brushxbyte,d4
	move.l	#picbuffer1,a0
	addi.l	cursor_position(pc),a0
	move.l	cursor_position(pc),a1
	addi.l	#bpl1,a1
	jsr	SHOWSCREEN(pc)
	rts


show_brush1:
	move.b	#antal_bobbpl,d0
	move.w	#brushxword,d1
	move.w	#brushy,d2
	move.w	#0,d3
	move.w	#picxbyte-brushxbyte,d4
	move.w	smoothxpos(pc),d5
	move.l	#brush1,a0
	move.l	cursor_position(pc),a1
	addi.l	#bpl1,a1
	move.l	#brushmask1,a2
	jsr	SHOWBRUSH(pc)
	rts
movebrush:
movebrush_wait:
	cmp.b	#$D0,$006(a5)
	bne	movebrush_wait
	move.w	#$8400,DMACON(A5)
	jsr	restorebehind_brush1(pc)
	jsr	calc_cursorpos(pc)
	jsr	show_brush1(pc)
	move.w	#$0400,DMACON(A5)
	move.b	$006(a5),$100
	rts

setupscreen:
	move.w	#$8100,DMACON(A5)
	move.w	#$8040,DMACON(A5)
	move.w	#$0020,DMACON(A5)

	move.w	#antal_bpl,d0
	mulu	#$1000,d0
	ori.w	#$0280,d0
	move.w	d0,BPLCON0(A5)
	move.w	#0,BPLCON1(A5)
	move.w	#0,BPL1MOD(A5)
	move.w	#$0080,DMACON(A5)
	move.l	#copperlist,COP1LCH(A5)
	move.w	COPJMP1(A5),d0
	move.w	#$8080,DMACON(A5)
	rts

startlist=38

INITIALIZE:
	move.l	execbase.w,a6
	MOVE.W	#$7FFF,$09A(A5)
	rts

RESTORE:
	move.l	execbase.W,a6
	move.w	#$000f,DMACON(A5)
	lea	graphics_library(pc),a1
	clr.l	d0
	jsr	openlib(a6)
	move.l	d0,a1
	move.l	startlist(a1),COP1LCH(A5)
	clr.w	COPJMP1(A5)
	move.w	#$83e0,DMACON(A5)
	jsr	closelib(a6)
	MOVE.W	#$4000,$09A(A5)
	MOVE.W	#$E02C,$09A(A5)
	rts

graphics_library:	dc.b	'graphics.library',0
even

SHOWBRUSH:
	move.w	d1,d7
	mulu	d2,d7
	mulu	#2,d7
	move.w	d2,d6
	mulu	#64,d6
	addi.w	d1,d6
showbrush_wait:
	btst	#14,DMACONR(A5)
	bne	showbrush_wait
	move.l	a2,BLTAPTH(A5)
	move.l	a0,BLTBPTH(A5)
	move.l	a1,BLTCPTH(A5)
	move.l	a1,BLTDPTH(A5)
	move.w	d3,BLTAMOD(A5)
	move.w	d3,BLTBMOD(A5)
	move.w	d4,BLTCMOD(A5)
	move.w	d4,BLTDMOD(A5)
	andi.w	#$f000,d5
	move.w	d5,BLTCON1(A5)
	ori.w	#$0fca,d5
	move.w	d5,BLTCON0(A5)
	move.w	d6,BLTSIZE(A5)
	MOVE.L	#$FFFFFFFF,$044(a5)
	addi.l	d7,a0		; HUSK
	addi.l	#bplsize,a1	; HUSK
	subi.b	#1,d0
	bne	showbrush_wait
	rts

SHOWSCREEN:
	move.w	d1,d7
	mulu	d2,d7
	mulu	#2,d7
	move.w	d2,d6
	mulu	#64,d6
	addi.w	d1,d6
showscreen_wait:
	btst	#14,DMACONR(A5)
	bne	showscreen_wait
	move.l	a0,BLTAPTH(A5)
	move.l	a1,BLTDPTH(A5)
	move.w	d3,BLTAMOD(A5)
	move.w	d4,BLTDMOD(A5)
	move.w	#$0000,BLTCON1(A5)
	move.w	#$09f0,BLTCON0(A5)
	move.w	d6,BLTSIZE(A5)
	addi.l	#bplsize,a0
	addi.l	#bplsize,a1	
	subi.b	#1,d0
	bne	showscreen_wait
	rts

cursor_position:	dc.l	picxbyte*16
shadow_position:	dc.l	0
xpos:			dc.w	160
ypos:			dc.w	100
smoothxpos:		dc.w	0

copperlist:
	dc.w	$008e,$2c81
	dc.w	$0090,$f9c1
	dc.w 	$0092,$0038
	dc.w	$0094,$00d0
	dc.w	$0100,$5200
HI1:	dc.w	$00e0,0
LO1:	dc.w	$00e2,0
HI2:	dc.w	$00e4,0
LO2:	dc.w	$00e6,0
HI3:	dc.w	$00e8,0
LO3:	dc.w	$00ea,0
HI4:	dc.w	$00ec,0
LO4:	dc.w	$00ee,0
HI5:	dc.w	$00f0,0
LO5:	dc.w	$00f2,0
colour1:
	dc.w	$0180,$0000
	dc.w	$0182,$0000
	dc.w	$0184,$0000
	dc.w	$0186,$0000
	dc.w 	$0188,$0000
	dc.w	$018a,$0000
	dc.w	$018c,$0000
	dc.w	$018e,$0000
	dc.w	$0190,$0000
	dc.w	$0192,$0000
	dc.w 	$0194,$0000
	dc.w	$0196,$0000
	dc.w	$0198,$0000
	dc.w	$019a,$0000
	dc.w	$019c,$0000
	dc.w	$019e,$0000
	dc.w	$01a0,$0000
	dc.w	$01a2,$0000
	dc.w 	$01a4,$0000
	dc.w	$01a6,$0000
	dc.w	$01a8,$0000
	dc.w	$01aa,$0000
	dc.w	$01ac,$0000
	dc.w	$01ae,$0000
	dc.w	$01b0,$0000
	dc.w	$01b2,$0000
	dc.w 	$01b4,$0000
	dc.w	$01b6,$0000
	dc.w	$01b8,$0000
	dc.w	$01ba,$0000
	dc.w	$01bc,$0000
	dc.w	$01be,$0000
	dc.w	$ffff,$fffe	;end copper list

brush1:		blk.b	brushsize*antal_bobbpl,$ff
brushmask1:	blk.b	brushsize,$ff

picbuffer:
picbuffer1:	blk.b	bplsize,0
picbuffer2:	blk.b	bplsize,0
picbuffer3:	blk.b	bplsize,0
picbuffer4:	blk.b	bplsize,0
picbuffer5:	blk.b	bplsize,0
collist: 	blk.b 64,0
screenbuffer:
bpl1:		blk.b	bplsize,0
bpl2:		blk.b	bplsize,0
bpl3:		blk.b	bplsize,0
bpl4:		blk.b	bplsize,0
bpl5:		blk.b	bplsize,0
END:
