
; Listing15f7.s		Die AGA-Sprite-Palette wurde mit $dff10c verschoben.
; Linke Taste zum Zuweisen von 2 verschiedenen Paletten
; zu geraden und ungeraden Sprites, rechts zum Verlassen.

	SECTION	AGARULEZ,CODE

;	include	"DaWorkBench.s"	; entferne das; vor dem Speichern mit "wo"

*****************************************************************************
	include	"/Sources/startup2.s"	; speichern Copperlist etc.
*****************************************************************************

			;5432109876543210
DMASET	equ	%1000001110100000	; Copper, Bitplane, Sprite DMA

WaitDisk	equ	30	; 50-150 zur Rettung (je nach Fall)

Start:
	move.l	#Bitplane,d0		; Zeiger auf das leere Bild
	lea	Bplpointers,a1			; Zeiger in Copperlist
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

;	Zeiger auf alle Sprites

	move.l	#MeinSprite0,d0		; Adresse des Sprites in d0
	lea	SpritePointers,a1		; Zeiger in Copperlist
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite1,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)	
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite2,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite3,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite4,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite5,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite6,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	move.l	#MeinSprite7,d0		; Adresse des Sprites in d0
	addq.w	#8,a1				; nächster Spritepointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

	move.w	#DMASET,$96(a5)		; DMACON - aktivieren Bitplane, Copper
	move.l	#Copperlist,$80(a5)	; Zeiger Copperlist
	move.w	d0,$88(a5)			; Start Copperlist
	move.w	#0,$1fc(a5)			; Fmode zurücksetzen, burst normal
	move.w	#$c00,$106(a5)		; BPLCON3 zurücksetzen
	move.w	#$11,$10c(a5)		; BPLCON4 zurücksetzen

	move.w	#%11101110,Bplcon4+2	; gleiche Palette für gerade Sprites
									; und ungerade

Mouse:
	btst.b	#6,$bfe001				; linke Maustaste gedrückt?
	bne.s	Mouse

	move.w	#%11101111,Bplcon4+2	; andere Palette für gerade Sprites
									; und ungerade

Mouse2:
	btst.b	#2,$dff016				; rechte Maustaste gedrückt?
	bne.s	Mouse2

	rts

;*****************************************************************************
;*				COPPERLIST				     *
;*****************************************************************************

	cnop	0,8	; auf 64 Bit ausrichten

	SECTION	GRAPHIC,DATA_C

Copperlist:
SpritePointers:
	dc.w	$120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
	dc.w	$12a,0,$12c,0,$12e,0,$130,0,$132,0
	dc.w	$134,0,$136,0,$138,0,$13a,0,$13c,0
	dc.w	$13e,0

	dc.w	$8e,$2c81	; DIWSTRT
	dc.w	$90,$2cc1	; DIWSTOP

	dc.w	$92,$0038	; DDFSTRT
	dc.w	$94,$00d0	; DDFSTOP
	dc.w	$102,0		; BPLCON1
	dc.w	$104,0		; BPLCON2
	dc.w	$108,-8		; BPL1MOD (burst 64bit, modulo=modulo-8)
	dc.w	$10a,-8		; BPL2MOD (wie oben)

			    ; 5432109876543210
	dc.w	$100,%0001001000000001	; 1 Bitplane LORES 320x256.

	dc.w	$1fc,%0011	; Burst mode 64 bit, Sprite Größe 16 pixel


Bplpointers:
	dc.w $e0,0,$e2,0	; erste 	Bitplane
	dc.w $e4,0,$e6,0	; zweite	   "
	dc.w $e8,0,$ea,0	; dritte	   "
	dc.w $ec,0,$ee,0	; vierte	   "
	dc.w $f0,0,$f2,0	; fünfte	   "
	dc.w $f4,0,$f6,0	; sechste	   "
	dc.w $f8,0,$fa,0	; siebte	   "
	dc.w $fc,0,$fe,0	; achte		   "

; Beachten Sie, dass die Sprite-Farben 24 Bit sind, auch wenn es nur 3 sind.

	dc.w	$106,$c00	; Auswahl Palette 0 (0-31), Nibble hoch
ColP0:
	dc.w	$180,$000	; COLOR00	; schwarzer Hintergrund
	dc.w	$182,$123	; COLOR01	; Farbe 1 der Bitebene, die
									; in diesem Fall leer ist,
									; so erscheint sie nicht.

	dc.w	$106,$ec00	; Auswahl Palette 7 (224-255), Nibble niedrig

Bplcon4:
	dc.w	$10c,%11101111	; BPLCON4 - Palette Sprite gerade = 224-240
								; 	    Palette Sprite ungerade = 240-256

