Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

GRAPHICS VDU

Die Grafik-Routinen

BBBA: GRA INITIALISE

Initialisiere Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Die Abteilungen des Betriebssystems: Die Grafik-VDUDie Grafik-VDU wird komplett initialisiert. Betroffen sind:

- Die Sprungleisten: die IndirectionsDie Indirections der Grafik-VDU
- Grafik-PAPER   := 0 (Hintergrund-Tinte)
- Grafik-PEN     := 1 (Vordergrund-Tinte)
- Grafik-WINDOW  := ganzer Bildschirm
- ORIGIN 0,0
- MOVE  0,0

CPC 664 und 6128 zusätzlich:

- Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus := opaque (deckend)
- Linienmaske       := &FF (durchgezogene Linie)
- Erster-Punkt      := wird immer gesetzt

BBBD: GRA RESET

Setze Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU zurück.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Kleine Initialisierung der Grafik-VDU. Es werden nur Die Sprungleisten: die Indirectionsdie Indirections auf die Standard-Routinen eingestellt. Bei CPC 664 und 6128 werden zusätzlich auch der Grafik-Hintergrund-Modus, Die Grafik-VDU: Die Linienmaskedie Linienmaske und die Erster-Punkt-Option auf ihre Default-Werte eingestellt.

BBC0: GRA MOVE ABSOLUTE

Bewege den Grafik-Cursor zur angegebenen Position.

Eingaben:    DE = X-Koordinate und
             HL = Y-Koordinate des Zielpunktes
Ausgaben:    keine
Unverändert: IX,IY

Die Zielkoordinaten werden Adressierungsarten der Z80: Relativrelativ zum Origin angegeben und sind vorzeichenbehaftet (-32768 bis +32767).

BBC3: GRA MOVE RELATIVE

Bewege den Grafik-Cursor Adressierungsarten der Z80: Relativrelativ zur momentanen Position.

Eingaben:    DE = X-Versatz und
             HL = Y-Versatz
Ausgaben:    keine
Unverändert: IX,IY

Die Zielkoordinaten werden Adressierungsarten der Z80: Relativrelativ zur aktuellen Position des Grafikcursors angegeben und sind vorzeichenbehaftet (-32768 bis +32767).

BBC6: GRA ASK CURSOR

Erfrage die momentane Die verwendeten Abkürzungen bedeuten: x:X- und Y-Koordinate des Grafik-Cursors.

Eingaben:    keine
Ausgaben:    DE = X-Koordinate
             HL = Y-Koordinate
Unverändert: BC,IX,IY

Die Grafik-VDU: Die KoordinatenDie Koordinaten werden Adressierungsarten der Z80: Relativrelativ zum Origin angegeben und sind vorzeichenbehaftet (-32768 bis +32767).

BBC9: GRA SET ORIGIN

Lege den Bezugspunkt für die Adressierungsarten der Z80: Absolutabsolute Cursor-Positionierung neu fest.

Eingaben:    DE = X-Koordinate
             HL = Y-Koordinate
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

BBCC: GRA GET ORIGIN

Erfrage den momentanen Grafik-Nullpunkt.

Eingaben:    keine
Ausgaben:    DE = X-Koordinate und
             HL = Y-Koordinate
Unverändert: AF,BC,IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

BBCF: GRA WIN WIDTH

Lege den linken und rechten Rand des Grafik-Fensters fest.

Eingaben:    DE und HL enthalten die X-Koordinaten der
             linken und rechten Grenze.
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

DE und HL bestimmen die linke und rechte, innere Fenstergrenze, wobei der kleinere Wert automatisch für den linken Rand genommen wird. DE und HL werden eventuell soweit verkleinert, bis das Die Text-VDU: FensterFenster auf den Bildschirm passt.

Außerdem werden die Fenstergrenzen auf ganze Datentypen: Bytes
Datenbreite: Bytes
Bytes
erweitert, die linke nach links und die rechte nach rechts. Die tatsächlichen Fenstergrenzen ergeben sich (wenn DE < HL) dann zu:

