Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

SCREEN PACK

Die Bildschirm-Routinen

BBFF: SCR INITIALISE

Initialisiere das Screen-Pack.

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

Komplette Initialisierung des Screen-Packs. Betroffen sind:

- Die Sprungleisten: die IndirectionsDie Indirections des Screen-Pack.
- Alle Die Bildausgabe: Tinten und FarbenTinten (INKs) werden auf ihre Standardwerte gesetzt.
- Die Blinkperioden ebenfalls.
- Der Bildschirm-Modus wird auf 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 eingestellt.
- Der Bildschirm wird in's obere RAM-Viertel gelegt.
- Der Scroll-Offset wird auf 0 gesetzt.
- Der Bildschirm mit Die Bildausgabe: Tinten und FarbenTinte 0 gelöscht.
- Der Grafikmode wird auf opaque (deckend) eingestellt.
- Das Der Kernel - Software-Interrupts: EventsEVENT zum Farbenblinken wird initialisiert.

BC02: SCR RESET

Setze das Screen-Pack zurück.

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

Kleine Initialisierung des Screen-Pack. Betroffen sind:

- Die Sprungleisten: die IndirectionsDie Indirections des Screen-Pack
- Die INKs (Die Bildausgabe: Tinten und FarbenTinten) und
- die Blinkperioden werden auf ihre Standardwerte gesetzt.
- Der Grafikmode wird auf opaque (deckend) eingestellt.

BC05: SCR SET OFFSET

Verändere den Hardware-Scroll-Offset des Bildschirms.

Eingaben:    HL = neuer Scroll-Offset
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

Der Scroll-Offset wird zuerst mit &07FE maskiert, um einen erlaubten Wert sicherzustellen. Dann wird der Bildschirm (hardwaremäßig) gescrollt.

BC08: SCR SET BASE

Verlege den Bildschirm in ein anderes RAM-Viertel.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = MSB des RAM-Viertels
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

Die Bildschirm-Basis wird zuerst mit &Der Zeichensatz des Schneider CPC: &C0 = 192C0 maskiert, da nur exakte RAM-Viertel in Frage kommen. Dann wird die Hardware von der neuen Lage unterrichtet.

Der Scroll-Offset wird nicht geändert, der neue Bildschirm wird auch nicht gelöscht.

BC0B: SCR GET LOCATION

Erfrage Scroll-Offset und Speicher-Viertel des Bildschirmes.

Eingaben:    keine
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = MSB des RAM-Viertels des Bildschirmspeichers und
             HL = Scroll-Offset.
Unverändert: BC,DE,IX,IY

BC0E: SCR SET MODE

Lösche den Bildschirm, setze den Scroll-Offset auf Real: NullNull und lege den Bildschirm-Modus neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = neuer Bildschirm-Modus
Ausgaben:    keine
Unverändert: IX,IY

Zuerst wird Operationen: BD5B / 349A / 349A: FLO SUBA mit 3 maskiert. Enthält Operationen: BD5B / 349A / 349A: FLO SUBA danach den Wert 3, kehrt die Routine sofort zurück.

Sonst wird der Bildschirm mit INK 0 gelöscht und auf den neuen 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
(0, 1 oder 2) umgestellt.

Alle Die Text-VDU: FensterFenster, auch das Grafikfenster, werden auf den ganzen Bildschirm ausgeweitet, die Erklärung zu den verwendeten Bezeichnungen: CursorCursor ausgeschaltet (OFF) und in die linke, obere Ecke gestellt. Der Grafikcursor und ORIGIN kommen in die linke, untere Ecke.

Alle PEN- und PAPER-INKs, auch die der Grafik-VDU, werden entsprechend dem neuen Bildschirmmodus maskiert und können sich deshalb evtl. ändern.

BC11: SCR GET MODE

Erfrage den momentan eingestellten Bildschirm-Modus.

Eingaben:    keine
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = 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
und CY- und Z-Flag werden gesetzt Unverändert: BC,DE,HL,IX,IY

Folgende Ausgaben sind möglich:

- 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 -> CY=1 und Z=0 und Operationen: BD5B / 349A / 349A: FLO SUBA=0
- 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 -> CY=0 und Z=1 und Operationen: BD5B / 349A / 349A: FLO SUBA=1
- 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 -> CY=0 und Z=0 und Operationen: BD5B / 349A / 349A: FLO SUBA=2

BC14: SCR CLEAR

Lösche den ganzen Bildschirm mit der Die Bildausgabe: Tinten und FarbenTinte 0.

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

