Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

TEXT VDU

Die Textausgabe-Routinen

BB4E: TXT INITIALISE

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

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

Komplette Initialisierung der Text-VDU.

Betroffen sind:

- Die Sprungleisten: die IndirectionsDie Indirections der Text-VDU
- Die Controlcode-Funktionstabelle
- Die Text-VDU: Zeichensatz
Der Zeichensatz des Schneider CPC: Der Zeichensatz des Schneider CPC
Zeichensatz
(alle 256 Zeichen aus dem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM, keine aus dem RAM) - Textstream 0 wird angewählt

alle Streams werden normal eingestellt:

- PAPER 0, PEN 1
- Window = ganzer Screen
- Erklärung zu den verwendeten Bezeichnungen: CursorCursor = enabled & off
- Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus opaque (deckend)
- VDU enabled (CHR$(6))
- TAGOFF
- LOCATE 1,1.

BB51: TXT RESET

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

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

Kleine Initialisierung der Text-VDU.

Betroffen sind:

- Die Sprungleisten: die IndirectionsDie Indirections der Text-VDU
- Die Controlcode-Funktionstabelle

BB54: TXT VDU ENABLE

Erlaube, dass Zeichen im aktiven Die Text-VDU: FensterFenster ausgegeben werden.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Das Ausdrucken der Zeichen im aktuellen Die Text-VDU: FensterFenster wird wieder zugelassen. Die Text-VDU: Der CursorDer Cursor aktiviert (enabled). Der Controlcode-Puffer wird geleert. Wirkt auf TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT und TEXT VDU: BB5D: TXT WR CHARTXT WR CHAR.

BB57: TXT VDU DISABLE

Verbiete die Ausgabe von Zeichen im aktiven Die Text-VDU: FensterFenster.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Das Ausdrucken der Zeichen im aktuellen Die Text-VDU: FensterFenster wird verboten. Die Text-VDU: Der CursorDer Cursor wird abgeschaltet (disabled). Der Controlcode-Puffer wird geleert.

Garbage Collection: ... beim CPC 464Beim CPC 464 werden Controlcodes aber weiterhin befolgt und Die Text-VDU: Der Cursorder Cursor auch weiterhin mit jedem Zeichen nach rechts bewegt.

Für den CPC 664 und 6128 tritt jedoch eine wichtige Änderung ein, was die Befolgung der Controlcodes betrifft. Siehe dazu &TEXT VDU: BBB1: TXT GET CONTROLSBBB1 TXT GET CONTROLS.

Dieser Vektor wirkt auf &TEXT VDU: BB5A: TXT OUTPUTBB5A TXT OUTPUT und &TEXT VDU: BB5D: TXT WR CHARBB5D TXT WR CHAR.

BB5A: TXT OUTPUT

