home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
assembler-kurs
/
listings2
/
listing4a.s
next >
Wrap
Text File
|
1977-12-31
|
3KB
|
77 lines
; 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.