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

  1.  
  2. ; Listing4a.s    UNIVERSELLE ROUTINE ZUM POINTEN DER BITPLANES
  3.  
  4.     SECTION CiriBiri,CODE
  5.  
  6. Anfang:
  7.     MOVE.L    #PIC,d0        ; in d0 kommt die Adresse von unserer PIC
  8.                 ; bzw. wo ihr erstes Bitplane beginnt
  9.  
  10.     LEA    BPLPOINTERS,A1    ; in a1 kommt die Adresse der Bitplane-
  11.                 ; Pointer der Copperlist
  12.     MOVEQ    #2,D1        ; Anzahl der Bitplanes -1 (hier sind es 3)
  13.                 ; für den DBRA - Zyklus
  14. POINTBP:
  15.     move.w    d0,6(a1) ; kopiert das niederwertige Word der Plane-
  16.              ; Adresse ins richtige Word der Copperlist
  17.     swap    d0     ; vertauscht die 2 Word in d0 (Z.B.: 1234 > 3412)
  18.                 ; dadurch kommt das hochwertige Word an die
  19.                 ; Stelle des niederwertigen, wodurch das
  20.                 ; kopieren mit dem Move.w ermöglicht wird!!
  21.     move.w    d0,2(a1) ; kopiert das hochwertige Word der Adresse des 
  22.              ; Plane in das richtige Word in der Copperlist
  23.     swap    d0     ; vertauscht erneut die 2 Word von d0 (3412 > 1234)
  24.               ; damit wird die orginale Adresse wieder hergestellt
  25.     ADD.L    #40*256,d0 ; Zählen 10240 zu D0 dazu, somit zeigen wir
  26.                ; auf das zweite Bitplane (befindet sich direkt
  27.                ; nach dem ersten), wir zählen praktisch die Länge
  28.                ; eines Plane dazu
  29.               ; In den nächsten Durchgängen werden wir dann auf das
  30.               ; dritte, vierte... Bitplane zeigen
  31.  
  32.     addq.w    #8,a1        ; a1 enthält nun die Adresse der nächsten
  33.                 ; bplpointers in der Copperlist, die es
  34.                 ; einzutragen gilt
  35.     dbra    d1,POINTBP  ; Wiederhole D1 mal POINTBP (D1=num of bitplanes)
  36.  
  37.     rts            ; ENDE!!
  38.  
  39.  
  40.  
  41. COPPERLIST:
  42. ;    ....    ; hier setzen wir die nötigen Register eim...
  43.  
  44. ;    Wir lassen die Bitplanes direkt anpointen, indem wir die Register 
  45. ;    $dff0e0 und folgende direkt in die Copperlist geben, gefolgt von
  46. ;    den Adressen der Bitplanes. Diese werden von der Routine POINTBP
  47. ;    eingesetzt.
  48.  
  49. BPLPOINTERS:
  50.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane - BPL0PT
  51.     dc.w $e4,$0000,$e6,$0000    ;zweites Bitplane - BPL1PT
  52.     dc.w $e8,$0000,$ea,$0000    ;drittes Bitplane - BPL2PT
  53. ;    ....
  54.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  55.  
  56. ;    Erinnert euch, die Directory auszuwählen, in der das Bild zu
  57. ;    finden ist, in diesem Fall: "V df0:LISTINGS2"
  58.  
  59.  
  60. PIC:
  61.     incbin  "amiga.320*256*3"    ; hier laden wir das Bild imRAW
  62.                     ; Format, das zuvor mit dem
  63.                     ; KEFCON konvertiert wurde, es
  64.                     ; besteht aus drei Bitplanes
  65.                     ; nacheinander
  66.  
  67.     end
  68.  
  69. Probiert ein "AD", also ein DEBUG, dieser Routine zu machen. Dabei  achtet
  70. vor  allem auf den Wert in d0, rechts oben sichtbar, in dem Moment, in dem
  71. das SWAP ausgeführt wird. Um die Funktionalität  zu  überprüfen,  probiert
  72. mit  einem  "M BPLPOINTERS" zu schauen, ob nach Abarbeitung des Programmes
  73. die Adressen von PIC: geändert wurden, also GESWAPPT. Mit  einem  "M  PIC"
  74. kann  man  die  Adresse sehen, wohin das INCBIN das Bild geladen hat, das,
  75. wie vorausgesehen, 30720 Bytes lang war: 40*256*2.
  76.  
  77.