Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Die Text-VDU

Neben der Text-Eingabe ist wohl die Text-Ausgabe auf dem Bildschirm die zweite, wichtigste Schnittstelle zum Benutzer. Auch hierfür wurde im Schneider CPC eine eigene, fast autonome Abteilung des Betriebssystems geschaffen: Die Abteilungen des Betriebssystems: Die Text-VDUDie Text-VDU.

VDU heißt dabei 'Vector Driven Unit', also Zeigergesteuerte Einheit, wobei hier mit Vektor nicht nur die Sprung-Vektoren im Überblick: MAIN FIRMWARE JUMPBLOCKMAIN FIRMWARE JUMPBLOCK gemeint sind, sondern auch die Kontrol-Codes von 0 bis 31.

Die Haupt-Einsprungsstelle, über die man mit der Text-VDU kommunizieren kann, ist der Vektor &TEXT VDU: BB5A: TXT OUTPUTBB5A TXT OUTPUT. Einleitung: BASIC
Anhang: Basic
Basic
benutzt zum Bearbeiten der Print- Befehls-Elemente: StatementsStatements ausschließlich diesen Vektor.

Kontroll-Codes

Von den insgesamt 256 verschiedenen Zeichen, die sich durch ein Datentypen: Bytes
Datenbreite: Bytes
Byte
voneinander unterscheiden lassen, werden die 32 ersten normalerweise nicht ausgedruckt, sondern als spezielle Steueranweisungen behandelt. Einfachstes Beispiel ist der Klingelton, der mit CHR$(7) erzeugt werden kann.

Damit ist es möglich, die wichtigsten Die Fließkomma-Routinen: FunktionenFunktionen der Text-VDU mittels einfacher Print-Anweisungen auch von Einleitung: BASIC
Anhang: Basic
Basic
aus zu steuern. Unter Anderem sind das Verschiebung Die Text-VDU: Der Cursordes Cursors, Löschen von Bildschirm-Teilbereichen, Modus-Wechsel, Definieren von Zeichen-Matrizen und so weiter.

Darüber hinaus werden von der Text-VDU aber nicht nur diese leistungsfähigen Kontrolcode-Vektoren bereitgestellt. Sie lassen sich auch noch nach Lust und Laune ändern! Zum Aufruf eines Kontrolcode-Handlers benutzt Die Abteilungen des Betriebssystems: Die Text-VDUdie Text-VDU nämlich eine Tabelle, die wieder einmal in's RAM kopiert wird.

Da die Kontrolcode-Behandlung durch ein Maschinencode-Programm erfolgen muss, ist diese Der Sound Manager: FähigkeitenFähigkeit natürlich nicht bis zur Basic-Ebene durchgeführt Datenbreite: Wordsworden. Von Assembler aus stehen hier aber wieder einmal allen Manipulationen Tuer und Tor offen.

Dafür benötigt man zunächst einmal die Lage der Kontrolcode-Tabelle. Diese kann man mit dem Vektor &TEXT VDU: BBB1: TXT GET CONTROLSBBB1 TXT GET CONTROLS erfragen. Dann muss man wissen, wie die Tabelle aufgebaut ist.

Die Tabelle besteht aus insgesamt 32 Eintraegen, für jeden Code einen. Der erste Eintrag ist der für den Code '0'. Alle Einträge setzen sich wie folgt zusammen:

CTRLxx: DEFB ANZPAR    ; Anzahl Basic und Maschinencode: ParameterParameter
        DEFW ROUTADR   ; Adresse der Behandlungsroutine

Dabei muss die Behandlungsroutine bei eingeschaltetem unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM erreichbar sein.

Die Zahl der Basic und Maschinencode: ParameterParameter darf bis zu neun Stück betragen. Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 gibt es noch eine Die CPU Z80: Besonderheiten der Z80 im Schneider CPCBesonderheit: Hier wird im 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 der Parameterzahl ein Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag gespeichert, das angibt, ob die Ausführung des Controlcodes vom Enable/Disable- Status der Text-VDU abhängig sein soll (siehe CHR$(6) und CHR$(21)). Garbage Collection: ... beim CPC 464Beim CPC 464 werden alle Kontrollcodes auch bei ausgeschalteter Text-VDU befolgt. Garbage Collection: ... beim CPC 464Beim CPC 664/6128 nur, wenn 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 gesetzt ist. Dabei ist in der Standard-Belegung die Ausführung fast aller Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen vom VDU-Status abhängig (Hat sich was mit Kompatibel)!

