Home Line-ALine-A Undraw spriteUndraw sprite Copy raster formCopy raster form

6.18 Draw sprite

Name: »Draw sprite«
 
Line-A Nummer: $A00D
 
Binding: Bindings für draw_sprite
 
Beschreibung: Diese Line-A Funktion zeichnet ein Sprite auf den Bildschirm. Die X Position wird in D0, die Y Position in D1 übergeben. A0 zeigt auf eine Struktur des Typs SDB, die den Aufbau des Sprites beschreibt. A2 zeigt auf den Sprite-Save-Puffer, der zur Aufnahme des geretteten Hintergrunds dient und mindestens die Größe 10 + 64 * Anzahl der Farbebenen haben muß. Das Register A6 wird zerstört.
 
typedef struct
{
  int16_t xhot,       /* X-Offset                   */
          yhot,       /* Y-Offset                   */
          form,       /* Format (1 = VDI, -1 = XOR) */
          bgcol,      /* Hintergrundfarbe           */
          fgcol,      /* Vordergrundfarbe           */
          image[32];  /* Sprite-Image               */
} SDB;
Variable Bedeutung
   
xhot X-Koordinate des Aktionspunkts des Sprites, wie bei Transform mouse.
yhot Y-Koordinate des Aktionspunkts des Sprites, wie bei Transform mouse.
form 1 für das VDI-Format und -1 für das XOR-Format.
bgcol Die Farbe des Hintergrunds
fgcol Die Farbe des Vordergrunds.
image Die Daten für den Vordergrund und den Hintergrund des 16*16 Pixel großen Sprite. Dabei wird abwechselnd zuerst ein Wort des Hintergrunds und dann ein Wort des Vordergrunds gespeichert.

Das Ergebnis auf dem Bildschirm ist abhängig von dem in form bestimmten Format und kann für jeweils 1 Bit aus den Vordergrunddaten und Hintergrunddaten der folgenden Tabelle entnommen werden. Old ist der bisherige Bildpunkt, new der neue nach dem Zeichnen des Sprite:
 

Vordergr. Hintergr. VDI-Format XOR-Format
0 0 new = old new = old
0 1 new = bgcol new = bgcol
1 0 new = fgcol new = fgcol xor old
1 1 new = fgcol new = fgcol
Ergebnis: Die Funktion liefert keinen Returnwert.
 
Verfügbar: Alle TOS-Versionen.
 
Querverweis: Binding   Transform mouse   Undraw sprite
 

6.18.1 Bindings für draw_sprite

Pure-C:
 
typedef struct
{
  int16_t xhot,       /* X-Offset                   */
          yhot,       /* Y-Offset                   */
          form,       /* Format (1 = VDI, -1 = XOR) */
          bgcol,      /* Hintergrundfarbe           */
          fgcol,      /* Vordergrundfarbe           */
          image[32];  /* Sprite-Image               */
} SDB;

typedef int16_t SSB[10 + 4 * 64];

void draw_sprite( int16_t x, int16_t y, SDB *pSdb, SSB *pSsb );
Assembler:
 
; Register retten
movem.l   D0-D2/A0-A2/A6,-(A7)
; X-Position nach D0
move.w    x,D0
; Y-Position nach D1
move.w    y,D1
; Pointer Sprite-Definition-Block nach A0
move.l    pSdb,A0
; Pointer Sprite-Save-Block nach A2
move.l    pSsb,A2
; Line-A Opcode
dc.w      $A00D
; Register restaurieren
movem.l   (A7)+,D0-D2/A0-A2/A6

Home Line-ALine-A Undraw spriteUndraw sprite Copy raster formCopy raster form