Der Bildschirm wird mit INK 0 gelöscht. Hat ein Die Text-VDU: FensterFenster eine andere PAPER-INK, so wird das sichtbar, sobald dort ein Zeichen geschrieben oder das Die Text-VDU: FensterFenster gelöscht wird.

Der Scroll-Offset wird auf 0 gesetzt.

Nachdem der Bildschirm gelöscht ist, wird das INK-FLASH-EVENT neu initialisiert.

BC17: SCR CHAR LIMITS

Erfrage, wieviele Buchstaben, abhängig vom aktuellen Bildschirm-Modus, in eine Zeile passen.

Eingaben:    keine
Ausgaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
= letzte Spalte und C = letzte Zeile des Bildschirms Unverändert: DE,HL,IX,IY

Die letzte Zeile und die letzte Spalte werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit den Koordinaten (0,0) angegeben (physikalische Position). Die letzte Zeile ist immer = 24, die letzte Spalte, abhängig vom Bildschirm-Modus, 19, 39 oder 79.

BC1A: SCR CHAR POSITION

Konvertiere eine 'physikalische' Buchstaben-Position in die zugehörige Bildspeicher-Adresse.

Eingaben:    H = Spalte und
             L = Zeile
Ausgaben:    HL = Byte-Adresse und
             LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
= Buchstabenbreite in Datentypen: Bytes
Datenbreite: Bytes
Bytes
Unverändert: C,DE,IX,IY

Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit der Koordinate (0,0) angegeben.

H und L werden nicht auf Plausibilität geprüft. Unsinnige Koordinaten erzeugen genauso unsinnige Adressen.

Die angegebene Adresse gilt für die linke, obere Ecke des Buchstabens.

BC1D: SCR DOT POSITION

Konvertiere eine Grafik-Position in 'Basis'-Koordinaten in die zugehörige Bildspeicher-Adresse.

Eingaben:    DE = X-Koordinate und
             HL = Y-Koordinate
Ausgaben:    HL = Byte-Adresse und
             C = Bitmaske für den Punkt
             LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
= Anzahl Punkte pro Datentypen: Bytes
Datenbreite: Bytes
Byte
- 1 Unverändert: IX,IY

Die Die verwendeten Abkürzungen bedeuten: x:X- und Y-Koordinate beziehen sich dabei auf die linke, untere Ecke mit der Koodinate (0,0). Die Skalierung in Die verwendeten Abkürzungen bedeuten: x:X- und Y-Richtung ist abhängig vom Bildschirm-Modus genau so, dass jedem Datentypen: Realrealen Pixel im Bildschirm genau eine eigene Koordinate zufällt. Die rechte, obere Ecke hat daher folgende Koordinaten:

- 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: (159,199)
- 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: (319,199)
- Mode 2: (639,199)

Die übergebenen Koordinaten werden nicht auf Plausibilität geprüft. Unsinnige Koordinaten ergeben unsinnige Adressen.

BC20: SCR NEXT BYTE

Bestimme die Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Bildschirm-Speicher rechts von der angegebenen Adresse.

Eingaben:    HL = Adresse im Bildschirmspeicher
Ausgaben:    HL = Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
rechts daneben Unverändert: BC,DE,IX,IY

Normalerweise muss dazu die Adresse nur incrementiert werden. Durch die Möglichkeit, den Bildschirm aber auch hardwaremäßig zu scrollen, muss auf das Ende der 'Das Screen Pack: RAM-ZeilenRAM-Zeile' getestet werden.

Ist die übergebene Position die letzte in der Zeile, so ist die neue Adresse die erste Position im Bildschirm 8 Zeilen tiefer. Liegt diese nicht mehr im Bildschirm, so ist es das erste Datentypen: Bytes
Datenbreite: Bytes
Byte
in den unbenutzten 48 Datentypen: Bytes
Datenbreite: Bytes
Bytes
pro 'Das Screen Pack: RAM-ZeilenRAM-Zeile'.

BC23: SCR PREV BYTE

Bestimme die Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Bildschirmspeicher links von der angegebenen Adresse.

Eingaben:    HL = Adresse im Bildschirmspeicher
Ausgaben:    HL = Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
links daneben. Unverändert: BC,DE,IX,IY

Normalerweise muss dazu die Adresse nur decrementiert werden. Durch die Möglichkeit, den Bildschirm aber auch hardwaremäßig zu scrollen, muss auf den Anfang einer Das Screen Pack: RAM-ZeilenRAM-Zeile getestet werden.

