
; Listing4a.s	UNIVERSELLE ROUTINE ZUM POINTEN DER BITPLANES

	SECTION CiriBiri,CODE

Anfang:
	MOVE.L	#PIC,d0		; in d0 kommt die Adresse von unserer PIC
				; bzw. wo ihr erstes Bitplane beginnt

	LEA	BPLPOINTERS,A1	; in a1 kommt die Adresse der Bitplane-
				; Pointer der Copperlist
	MOVEQ	#2,D1		; Anzahl der Bitplanes -1 (hier sind es 3)
				; für den DBRA - Zyklus
POINTBP:
	move.w	d0,6(a1) ; kopiert das niederwertige Word der Plane-
			 ; Adresse ins richtige Word der Copperlist
	swap	d0	 ; vertauscht die 2 Word in d0 (Z.B.: 1234 > 3412)
				; dadurch kommt das hochwertige Word an die
				; Stelle des niederwertigen, wodurch das
				; kopieren mit dem Move.w ermöglicht wird!!
	move.w	d0,2(a1) ; kopiert das hochwertige Word der Adresse des 
			 ; Plane in das richtige Word in der Copperlist
	swap	d0	 ; vertauscht erneut die 2 Word von d0 (3412 > 1234)
			  ; damit wird die orginale Adresse wieder hergestellt
	ADD.L	#40*256,d0 ; Zählen 10240 zu D0 dazu, somit zeigen wir
			   ; auf das zweite Bitplane (befindet sich direkt
			   ; nach dem ersten), wir zählen praktisch die Länge
			   ; eines Plane dazu
			  ; In den nächsten Durchgängen werden wir dann auf das
			  ; dritte, vierte... Bitplane zeigen

	addq.w	#8,a1	    ; a1 enthält nun die Adresse der nächsten
			    ; bplpointers in der Copperlist, die es
			    ; einzutragen gilt
	dbra	d1,POINTBP  ; Wiederhole D1 mal POINTBP (D1=num of bitplanes)

	rts		    ; ENDE!!



COPPERLIST:
;	....	; hier setzen wir die nötigen Register eim...

;	Wir lassen die Bitplanes direkt anpointen, indem wir die Register 
;	$dff0e0 und folgende direkt in die Copperlist geben, gefolgt von
;	den Adressen der Bitplanes. Diese werden von der Routine POINTBP
;	eingesetzt.

BPLPOINTERS:
	dc.w $e0,$0000,$e2,$0000	;erstes  Bitplane - BPL0PT
	dc.w $e4,$0000,$e6,$0000	;zweites Bitplane - BPL1PT
	dc.w $e8,$0000,$ea,$0000	;drittes Bitplane - BPL2PT
;	....
	dc.w	$FFFF,$FFFE	; Ende der Copperlist

;	Erinnert euch, die Directory auszuwählen, in der das Bild zu
;	finden ist, in diesem Fall: "V df0:LISTINGS2"


PIC:
	incbin  "amiga.320*256*3"	; hier laden wir das Bild imRAW
					; Format, das zuvor mit dem
					; KEFCON konvertiert wurde, es
					; besteht aus drei Bitplanes
					; nacheinander

	end

Probiert ein "AD", also ein DEBUG, dieser Routine zu machen. Dabei  achtet
vor  allem auf den Wert in d0, rechts oben sichtbar, in dem Moment, in dem
das SWAP ausgeführt wird. Um die Funktionalität  zu  überprüfen,  probiert
mit  einem  "M BPLPOINTERS" zu schauen, ob nach Abarbeitung des Programmes
die Adressen von PIC: geändert wurden, also GESWAPPT. Mit  einem  "M  PIC"
kann  man  die  Adresse sehen, wohin das INCBIN das Bild geladen hat, das,
wie vorausgesehen, 30720 Bytes lang war: 40*256*2.