links  = DE and &FFF8
rechts = HL  or &0007

BBD2: GRA WIN HEIGHT

Lege den oberen und unteren Rand des Grafikfensters fest.

Eingaben:    DE und HL enthalten die Y-Koordinaten
             der oberen und unteren Fenstergrenze.
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

DE und HL geben die obere und untere, innere Grenze des Grafikfensters an, wobei automatisch der kleinere Wert für die untere Grenze benutzt wird. DE und HL werden soweit verkleinert, bis das Die Text-VDU: FensterFenster auf den Bildschirm passt.

Außerdem werden Die Grafik-VDU: Die Koordinatendie Koordinaten auf Rasterzeilen-Grenzen erweitert. Da eine Rasterzeile des Monitorbildes zwei logische Grafikzeilen umfasst, ergeben sich (wenn DE < HL) die tatsächlichen Grenzen zu:

oben  = HL or  &0001
unten = DE and &FFFE

BBD5: GRA GET W WIDTH

Erfrage den linken und rechten Rand des Grafik-Fensters.

Eingaben:    keine
Ausgaben:    DE und HL = linke und rechte Fenstergrenze
Unverändert: BC,IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

Angegeben werden die inneren Grenzen, also die X-Koordinaten des ersten und des letzten Punktes innerhalb des Fensters.

BBD8: GRA GET W HEIGHT

Erfrage den oberen und unteren Rand des Grafik-Fensters.

Eingaben:    keine
Ausgaben:    DE und HL enthalten die Y-Koordinate der oberen und unteren
             Fenstergrenze.
Unverändert: BC,IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke mit den Koordinaten (0,0) und vorzeichenbehaftet (-32768 bis +32767).

Es werden die inneren Fenstergrenzen angegeben, also die Y-Koordinaten der obersten und der untersten Zeile des Grafikfensters.

BBDB: GRA CLEAR WINDOW

Lösche die Anzeige im Grafik- Die Text-VDU: FensterFenster.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Das Grafikfenster wird mit der Grafik-PAPER-INK gelöscht. Der Grafikcursor wird zum Origin bewegt.

BBDE: GRA SET PEN

Lege die Die Bildausgabe: Tinten und FarbenTinte des Zeichenstiftes neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Nummer der Vordergrund-Tinte (Grafik-PEN-INK)
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Die Tintennummer wird mit 1, 3 oder 15 maskiert, um einen im momentan eingestellten Bildschirm-Modus gültigen Wert zu erhalten.

Die Grafik-PEN-INK wird benutzt für PLOT, DRAW und um Zeichen an der Position des Grafikcursors auszugeben. Bei CPC 664 und 6128 ist sie auch eine der Die Bildausgabe: Tinten und FarbenTinten, die die Füllfläche für &GRAPHICS VDU: BD52: GRA FILLBD52 GRA FILL.

BBE1: GRA GET PEN

Erfrage die momentane Die Bildausgabe: Tinten und FarbenTinte des Zeichenstiftes.

Eingaben:    keine
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Nummer der Vordergrund-Tinte (Grafik-PEN-INK)
Unverändert: BC,DE,HL,IX,IY

BBE4: GRA SET PAPER

Lege die Hintergrund-Tinte für Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = neue Hintergrund-Tinte (Grafik-PAPER-INK)
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Die Tintennummer wird mit 1, 3 oder 15 maskiert, um einen im momentan eingestellten Bildschirm-Modus gültigen Wert zu erhalten.

Die Grafik-PAPER-INK wird benutzt, um das Grafikfenster zu löschen und um den Hintergrund von Buchstaben zu zeichnen, die an der Position des Grafikcursors ausgegeben werden. Außerdem wird beim Erklärung der Anschlussbelegung: TestTesten von Punkten außerhalb des Grafikfensters immer diese Die Bildausgabe: Tinten und FarbenTinte angegeben. Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 wird beim Zeichnen von Linien für jedes Null-Bit in der Linienmaske die Grafik-Paper-Ink benutzt, wenn der Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus opaque (deckend) ist.