; Jetzt die Palettenbank für gerade Sprites

	dc.w	$182,$f00	; COLOR225, - COLOR1 von Sprite0 -rot
	dc.w	$184,$0f0	; COLOR226, - COLOR2 von Sprite0 -grün
	dc.w	$186,$ff0	; COLOR227, - COLOR3 von Sprite0 -gelb

	dc.w	$18a,$fff	; COLOR229, - COLOR1 von Sprite2 -weiss
	dc.w	$18c,$0bd	; COLOR230, - COLOR2 von Sprite2 -blau
	dc.w	$18e,$d50	; COLOR231, - COLOR3 von Sprite2 -orange

	dc.w	$192,$00f	; COLOR233, - COLOR1 von Sprite4 -blau
	dc.w	$194,$f0f	; COLOR234, - COLOR2 von Sprite4 -violet
	dc.w	$196,$bbb	; COLOR235, - COLOR3 von Sprite4 -grau

	dc.w	$19a,$8e0	; COLOR237, - COLOR1 von Sprite6 -hellgrün
	dc.w	$19c,$a70	; COLOR238, - COLOR2 von Sprite6 -braun
	dc.w	$19e,$d00	; COLOR239, - COLOR3 von Sprite6 -dunkelrot

; Jetzt die Palettenbank für ungerade Sprites

	dc.w	$1a2,$555	; COLOR241, - COLOR1 von Sprite1 -grau
	dc.w	$1a4,$aa0	; COLOR242, - COLOR2 von Sprite1 -gelb
	dc.w	$1a6,$0af	; COLOR243, - COLOR3 von Sprite1 -hellblau

	dc.w	$1aa,$a0a	; COLOR245, - COLOR1 von Sprite3 -...
	dc.w	$1ac,$3fa	; COLOR246, - COLOR2 von Sprite3 -...
	dc.w	$1ae,$faf	; COLOR247, - COLOR3 von Sprite3 -...

	dc.w	$1b2,$254	; COLOR249, - COLOR1 von Sprite5 -...
	dc.w	$1b4,$5a3	; COLOR250, - COLOR2 von Sprite5 -...
	dc.w	$1b6,$4ee	; COLOR251, - COLOR3 von Sprite5 -...

	dc.w	$1ba,$22c	; COLOR253, - COLOR1 von Sprite7 -...
	dc.w	$1bc,$381	; COLOR354, - COLOR2 von Sprite7 -...
	dc.w	$1be,$fe9	; COLOR255, - COLOR3 von Sprite7 -...

	dc.w	$ffff,$fffe	; Ende Copperlist


;*****************************************************************************
; Hier sind die Sprites: Offensichtlich müssen sie sich im CHIP-RAM befinden!
;*****************************************************************************

MeinSprite0:		; Länge 13 Zeilen
Vstart0:
	dc.b $60	; Pos. vertikal (von $2c bis $f2)
Hstart0:
	dc.b $60	; Pos. horizontal (von $40 bis $d8)
Vstop0:
	dc.b $68	; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001110001111
 dc.w	%0011111111111100,%1100010001000011
 dc.w	%0111111111111110,%1000010001000001
 dc.w	%0111111111111110,%1000010001000001
 dc.w	%0011111111111100,%1100010001000011
 dc.w	%0000111111110000,%1111001110001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite


MeinSprite1:		; Länge 13 Zeilen
Vstart1:
	dc.b $60	; Pos. vertikal (von $2c bis $f2)
Hstart1:
	dc.b $60+14	; Pos. horizontal (von $40 bis $d8)
Vstop1:
	dc.b $68	; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111000010001111
 dc.w	%0011111111111100,%1100000110000011
 dc.w	%0111111111111110,%1000000010000001
 dc.w	%0111111111111110,%1000000010000001
 dc.w	%0011111111111100,%1100000010000011
 dc.w	%0000111111110000,%1111000111001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

 ; für die Sprite 2 und 3
 ;binär 00=COLOR 0 (transparent)
 ;binär 10=COLOR 1 (weiss)
 ;binär 01=COLOR 2 (blau)
 ;binär 11=COLOR 3 (orange)

MeinSprite2:			; Länge 13 Zeilen
Vstart2:
	dc.b $60		; Pos. vertikal (von $2c bis $2f2)
Hstart2:
	dc.b $60+(14*2)	; Pos. horizontal (von $40 bis $d8)
Vstop2:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111000111001111
 dc.w	%0011111111111100,%1100001000100011
 dc.w	%0111111111111110,%1000000000100001
 dc.w	%0111111111111110,%1000000111000001
 dc.w	%0011111111111100,%1100001000000011
 dc.w	%0000111111110000,%1111001111101111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

