Die Text-VDUNeben 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 Kontroll-CodesVon den insgesamt 256 verschiedenen Zeichen, die sich durch ein Datentypen: Bytes Damit ist es möglich, die wichtigsten Die Fließkomma-Routinen: FunktionenFunktionen der Text-VDU mittels einfacher Print-Anweisungen auch von Einleitung: BASIC 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 Die Behandlungsroutine eines Kontrollcodes ist als Grundlagen: UnterprogrammeUnterprogramm der MAIN FIRMWARE JUMPBLOCK: TEXT VDU EIN: Operationen: BD5B / 349A / 349A: FLO SUBA und C = letzter Basic und Maschinencode: ParameterParameter LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Beispiel: Pictogramm-VektorDas 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 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 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 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 ZeichensatzNeben 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 Einleitung: BASIC 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 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 ZeichenmatrixAlle 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 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. FensterEins 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: ErrorLeider 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 Das ist nun leider aber bei der Text-VDU des Schneider CPC der Fall. Der CursorIn Einleitung: BASIC Durch Aufruf der Vektoren &TEXT VDU: BB81: TXT CUR ONBB81 MAIN FIRMWARE JUMPBLOCK: TEXT VDU 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
|