BBE7: GRA GET PAPER

Erfrage die momentane Hintergrund-Tinte.

Eingaben:    keine
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Hintergrund-Tinte (Grafik-PAPER-INK)
Unverändert: BC,DE,HL,IX,IY

BBEA: GRA PLOT ABSOLUTE

Setze einen Punkt auf die angegebenen Position.

Eingaben:    DE = X-Koordinate und
             HL = Y-Koordinate.
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zum ORIGIN und vorzeichenbehaftet (-32768 bis +32767).

Der Punkt wird mit der aktuellen Vordergrund-Tinte (Grafik-PEN-INK) gesetzt und dabei entsprechend dem Grafik-Vordergrundmodus mit der Die Bildausgabe: Tinten und FarbenTinte (INK) des alten Punktes verknuepft.

Liegt der Punkt außerhalb des Grafikfensters, wird er nicht gesetzt.

Der Punkt wird gesetzt, indem Die Indirections der Firmware-Packs: BDDC: IND GRA PLOTIND GRA PLOT aufgerufen wird.

BBED: GRA PLOT RELATIVE

Setze einen Punkt Adressierungsarten der Z80: Relativrelativ zur momentanen Position des Grafik-Cursors.

Eingaben:    DE = X-Versatz und
             HL = Y-Versatz.
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur aktuellen Position des Grafikcursors und vorzeichenbehaftet (-32768 bis +32767).

Ansonsten wie &GRAPHICS VDU: BBEA: GRA PLOT ABSOLUTEBBEA GRA PLOT ABSOLUTE

BBF0: GRA TEST ABSOLUTE

Erklärung der Anschlussbelegung: TestTeste, welche Tintennummer der Punkt auf der angegebenen Position hat.

Eingaben:    DE = X-Koordinate und
             HL = Y-Koordinate des zu testenden Punktes.
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Die Bildausgabe: Tinten und FarbenTinte (INK) des Punktes
Unverändert: IX,IY

Die Koordinaten sind Adressierungsarten der Z80: Relativrelativ zum ORIGIN und vorzeichenbehaftet (-32768 bis +32767).

Wird ein Punkt außerhalb des Grafikfensters getestet, so wird die aktuelle Hintergrung-Tinte (Grafik-PAPER-INK) zurückgegeben.

BBF3: GRA TEST RELATIVE

Erklärung der Anschlussbelegung: TestTeste, welche Tintennummer ein Punkt Adressierungsarten der Z80: Relativrelativ zur aktuellen Lage des Grafik-Cursors hat.

Eingaben:    DE = X-Versatz und
             HL = Y-Versatz.
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Die Bildausgabe: Tinten und FarbenTinte (INK) des Punktes
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur aktuellen Position des Grafikcursors und vorzeichenbehaftet (-32768 bis 32767).

Wird ein Punkt außerhalb des Grafikfensters getestet, so wird die aktuelle Hintergrund-Tinte (Grafik-PAPER-INK) zurückgegeben.

BBF6: GRA LINE ABSOLUTE

Ziehe eine Linie von der momentanen Position des Grafik-Cursors zur angegebenen Adressierungsarten der Z80: Absolutabsoluten Position.

Eingaben:    DE = X-Koordinate und
             HL = Y-Koordinate des Zielpunktes.
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zum ORIGIN und Vorzeichenbehaftet (-32768 bis +32767).

Von der aktuellen Position des Grafikcursors wird eine Linie zur angegebenen Position gezogen. Dafür wird die Vordergrund-Tinte (Grafik-PEN-INK) benutzt und bei allen Punkten entsprechend dem Grafik-Vordergrund-Modus mit der alten Die Bildausgabe: Tinten und FarbenTinte (INK) des Punktes verknuepft. Die Linie wird durch Aufruf von Die Indirections der Firmware-Packs: BDE2: IND GRA LINEIND GRA LINE gezeichnet.

