EXECBASE:	EQU 		4
DMACON:		EQU 		$DFF096
OLDO:		EQU 		-408



start: 		MOVE.L 		EXECBASE,A6
		LEA 		GFXNAME,A1
		MOVE.L 		#0,D0
		JSR		OLDO(A6)
		TST.W		D0
		BEQ		ERRL
		MOVE.L		D0,GFXBASE
		MOVE.L		D0,A0
		ADD.L		#$32,A0
		MOVE.W		#$80,DMACON
		MOVE.L		(A0),OLDC

		MOVE.L		#sprite0,D0
		MOVE.W		D0,S0LO
		SWAP 		D0
		MOVE.W		D0,S0HI

		MOVE.L		#sprite1,D0
		MOVE.W		D0,S1LO
		SWAP 		D0
		MOVE.W		D0,S1HI

		MOVE.L		#sprite2,D0
		MOVE.W		D0,S2LO
		SWAP 		D0
		MOVE.W		D0,S2HI

		MOVE.L		#sprite3,D0
		MOVE.W		D0,S3LO
		SWAP 		D0
		MOVE.W		D0,S3HI

		MOVE.L		#sprite4,D0
		MOVE.W		D0,S4LO
		SWAP 		D0
		MOVE.W		D0,S4HI

		MOVE.L		#sprite5,D0
		MOVE.W		D0,S5LO
		SWAP 		D0
		MOVE.W		D0,S5HI

		MOVE.L		#sprite6,D0
		MOVE.W		D0,S6LO
		SWAP 		D0
		MOVE.W		D0,S6HI

		MOVE.L		#sprite7,D0
		MOVE.W		D0,S7LO
		SWAP 		D0
		MOVE.W		D0,S7HI

		MOVE.L		#NEWC,(A0)		
		LEA		sprite7,A1
		LEA		XPOS,A2
		MOVE.L		#$2B,D0
		MOVE.L		#99,D1
SLOOP:		MOVE.B		D0,(A1)+
		ADDQ.W		#1,D0
		MOVE.B		(A2)+,(A1)+
		MOVE.B		D0,(A1)+
		ADDQ.W		#1,D0
		MOVE.B		#0,(A1)+
		MOVE.W		#1,(A1)+
		MOVE.W		#1,(A1)+
		DBRA		D1,SLOOP
		MOVE.L		#0,A1
		
		MOVE.W		#$8020,$DFF09A
		MOVE.W		#$8080,$DFF096
WAIT:		BSR		INTER
		MOVE.L		#$2E00,D0
STOP:		DBRA		D0,STOP
		ANDI.B		#$40,$BFE001  ;MOUSE ADDR
		BNE		WAIT
		MOVE.L		GFXBASE,A0
		ADD.L		#$32,A0
		MOVE.W		#$80,DMACON
		MOVE.L		OLDC,(A0)
		MOVE.W		#$8080,DMACON
		RTS
;		INTERRUPT ROUTINE

INTER:		bsr		movem
		bsr		printsprites
		LEA		SPRITE7,A0
		LEA		SPEED,A1
		MOVE.L		#99,D0
ILOOP:		MOVE.B		(A1)+,D1
		ADD.B		D1,1(A0)
		CMPI.B		#99,(A1)
		BNE		FOR
		LEA		SPEED,A1
FOR:		ADDQ.L		#8,A0
		DBRA		D0,ILOOP	
		RTS	
								
ERRL:		RTS

spritetabcount:	dc.l	0

movem:		lea	spritetabley,a0
		lea	spritetablex,a1
		lea	spritestack,a2
		move.l	spritetabcount,d0
		add.l	d0,a0
		move.b	(a0),d1
		cmp.b	#$7f,d1
		bne	oversp
		move.l	#0,spritetabcount
		bra	movem
oversp:		add.b	d1,(a2)
		move.b	(a2),d3
		add.b	#1,d3
		move.b	d3,2(a2)
		add.l	d0,a1
		move.b	(a1),d1
		add.b	d1,1(a2)
		add.l	#1,d0
		move.l	d0,spritetabcount
		rts
