
; Listing7f.s	ANZEIGEN ALLER 8 SPRITE DES AMIGA

;	In diesem Listing wird gezeigt, daß alle 8 Sprites ihre Palette
;	in Paaren gemeinsam haben, also Sprite 0 die gleiche wie Sprite1
;	hat, Sprite 2 die gleichen Farben wie Sprite 3 und so weiter.
;	Es wird auch gezeigt, wie die Prioritäten bei Überlagerungen
;	verteilt sind, also daß der mit der kleineren Nummer über dem
;	mit einer größeren Vorrang hat, also über diesem angezeigt wird.
;	Sprite 0 wird also über allen anderen angezeigt, Sprite 7 hingegen
;	kann von allen anderen überdeckt werden. Sprite 3 z.B. überdeckt
;	die Sprites 4,5,6,7, wird aber selbst von 0,1 und 2 überdeckt.
;	Durch Drücken der linken Maustaste Überlappen sich die Sprites
;	und die Prioritäten sind gut erkennbar. Rechts Maustaste zum
;	Aussteigen.

	SECTION CipundCop,CODE


Anfang:
	move.l	4.w,a6		; Execbase
	jsr	-$78(a6)	; Disable
	lea	GfxName(PC),a1	; Libname
	jsr	-$198(a6)	; OpenLibrary
	move.l	d0,GfxBase
	move.l	d0,a6
	move.l	$26(a6),OldCop	; speichern die alte COP

;	Pointen auf das "leere" PIC

	MOVE.L	#BITPLANE,d0	; wohin pointen
	LEA	BPLPOINTERS,A1	; COP-Pointer
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

;	Pointen auf die Sprite

	MOVE.L	#MEINSPRITE0,d0		; Adresse des Sprite in d0
	LEA	SpritePointers,a1	; Pointer in der Copperlist
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE1,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE2,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE3,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE4,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE5,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE6,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	MOVE.L	#MEINSPRITE7,d0		; Adresse des Sprite in d0
	addq.w	#8,a1			; nächsten SPRITEPOINTERS
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)

	move.l	#COPPERLIST,$dff080	; unsere COP
	move.w	d0,$dff088		; START COP
	move.w	#0,$dff1fc		; NO AGA!
	move.w	#$c00,$dff106		; NO AGA!

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

	MOVEQ	#$60,d0	   ; Anfangskoordinate HSTART
	ADDQ.B	#(10/2),d0 ; Abstand zum nächsten Sprite
			   ; (zu Bemerken, daß das Byte HSTART immer 2 Pixel
			   ; nimmt, wenn wir uns also um 10 Pixel verstellen
			   ; wollen müssen wir nur 5 zu HSTART dazuzählen!)
	MOVE.B	d0,HSTART1
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART2
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART3
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART4
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART5
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART6
	ADDQ.B	#(10/2),d0	; Abstand zum nächsten Sprite
	MOVE.B	d0,HSTART7

MouseRechts:
	btst	#2,$dff016
	bne.s	MouseRechts

	move.l	OldCop(PC),$dff080	; Pointen auf die SystemCOP
	move.w	d0,$dff088		; Starten die alte Cop

	move.l	4.w,a6
	jsr	-$7e(a6)	; Enable
	move.l	gfxbase(PC),a1
	jsr	-$19e(a6)	; Closelibrary
	rts

;	Daten

GfxName:
	dc.b	"graphics.library",0,0

GfxBase:
	dc.l	0

OldCop:
	dc.l	0


	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,$38		; DdfStart
	dc.w	$94,$d0		; DdfStop
	dc.w	$102,0		; BplCon1
	dc.w	$104,0		; BplCon2
	dc.w	$108,0		; Bpl1Mod
	dc.w	$10a,0		; Bpl2Mod

		    ; 5432109876543210
	dc.w	$100,%0001001000000000  ; bit 12 acceso!! 1 bitplane lowres

BPLPOINTERS:
	dc.w $e0,0,$e2,0	;primo	bitplane

	dc.w	$180,$000	; Color0	; schwarzer Hintergrund
	dc.w	$182,$123	; Color1	; Color1 des Bitplane, das
						; hier leer ist, es erscheint
						; also nicht.

	dc.w	$1A2,$F00	; Color17, - Color1 der Sprite0/1 -ROT
	dc.w	$1A4,$0F0	; Color18, - Color2 der Sprite0/1 -GRÜN
	dc.w	$1A6,$FF0	; Color19, - Color3 der Sprite0/1 -GELB

	dc.w	$1AA,$FFF	; Color21, - Color1 der Sprite2/3 -WEIß
	dc.w	$1AC,$0BD	; Color22, - Color2 der Sprite2/3 -WASSER
	dc.w	$1AE,$D50	; Color23, - Color3 der Sprite2/3 -ORANGE

	dc.w	$1B2,$00F	; Color25, - Color1 der Sprite4/5 -BLAU
	dc.w	$1B4,$F0F	; Color26, - Color2 der Sprite4/5 -VIOLETT
	dc.w	$1B6,$BBB	; Color27, - Color3 der Sprite4/5 -GRAU

	dc.w	$1BA,$8E0	; Color29, - Color1 der Sprite6/7 -HELLGRÜN
	dc.w	$1BC,$a70	; Color30, - Color2 der Sprite6/7 -BRAUN
	dc.w	$1BE,$d00	; Color31, - Color3 der Sprite6/7 -DUNKELROT

	dc.w	$FFFF,$FFFE	; Ende der Copperlist