Bei CPC 664 und 6128 bestimmt noch zusätzlich Die Grafik-VDU: Die Linienmaskedie Linienmaske, wie die einzelnen Punkte der Linie gesetzt werden. Für jedes Null-Bit wird die Grafik-Paper-Tinte und der Grafik-Hintergrundmodus benutzt.

BBF9: GRA LINE RELATIVE

Ziehe eine Linie zu einer Position Adressierungsarten der Z80: Relativrelativ zur aktuellen Lage des Grafik-Cursors.

Eingaben:    DE = X-Versatz und
             HL = Y-Versatz
Ausgaben:    keine
Unverändert: IX,IY

Die Koordinatenangaben sind Adressierungsarten der Z80: Relativrelativ zur aktuellen Position des Grafikcursors und vorzeichenbehaftet (-32768 bis +32767).

Ansonsten wie &GRAPHICS VDU: BBF6: GRA LINE ABSOLUTEBBF6 GRA LINE ABSOLUTE.

BBFC: GRA WR CHAR

Zeichne einen Buchstaben an der Position des Grafik-Cursors.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Zeichencode
Ausgaben:    keine
Unverändert: IX,IY

Alle Zeichen werden ausgedruckt, Controlcodes werden nicht befolgt. Die Zeichen werden so ausgegeben, dass der Grafikcursor auf der linken, oberen Ecke der Zeichenmatrix liegt. Danach wird der Grafikcursor um einen Buchstaben nach rechts bewegt, also je nach Bildschirm-Modus um 8, 16 oder 32 Koordinateneinheiten.

Zum Zeichnen des Zeichens wird Die Indirections der Firmware-Packs: BDE8: IND SCR WRITEIND SCR WRITE benutzt. Deshalb werden alle Einstellungen der Grafik-VDU befolgt, aber keine der Text-VDU (außer natürlich der TAG-Einstellung).

Diese Einstellungen sind:

- Grenzen des Grafikfensters,
- Grafik-PEN-INK,
- Grafik-PAPER-INK und
- Grafikmodus (Verknüpfung mit der alten Die Bildausgabe: Tinten und FarbenTinte der Punkte).

Garbage Collection: ... beim CPC 464Beim CPC gibt es nur einen Grafikmodus für die Vordergrund-Pixel (der Hintergrund ist immer deckend=opaque), bei den CPCs 664 und 6128 muss man noch zwischen Vordergrund- und Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus unterscheiden. Letzterer wird als Default wie Garbage Collection: ... beim CPC 464beim CPC 464 auf opaque eingestellt. Die zweite Wahlmöglichkeit ist transparent. Hier werden die Hintergrundpixel einfach nicht geplottet.

BD43: GRA DEFAULT

nur CPC 664 und 6128.

Stelle die Standardwerte für die verschiedenen Optionen der Grafik-VDU ein.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Diese Routine nimmt folgende Einstellungen vor:

- Grafik-Vordergrund-Modus = opaque
- Grafik-Hintergrund-Modus = opaque
- Erster-Punkt-Option = Ein
- Linienmaske =&FF (durchgezogene Linien)

Bis auf den ersten Punkt, der auch Garbage Collection: ... beim CPC 464beim CPC 464 wählbar ist, werden alle zusätzliche Optionen der CPCs 664 und 6128 so eingestellt, dass die Grafik-Ausgabe der des CPC 464 entspricht.

BD46: GRA SET BACK

nur CPC 664 und 6128.

Setze den Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus der Grafik-VDU.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus
Ausgaben:    keine
Unverändert: AF,BC,DE,HL,IX,IY