printsprites:
		lea	sprite0,a0
		lea	spritestack,a1		
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite1,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite2,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite3,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite4,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite5,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		lea	sprite6,a0
		move.w	(a1)+,(a0)+
		move.w	(a1)+,(a0)+
		bsr	stackshift
		rts		

spritestack:
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
	dc.w	$5080,$5100
stackbot:dc.w	$5080,$5100
	dc.w	$5080,$5100

stackshift:
	lea	stackbot,a0
	move.w	#14,d0
stackloop:
	move.l	(a0)+,(a0)
	sub.l	#8,a0
	dbra	d0,stackloop
	rts

spritetabley:	dc.b 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
		dc.b 16,-16,-15,-14
		dc.b -13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0
		ds.b	10		


spritetablex:	dc.b -9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7
		dc.b 8,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8			


GFXNAME:	DC.B 'graphics.library',0
		EVEN

GFXBASE:	DC.L 0

OLDC:		DC.L 0

STORE:		DC.L 0,0

SPEED:		DC.B 1,2,3,4,-4,-3,-2,-1,99
		EVEN

NEWC:		DC.W $0100,$1200
		DC.W $00E0,$0005,$00E2,$0000
		DC.W $0180,$0000,$01A6,$0FFF
		dc.w $01ae,$0fff,$01b6,$0fff
		dc.w $01be,$0fff

		DC.W $0120
S0HI:		DC.W $0000
		DC.W $0122
S0LO:		DC.W $0000		
		DC.W $0124
S1HI:		DC.W $0000
		DC.W $0126
S1LO:		DC.W $0000		
		DC.W $0128
S2HI:		DC.W $0000
		DC.W $012a
S2LO:		DC.W $0000		
		DC.W $012c
S3HI:		DC.W $0000
		DC.W $012e
S3LO:		DC.W $0000		
		DC.W $0130
S4HI:		DC.W $0000
		DC.W $0132
S4LO:		DC.W $0000		
		DC.W $0134
S5HI:		DC.W $0000
		DC.W $0136
S5LO:		DC.W $0000		
		DC.W $0138
S6HI:		DC.W $0000
		DC.W $013a
S6LO:		DC.W $0000		
		DC.W $013c
S7HI:		DC.W $0000
		DC.W $013e
S7LO:		DC.W $0000		
		
		DC.W $FFFF,$FFFE


XPOS:		DC.B 65,128,205,195,84,130,176,201,75,99,197,154,109
		DC.B 126,73,192,171,105,104,202,83,61,69,77,159,162
		DC.B 120,111,210,60,97,143,192,171,207,92,83,77,98
		DC.B 101,115,121,141,133,75,149,162,192,117,105,73
		
		DC.B 47,158,99,127,121,137,36,95,107,209,178,210,117
		DC.B 37,61,111,196,156,35,37,91,121,36,66,88,59,113
		DC.B 11,9,23,100,140,39,44,166,188,192,36,49,202,39
		DC.B 94,141,144,143,211,230,99,100	
		EVEN

sprite0:	dc.w	$4050,$4100
		dc.w	$ffff,$ffff
		dc.l	0
sprite1:	dc.w	$4060,$4100
		dc.w	$ffff,$ffff
		dc.l	0
sprite2:	dc.w	$4080,$4100
		dc.w	$ffff,$ffff
		dc.l	0
sprite3:	dc.w	$40a0,$4100
		dc.w	$ffff,$ffff
		dc.l	0
sprite4:	dc.w	$5040,$5100
		dc.w	$ffff,$ffff
		dc.l	0
sprite5:	dc.w	$5080,$5100
		dc.w	$ffff,$ffff
		dc.l	0
sprite6:	dc.w	$6060,$6100
		dc.w	$ffff,$ffff
		dc.l	0

SPRITE7: 	ds.W	4*50