Ist die übergebene Position die erste in einer Zeile, so ist die neue Adresse die letzte Position im Bildschirm 8 Zeilen höher. Liegt diese nicht mehr im Bildschirm, so ist es das letzte Datentypen: Bytes
Datenbreite: Bytes
Byte
in den unbenutzten 48 Datentypen: Bytes
Datenbreite: Bytes
Bytes
pro 'Das Screen Pack: RAM-ZeilenRAM-Zeile'.

BC26: SCR NEXT LINE

Bestimme die Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Bildschirmspeicher unter der angegebenen Adresse.

Eingaben:    HL = Adresse im Bildschirmspeicher
Ausgaben:    HL = Adresse darunter
Unverändert: BC,DE,IX,IY

Wird eine Adresse in der letzten Bildschirmzeile übergeben, so ergibt sich kein sinnvolles Ergebnis.

BC29: SCR PREV LINE

Bestimme die Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Bildschirmspeicher über der angegebenen Adresse.

Eingaben:    HL = Adresse im Bildschirmspeicher
Ausgaben:    HL = Adresse darüber
Unverändert: BC,DE,IX,IY

Wird eine Adresse in der ersten Zeile des Bildschirms übergeben, so ergibt sich kein sinnvolles Ergebnis.

BC2C: SCR INK ENCODE

Konvertiere eine Tintennummer in ein Datentypen: Bytes
Datenbreite: Bytes
Byte
, das, in den Bildschirm gepoket, alle betroffenen Punkte in dieser Die Bildausgabe: Tinten und FarbenTinte darstellt.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Tintennummer (INK)
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farb-Byte
Unverändert: BC,DE,HL,IX,IY

Das so erhaltene Datentypen: Bytes
Datenbreite: Bytes
Byte
kann mit einer Bitmaske für das gewünschte Pixel maskiert werden, um so ein Datentypen: Bytes
Datenbreite: Bytes
Byte
zu erhalten, das nur noch das eine Pixel in der gewünschten Die Bildausgabe: Tinten und FarbenTinte eingefärbt enthält. Die Farb-Bytes, die einer Die Bildausgabe: Tinten und FarbenTinte zugeordnet sind, sind in jedem Bildschirm-Mode anders!

BC2F: SCR INK DECODE

Bestimme die Tintennummer des ersten Punktes von links im übergebenen Datentypen: Bytes
Datenbreite: Bytes
Byte
.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farb-Byte
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Tintennummer (INK)
Unverändert: BC,DE,HL,IX,IY

Die Farbkodierung des ersten (linken) Pixels im übergebenen Datentypen: Bytes
Datenbreite: Bytes
Byte
wird entsprechend dem Bildschirm-Modus in die Tintennummer zurück konvertiert.

BC32: SCR SET INK

Lege die beiden Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
fest, in der eine Die Bildausgabe: Tinten und FarbenTinte in den beiden Blinkperioden dargestellt werden soll.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Tintennummer (INK)
             LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C sind die beiden zugehörigen Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
. Ausgaben: keine Unverändert: IX,IY

Die Tintennummer wird mit &0F und die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
mit &1F maskiert, um sie in erlaubte Grenzen zu zwingen. Ab dem nächsten Strahl-Rücklauf werden alle Punkte dieser Die Bildausgabe: Tinten und FarbenTinte in den neuen Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
angezeigt. LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
ist die erste und C die zweite Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
. Werden zwei gleiche Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
angegeben, so blinkt diese Die Bildausgabe: Tinten und FarbenTinte nicht.

BC35: SCR GET INK

Erfrage die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
, in der eine Die Bildausgabe: Tinten und FarbenTinte in den beiden Blinkperioden dargestellt wird.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Tintennummer (INK)
Ausgaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C enthalten die beiden Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
Unverändert: IX,IY

Die Tintennummer wird mit &0F maskiert um einen gültigen Wert sicherzustellen. LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
ist die erste und C die zweite Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
.

BC38: SCR SET BORDER

Bestimme die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
, in denen der Bildschirmrand in den beiden Blinkperioden dargestellt wird.

Eingaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C enthalten die beiden Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
Ausgaben: keine Unverändert: IX,IY

Die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
werden mit &1F maskiert, um sie in erlaubte Grenzen zu zwingen. Ab dem nächsten Strahl-Rücklauf wird der Bildschirm-Rand (BORDER) in den neuen Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
angezeigt. LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
ist die erste und C die zweite Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
. Werden zwei gleiche Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
angegeben, so blinkt der BORDER nicht.

