
; Listing9g1.s		Anzeigen eines INTERLEAVED-Bildes
; Linke Taste zum Beenden.

	SECTION	BLIT,CODE

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

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

			;5432109876543210
DMASET	EQU	%1000001111000000	; Bitplane, Copper, Blitter DMA ; $83C0


Start:
	move.l	#Bitplane,d0		; Zeiger auf das Bild
	lea	Bplpointers,a1			; Bitplanepointer
	moveq	#3-1,d1				; Anzahl der Bitebenen (hier sind 3)
PointBp:
	move.w	d0,6(a1)
	swap	d0
	move.w	d0,2(a1)
	swap	d0					; HIER IST DER ERSTE UNTERSCHIED
								; ZU DEN NORMALEN BILDERN !!!!!!
	add.l	#40,d0				; + LÄNGE einer ZEILE !!!!!
	addq.w	#8,a1
	dbra	d1,PointBp

	lea	$dff000,a5				; Custom Register Base in a5
	move.w	#DMASET,$96(a5)		; DMACON - einschalten Bitplane, Copper, Blitter
	move.l	#Copperlist,$80(a5)	; Zeiger Copperlist
	move.w	d0,$88(a5)			; Start Copperlist
	move.w	#0,$1fc(a5)			; AGA "deaktivieren"
	move.w	#$c00,$106(a5)		; AGA "deaktivieren"
	move.w	#$11,$10c(a5)		; AGA "deaktivieren"

Mouse:
	btst	#6,$bfe001			; linke Maustaste gedrückt?
	bne.s	Mouse				; Wenn nicht, gehe zurück zu Mouse:
	rts							; Ausgang

	SECTION	GRAPHIC,DATA_C

Copperlist:
	dc.w	$8e,$2c81			; DIWSTRT
	dc.w	$90,$2cc1			; DIWSTOP
	dc.w	$92,$38				; DDFSTRT
	dc.w	$94,$d0				; DDFSTOP
	dc.w	$102,0				; BPLCON1
	dc.w	$104,0				; BPLCON2
				
								; HIER IST DER ZWEITE UNTERSCHIED 
								; ZU DEN NORMALEN BILDERN !!!!!!
	dc.w	$108,80				; Wert Modulo = 2*20*(3-1)= 80
	dc.w	$10a,80				; BEIDE MODULO MIT GLEICHEM WERT.

	dc.w	$100,$3200			; BPLCON0 - 3 Bitplanes lowres

Bplpointers:
	dc.w	$e0,$0000,$e2,$0000	; erste Bitplane
	dc.w	$e4,$0000,$e6,$0000
	dc.w	$e8,$0000,$ea,$0000

	dc.w	$0180,$000			; COLOR00
	dc.w	$0182,$475			; COLOR01
	dc.w	$0184,$fff			; COLOR02
	dc.w	$0186,$ccc			; COLOR03
	dc.w	$0188,$999			; COLOR04
	dc.w	$018a,$232			; COLOR05
	dc.w	$018c,$777			; COLOR06
	dc.w	$018e,$444			; COLOR07

	dc.w	$ffff,$fffe			; Ende Copperlist


Bitplane:
	incbin	"/Sources/amiga.rawblit"	
								; Hier laden wir das Bild ein
								; RAWBLIT-Format (oder interleaved),
								; mit KEFCON konvertiert.
	end

In diesem Beispiel zeigen wir ein Bild im Interleaved-Format an (oder Rawblit,
wie KEFCON es nennt). Es ist das übliche Bild, aber wir mussten es in das
interleaved-Format konvertieren, also verwenden wir eine andere Datei. Wie wir
es bereits in der Lektion gesagt haben, um Bilder in diesem Format anzuzeigen
müssen Sie 2 Dinge im Vergleich zu den normalen Bildern ändern:

1) Beim Zeiger der Bitebene ist es notwendig, die Adressen der verschiedenen
Bitebenen zu berechnen, die zwischen den einzelnen Zeilen "liegen" und nicht
durch alle Zeilen der Bitebene

2) die Bitebenen Modulo sind nicht gleich 0, sondern dienen dazu, die Zeilen
der anderen Bitebenen zu überspringen. Sie werden mit der Formel berechnet, die
wir in der Lektion gesehen haben:

 Modulo=2*L*(N-1) 	Wobei L die Breite der Bitebene ist, ausgedrückt in 
					Worten und N ist die Anzahl der Bitebenen

In unserem Fall sind die Bitebenen 20 Wörter breit (320/16) oder 40 Bytes,
und die Anzahl der Bitebenen ist 3. Sie können den Unterschied 1) in den ersten
Zeilen des Programms finden, in der Schleife, wo die Zeiger auf die Bitebenen
in die Copperliste geladen werden, und den Unterschied 2) in der Copperliste,
die Anweisungen, die den Wert der Modulo in die Register BPL1MOD und BPL2MOD
laden.