MeinSprite3:			; Länge 13 Zeilen
Vstart3:
	dc.b $60		; Pos. vertikal (von $2c bis $f2)
Hstart3:
	dc.b $60+(14*3)	; Pos. horizontal (von $40 bis $d8)
Vstop3:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001111101111
 dc.w	%0011111111111100,%1100000000100011
 dc.w	%0111111111111110,%1000000111100001
 dc.w	%0111111111111110,%1000000000100001
 dc.w	%0011111111111100,%1100000000100011
 dc.w	%0000111111110000,%1111001111101111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

 ; für die Sprite 4 und 5
 ;binär 00=COLOR 0 (transparent)
 ;binär 10=COLOR 1 (blau)
 ;binär 01=COLOR 2 (violet)
 ;binär 11=COLOR 3 (grau)

MeinSprite4:			; Länge 13 Zeilen
Vstart4:
	dc.b $60		; Pos. vertikal (von $2c bis $f2)
Hstart4:
	dc.b $60+(14*4)	; Pos. horizontal (von $40 bis $d8)
Vstop4:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001001001111
 dc.w	%0011111111111100,%1100001001000011
 dc.w	%0111111111111110,%1000001111000001
 dc.w	%0111111111111110,%1000000001000001
 dc.w	%0011111111111100,%1100000001000011
 dc.w	%0000111111110000,%1111000001001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

MeinSprite5:			; Länge 13 Zeilen
Vstart5:
	dc.b $60		; Pos. vertikal (von $2c bis $f2)
Hstart5:
	dc.b $60+(14*5)	; Pos. horizontal (von $40 bis $d8)
Vstop5:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001111001111
 dc.w	%0011111111111100,%1100001000000011
 dc.w	%0111111111111110,%1000001111000001
 dc.w	%0111111111111110,%1000000001000001
 dc.w	%0011111111111100,%1100000001000011
 dc.w	%0000111111110000,%1111001111001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

 ; für die sprite 6 und 7
 ;binär 00=COLOR00 (transparent)
 ;BINÄR 10=COLOR 1 (HELLGRÜN)
 ;BINÄR 01=COLOR 2 (BRAUN)
 ;BINÄR 11=COLOR 3 (DUNKELROT)

MeinSprite6:			; Länge 13 Zeilen
Vstart6:
	dc.b $60		; Pos. vertikal (von $2c bis $f2)
Hstart6:
	dc.b $60+(14*6)	; Pos. horizontal (von $40 bis $d8)
Vstop6:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001111001111
 dc.w	%0011111111111100,%1100001000000011
 dc.w	%0111111111111110,%1000001111000001
 dc.w	%0111111111111110,%1000001001000001
 dc.w	%0011111111111100,%1100001001000011
 dc.w	%0000111111110000,%1111001111001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite

MeinSprite7:			; Länge 13 Zeilen
Vstart7:
	dc.b $60		; Pos. vertikal (von $2c bis $f2)
Hstart7:
	dc.b $60+(14*7)	; Pos. horizontal (von $40 bis $d8)
Vstop7:
	dc.b $68		; $60+13=$6d	; Ende vertikal.
	dc.b $00
 dc.w	%0000001111000000,%0111110000111110
 dc.w	%0000111111110000,%1111001111001111
 dc.w	%0011111111111100,%1100000001000011
 dc.w	%0111111111111110,%1000000001000001
 dc.w	%0111111111111110,%1000000001000001
 dc.w	%0011111111111100,%1100000001000011
 dc.w	%0000111111110000,%1111000001001111
 dc.w	%0000001111000000,%0111110000111110
 dc.w	0,0	; Ende Sprite


	SECTION	LEEREPLANE,BSS_C	; Die von uns verwendete Reset-Bitebene,
								; weil um die Sprites zu sehen
								; muss es aktivierte Bitebenen geben
Bitplane:
	ds.b	40*256		; Bitplane leer lowres

	end

Das gesamte Listing basiert auf diese beiden Register der copperliste:

	dc.w	$106,$ec00		; AUSWAHL 7 (224-255), NIBBLE HOCH

	dc.w	$10c,%11101111	; BPLCON4 - Palette sprite gerade = 224-240
								; 	    Palette sprite ungerade = 240-256

Dann werden die Farben von 225 bis 255 eingestellt (nur die hohen nibble
Ich nicht will auch die niedrigen setzen!).	

Das "Verschieben" der Sprite-Palette an den unteren Rand der Palette kann
hilfreich sein, wenn Sie Figuren mit bis zu 128 Farben sehen. Dann ist die
Palette von unserem Sprite völlig unabhängig. Wenn die Figur in 256 Farben
ist, kann man sich für jede Bank mit 16 Farben entscheiden, die auch für 
Sprites verwendet werden können.