BC3B: SCR GET BORDER

Erfrage die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
, in denen der Bildschirmrand in den beiden Blinkperioden dargestellt wird.

Eingaben:    keine
Ausgaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C enthalten die beiden Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
. Unverändert: IX,IY

BC3E: SCR SET FLASHING

Lege die Länge der beiden Blinkperioden neu fest.

Eingaben:    H und L enthalten die Längen der beiden Perioden.
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

H enthält die anzuzeigende Dauer für die erste Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
, L für die zweite. Die Zeiten werden in Monitorbildern angegeben, also je nach Fernseh-Norm in 1/50stel oder 1/60stel Sekunden. Ein Wert von 0 wird als 256 interpretiert.

Die neuen Zeiten werden erst nach dem nächsten Blinkwechsel übernommen.

BC41: SCR GET FLASHING

Erfrage, welche Länge die beiden Blinkperioden momentan haben.

Eingaben:    keine
Ausgaben:    H und L enthalten die Länge der beiden Perioden
Unverändert: BC,DE,IX,IY

Siehe &SCREEN PACK: BC3E: SCR SET FLASHINGBC3E SCR SET FLASHING.

BC44: SCR FILL BOX

Fülle einen rechteckigen Bildschirm-Ausschnitt mit einer Die Bildausgabe: Tinten und FarbenTinte. Die Grenzen werden in Buchstaben-Positionen angegeben.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
Encoded INK
(Farb-Byte) H = Linke Spalte D = Rechte Spalte L = Oberste Zeile LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
= Unterste Zeile Ausgaben: keine Unverändert: IX,IY

Die anzugebenden Grenzen sind die inneren Grenzen der Füllflaeche und beziehen sich auf die linke, obere Ecke mit der Koordinate (0,0). Die Grenzen werden nicht auf Plausibilität kontrolliert. Unmögliche Grenzwerte führen zu unmöglichen Ergebnissen!

BC47: SCR FLOOD BOX

Fülle einen rechteckigen Bildschirm-Ausschnitt mit einer Die Bildausgabe: Tinten und FarbenTinte. Die Grenzen werden in Byte-Positionen angegeben.

Eingaben:    C = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
Encoded INK
(Farb-Byte) HL = Adresse des Datentypen: Bytes
Datenbreite: Bytes
Bytes
in der linken, oberen Ecke D = Breite der Füllfläche in Datentypen: Bytes
Datenbreite: Bytes
Bytes
LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
= Höhe der Füllfläche in Pixelzeilen. Ausgaben: keine Unverändert: IX,IY

Die übergebenen Werte werden nicht auf Plausibilität überprüft. Unmögliche Grenzen führen zu unsinnigen Ergebnissen. Die Angaben in den Registern D und LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
verstehen sich ohne Vorzeichen, eine 0 bedeutet 256 (und das ist mit Sicherheit zu groß).

BC4A: SCR CHAR INVERT

Invertiere eine Buchstaben-Position (-> Erklärung zu den verwendeten Bezeichnungen: CursorCursor).

Eingaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
und C enthalten je eine Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte). H = Spalte und L = Zeile. Ausgaben: keine Unverändert: IX,IY

Die Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit den Koordinaten (0,0) angegeben. Die Grafik-VDU: Die KoordinatenDie Koordinaten werden nicht auf Plausibilität überprüft. Zu große Werte erzeugen unsinnige Ergebnisse.

Alle Datentypen: Bytes
Datenbreite: Bytes
Bytes
der angegebenen Buchstabenposition werden mit wie folgt verändert:

neu = alt xor LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
xor C

Mit diesem Effekt werden die Standard-Cursorflecken des CPC erzeugt. Durch nochmaliges Aufrufen dieser Routine wird der Flecken automatisch wieder entfernt (Erklärung zu den verwendeten Bezeichnungen: CursorCursor Setzen und Entfernen wird mit der selben Routine erledigt!).

BC4D: SCR HW ROLL

Scrolle den ganzen Bildschirm hardwaremäßig um eine Buchstaben-Position rauf oder runter.

Eingaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
=0 -> Bildschirm nach unten scrollen B>0 -> Bildschirm nach oben scrollen Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte). Ausgaben: keine Unverändert: IX,IY

Der Bildschirm wird hardwaremäßig um 8 Pixelzeilen gescrollt. Die neu sichtbar werdende Buchstabenzeile wird mit dem angegebenen Das Screen Pack: FarbbytesFarbbyte gelöscht.