Die Behandlungsroutine eines Kontrollcodes ist als Grundlagen: UnterprogrammeUnterprogramm der MAIN FIRMWARE JUMPBLOCK: TEXT VDU
Die Firmware des Schneider CPC: TEXT VDU
TXT
OUTPUT-Routine aufzufassen. Sie wird von ihr aufgerufen, wenn der entsprechende Kontrollcode ausgedruckt werden sollte. Es gelten die folgenden Ein- und Aussprung-Bedingungen:

  EIN: Operationen: BD5B / 349A / 349A:  FLO SUBA und C = letzter Basic und Maschinencode: ParameterParameter
       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 der Basic und Maschinencode: ParameterParameter + 1 (für den Kontrolcode selbst) HL zeigt auf den Kontrolcode-Puffer mit allen Parametern. Der erste Eintrag (auf den HL zeigt) ist der Kontrolcode selbst. AUS: AF, BC, DE und HL dürfen verändert werden.
Beispiel: Pictogramm-Vektor

Das folgende Assemblerprogramm zeigt, wie man eine eigene Behandlungs-Routine installieren kann. Gepatcht wird der Kontrollcode-Vektor CHR$(25), mit dem normalerweise Zeichenmatizen neu definiert werden können.

Als neue Die Fließkomma-Routinen: FunktionenFunktion wird eine Die Fließkomma-Routinen: FunktionenFunktion installiert, mit der ein sogenanntes 'ICON' ausgegeben werden kann. Dabei handelt es sich um kleine Pictogramme, mit denen man beispielsweise in einem Menü die einzelnen Optionen symbolisieren kann. Bekannt geworden sind diese 'Icons' durch GEM, der grafik-orientierten Benutzer- Oberflaeche von Digital Research.

Und das soll der der Kontrollcode CHR$(25) genau machen: Als Argument benötigt er einen Zeichencode 'z', der zusammen mit den folgenden drei Codes 'z+1' bis 'z+3' ein Pictogramm darstellt. Diese vier Zeichen werden auf der aktuellen Cursorposition in Form eines Quadrates ausgegeben und die Cursor-Position um zwei Stellen nach rechts verschoben.

Druckt man beispielsweise folgende beiden Zeichen aus:

PRINT CHR$(25);"Operationen: BD5B / 349A / 349A:  FLO SUBA";

so sollen die Zeichen 'Operationen: BD5B / 349A / 349A: FLO SUBA' bis 'D' in Form eines Quadrates ausgedruckt werden:

AB
CD

Hätte man andere Zeichen benutzt und diese mit Hilfe des Befehls 'SYMBOL' verändert, so könnte hiermit ein sinnfälliges Pictogramm, beispielsweise eine Diskette, Pinsel, Muelleimer etc. dargestellt werden.

Zum Verständnis des Programms:

Die Ausgabe der Zeichen wird durch Aufruf der Überblick: Die Indirections der Firmware-Packs
Die Firmware des Schneider CPC: Die Indirections der Firmware-Packs
Indirection
Die Indirections der Firmware-Packs: BDD9: IND TXT OUT ACTIONIND TXT OUT ACTION erreicht. Diese Überblick: Die Indirections der Firmware-Packs
Die Firmware des Schneider CPC: Die Indirections der Firmware-Packs
Indirection
ist praktisch die Ausführungs-Routine des Vektors TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT. Der Vektor besorgt ausschließlich das Einschalten des unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROMs (via ROM-Konfiguration: RestartsRestart) und die Rettung der Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
AF bis HL. Da beim Aufruf der Kontrolcode-Routinen das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM immer eingeblendet ist, kann hier Die Sprungleisten: die Indirectionsdie Indirection benutzt werden, um Zeit zu sparen.

Die Kontrolcode-Routinen sind Grundlagen: UnterprogrammeUnterprogramme von TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT (bzw. Die Indirections der Firmware-Packs: BDD9: IND TXT OUT ACTIONIND TXT OUT ACTION). Der Wiederaufruf der Überblick: Die Indirections der Firmware-Packs
Die Firmware des Schneider CPC: Die Indirections der Firmware-Packs
Indirection
ist also praktisch eine Rekursion. Leider (!!!) ist Die Abteilungen des Betriebssystems: Die Text-VDUdie Text-VDU nicht re-entrant. Sie darf nicht aufgerufen werden, solange sie noch eine Routine bearbeitet. Genau das wird aber benötigt.