; ************ Hier die Sprite: KLARERWEISE in CHIP RAM! ************

; Referenztabelle zur Definition der Farben:


; für die Sprite 0 und 1
; BINÄR 00=COLOR 0 (TRANSPARENT)
; BINÄR 10=COLOR 1 (ROT)
; BINÄR 01=COLOR 2 (GRÜN)
; BINÄR 11=COLOR 3 (GELB)

MEINSPRITE0:		; Länge: 13 Zeilen
VSTART0:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART0:
	dc.b $60	; Horizontale Pos. (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 des Sprite


MEINSPRITE1:		; Länge: 13 Zeilen
VSTART1:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART1:
	dc.b $60+14	; Horizontale Pos. (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 des Sprite

 ; für die Sprite 2 und 3
 ;BINÄR 00=COLOR 0 (TRANSPARENT)
 ;BINÄR 10=COLOR 1 (WEIß)
 ;BINÄR 01=COLOR 2 (WASSER)
 ;BINÄR 11=COLOR 3 (ORANGE)

MEINSPRITE2:		; Länge: 13 Zeilen
VSTART2:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART2:
	dc.b $60+(14*2) ; Horizontale Pos. (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 des Sprite

MEINSPRITE3:		; Länge: 13 Zeilen
VSTART3:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART3:
	dc.b $60+(14*3) ; Horizontale Pos. (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 des 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 (VIOLETT)
 ;BINÄR 11=COLOR 3 (GRAU)

MEINSPRITE4:		; Länge: 13 Zeilen
VSTART4:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART4:
	dc.b $60+(14*4) ; Horizontale Pos. (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 des Sprite

MEINSPRITE5:		; Länge: 13 Zeilen
VSTART5:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART5:
	dc.b $60+(14*5) ; Horizontale Pos. (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 des Sprite

 ; für die Sprite 6 und 7
 ;BINÄR 00=COLOR 0 (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	; Vertikale Pos. (von $2c bis $f2)
HSTART6:
	dc.b $60+(14*6) ; Horizontale Pos. (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 des Sprite

MEINSPRITE7:		; Länge: 13 Zeilen
VSTART7:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART7:
	dc.b $60+(14*7) ; Horizontale Pos. (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 des Sprite

		SECTION LEERESPLANE,BSS_C
				; Ein auf 0 gesetztes Bitplane, wir
				; müssen es verwenden, denn ohne Bitplane
				; ist es nicht möglich, die Sprites
				; zu aktivieren
BITPLANE:
	ds.b	40*256		; Bitplane auf 0 Lowres

	end


In  diesem  Listing werden alle 8 Sprites "gepointet", jeder von ihnen hat
die Nummer gezeichnet. Wie schon  in  der  Theorie  erklärt  haben  die  8
Sprites 4 separate Paletten, deswegen teilen sich immer zwei nebenstehende
Sprites eine Palette:

	dc.w	$1A2,$F00	; Color17, - Color1 der Sprite0/1 -ROT
	dc.w	$1A4,$0F0	; Color18, - Color2 der Sprite0/1 -GRÜN
	dc.w	$1A6,$FF0	; Color19, - Color3 der Sprite0/1 -GELB

	dc.w	$1AA,$FFF	; Color21, - Color1 der Sprite2/3 -WEIß
	dc.w	$1AC,$0BD	; Color22, - Color2 der Sprite2/3 -WASSER
	dc.w	$1AE,$D50	; Color23, - Color3 der Sprite2/3 -ORANGE

	dc.w	$1B2,$00F	; Color25, - Color1 der Sprite4/5 -BLAU
	dc.w	$1B4,$F0F	; Color26, - Color2 der Sprite4/5 -VIOLETT
	dc.w	$1B6,$BBB	; Color27, - Color3 der Sprite4/5 -GRAU

	dc.w	$1BA,$8E0	; Color29, - Color1 der Sprite6/7 -HELLGRÜN
	dc.w	$1BC,$a70	; Color30, - Color2 der Sprite6/7 -BRAUN
	dc.w	$1BE,$d00	; Color31, - Color3 der Sprite6/7 -DUNKELROT


Zu Bemerken ist, daß die Farben 16, 20, 24 und 28 nicht  von  den  Sprites
verwendet  werden,  sie  werden übersprungen, da sie dem Color0 des Sprite
entsprechen würden, also  dem  TRANSPARENT,  das  eben  keine  Farbe  ist,
sondern  eher  als  "LOCH"  aufgefasst werden kann. Er nimmt die Farbe des
darunterliegenden Bitplane (oder Sprite) an. Jeder Sprite hat sein VSTART,
VSTOP und HSTART, sehen wir z.B. Sprite2:


MEINSPRITE2:		; Länge: 13 Zeilen
VSTART2:
	dc.b $60	; Vertikale Pos. (von $2c bis $f2)
HSTART2:
	dc.b $60+(14*2) ; Horizontale Pos. (von $40 bis $d8)
VSTOP2:
	dc.b $68	; $60+13=$6d	; Ende Vertikal
	dc.b $00


Jeder  Sprite  ist  von  den  anderen distanziert, indem wir zu HSTART ein
(14*x) dazugezählt haben. Nach dem linken  Mausdruck  werden  alle  HSTART
außer  dem ersten geändert, um sie alle zu überlagern. Das Veranschaulicht
dann die Priotitäten.