Zum harwaremäßigen Scrollen wird der Scroll-Offset um 80 erhöht oder erniedrigt (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:
MOD
&800). Außerdem findet die ganze Aktion erst zum nächsten Strahlrücklauf statt. Bis dahin wartet die Routine.

BC50: SCR SW ROLL

Scrolle einen Bildschirm-Ausschnitt um eine Buchstaben-Position rauf oder runter.

Eingaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
=0 -> Scrollen des Bildschirmausschnittes nach unten B>0 -> Scrollen nach oben Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte) H = linke Spalte D = rechte Spalte L = oberste Zeile LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
= unterste Zeile Ausgaben: keine Unverändert: IX,IY

Die Grenzen des zu scrollenden Bildschirmausschnitts sind innere Grenzen und beziehen sich auf die linke, obere Ecke mit den Koordinaten (0,0). Die Grenzen werden nicht auf Plausibilität kontrolliert. Unvorhersehbare Effekte können auftreten, wenn man unsinnige Werte übergibt.

Der Ausschnitt wird um 8 Pixelzeilen gescrollt. Die freiwerdende Zeile wird mit dem angegebenen Farb-Byte gelöscht.

BC53: SCR UNPACK

Expandiere eine Zeichen-Matrix entsprechend dem momentanen Bildschirm-Modus.

Eingaben:    HL zeigt auf Zeichensatz: die Zeichenmatrixdie Zeichenmatrix und
             DE auf einen Puffer für die expandierten Datentypen: Bytes
Datenbreite: Bytes
Bytes
(8, 16 oder 32 Datentypen: Bytes
Datenbreite: Bytes
Bytes
) Ausgaben: Datentypen: Bytes
Datenbreite: Bytes
Bytes
im Puffer Unverändert: IX,IY

Zeichensatz: die ZeichenmatrixDie Zeichenmatrix wird je nach Bildschirm-Modus in 8, 16 oder 32 Datentypen: Bytes
Datenbreite: Bytes
Bytes
expandiert, die, in die Zeichenposition auf dem Bildschirm gepoket, dort das Zeichen mit INK 15, 3 oder 1 (je nach Bildschirm-Modus) auf INK 0 erscheinen liesse. Die expandierten Datentypen: Bytes
Datenbreite: Bytes
Bytes
können jedoch vorher noch mit Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INKs
(Farb-Bytes) und, je nach Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus, mit dem alten Bildschirminhalt verknuepft werden.

BC56: SCR REPACK

Komprimiere die expandierten Datentypen: Bytes
Datenbreite: Bytes
Bytes
wieder zu einer Zeichen-Matrix.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte) H = Spalte und L = Zeile des Zeichens DE zeigt auf den Puffer (8 Datentypen: Bytes
Datenbreite: Bytes
Bytes
) Ausgaben: Matrix im Puffer Unverändert: IX,IY

Die Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke des Bildschirms mit der Koordinate (0,0) in Buchstaben-Positionen angegeben. Sie werden nicht auf Plausibilität geprüft. Der Versuch, von außerhalb des Bildschirms ein Zeichen zu lesen, führt zu keinem sinnvollen Ergebnis.

In der erzeugten Zeichenmatrix sind all die 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:
Bits
gesetzt, deren Pendant auf dem Bildschirm in der durch das Farb-Byte angegebenen Die Bildausgabe: Tinten und FarbenTinte gesetzt waren.

BC59: SCR ACCESS

Setze den Zeichen-Modus für Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = neuer 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
Ausgaben: keine Unverändert: IX,IY

Der Wert im Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
Operationen: BD5B / 349A / 349A: FLO SUBA wird mit 3 maskiert, um einen gültigen Wert zu erzwingen.

Der Zeichen-Modus (Grafikmodus) bestimmt, wie beim Zeichnen die neue Die Bildausgabe: Tinten und FarbenTinte für einen Punkt aus dessen alter und der neuen Die Bildausgabe: Tinten und FarbenTinte berechnet wird:

Zeichenmodus
- Operationen: BD5B / 349A / 349A:  FLO SUBA=0  ->  opaque, deckend (force):  Neu := INK
- Operationen: BD5B / 349A / 349A:  FLO SUBA=1  ->  exclusiv-oder:            Neu := Alt xor INK
- Operationen: BD5B / 349A / 349A:  FLO SUBA=2  ->  und:                      Neu := Alt and INK
- Operationen: BD5B / 349A / 349A:  FLO SUBA=3  ->  oder:                     Neu := Alt or  INK