Deswegen wird unsere Routine 'transparent' eingebunden. Das heißt, sie ruft zunächst ihre eigene Rückkehr-Adresse auf. Die Sprungleisten: die IndirectionsDie Indirection meint, das sei ein ganz normaler Unterprogramm-Rücksprung (RET) gewesen und arbeitet nun ihren Programmcode fertig ab. Danach schließt auch Die Sprungleisten: die Indirectionsdie Indirection mit RET ab. Da sie von der Kontrolcode-Routine aufgerufen wurde, kehrt sie auch dahin zurück. Jetzt kann von hier aus Die Sprungleisten: die Indirectionsdie Indirection ohne Probleme aufgerufen werden, weil sie ja vollständig abgearbeitet ist.

 ; Patch von CHR$(25) --> Pictogramm-Vektor   Erklärung zu den Anschlüssen: Vcc und Vss
Erklärung zu den Anschluss-Bezeichnungen: Vcc und Vss
vs
. 22.5.86 ; ---------------------------------------- ----------- ; ORG 30000 ; ; 0. Deklarationen: ; ASKTRL: EQU #BBB1 ; TEXT VDU: BBB1: TXT GET CONTROLSTXT GET CONTROLS INDOUT: EQU #BDD9 ; Die Indirections der Firmware-Packs: BDD9: IND TXT OUT ACTIONIND TXT OUT ACTION JPHL: EQU #001E ; LOW MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
KL
PCHL INSTRUCTION: JP (HL) ; ; 1. Hier Relocalisator einbinden ; ; 2. Weitere Initialisierungen: ; INIT: Maschinencode über HIMEM: CALLCALL ASKTRL ; Erfrage Lage der Kontrolcode-Tabelle --> HL LD DE,3*25 ; Adresse des Eintrages für CHR$(25) ADD HL,DE ; bestimmen EX DE,HL ; und nach DE (LDIR-Ziel). LD HL,PATCH ; HL = Zeiger auf Ersatz (LDIR-Quelle) LD BC,3 LDIR ; und Patchen. RET ; PATCH: DEFB 1 ; 1 Argument DEFW CHAR25 ; Adresse der Routine ; ; 3. Kontrollcode-Behandlungsroutine ; CHAR25: LD (P1),Operationen: BD5B / 349A / 349A: FLO SUBA ; Operationen: BD5B / 349A / 349A: FLO SUBA = 1. Argument = 1. Zeichencode des Pictogramms. INC Operationen: BD5B / 349A / 349A: FLO SUBA LD (P2),Operationen: BD5B / 349A / 349A: FLO SUBA ; ersten Zeichencode und die drei nachfolgenden INC Operationen: BD5B / 349A / 349A: FLO SUBA ; in den auszudruckenden Text einsetzen. LD (P3),Operationen: BD5B / 349A / 349A: FLO SUBA INC Operationen: BD5B / 349A / 349A: FLO SUBA LD (P4),Operationen: BD5B / 349A / 349A: FLO SUBA ; POP HL ; Rückkehradresse vom Stack holen Maschinencode über HIMEM: CALLCALL JPHL ; und aufrufen (transparent). ; LD HL,TEXT ; Text ab HL ausdrucken: LOOP: LD Operationen: BD5B / 349A / 349A: FLO SUBA,(HL) ; Hole nächstes (erstes) Zeichen aus dem Text. AND Operationen: BD5B / 349A / 349A: FLO SUBA ; Erklärung der Anschlussbelegung: TestTest, ob Null als Schlussmarke. RET Z ; Operationen: BD5B / 349A / 349A: FLO SUBA=0? Dann fertig. PUSH HL Maschinencode über HIMEM: CALLCALL INDOUT ; Sonst Zeichen drucken. POP HL INC HL ; Zeiger weiterstellen JR LOOP ; und mit nächstem Zeichen weitermachen. ; TEXT: P1: DEFB 0 ; Platz für Zeichencodes 1 und 2 P2: DEFB 0 ; des Pictogramms. DEFB 8,8,10 ; Erklärung zu den verwendeten Bezeichnungen: CursorCursor links, links und runter P3: DEFB 0 ; Platz für Zeichencodes 3 und 4 P4: DEFB 0 ; des Pictogramms. DEFB 11,0 ; Erklärung zu den verwendeten Bezeichnungen: CursorCursor hoch und Endmarke.

Das folgende Basic-Programm zeigt, wie man den CHR$(25) jetzt einsetzen kann:

 98 ' drei Beispiel-Pictogramme:
 99 '