Mit diesem Vektor kann festgelegt werden, ob Hintergrund-Punkte gezeichnet werden sollen (opaque) oder nicht (transparent). Das entspricht dem Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus der Text-VDU, bezieht sich hier jedoch auf die Hintergrund-Pixel in Linien (hervorgerufen durch eine entsprechende Einstellung des Pixel-Masken: MaskenbytesMaskenbytes) und in Buchstaben, wenn man &GRAPHICS VDU: BBFC: GRA WR CHARBBFC GRA WR CHAR (nicht Garbage Collection: ... beim CPC 464beim CPC 464!!) benutzt.

Operationen: BD5B / 349A / 349A:  FLO SUBA=0  ->  opaque (default)
A>0  ->  transparent

BD49: GRA SET FIRST

nur CPC 664 und 6128.

Setze die Erster-Punkt-Option für die zu zeichnenden Linien.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA=Erster-Punkt-Flag
Ausgaben:    keine
Unverändert: AF,BC,DE,HL,IX,IY

Speziell, wenn der Grafik-Vordergrundmodus auf 'XOR' eingestellt ist, ist es sinnvoll, auch die Erster-Punkt-Option zu löschen (ersten Punkt einer Linie nicht zeichnen). Dadurch wird vermieden, dass in Streckenzügen die Eckpunkte zweimal gezeichnet und damit wieder gelöscht werden. Das wäre speziell dann äußerst ungünstig, wenn man einen geschlossenen Streckenzug nachher mit &GRAPHICS VDU: BD52: GRA FILLBD52 GRA FILL ausmalen moechte. Der Algorithmus würde dann nämlich durch die Loecher an den Knickpunkten 'auslaufen'.

Operationen: BD5B / 349A / 349A:  FLO SUBA=0  ->  Ersten Punkt nicht zeichnen (aus)
A>0  ->  Ersten Punkt zeichnen       (ein) (default)

BD4C: GRA SET LINE MASK

nur CPC 664 und 6128.

Lege die Punktmaske für Linien neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA=Punktmaske
Ausgaben:    keine
Unverändert: AF,BC,DE,HL,IX,IY

Mit Hilfe dieser Maske ist es möglich, entweder gebrochene (gepunktete) Linien oder auch zweifarbig gemusterte Linien zu zeichnen (Leider nicht Garbage Collection: ... beim CPC 464beim CPC 464).

Die Punktmaske ist bitsignifikant. Wenn eine Linie gezeichnet wird, wird die Maske einmal rotiert und so das nächste Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
in ihr 'angewählt'. Ist die gesetzt, wird der nächste Punkt der Linie im Grafik-Vordergrund-Modus gesetzt. Ist Hardware-Basteleien: Das 8. Bitdas Bit aber gleich 0, wird der Punkt im Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus gesetzt.

Durch das Rotieren ist die nur 8 Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
breite Maske nicht bereits nach 8 Punkten verbraucht, sondern wird wieder von vorne abgearbeitet. Zwischen zwei aufeinander folgend gezeichneten Linien wird die Maske nicht wieder in Nullposition rotiert, wodurch es keinen Bruch im Muster gibt. Deswegen wird die Maske auch nicht für einen nicht gesetzten ersten Punkt einer Linie einmal im Leerlauf gedreht.

Leider optimieren die Linien-Algorithmen der Grafik-VDU ein wenig, wodurch das Ergebnis hinterher nicht mehr ganz so optimal ist:

Alle eher vertikalen Linien (|dX| < |dY|) werden von unten nach oben und alle eher horizontalen Linien (|dX| > |dY|) werden de facto von links nach rechts gezeichnet, und die Maske auch in dieser Richtung angewendet.

BD4F: GRA FROM USER

nur CPC 664 und 6128.

Konvertiere die User-Koordinaten (Adressierungsarten der Z80: Relativrelativ zum Origin) in Basiskoordinaten (Adressierungsarten der Z80: Relativrelativ zur linken unteren Ecke).

Eingaben:    DE = User-X-Koordinate
             HL = User-Y-Koordinate
