Home Line-ALine-A Get pixelGet pixel Horizontal lineHorizontal line

6.8 Arbitrary line

Name: »Arbitrary line«
 
Line-A Nummer: $A003
 
Binding: Bindings für draw_line
 
Beschreibung: Diese Line-A Funktion zeichnet eine Line von links oben nach rechts unten. Die folgenden Line-A Variablen werden benutzt:
 
Variable Bedeutung
   
x1 X-Koordinate des ersten Endpunkts.
y1 Y-Koordinate des ersten Endpunkts.
x2 X-Koordinate des zweiten Endpunkts.
y2 Y-Koordinate des zweiten Endpunkts.
fg_bp_1 Bitwert der ersten Plane für die Farbe, mit der gefüllt werden soll.
fg_bp_2 Bitwert der zweiten Plane (nur niedrige oder mittlere Auflösung).
fg_bp_3 Bitwert der dritten Plane (nur niedrige Auflösung).
fg_bp_4 Bitwert der vierten Plane (nur niedrige Auflösung).
ln_mask Bitmuster für den Linientyp. Das Bitmuster ist als Punktemuster zu interpretieren.
wrt_mode Schreibmodes, es sind die folgenden Modie möglich:
REPLACE 0 Replace
TRANS 1 Transparent (OR)
XOR 2 Inverse (XOR)
INVERS 3 Inverse Transparent (XOR mit not(LN_MASK))
lstlin Soll der letzte Pixel der Linie gezeichnet werden (1) oder nicht (0).

Hinweis: Unabhängig von der Reihenfolge der Koordinaten wird die Linie immer von links oben nach rechts unten gezeichnet.
 
Für eine horizontale Linie steht die schnellere Funktion $A004 Horizontal line zur Verfügung.
 
Das Bindings von TC übergibt Linienmaske, Schreibmodus und Farbe nicht an die draw_line Funktion sonder benutzt separate Funktionen set_fg_bp(), set_ln_mask() und set_wrt_mode() zum Setzen der Parameter in dem Line-A Paramterblock.
 
Ergebnis: Die Funktion liefert kein Ergebnis. Das Feld ln_mask des Line-A Paramterblocks ist durch den Ausgabealgorithmus geshiftet.
 
Verfügbar: Alle TOS-Versionen.
 
Querverweis: Binding   LINEA   Horizontal line
 

6.8.1 Bindings für draw_line

Pure-C: void draw_line(int16_t x1, int16_t y1, int16_t x2, int16_t y2);
 
Assembler:
 
; Register retten
movem.l   D0-D2/A0-A2,-(A7)
; Zeiger Parameterblock LINEA
move.l    pParamblk,A0
; erste X-Koordinate in LINEA.x1
move.w    x1,(38,A0)
; erste Y-Koordinate in LINEA.y1
move.w    y1,(40,A0)
; zweite X-Koordinate in LINEA.x2
move.w    x2,(42,A0)
; zweite Y-Koordinate in LINEA.y2
move.w    y2,(44,A0)
; Bit für erste Plane in LINEA.fg_bp_1
move.w    colbit0,(24,A0)
; Bit für erste Plane in LINEA.fg_bp_2
move.w    colbit1,(26,A0)
; Bit für erste Plane in LINEA.fg_bp_3
move.w    colbit2,(28,A0)
; Bit für erste Plane in LINEA.fg_bp_4
move.w    colbit3,(30,A0)
; Linestyle in LINEA.ln_mask
move.w    lnmask,(34,A0)
; Writemode in LINEA.wrt_mode
move.w    wmode,(36,A0)
; Linestyle in LINEA.lstlin
move.w    lstlin,(32,A0)
; Line-A Opcode
dc.w      $A003
; Register restaurieren
movem.l   (A7)+,D0-D2/A0-A2

Home Line-ALine-A Get pixelGet pixel Horizontal lineHorizontal line