100 DATA 00000000,00000000 , 00111111,11111100 , 00000000,00000000
101 DATA 00000001,10000000 , 01111111,11111110 , 01111110,01111110
102 DATA 00000010,01000000 , 11111111,11111111 , 01111110,01111110
103 DATA 00001111,11110000 , 10000111,11111111 , 00011110,01111110
104 DATA 00111111,11111100 , 10111111,11111111 , 00011110,01111110
105 DATA 00000000,00000000 , 10001110,00111111 , 01111111,11111110
106 DATA 00111111,11111100 , 10111101,11111111 , 01111110,01111110
107 DATA 01110101,11101110 , 10000110,01110001 , 01111100,00111110
109 DATA 10110101,11101101 , 11111111,10101111 , 01111100,00111110
110 DATA 01110110,11101110 , 11111100,01101111 , 01111110,01111110
111 DATA 00011010,11011000 , 11111111,11101111 , 01111111,11110110
112 DATA 00011010,11011000 , 11000011,11110001 , 01000000,01100110
113 DATA 00011010,10111000 , 11111000,01111111 , 01011111,01110110
114 DATA 00001110,10110000 , 11111111,00001111 , 01000000,01100010
115 DATA 00001111,11110000 , 01111111,11111110 , 01111111,11111110
116 DATA 00000000,00000000 , 00111111,11111100 , 00000000,00000000
120 '
130 RESTORE:s=256-12:SYMBOL AFTER s:Operationen: BD5B / 349A / 349A:  FLO SUBa=Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM+1-8*s  ' Vorarbeiten.
135 '
140 FOR i=s TO s+2 STEP 2
150   FOR j=0 TO 7
160     FOR k=i TO i+8 STEP 4                      ' Zeichen definieren.
165       FOR l=k TO k+1                           ' (etwas kompliziert,
170         Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write
Erklärung zu den Anschluss-Bezeichnungen: RD - Read
READ
LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
$:POKE Operationen: BD5B / 349A / 349A: FLO SUBa+l*8+j,VAL("&Die verwendeten Abkürzungen bedeuten: x:X"+LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
$) ' damit die DATA-Zeilen 175 NEXT ' einfach zu erstellen 180 NEXT ' waren.) 190 NEXT 200 NEXT 210 ' 220 MEMORY 29999:LOAD"CTRL25.BIN",30000:Maschinencode über HIMEM: CALLCALL 30000 ' Maschinencode laden 230 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 ' und initialisieren. 240 LOCATE 30,2:PRINT CHR$(25);CHR$(s); ' Beispiel ausdrucken. 250 PRINT " ";CHR$(25);CHR$(s+4); 260 PRINT " ";CHR$(25);CHR$(s+8);

Zeichensatz

Neben den 32 Kontrollcodes lassen sich natürlich auch normale Zeichen ausdrucken. Und zwar 256 Stück. Oft wird behauptet, Die Bildausgabe: Der Zeichensatz des Schneider CPC
Der Zeichensatz des Schneider CPC: Der Zeichensatz des Schneider CPC
der Zeichensatz des Schneider CPC
fange erst bei CHR$(32) = Space an, wei darunter ja 'nur' Kontrollcodes laegen. Das ist jedoch nicht wahr. Es ist nur ein wenig umständlicher, auch diese Zeichen auf den Bildschirm zu bekommen. In Maschinensprache ist das vergleichsweise einfach, weil man hier nur eine andere Einsprungsstelle wählen muss: &TEXT VDU: BB5D: TXT WR CHARBB5D TXT WR CHAR.

Einleitung: BASIC
Anhang: Basic
Basic
benutzt jedoch für seine PRINT-Befehle ausschließlich &TEXT VDU: BB5A: TXT OUTPUTBB5A TXT OUTPUT, und dieser Vektor befolgt nun 'mal die Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen. Es ist aber trotzdem möglich, auch über diesen Vektor alle Zeichen auszugeben, weil dafür der Kontrollcode CHR$(1) vorgesehen ist:

  100 FOR i=0 TO 255
  110   PRINT CHR$(1);CHR$(i);"  ";
  120 NEXT

Ein ähnliche Die Fließkomma-Routinen: FunktionenFunktion hat das Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen CHR$(5). Hiermit lassen sich auch alle Zeichen ausdrucken, nur dass sie hier auf der Position des Grafik-Cursors ausgegeben werden.

