; Demonstrerer bruk av sprite på en pen måte.
; Dette vil funke med og uten fast ram.
; Den ber også om ram, og ikke bare tar den (C64 metoden)
; Skrevet av Geir Inge Høsteng.

OpenLibrary = -408
AllocMem = -198
FreeMem = -210

start:
	move.l	4,a6
	move.l	#$10002,d1	; ber om chip ram som er satt til 0.
	move.l	#slutt-copper+[40*256],d0
			; plass til copper, sprite og playfiled
	jsr	AllocMem(a6)
	move.l	d0,mem
	beq	end1		; Fikk ikke ram.

	move.l	d0,a1
	lea	copper,a0
	move.w	#[[slutt-copper]/4]-1,d0

copy:			; copierer copper liste og sprite liste tit
	move.l	(a0)+,(a1)+	; ramen
	dbf	d0,copy

	move.l	mem,d0
	move.l	d0,a0
	add.l	#sprite-copper,d0

	move.w	d0,6(a0)	; Setter Copper liste til å peke på spritedata
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#sprite1-sprite,d0
	moveq	#6,d1

loop:			; De andre 7 sprite pointere må peke til en 0
	add.l	#8,a0
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	dbf	d1,loop

	move.l	mem,d0		; Forteller copperlista hvor playfileld'et er
	move.l	d0,a0
test:
	add.l	#copper1-copper,a0
	add.l	#slutt-copper,d0

	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)

	move.w	#$4000,$dff09a	; Av med multitasking.

	move.l	mem,$dff080	; starter copper
	clr.w	$dff088

	move.w	#$1200,$dff100	; setter opp standard playfield
	move.w	#$24,$dff104	; 200*256 (pal)
	move.w	#$38,$dff092
	move.w	#$d0,$dff094
	move.w	#$2c81,$dff08e
	move.w	#$f4f9,$dff090

	move.w	#$83a0,$dff096	; For å være sikker på nødvendig DMA er på.

	move.w	#0,$dff180	; setter farver
	move.w	#$ff0,$dff1a2
	move.w	#$ff,$dff1a4
	move.w	#$f0f,$dff1a6

vent:			; Venter på venstre muskanpp.
	btst	#6,$bfe001
	bne	vent

	move.w	#$c000,$dff09a	; På med multitasking.

	move.l	4,a6		; Finner gammel copper adresse
	lea	gfxname,a1
	clr.l	d0
	jsr	OpenLibrary(a6)
	move.l	d0,a0
	tst.l	d0
	beq	end
	move.l	$32(a0),$dff084	; og setter disse.
	move.l	$26(a0),$dff080
	clr.w	$dff088
end:
	move.l	mem,a1		; frigjør minne
	move.l	#slutt-copper+[40*256],d0
	jsr	FreeMem(a6)
end1:
	illegal			; illegal for å komme tilbake til Seka

	clr.l	d0		; eller dette for å hoppe ut til CLI.
	rts

gfxname:
	dc.b	'graphics.library',0,0
mem:
	dc.l	0

copper:
	dc.l	$01200000	; copper liste. Setter sprite pointerene
	dc.l	$01220000	; og playfield0 pointer.
	dc.l	$01240000
	dc.l	$01260000
	dc.l	$01280000
	dc.l	$012a0000
	dc.l	$012c0000
	dc.l	$012e0000	
	dc.l	$01300000
	dc.l	$01320000
	dc.l	$01340000
	dc.l	$01360000
	dc.l	$01380000
	dc.l	$013a0000
	dc.l	$013c0000
	dc.l	$013e0000
copper1:
	dc.l	$00e00007
	dc.l	$00e20000
	dc.l	$fffffffe

sprite:
	dc.l	$9d90a200	; Sprite data (skal i følge Hardware Manual
	dc.l	$099007e0	; forestille et rom skip
	dc.l	$13c80ff0
	dc.l	$23c41ff8
	dc.l	$13c80ff0
	dc.l	$099007e0
sprite1:		; Det som også de 7 andre sprite pointerene
	dc.l	$00000000	; skal peke på
slutt:
