This is an old version from the tos.hyp. The new is on GitHub!

HomeLine-AUndraw spriteCopy 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 Vorgergrunddaten 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:
movem.l   D0-D2/A0-A2/A6,-(A7) ; Register retten
move.w    x,D0                 ; X-Position nach D0
move.w    y,D1                 ; Y-Position nach D1
move.l    pSdb,A0              ; Pointer Sprite-Definition-Block nach A0
move.l    pSsb,A2              ; Pointer Sprite-Save-Block nach A2
dc.w      $A00D                ; Line-A Opcode
movem.l   (A7)+,D0-D2/A0-A2/A6 ; Register restaurieren

HomeLine-AUndraw spriteCopy raster form