Die Abteilungen des Betriebssystems: Die Text-VDUDie Text-VDU verfügt über einen Character-Generator für alle 256 Zeichen. Es ist aber auch möglich, von hinten her Zeichen-Matrizen in's RAM zu kopieren um sie dort verändern zu können. In Einleitung: BASIC
Anhang: Basic
Basic
dient dazu der Befehl 'SYMBOL AFTER'.

Der Basic-Interpreter reserviert den benötigten Platz über Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM. Da hier auch der Kassetten/Disketten-Puffer aufgemacht wird und auch Maschinencode-Programme vorzugsweise hier hinzugeladen werden, gibt es hier manchmal Probleme, die sich aber umgehen lassen (Siehe Kapitel über Speicher und Peripherie: Die Speicheraufteilung im CPCdie Speicheraufteilung im CPC).

die Zeichenmatrix

Alle Zeichen, die so erzeugt werden können, sind in einer Matrix von 8 Zeilen zu 8 Spalten definiert. Diese werden im Speicher in 8 Datentypen: Bytes
Datenbreite: Bytes
Bytes
zu 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
repraesentiert. Von den acht Datentypen: Bytes
Datenbreite: Bytes
Bytes
ist das erste jeweils für die oberste Rasterzeile zuständig, innerhalb eines Datentypen: Bytes
Datenbreite: Bytes
Bytes
bestimmt das höchstwertige 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
die Punkte in der linken Spalte. 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
zeigt an, dass der entsprechende Punkt im Bildschirm in der Vordergrund-Farbe gesetzt werden muss, ein Nullbit deutet Hintergrund an.

Wenn die Zeichen durch Die Abteilungen des Betriebssystems: Die Text-VDUdie Text-VDU in den Bildschirm gemalt werden, so liegen die einzelnen Matrizen dicht an dicht neben und übereinander. Der Zwischenraum zwischen den einzelnen Buchstaben auf dem Bildschirm muss also schon bei der Definition der Matrizen berücksichtigt werden. Alle Zeichen des ROM-Zeichensatzes sind so aufgebaut, dass sie rechts und unten eine Pixelzeile Rand lassen. Allerdings nicht bei Buchstaben mit Unterlängen, so dass beispielsweise zwischen einem kleinen 'g' und einem Grossbuchstaben darunter kein trennender Hintergrund mehr ist.

Im AnhangAnhang ist der gesamte Standard-Zeichensatz dargestellt.

Fenster

Eins der besten Features der Text-VDU ist ihre Der Sound Manager: FähigkeitenFähigkeit, bis zu 8 Textfenster (fast) unabhängig voneinander zu verwalten. Jedes Textfenster kann dabei einen beliebigen Ausschnitt des Bildschirmes darstellen und funktioniert fast wie ein eigener, kleiner Bildschirm.

'Fast' unabhängig sind diese einzelnen 'Streams' deshalb, weil doch einige Seiten-Effekte nicht ausgeschlossen wurden. So geht die Fenster-Technik noch nicht so weit, dass sich einzelne Die Text-VDU: FensterFenster stoerungsfrei überschneiden können. Überlappen sich zwei Die Text-VDU: FensterFenster, so wird der Schnittbereich einfach von Textausgaben etc. von beiden Fenstern beeinflusst.

'Fast' unabahängig voneinander auch deshalb, weil es nur einen gemeinsamen Kontrollcode-Puffer gibt. Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen können ja bis zu neun Basic und Maschinencode: ParameterParameter beanspruchen. Wird mitten in einer Print-Sequenz das Textfenster gewechselt, so sind die Effekte nicht mehr ganz vorhersehbar.

Unabhängig voneinander können aber eine ganze Reihe von Parametern eingestellt werden:

• Fenstergrenzen links/rechts/oben/unten
• Cursorposition Die verwendeten Abkürzungen bedeuten: x:x/y
• Paper- und Pen-Tinte
• Cursor-Status: on/off - enabled/disabled
• VDU-Status: enabled/disabled
• Ausgabe auf der Grafikposition
• Die Grafik-VDU: Hintergrund-ModusHintergrund-Modus opaque/transparent

Innerhalb eines Textfensters kann Die Text-VDU: Der Cursorder Cursor (des entsprechenden Fensters) vollkommen frei bewegt werden. C64-Besitzer geraten regelmäßig in's Staunen, wenn sie plötzlich den Bildschirm nach unten scrollen sehen, weil man mit Die Text-VDU: Der Cursordem Cursor oben 'hinaus' gegangen ist.

Diese Der Sound Manager: FähigkeitenFähigkeit kann man sich zunutze machen, und in einer Textverarbeitung nicht nur hoch und runter-scrollen, sondern auch Zeilen einfügen und löschen.