Drucke ein Zeichen oder befolge den Control-Code

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Zeichen, Controlcode oder dessen Basic und Maschinencode: ParameterParameter
Ausgaben:    keine
Unverändert: alle Die Tonausgabe: Das Kontrollregister  (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
bleiben erhalten

Wartet ein vorher ausgegebener Controlcode noch auf einen Basic und Maschinencode: ParameterParameter, wird Operationen: BD5B / 349A / 349A: FLO SUBA als Basic und Maschinencode: ParameterParameter behandelt.

Sonst wird das Zeichen über IND TEXT VDU: BB5D: TXT WR CHARTXT WR CHAR gedruckt (Operationen: BD5B / 349A / 349A: FLO SUBA ≥ 32) oder selbst als Controlcode interpretiert (Operationen: BD5B / 349A / 349A: FLO SUBA < 32).

Wenn der Textstream nicht aktiviert, also disabled ist wird das Zeichen nicht gedruckt.

Controlcodes werden Garbage Collection: ... beim CPC 464beim CPC 464 aber trotzdem befolgt. Die Änderungen hierbei für die CPCs 664 und 6128 sind bei &TEXT VDU: BBB1: TXT GET CONTROLSBBB1 TXT GET CONTROLS beschrieben.

Ist der Grafikmodus (TAG) eingeschaltet, werden alle Zeichen (0 bis 255) über GRAPHICS VDU: BBFC: GRA WR CHARGRA WR CHAR ausgedruckt.

BB5D: TXT WR CHAR

Drucke ein Zeichen. Control-Codes erzeugen Sonderzeichen.

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

Drucke das Zeichen Operationen: BD5B / 349A / 349A: FLO SUBA im momentan aktiven Textfenster aus. Benutzt wird dazu Die Indirections der Firmware-Packs: BDD3: IND TXT WRITE CHARIND TXT WRITE CHAR.

Das Zeichen wird nicht ausgedruckt, wenn das aktuelle Die Text-VDU: FensterFenster nicht aktiviert (disabled) ist.

BB60: TXT RD CHAR

Versuche, ein Zeichen vom Bildschirm zu lesen.

Eingaben:    keine
Ausgaben:    CY=1 -> Operationen: BD5B / 349A / 349A:  FLO SUBA=Zeichen sonst CY=0 -> nicht identifizierbar
Unverändert: BC,DE,HL,IX,IY

Die Text-VDU versucht, die Grafikinformation im Bildschirm auf der Cursorposition des aktuellen Textfensters in einen Zeichencode zurückzuverwandeln. Dazu wird Die Indirections der Firmware-Packs: BDD6: IND TXT UNWRITEIND TXT UNWRITE benutzt.

Die Text-VDU: Der CursorDer Cursor muss Garbage Collection: ... beim CPC 464beim CPC 464 vorher in das Textfenster zurückgezwungen werden (siehe TEXT VDU: BB87: TXT VALIDATETXT VALIDATE), sonst werden eventuell Zeichen von außerhalb des Fensters gelesen.

Garbage Collection: ... beim CPC 464Beim CPC 664 oder 6128 erfolgt das automatisch und kann dazu führen, dass das Textfenster gescrollt wird.

BB63: TXT SET GRAPHIC

Bestimme, ob der Text im laufenden Die Text-VDU: FensterFenster auf Die Text-VDU: Der Cursorder Cursor- oder Grafik-Position ausgegeben werden soll.

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

Ist Operationen: BD5B / 349A / 349A: FLO SUBA=0 wird der Text auf der Cursorposition ausgegeben (TAGOFF).

Ist A>0 wird der Text auf der Position des Grafikcursors ausgegeben (TAG).

Betroffen hiervon ist nur TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT.

Ist der Grafik-Schreibmodus akiviert (TAG), so werden Controlcodes nicht befolgt, sondern als Sonderzeichen gedruckt. Außerdem ist das Ausschalten der Text-VDU (TEXT VDU: BB57: TXT VDU DISABLETXT VDU DISABLE) unwirksam, die Zeichen werden trotzdem ausgegeben.

BB66: TXT WIN ENABLE

Lege die Grenzen des aktuellen Textfensters fest.

Eingaben:    H und D = linke und rechte Spalte
             L und LOW KERNEL JUMPBLOCK: 000E:  LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
= obere und untere Zeile des Textfensters Ausgaben: keine Unverändert: IX,IY

Die angegebenen Zeilen- und Spaltengrenzen werden automatisch nach ihrer Größe sortiert und entsprechend dem Bildschirm-Modus auf die maximal möglichen Werte reduziert.

Bezugspunkt ist die linke, obere Ecke mit den Koordinaten (0,0). Angegeben werden jeweils die inneren Grenzen des Fensters wie beim WINDOW-Kommando in Einleitung: BASIC
Anhang: Basic
Basic
.

BB69: TXT GET WINDOW

Erfrage die Grenzen des aktuellen Textfensters.

Eingaben:    keine
Ausgaben:    H und D enthalten die linke und rechte Spalte,
             L und LOW KERNEL JUMPBLOCK: 000E:  LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
enthalten die obere und untere Zeile des Fensters. CY=0 -> Die Text-VDU: FensterFenster bedeckt den ganzen Bildschirm Unverändert: BC,IX,IY

Angegeben werden die inneren Fenstergrenzen, Bezugspunkt ist die linke, obere Ecke mit den Koordinaten (0,0).

BB6C: TXT CLEAR WINDOW

Lösche die Anzeige im aktuellen Textfenster.

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

Das aktuelle Textfenster wird mit dessen Paper-INK gelöscht. Die Text-VDU: Der CursorDer Cursor wird in die linke, obere Ecke gesetzt.

BB6F: TXT SET COLUMN

Bewege Die Text-VDU: Der Cursorden Cursor des aktuellen Textfensters in die angegebene Spalte.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = neue Cursor-Spalte
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

Bezugspunkt ist die linke Spalte des aktuellen Textfensters mit der Spaltennummer 1.

Als neue X-Koordinate Die Text-VDU: Der Cursordes Cursors kann auch ein Wert außerhalb des Fensters angegeben werden. Vor Ausgabe eines Zeichens oder Die Text-VDU: Der Cursordes Cursors wird er automatisch in das Die Text-VDU: FensterFenster zurückgezwungen (siehe TEXT VDU: BB87: TXT VALIDATETXT VALIDATE).

BB72: TXT SET ROW

Bewege Die Text-VDU: Der Cursorden Cursor des aktuellen Textfensters in die angegebene Zeile.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = neue Cursor-Zeile
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

Bezugspunkt ist die oberste Zeile des aktuellen Textfensters mit der Zeilennummer 1.

Die neue Y-Koordinate Die Text-VDU: Der Cursordes Cursors kann auch außerhalb des Textfensters liegen. Vor Ausgabe eines Zeichens oder Die Text-VDU: Der Cursordes Cursors wird er automatisch ins Die Text-VDU: FensterFenster zurückgezwungen (siehe TEXT VDU: BB87: TXT VALIDATETXT VALIDATE).

BB75: TXT SET CURSOR

Lege Zeile und Spalte Die Text-VDU: Der Cursordes Cursors neu fest.

Eingaben:    H = neue Spalte
             L = neue Zeile Die Text-VDU: Der Cursordes Cursors
Ausgaben:    keine
Unverändert: BC,DE,IX,IY

Bezugspunkt ist die obere, linke Ecke des aktuellen Textfensters mit der Koordinate (1,1).

Die neuen Koordinaten Die Text-VDU: Der Cursordes Cursors konnen auch außerhalb des Textfensters liegen. Vor Ausgabe eines Zeichens oder Die Text-VDU: Der Cursordes Cursors wird er automatisch ins Die Text-VDU: FensterFenster zurückgezwungen (siehe TEXT VDU: BB87: TXT VALIDATETXT VALIDATE).

BB78: TXT GET CURSOR

Erfrage Zeile und Spalte Die Text-VDU: Der Cursordes Cursors.

Eingaben:    keine
Ausgaben:    H = Spalte und
             L = Zeile Die Text-VDU: Der Cursordes Cursors.
             Operationen: BD5B / 349A / 349A:  FLO SUBA = Scrollzähler
Unverändert: BC,DE,IX,IY

Bezugspunkt ist die obere, linke Ecke des aktuellen Textfensters mit der Koordinate (1,1).

Die angegebene Position muss nicht unbedingt im Textfenster liegen. Dann wird Die Text-VDU: Der Cursorder Cursor vor Ausgabe des nächsten Zeichens oder Die Text-VDU: Der Cursordes Cursors ins Textfenster zurückgezwungen (siehe TEXT VDU: BB87: TXT VALIDATETXT VALIDATE).

Der Scrollzähler wird im Betriebssystem nicht weiter benutzt, ist aber ganz nützlich, wenn man feststellen will, ob das Die Text-VDU: FensterFenster seit einem früheren Zeitpunkt gescrollt wurde. Mit jedem Scroll nach oben wird der Zahler erniedrigt, mit jedem Scroll nach unten erhöht.

BB7B: TXT CUR ENABLE

Schalte Erklärung zu den verwendeten Bezeichnungen: CursorCursor auf der Benutzer-Ebene ein.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Das Ein- und Ausschalten Die Text-VDU: Der Cursordes Cursors mittels TEXT VDU: BB7B: TXT CUR ENABLETXT CUR ENABLE und TEXT VDU: BB7E: TXT CUR DISABLETXT CUR DISABLE ist für das Anwenderprogramm vorgesehen. Die Text-VDU: Der CursorDer Cursor wird aber auch 'disabled', wenn TEXT VDU: BB57: TXT VDU DISABLETXT VDU DISABLE benutzt wird. Diese Die Fließkomma-Routinen: FunktionenFunktionen sind auch mit den Controlcodes 2 und 3 erreichbar.

BB7E: TXT CUR DISABLE

Schalte Die Text-VDU: Der Cursorden Cursor auf der Benutzer-Ebene aus.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Siehe &TEXT VDU: BB7B: TXT CUR ENABLEBB7B TXT CUR ENABLE.

BB81: TXT CUR ON

Schalte Die Text-VDU: Der Cursorden Cursor auf der System-Ebene ein.

Eingaben:    keine
Ausgaben:    keine
Unverändert: alle Die Tonausgabe: Das Kontrollregister  (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
bleiben erhalten

Das Ein- und Ausschalten Die Text-VDU: Der Cursordes Cursors mittels TEXT VDU: BB81: TXT CUR ONTXT CUR ON und TEXT VDU: BB84: TXT CUR OFFTXT CUR OFF ist für die 'tieferen Ebenen' vorgesehen, so zum Beispiel Betriebssystem, Die Basic-Vektoren: Editor
Die Basic-Vektoren: Editor
Editor
oder Einleitung: BASIC
Anhang: Basic
Basic
. Letzteres hält Die Text-VDU: Der Cursorden Cursor aber leider immer 'off', so dass ein Basicprogramm ihn nicht mit 'enable' einschalten kann. In diesem Fall kann man aber ganz leicht die Vektoren aufrufen, da diese keine Ein- und Ausgabebedingungen haben.

BB84: TXT CUR OFF

Schalte Die Text-VDU: Der Cursorden Cursor auf der System-Ebene aus.

Eingaben:    keine
Ausgaben:    keine
Unverändert: alle Die Tonausgabe: Das Kontrollregister  (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
bleiben erhalten

Siehe &TEXT VDU: BB81: TXT CUR ONBB81 TXT CUR ON

BB87: TXT VALIDATE

Überprüfe, ob sich eine Position innerhalb des Text-Fensters befindet.

Eingaben:    H = Spalte und
             L = Zeile der Prüfposition
Ausgaben:    H = Spalte und
             L = Zeile der ins Die Text-VDU: FensterFenster zurückgezwungenen Position
             CY=1 -> Das Textfenster würde dadurch nicht gescrollt
             CY=0 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
=255 -> das Die Text-VDU: FensterFenster würde hochgerollt CY=0 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
=0 -> das Die Text-VDU: FensterFenster würde runtergerollt Unverändert: BC,DE,IX,IY

Bezugspunkt der Koordinatenangaben ist die linke, obere Ecke mit den Koordinaten (1,1).

Bevor ein Zeichen oder Die Text-VDU: Der Cursorder Cursor ausgegeben, und leider auch bevor ein Controlcode übernommen wird, überprüft (validates) Die Abteilungen des Betriebssystems: Die Text-VDUdie Text-VDU die momentane Cursorposition im aktuellen Textfensterund scrollt dieses wenn nötig. Danach liegt die Cursorposition dann sicher im Textfenster und das Zeichen kann ausgegeben werden.

TEXT VDU: BB87: TXT VALIDATETXT VALIDATE selbst scrollt noch nicht!

BB8A: TXT PLACE CURSOR

Male einen 'Cursor-Fleck' auf die Cursorposition.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Sollen in einem Programm mehrere Erklärung zu den verwendeten Bezeichnungen: CursorCursors in einem Textfenster bereitgestellt werden, können zusätzliche Cursorflecken mit TEXT VDU: BB8A: TXT PLACE CURSORTXT PLACE CURSOR und TEXT VDU: BB8D: TXT REMOVE CURSORTXT REMOVE CURSOR erzeugt und wieder entfernt werden. Die Kontrolle dieser Cursorflecken obliegt aber dem Anwenderprogramm!

Beispiel für einen zusätzlichen Erklärung zu den verwendeten Bezeichnungen: CursorCursor ist der Copycursor des Zeileneditors.

BB8D: TXT REMOVE CURSOR

Entferne einen 'Cursor-Fleck' von der Cursorposition.

Eingaben:    keine
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

siehe &TEXT VDU: BB8A: TXT PLACE CURSORBB8A TXT PLACE CURSOR.

BB90: TXT SET PEN

Lege die Stift-Tinte für die Buchstaben fest.

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

Die Vordergrund-Tinte für das aktuelle Textfenster wird mit Operationen: BD5B / 349A / 349A: FLO SUBA neu festgelegt. Mit dieser Die Bildausgabe: Tinten und FarbenTinte werden die Buchstaben selbst gezeichnet.

Die Tintennummer wird automatisch mit 1, 3 oder 15 maskiert, um eine im aktuellen Bildschirm-Modus gültige Tintennummer zu erhalten.

Außerdem wird Die Text-VDU: Der Cursorder Cursor an die neue Vordergrund-Tinte angepasst, wenn er im aktuellen Textfenster sichtbar ist.

BB93: TXT GET PEN

Erfrage die momentane Stift-Tinte.

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

Die Vordergrund-Tinte ist die INK, in der im aktuellen Textfenster die Buchstaben selbst gemalt werden.

BB96: TXT SET PAPER

Lege die Hintergrund-Tinte für die Buchstaben fest.

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

Die Tintennummer wird mit 1, 3 oder 15 maskiert, um eine im momentanen Bildschirm-Modus gültige Tintennummer zu erhalten.

Die Tintennummer gilt nur für das aktuelle Textfenster. Die Text-VDU: Der CursorDer Cursor wird automatisch an die neue PAPER-INK angepasst, wenn er sichtbar ist.

Die Hintergrund-Tinte ist die INK, mit der das Buchstabenfeld um den eigentlichen Buchstaben herum gefüllt wird, wenn ein Zeichen gemalt wird. Außerdem werden mit dieser Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
Teile oder das ganze Textfenster gelöscht (TEXT VDU: BB6C: TXT CLEAR WINDOWTXT CLEAR WINDOW und Controlcodes 12, 16, 17, 18, 19, und 20).

BB99: TXT GET PAPER

Erfrage die momentane Hintergrund-Tinte.

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

Die Hintergrund-Tinte ist die INK, in der im aktuellen Textfenster das Buchstabenfeld um den eigentlichen Buchstaben herum gefüllt wird, wenn ein Zeichen gemalt wird.

BB9C: TXT INVERSE

Tausche die Papier- und Stift-Tinten für das momentan aktuelle Text-Fenster aus.

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

Die Vordergrund- und Hintergrund-Tinte des aktuellen Textfensters werden vertauscht.

Nur CPC 464: Die Text-VDU: Der CursorDer Cursor wird nicht an die neuen INKs angepasst, und sollte deshalb möglichst nicht sichtbar sein. Solange aber der 'Standard-Cursor' des CPC verwendet wird, d.h., solange Die Indirections der Firmware-Packs: BDCD: IND TXT DRAW CURSORIND TXT DRAW CURSOR und Die Indirections der Firmware-Packs: BDD0: IND TXT UNDRAW CURSORIND TXT UNDRAW CURSOR nicht gepatcht werden, kann man darauf verzichten, da dessen primitive Cursor-Zeichenroutine in beiden Fällen den gleichen Erklärung zu den verwendeten Bezeichnungen: CursorCursor liefert.

Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 wird der Cursorfleck aber vorher entfernt und nachher wieder neu gezeichnet.

BB9F: TXT SET BACK

Lege fest, ob die Buchstaben im Transparent-Modus geschrieben werden sollen.

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

Mit Operationen: BD5B / 349A / 349A: FLO SUBA wird festgelegt, ob im aktuellen Textfenster der Hintergrund wie normal opaque, also deckend, oder ob der Hintergrund durchsichtig, also transparent sein soll.

Operationen: BD5B / 349A / 349A: FLO SUBA=0 -> opaque: Beim Zeichnen eines Buchstabens wird der Hintergrund mit der PAPER-INK gelöscht.

A>0 -> transparent: Beim Zeichnen der Buchstaben werden nur die Vordergrund-Punkte, also die Punkte des Buchstabens selbst gesetzt. Der Hintergrund bleibt unverändert, die alten Grafikinformationen des Bildschirms scheinen noch zwischen den Buchstaben durch.

Hiervon wird nur die Textausgabe auf der Cursorposition beeinflusst. Bei der Ausgabe von Zeichen auf der Grafikposition (TAG) wird dieses Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag ignoriert. Für CPC 664 und 6128 gibt es eine entsprechende Einstellung für die Grafik-Ausgabe.

BBA2: TXT GET BACK

Erfrage, ob im aktuellen Textfenster der Transparent-Modus eingeschaltet ist.

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

Siehe &TEXT VDU: BB9F: TXT SET BACKBB9F TXT SET BACK.

BBA5: TXT GET MATRIX

Erfrage, an welcher Stelle die Grafik-Information über das Aussehen des angegebenen Buchstaben abgelegt ist.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Zeichencode
Ausgaben:    HL zeigt auf Zeichensatz: die Zeichenmatrixdie Zeichenmatrix.
             CY=1 -> Die Matrix befindet sich im RAM.
             CY=0 -> Die Matrix ist im unveränderbaren Bereich im Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM.
Unverändert: BC,DE,IX,IY

Um ein Zeichen auf dem Bildschirm darzustellen, wird dessen Matrix in den Bildschirm übertragen. Die Matrix besteht aus 8 Datentypen: Bytes
Datenbreite: Bytes
Bytes
zu je 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:
Bits
. Das erste Datentypen: Bytes
Datenbreite: Bytes
Byte
definiert die oberste Punktzeile, 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
7 jeweils die linke Punktspalte. Ein gesetztes 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
(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
=1) deutet an, dass der entsprechende Punkt in der jeweils gültigen Vordergrund-Tinte gesetzt werden soll.

BBA8: TXT SET MATRIX

Bestimme das Aussehen eines Buchstaben neu.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Zeichencode und
             HL zeigt auf die neue Matrix
Ausgaben:    CY=1 -> o.k.
Unverändert: IX,IY

Die Matrix für ein Zeichen ist 8 Datentypen: Bytes
Datenbreite: Bytes
Bytes
lang. Ist das Zeichen nicht redefinierbar im RAM abgelegt, unternimmt diese Routine nichts, kehrt aber mit nicht gesetztem CY-Flag zurück (CY=0).

Die neue Matrix kann auch direkt aus einem oberen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM gesetzt werden. Dazu muss das Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM nur eingeblendet sein. Da der im Vektor verwendete ROM-Konfiguration: RestartsRestart aber immer das obere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM ausblendet, muss man sich die Adresse dann aus dem Vektor herausklauben und die Routine direkt anspringen.

Siehe auch &TEXT VDU: BBA5: TXT GET MATRIXBBA5 TXT GET MATRIX.

BBAB: TXT SET M TABLE

Teile der Text-VDU mit, in welchem Speicherbereich die selbst-definierbaren Zeichen-Matrizen abgelegt werden können.

Eingaben:    D = Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag
             LOW KERNEL JUMPBLOCK: 000E:  LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
= Code des ersten Zeichens für die RAM-Tabelle HL = Adresse der RAM-Tabelle Ausgaben: CY=0 -> es gab vorher keine Tabelle im RAM CY=1 -> Operationen: BD5B / 349A / 349A: FLO SUBA = altes erstes Zeichen für die RAM-Tabelle und HL = alte Adresse der RAM-Tabelle Unverändert: IX,IY

Ist D>0 wird die alte Matrix-Tabelle im RAM vollständig gelöscht.

Ist D=0 wird im RAM eine neue Tabelle entsprechend LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
und HL installiert. Dabei muss man darauf achten, dass man auch wirklich genug Speicher für die Tabelle zur Verfügung stellt: Der benötigte Platz ist (256-LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
)*8 Datentypen: Bytes
Datenbreite: Bytes
Bytes
. Die Tabell muss vollständig im zentralen RAM liegen.

In dieser Tabelle werden die redefinierbaren Zeichen in aufsteigender Reihenfolge bis zum Zeichen 255 gespeichert.

Die neue Tabelle wird mit den bisher gültigen Zeichen aus der alten RAM-Tabelle und, falls nötig, aus dem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM initialisiert. Überlappen sich dabei in der alten und in der neuen RAM-Tabelle der Bereich der übernommenen Buchstaben, so darf die neue Tabelle nicht nach ober versetzt sein. Die alten Matrizen werden nämlich generell mit LDIR verschoben.

Siehe auch &TEXT VDU: BBA5: TXT GET MATRIXBBA5 TXT GET MATRIX

BBAE: TXT GET TABLE

Erfrage, wo momentan der Bereich für die selbst-definierbaren Zeichen-Matrizen liegt.

Eingaben:    keine
Ausgaben:    CY=0 -> es ist kein Bereich für redefinierbare Zeichen im RAM
                     festgelegt Datenbreite: Wordsworden.
             CY=1 -> Operationen: BD5B / 349A / 349A:  FLO SUBA = 1. Zeichen der RAM-Tabelle und
                     HL zeigt auf die Tabelle.
Unverändert: BC,DE,IX,IY

Siehe &TEXT VDU: BBA5: TXT GET MATRIXBBA5 TXT GET MATRIX und &TEXT VDU: BBA8: TXT SET MATRIXBBA8 MAIN FIRMWARE JUMPBLOCK: TEXT VDU
Die Firmware des Schneider CPC: TEXT VDU
TXT
SET TABLE.

BBB1: TXT GET CONTROLS

Erfrage die Lage der Control-Code-Tabelle.

Eingaben:    keine
Ausgaben:    HL zeigt auf die Controlcode-Tabelle
Unverändert: AF,BC,DE,IX,IY

Die Controlcode-Tabelle enthält zu jedem Controlcode (0 bis 31) in aufsteigender Reihenfolge in jeweils 3 Datentypen: Bytes
Datenbreite: Bytes
Bytes
folgende Informationen:

DEFB args   ; Anzahl benötigter Basic und Maschinencode: ParameterParameter (max. 9)
DEFW addr   ; Routinenadresse. Diese muss im zentralen RAM liegen.

Durch Änderung eines Eintrags in diese Tabelle kann einem Controlcode eine völlig neue Die Fließkomma-Routinen: FunktionenFunktion zugeordnet werden.

Die Behandlungsroutinen der Controlcodes müssen folgende Ein- und Aussprungsbedingungen erfüllen:

Eingaben:
Operationen: BD5B / 349A / 349A:  FLO SUBA und C enthalten den letzten Basic und Maschinencode: ParameterParameter oder den Controlcode selbst,
        wenn dieser keine Basic und Maschinencode: ParameterParameter benötigt.
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 Basic und Maschinencode: ParameterParameter + 1 HL zeigt vor den ersten Basic und Maschinencode: ParameterParameter (dort steht der Controlcode selbst) Ausgaben: keine Die Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
AF, BC, DE und HL dürfen verändert werden.

Die Bildausgabe: Die ControlcodesDie Controlcodes werden von &TEXT VDU: BB5A: TXT OUTPUTBB5A TXT OUTPUT auch dann befolgt, wenn die Textausgabe für den aktiven Stream ausgeschaltet ist (mit Controlcode 21 NAK oder &TEXT VDU: BB57: TXT VDU DISABLEBB57 TXT VDU DISABLE).

Das gilt jedoch nur für den CPC 464. Ab dem CPC 664 wird in die Controlcode-Tabelle ein zusätzliches Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag eingetragen, das festlegt, ob ein Controlcode vom VDU-disable/enable-Status eines Textfensters betroffen sein soll oder nicht. Dieses Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag ist in 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
7 des ersten Datentypen: Bytes
Datenbreite: Bytes
Byte
jedes Tabellen-Eintrages untergebracht, also in dem Datentypen: Bytes
Datenbreite: Bytes
Byte
mit der Anzahl der Basic und Maschinencode: ParameterParameter. Hier gilt:

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
7 = 0 -> Controlcode wird trotzdem befolgt

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
7 = 1 -> Ausführung ist vom VDU-Status abhängig.

Interessant dass hier die Kompatibilität zum CPC 464 kaum gewahrt wurde: Praktisch alle Controlcodes werden vom VDU-Status beeinflusst! Ausgenommen sind nur CHR$(6) ACK, mit dem die Textausgabe wieder aktiviert werden kann und CHR$(27) ESC, dass sowieso ignoriert wird.

BBB4: TXT STREAM SELECT

Wähle ein anderes Text-Fenster an.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Nummer des neuen Textfensters
Ausgaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = Nummer des alten Textfensters
Unverändert: BC,DE,IX,IY

Operationen: BD5B / 349A / 349A: FLO SUBA wird mit 7 maskiert, um eine gültige Stream-Nummer im Bereich 0 bis 7 zu erhalten. Ist das gewünschte Textfenster bereits angewählt, kehrt die Routine sofort zurück. Es ist daher empfehlenswert, vor jeder Textausgabe prinzipiell noch einmal das gewünschte Textfenster anzuwählen.

Folgende Basic und Maschinencode: ParameterParameter werden für jedes Die Text-VDU: FensterFenster getrennt verwaltet:

- PEN INK             Vordergrund-Tinte
- PAPER INK           Hintergrund-Tinte
- Cursorposition:     Spalte und Zeile
- Fenstergrenzen:     links, rechts, oben und unten
- Cursorstatus:       ON/OFF und ENABLE/DISABLE
- VDU-Status:         ENABLE/DISABLE
- Hintergrundmodus:   OPAQUE/TRANSPARENT
- Grafikschreibmodus: TAG/TAGOFF

BBB7: TXT SWAP STREAMS

Vertausche die Einstellungen und Basic und Maschinencode: ParameterParameter zweier Text-Fenster.

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 Nummern der Textfenster Ausgaben: keine Unverändert: IX,IY

Beide Streamnummern werden mit 7 maskiert, um gültige Werte sicherzustellen. Die Nummer des aktuell angewählten Textfensters ändert sich nicht, auch wenn es einer der beiden Tauschpartner ist. Alle Basic und Maschinencode: ParameterParameter, die für die Streams getrennt verwaltet werden, werden ausgetauscht.

Siehe dazu &TEXT VDU: BBB4: TXT STREAM SELECTBBB4 MAIN FIRMWARE JUMPBLOCK: TEXT VDU
Die Firmware des Schneider CPC: TEXT VDU
TXT
STR SELECT

BD40: TXT ASK STATE

Erfrage Erklärung zu den verwendeten Bezeichnungen: CursorCursor- und VDU-Status des aktuellen Textfensters.

nur CPC 664 und 6128

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

Operationen: BD5B / 349A / 349A: FLO SUBA enthält in insgesamt drei 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
folgende Informationen:

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
0 - Erklärung zu den verwendeten Bezeichnungen: CursorCursor enabled (0) oder disabled (1) (user-ebene) • 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
1 - Erklärung zu den verwendeten Bezeichnungen: CursorCursor on (0) oder off (1) (system-ebene) • 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
7 - VDU enabled (0) oder disabled (1)

Valid HTML   Valid CSS