Ausgaben:    DE = Basis-X-Koordinate
             HL = Basis-Y-Koordinate
Unverändert: BC,IX,IY

Die Basis-Koordinaten sind die 'Low-Level-Koordinaten', die vor allem vom MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
Screen Pack
benutzt werden. Hierbei ist die linke, untere Ecke der Nullpunkt. Die Skalierung richtet sich nach den physikalisch tatsächlich darstellbaren Punkten: In Y-Richtung geht sie von 0 bis 199 und in X-Richtung hängt sie vom Bildschirm-Modus ab:

- Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
Mode
0: 0 bis 159, - Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
Mode
1: 0 bis 319 und - Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
Mode
2: 0 bis 639.

Leider wird im Schneider CPC hierfür eine äußerst interessante Art der Rundung benutzt: Es wird immer zum Origin hin gerundet. So liegen in Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
Mode
1 beispielsweise die Punkte (-1,y), (0,y) und (1,y) alle auf dem selben Pixel (mit konstantem Die verwendeten Abkürzungen bedeuten: x:x gilt das selbe für die Y-Koordinate). Normalerweise kommen nur zwei Punkte auf jedes Pixel im Bildschirm.

Mit Ausnahme von Die verwendeten Abkürzungen bedeuten: x:X in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 (80 Zeichen) gibt es deshalb beim Nulldurchgang in Die verwendeten Abkürzungen bedeuten: x:X- oder Y-Richtung immer einen Stetigkeitssprung. Werden Kurvenzüge hier im im XOR-Modus geplottet, werden die Pixel auf dem Nulldurchgang oft doppelt geplottet und so wieder entfernt (sehr ungünstig, wenn man nachher vielleicht noch mit GRAPHICS VDU: BD52: GRA FILLGRA FILL ausmalen will).

BD52: GRA FILL

nur CPC 664 und 6128.

Male eine beliebige Fläche aus.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Ausmalfarbe (nicht expandiert)
             HL= Bufferadresse
             DE= Bufferlänge
Ausgaben:    CY=1 -> Fläche vollständig ausgemalt
             CY=0 -> nicht oder nicht vollständig ausgemalt
Unverändert: IX,IY

Der Füllalgorithmus malt jede beliebige, umrandete Fläche aus, ist sehr schnell und funktioniert sogar korrekt (gar nicht so selbstverständlich). Als Startpunkt gilt dabei die aktuelle Position des Grafik-Cursors. Dieser wird beim Ausmalen nicht verschoben.

Als Füllgrenze gelten:

- Das Grafik-Fenster,
- Punkte, die in der Ausmalfarbe gesetzt sind und
- Punkte, die in der Grafik-Vordergrundfarbe gesetzt sind.

Dabei gelten diagonal verbundene Punkte auch als Grenze, d.h. die von der Grafik VDU gemalten Linien sind geeignet, die zu füllende Fläche zu begrenzen.

Ein CY=0 als Rückgabe-Bedingung kann folgende Gründe haben:

Entweder liegt der Grafik-Cursor außerhalb des Grafik-Fensters oder auf einem Pixel mit einer begrenzenden Die Bildausgabe: Tinten und FarbenTinte. Dann wird überhaupt nichts ausgemalt. Oder der zur Verfügung gestellte Puffer war zu klein. Dann wurde die Fläche nicht vollständig ausgemalt.

Der Puffer dient dazu, Verzweigungspunkte der auszumalenden Fläche zu speichern. Für die meisten einfachen Formen kommt man dabei mit 10 Punkten 'dicke' aus. Bei komplizierteren Figuren muss man entsprechend mehr Platz zur Verfügung stellen. Die Fill-Routine benötigt dabei 7 Datentypen: Bytes
Datenbreite: Bytes
Bytes
pro Verzweigung (plus ein Datentypen: Bytes
Datenbreite: Bytes
Byte
für die Endkennung).

Valid HTML   Valid CSS