force legal: Error

Leider hat auch diese Abteilung des Betriebsystems einen kleinen Schönheitsfehler:

Wenn Die Text-VDU: Der Cursorder Cursor in der äußersten rechten Spalte eines Fensters steht, und man druckt noch ein Zeichen ohne einen Zeilenvorschub danach zu erzeugen, so steht jetzt Die Text-VDU: Der Cursorder Cursor rechts außen von der Zeile. Ist der Cursor-Fleck ausgeschaltet, so wird die Cursor-Position noch nicht in's Textfenster zurückgezwungen.

Das wird erst gemacht, bevor das nächste Zeichen gedruckt wird. Dazu wird Die Text-VDU: Der Cursorder Cursor in die erste Spalte der nächsten Zeile gestellt, und dann erst das Zeichen gedruckt.

Was ist aber, wenn die nächsten Zeichen die Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen CHR$(10) und CHR$(13) sind, mit denen Die Text-VDU: Der Cursorder Cursor normalerweise in die erste Spalte der nächsten Zeile gestellt wird? Diese beiden Codes werden vom Basic-Interpreter nach jeder Print-Anweisung erzeugt, die nicht mit einem Komma oder Semikolon abgeschlossen wird!

In diesem Fall dürfte Die Text-VDU: Der Cursorder Cursor NICHT vor Ausführung der Die Fließkomma-Routinen: FunktionenFunktion in's Textfenster zurückgezwungen werden, weil sonst eine Leerzeile entsteht! Vor keinem einzigen Kontrollcode (außer solchen, die weitere Zeichen ausdrucken, wie CHR$(1)) darf Die Text-VDU: Der Cursorder Cursor in die Textgrenzen zurückgezwungen werden. Nur vor Datentypen: Realrealen Textausgaben.

Kontrollcodes können ja total andere Die Fließkomma-Routinen: FunktionenFunktionen haben, die z. LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
. SYMBOL-, PEN-oder PAPER-Statements ersetzen. Vor der Ausführung eines solchen Befehls-Elemente: StatementsStatements wird Die Text-VDU: Der Cursorder Cursor ja auch nicht in das Textfenster zurückbefördert. Ja es können so widersinnige Fälle auftreten, dass man in der letzten Zeile außerhalb des Textfensters steht, und nun per Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen ein LOCATE ausführen will. Der Effekt ist: Das Die Text-VDU: FensterFenster scrollt, bevor das Locate-Kommando befolgt wird.

Das ist nun leider aber bei der Text-VDU des Schneider CPC der Fall.

Der Cursor

In Einleitung: BASIC
Anhang: Basic
Basic
ist es, zumindest Garbage Collection: ... beim CPC 464beim CPC 464, nicht möglich, Die Text-VDU: Der Cursorden Cursor anzuschalten. Der Grund ist, dass ihn der Basic-Interpreter auf der System-Ebene (on/off) ausschaltet. Da nutzt es nichts, dass man ihn auf der Anwender-Ebene (enabled/disabled) mit den Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen CHR$(3) und CHR$(2) ein- und wieder ausschalten kann. Die Text-VDU: Der CursorDer Cursor wird nur dargestellt, wenn beide Ebenen an sind.

Durch Aufruf der Vektoren &TEXT VDU: BB81: TXT CUR ONBB81 MAIN FIRMWARE JUMPBLOCK: TEXT VDU
Die Firmware des Schneider CPC: TEXT VDU
TXT
Erklärung zu den verwendeten Bezeichnungen: CursorCURSOR ON und &TEXT VDU: BB84: TXT CUR OFFBB84 MAIN FIRMWARE JUMPBLOCK: TEXT VDU
Die Firmware des Schneider CPC: TEXT VDU
TXT
Erklärung zu den verwendeten Bezeichnungen: CursorCURSOR OFF erlangt man aber auch von Einleitung: BASIC
Anhang: Basic
Basic
aus Kontrolle über den Cursor-Fleck. Diese Vektoren haben keine Ein- und Ausgabe-Bedingungen und sind deshalb für den Aufruf von Einleitung: BASIC
Anhang: Basic
Basic
aus geeignet.

Allenfalls als Gimmik zu betrachten ist aber das folgende Programm: INPUT ohne Erklärung zu den verwendeten Bezeichnungen: CursorCursor:

  100 PRINT CHR$(2);
  110 INPUT Operationen: BD5B / 349A / 349A:  FLO SUBa

Valid HTML   Valid CSS