Der Grafikmodus beeinflusst nur Die Indirections der Firmware-Packs: BDE8: IND SCR WRITEIND SCR WRITE. Diese Überblick: Die Indirections der Firmware-Packs
Die Firmware des Schneider CPC: Die Indirections der Firmware-Packs
Indirection
wird nur von den PLOT- und DRAW-Routinen aufgerufen und bei der Ausgabe eines Zeichen auf der Position des Grafikcursors.

BC5C: SCR PIXELS

Setze einen Punkt im Bildschirm.

Eingaben:    LOW KERNEL JUMPBLOCK: 000B:  LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
= Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte) C = Pixel-Masken: MaskenbytesMaskenbyte für das (oder die) Pixel HL = Adresse im Bildschirmspeicher. Ausgaben: keine Unverändert: BC,DE,HL,IX,IY

Die Bildschirmadresse wird nicht überprüft. Unsinnige Werte führen zu unvorhersehbaren Ergebnissen!

Das oder die durch C ausmaskierten Pixel werden mit der Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
in LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
an der Adresse HL in den Bildschirm gesetzt.

BC5F: SCR HORIZONTAL

Zeichne eine waagerechte Linie.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte) DE = linke X-Koordinate BC = rechte X-Koordinate HL = Y-Koordinate Ausgaben: keine Unverändert: IX,IY

Die Koordinaten-Angaben erfolgen in Basis-Koordinaten. Siehe dazu &SCREEN PACK: BC1D: SCR DOT POSITIONBC1D SCR DOT POSITION.

Die übergebenen Koordinaten müssen im Bildschirm liegen, außerdem muss DE kleiner oder gleich BC sein. Wird das nicht beachtet, können unvorhergesehene Effekt auftreten.

BC62: SCR VERTICAL

Zeichne eine senkrechte Linie.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Farbbytes: Encoded Inks:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Farbmasken (encoded Inks)
encoded INK
(Farb-Byte) DE = X-Koordinate HL = Y-Koordinate des unteren Endes und BC = Y-Koordinate des oberen Endes. Ausgaben: keine Unverändert: IX,IY

Die Angaben erfolgen in Basis-Koordinaten. Siehe dazu &SCREEN PACK: BC1D: SCR DOT POSITIONBC1D SCR DOT POSITION.

Die übergebenen Koordinaten müssen im Bildschirm liegen. Außerdem muss HL kleiner oder gleich BC sein. Andernfalls können unvorhergesehene Effekte auftreten.

BD55: SCR SET POSITION

nur CPC 664 und 6128.

Lege die Lage des Bildschirms nur für die Software neu fest.

Eingaben:    HL=Scroll-Offset
             Operationen: BD5B / 349A / 349A:  FLO SUBA=Bildschirm-Basis
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA und HL legalisiert
Unverändert: BC,DE,IX,IY

Dieser Vektor ändert Lage und Scroll-Zustand nur für die Software, d.h. für Die Abteilungen des Betriebssystems: Das Screen Packdas SCREEN PACK, die TEXT und Einleitung: Die Grafikdie GRAFIK VDU. Anhang: Die BildausgabeDie Bildausgabe erfolgt nach wie vor aus dem zuvor gewählten Speicherviertel mit dem alten Scroll-Zustand.

Dadurch ist es beispielsweise möglich, ein neues Bild unsichtbar aufzubauen, während das alte noch angezeigt wird. Garbage Collection: ... beim CPC 464Beim CPC 664 kommt dabei praktischerweise allerdings nur die Die Speicherkonfiguration im Schneider CPC: BankBank 1 (&4000 bis &7FFF) in Frage, Garbage Collection: ... beim CPC 464beim CPC 6128 kann man zusätzlich auch noch an der BD5B: KL RAM SELECT: Mögliche RAM-Konfigurationen:RAM-Konfiguration herumspielen.

Operationen: BD5B / 349A / 349A: FLO SUBA wird als oberes Adressbyte benutzt, um das Speicherviertel festzulegen, und wird deshalb mit &Der Zeichensatz des Schneider CPC: &C0 = 192C0 maskiert. Die Maske für HL ist &07FE.

Besitzer des CPC 464 können ersatzweise folgende Systemvariablen verändern:

&B1C9,&B1CA  - MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
SCR
OFFSET (=HL) &B1CB - MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
SCR
BASE (=Operationen: BD5B / 349A / 349A: FLO SUBA)

Valid HTML   Valid CSS