Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Key Manager

Entgegen landläufiger Meinung zwingt ein Tastendruck den Computer nicht, eine Eingabe entgegenzunehmen und auch entsprechend zu handeln. Ganz im Gegenteil. Man kann beliebig lange auf der Tastatur herumhaemmern, ohne dass sich auch nur irgend etwas tut, wenn der Computer nicht geneigt ist, das Zeichen aktiv entgegenzunehmen. Man muss sich hierfür nur all die unwiderruflich abgestürzten Programme in Erinnerung rufen, wo dann auch Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
'Toter Mann' spielt.

Die Eingaben über Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
entgegenzunehmen, ist Aufgabe des Betriebsystems. Die zuständige Abteilung ist Die Abteilungen des Betriebssystems: Der Key Managerder KEY MANAGER. Aber ganz alleine kann auch er diese Aufgabe nicht bewältigen.

Um Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
zunächst überhaupt einmal 'abzufragen' wird bei der Initialisierung des Rechners in die TICKER Datenspeicherung und Datenstrukturen: ChainsCHAIN ein BCEF: KL INIT EVENT: EventblockEventblock eingehängt, wodurch 50 mal in jeder Sekunde Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
überprüft wird. Die Abteilungen des Betriebssystems: Der Key ManagerDer Key Manager greift hier also auf den Software-Interrupt-Mechanismus des MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
KERNEL
zurück.

Tastatur-Abfrage

Alle Tasten und auch die beiden Joystick-Anschlüsse sind an eine Draht-Matrix mit 8 mal 10 Leitungen angeschlossen. Normalerweise sind alle Taster geöffnet und es besteht keine elektrische Verbindung zwischen den Zeilen- und den Spaltendraehten.

Die 10 Zeilendraehte sind mit den Ausgängen eines ICs 74LS145 verbunden. Das ist ein BCD zu Dezimal Dekoder mit offenen Kollektor-Ausgängen. Normalerweise sind alle Ausgänge praktisch hochohmig. Über 4 Eingänge kann, binär kodiert, aber ein Ausgang angewählt werden, der dann auf 0Volt gezogen wird. Diese Eingänge sind an die Port C - Output: &F6xx: Bits 0 bis 3:Bits 0 bis 3 des Erklärung zu den Anschluss-Bezeichnungen: PC0 bis PC7 - Port C Leitungen 0 bis 7Port C der Die ICs im Überblick: Die PIO 8255
Das Innenleben der CPC-Rechner: Die PIO 8255
Speicher und Peripherie: Die PIO 8255
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die PIO 8255
PIO
angeschlossen. Die Ausgänge, wie gesagt, an die Zeilendraehte der Tastatur.

Demgegenüber sind die 8 Spaltendraehte an den I/O-Port des Sound-ICs angeschlossen. Intern sind diese Leitungen über einen Widerstand auf +5Volt, also logischen Eins-Pegel hochgezogen. Der Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
PSG
wiederum ist an den Erklärung zu den Anschluss-Bezeichnungen: PA0 bis PA7 - Port A Leitungen 0 bis 7PORT A der Die ICs im Überblick: Die PIO 8255
Das Innenleben der CPC-Rechner: Die PIO 8255
Speicher und Peripherie: Die PIO 8255
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die PIO 8255
PIO
angeschlossen und muss noch über die Port B - Input: &F5xx: Bits 1, 2 und 3:
Port C - Output: &F6xx: Bit 6 und 7:
Bits 6 und
7 des Erklärung zu den Anschluss-Bezeichnungen: PC0 bis PC7 - Port C Leitungen 0 bis 7Port C angesteuert werden (BC1 und Erklärung der Anschlussbelegung: BDIRBDIR).

Um Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
abzufragen, werden nun nacheinander alle Zeilendraehte via Erklärung zu den Anschluss-Bezeichnungen: PC0 bis PC7 - Port C Leitungen 0 bis 7Port_C und 74LS145 auf 0Volt gelegt. Dabei wird jeweils, mit den selben, komplizierten Die Fließkomma-Routinen: OperationenOperationen wie bei der Programmierung von Geräuschen, über den Umweg über den I/O-Port des Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
PSG
(Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
Sound
Chip) und über Erklärung zu den Anschluss-Bezeichnungen: PA0 bis PA7 - Port A Leitungen 0 bis 7Port A der Die ICs im Überblick: Die PIO 8255
Das Innenleben der CPC-Rechner: Die PIO 8255
Speicher und Peripherie: Die PIO 8255
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die PIO 8255
PIO
ein Datentypen: Bytes
Datenbreite: Bytes
Byte
eingelesen, das mit seinen 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
den Zustand der Spaltendraehte repraesentiert.

Auf diese Weise werden für eine komplette Der Key Manager: Tastatur-AbfrageTastatur-Abfrage 10 Datentypen: Bytes
Datenbreite: Bytes
Bytes
(für 10 Zeilendrähte) eingelesen.

Normalerweise, wenn keine Taste gedrückt ist, werden alle Spaltendraeht bei jeder Abfrage auf logischem Eins-Pegel liegen, in den eingelesenen Datentypen: Bytes
Datenbreite: Bytes
Bytes
sind deshalb alle 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. Man erhält den Wert 255 = &FF = &X11111111.

Wird aber eine Taste gedrückt, so werden dadurch ein Zeilen- und ein Spaltendraht verbunden. Wird jetzt Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
abgefragt, so wird auch weiterhin bei allen anderen Zeilendraehten das Datentypen: Bytes
Datenbreite: Bytes
Byte
&FF eingelesen. Nicht aber dann, wenn der Zeilendraht aktiviert wird, der mit der gedrückten Taste verbunden ist. Dann wird nämlich auch der durch die Taste verbundene Spaltendraht auf 0Volt gezogen, und an dieser Stelle enthält das eingelesene Datentypen: Bytes
Datenbreite: Bytes
Byte
eine '0'.

Nach einer kompletten Der Key Manager: Tastatur-AbfrageTastatur-Abfrage erhält man also zunächst einmal nur 10 Datentypen: Bytes
Datenbreite: Bytes
Bytes
, in denen vielleicht das eine oder andere 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
Real: NullNull ist. Aus der Lage des Nullbits lässt sich auf die gedrückte Taste zurückschließen.

Aus der Lage der einzelnen Tasten in der Drahtmatrix ergibt sich dann auch ihre Tastennummer, die man beispielsweise bei der Basic-Funktion 'INKEY(nr)' angeben muss. Die Die Tastatur: TastennummernTastennummern des ersten Datentypen: Bytes
Datenbreite: Bytes
Bytes
gehen von 0 bis 7, die des zweiten Datentypen: Bytes
Datenbreite: Bytes
Bytes
von 8 bis 15 usw. bis zum 10 Datentypen: Bytes
Datenbreite: Bytes
Byte
. Die folgende Grafik zeigt die Lage der einzelnen Tasten in der Matrix und ihre Die Tastatur: TastennummernTastennummern. Dabei werden mit den Befehls-Elemente: KlammernKlammern folgende Lagen symbolisiert:

  (...)  --> Schaubilder der Tastatur: CPC 464/664: Zehnerblock und CursorblockZehnerblock oder Cursor-Taste
  [...]  --> Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick 0 (normaler Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick)
  {...}  --> Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick 1 (zweiter Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick)
   \
Datentypen: Bytes
Datenbreite: Bytes
Byte
\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 | 1 | 2 | 3 | 4 | 5 | 6 | 7 -----\--+--------+--------+--------+--------+--------+--------+--------+-------- 0 | (hoch) |(rechts)|(runter)| (9) | (6) | (3) | (ENTER)| (.) 8 | (links)| (COPY) | (7) | (8) | (5) | (1) | (2) | (0) 16 | CLR | [ | ENTER | ] | (4) | SHIFT | \ | CTRL 24 | ^ | - | @ | P | ; | : | / | . 32 | 0 | 9 | O | I | L | K | M | , 40 | 8 | 7 | U | Y | H | J | N | SPACE 48 | 6 | 5 | R | T | G | F | LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
| V ! 48 | {hoch} |{runter}| {links}|{rechts}|{Feuer1}|{Feuer2}| {n.c.} | 56 | 4 | 3 | LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
| W | S | D | C | Die verwendeten Abkürzungen bedeuten: x:X 64 | 1 | 2 | ESC | Q | TAB | Operationen: BD5B / 349A / 349A: FLO SUBA |CAPSLOCK| Z 72 | [hoch] |[runter]| [links]|[rechts]|[Feuer1]|[Feuer2]| [n.c.] | DEL --------+--------+--------+--------+--------+--------+--------+--------+--------

Während der normale Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick 0 einen eigenen Zeilendraht als COMMON-Leitung hat, ist COMMON 2 für den zweiten Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick identisch mit einem Zeilendraht der Tastatur. Bei der Der Key Manager: Tastatur-AbfrageTastatur-Abfrage kann man deshalb nicht erkennen, ob eine Taste des zweiten Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joysticks oder eine Taste der Tastatur gedrückt wurde.

Außerdem ist der Spaltendraht 6 am Joystickport herausgeführt. Er wird jedoch von keinem normalen Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick benutzt, und ist deshalb als n.c. (not connected = nicht angeschlossen) markiert.

Wirklich nicht angeschlossen ist aber die Taste mit dem Code 79. Hier könnte man so etwas wie eine Geheimtaste erfinden, um in die eigenen kopiergeschützen Programme wieder 'hinein' zukönnen.

Entprellen

Es genügt jedoch nicht, die gedrückten Tasten zu erkennen. Mechanische Taster haben nämlich die unangenehme Eigenschaft, zu prellen. Wird die Taste gedrückt, so schließt der Kontakt, federt zurück, schließt und vielleicht dann noch 'mal, bevor der Kontakt endlich fest hergestellt ist.

Beim Einlesen der Taste kann es also passieren, dass zunächst ein geschlossener Kontakt, dann wieder ein offener und dann wieder ein geschlossener erkannt wird. Dieses Kontakt-Prellen muss nun software-mäßig von bewusst wiederholten Tastendrücken des Anwenders unterschieden werden. Dazu dient die Zeit als Maß: Kontakt-Prellen ist naturgemaess nur eine sehr kurzlebige Angelegenheit, Doppelanschlaege auf der Tastatur dauern länger.

Einleitung: Die Tastatur
Anhang: Die Tastatur
Die Tastatur
des Schneider CPC wird dadurch entprellt, dass eine Taste erst dann als wieder geöffnet markiert wird, wenn sie bei zwei aufeinanderfolgenden Abfragen nicht mehr geschlossen war. Dadurch wird recht sicher erreicht, dass nur wirklich wieder losgelassene Tasten als wieder geöffnet markiert werden. Demgegenüber wird eine Taste aber sofort als gedrückt behandelt, wenn das entsprechende 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
Real: NullNull ist. Hier gibt es keine Verzögerung.

3 im Karree

Eine weitere Eigenheit einer matrix-foermig aufgebauten Tastatur ist zu beachten. Werden drei Tasten gleichzeitig gedrückt, die die Eckpunkte eines Rechtecks in der Tastenmatrix bilden, so wird der vierte, nicht gedrückte Eckpunkt auch ein Nullbit liefern.

Als Beispiel sollen die Spaltendraehte 1 und 3 und die Zeilendraehte 5 und 6 betrachtet werden:

Durch Taste Eins wird S1 und Z5 verbunden. Die zweite Taste verbindet S1 mit Z6, die dritte verbindet S3 mit Z6. Dadurch ist auch S3 mit Z5, die 4. Tastenposition elektrisch verbunden, ohne dass die Taste gedrückt zu sein braucht:

                                         S1   S2   S2
  +-T3-+-T2-+-T1-+                        |    |   |
  |    |    |    |                     --T1---Tx---T4-------Z5
  S2 - Z6 - S1 - Z5    <------->          |    |   |
  |              |                     --T2---Ty---T3-------Z6
  +-----T4-------+                        |    |   |

Das müsste ebenfalls von der Tastatur-Software erkannt und abgefangen werden. Dazu muss man einfach nur Erklärung der Anschlussbelegung: Testtesten, ob eben vier oder noch mehr Tasten erkannt werden, und dann diese Abfrage einfach ignorieren. Da bei normalem Gebrauch der Tastatur maximal zwei Tasten gleichzeitig gedrückt werden, muss wohl bei drei oder noch mehr eingelesenen Tasten ein 'Ausrutscher' beim Schreiben vorliegen.

In diesem Punkt ist die Tastatur-Software aber nicht sehr durchdacht gestaltet Datenbreite: Wordsworden. Beim Schneider CPC wird nämlich genau dieser Fall nicht erkannt.

Als Beispiel kann ich u. Operationen: BD5B / 349A / 349A: FLO SUBA. einen Fall anführen, der mich in Assemblertexten manchmal zur Weissglut bringen kann:

Habe ich die Tastatur auf Kleinbuchstaben eingestellt, und will mal eben schnell das Wort 'DEFW' eingeben, erhalte ich ziemlich oft:

D
EFW

Der Grund ist, dass 'SHIFT', 'D' und 'LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
' mit 'ENTER' ein Rechteck in der Tastaturmatrix bilden. Um 'DEFW' eizugeben, Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Halthalte ich mit dem Daumen die Shift- Taste gedrückt. Bei der Eingabe bin ich dann aber so schnell, dass ich 'LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
' schon niederdrücke, bevor 'D' richtig losgelassen ist. Dann sind alle drei Tasten gedrückt und die vierte im Rechteck, nämlich 'ENTER', wird von selbst erzeugt.

Warteschlange

Die Tastaturabfrage auf dem Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt und das Programm, das die Eingaben bearbeitet, sind zwei unabhängig voneinander arbeitende Programme.

Damit ein Tastendruck seinen Weg zum laufenden Programm findet, sind zwei Arbeitsgänge notwendig: Zum Einen muss Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager regelmäßig nachschauen, ob eine Taste gedrückt ist. Das tut er mal in der Sekunde.

Zum Anderen müssen die erkannten Tasten vom laufenden Programm abgeholt werden. Es kann dabei durchaus vorkommen, dass das Programm eine Zeit lang keine Eingaben abholen kann, weil es gerade mit einer anderen Aufgabe beschäftigt ist.

In diesem Fall wird immer eine Der Key Manager: WarteschlangeWarteschlangen benötigt. An einem Ende werden bei der Der Key Manager: Tastatur-AbfrageTastatur-Abfrage Tasten nachgeschoben, am anderen Ende holt sich das laufende Programm die Tasten ab. Diese Queue ist dabei lang genug, 20 'Tasten' aufzunehmen. Programm-technisch gesehen ist die Queue als Ringspeicher in einem Datenspeicherung und Datenstrukturen: ArraysArray für 'fixed length Datenspeicherung und Datenstrukturen: Recordsrecords' realisiert.

Ist der Puffer voll (was bei 20 Zeichen eigentlich nicht so schnell vorkommen sollte), so werden weitere Tastendrücke einfach ignoriert. Leider gibt Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager dann keine Warnung von sich. Andere Computer piepsen in diesem Fall wenigstens.

Tastenübersetzung

Natürlich ist es noch recht unkomfortabel, nur zu erfahren, welche Taste gerade gedrückt wurde. Meist ist man viel mehr daran interessiert, zu erfahren, welches Zeichen dadurch erzeugt werden sollte.

Zu diesem Zweck hält Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager drei Tabellen bereit, in denen zu jeder Tastenposition eingetragen ist, welches Zeichen diese Taste erzeugen soll, wenn sie alleine, zusammen mit 'SHIFT' oder zusammen mit 'CTRL' gedrückt wird.

Zusätzlich gibt es noch eine Tabelle, in der eingetragen ist, welche Tasten sich automatisch wiederholen dürfen, wenn man seinen Finger nur lange genug darauf hält.

Diese Tabellen werden in's RAM kopiert und sind auch von Einleitung: BASIC
Anhang: Basic
Basic
aus änderbar. Dafür dient der Befehl

KEY DEF nr, rep, solo, shift, ctrl

Als Basic und Maschinencode: ParameterParameter müssen in dieser Reihenfolge die Tastennummer, der Repeat-Status (0 = keine automatische Wiederholung) und die Der Key Manager: TastenübersetzungTastenübersetzungen alleine, mit 'SHIFT' und mit 'CTRL' angegeben werden.

Repeat

Auch die Repeat-Funktion für die Tasten, denen es durch den Eintrag in der Repeat-Tabelle erlaubt wurde, sich zu wiederholen, ist sehr durchdacht implementiert Datenbreite: Wordsworden: Zunächst wird zwischen der ersten Start-Verzögerung und der Wiederholungs-Verzögerung zwischen den folgenden Selbst-Anschlägen unterschieden.

Diese beiden Zeiten sind in Einleitung: BASIC
Anhang: Basic
Basic
mit 'SPEED_KEY_startzeit,wiederholzeit' programmierbar.

Eine Taste wird aber nicht bedingungslos neu angeschlagen, wenn die entsprechende Wartezeit abgelaufen ist. Die Abteilungen des Betriebssystems: Der Key ManagerDer Key Manager schaut erst nach, ob er auch keine weitere Taste mehr im Puffer hat. Nur wenn der Tastenpuffer vollständig leer ist, wird ein Repeat-Anschlag im Tastatur-Puffer vermerkt. Wenn der Puffer nicht leer ist, wird die Taste nicht eingetragen, und muss eben noch etwas warten.

Das ist sehr günstig, weil sich der Tastenpuffer so nicht unbemerkt mit selbst- wiederholten Zeichen füllen kann, wenn das abarbeitende Programm einmal nicht schnell genug ist. Das wäre 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
. sehr ungünstig, wenn das mit der Delete-Taste geschieht. Hier hätte man dann sehr schnell sehr viel mehr Text gelöscht, als man eigentlich beabsichtigte.

Clear Input

Trotzdem kann sich im Tastatur-Puffer aber auch ganz schön 'Muell' ansammeln. Dann nämlich, wenn das Programm längere Zeit keine Eingaben entgengen nehmen kann. Haemmert dann der Anwender nervoes auf der Tastatur herum, so sammeln sich die 'Eingaben' beim MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
Key Manager
an.

Wendet sich das Programm dann endlich wieder dem Anwender zu, so erhält es zunächst einmal den gesamten Muell aus dem Tastatur-Puffer. Da der Anwender zu diesem Zeitpunkt diese 'Eingaben' wahrscheinlich nicht mehr machen wollte, ist es sinnvoll, den Tastatenpuffer vorher zu leeren. Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 gibt es dafür in Einleitung: BASIC
Anhang: Basic
Basic
den Befehl 'Der Key Manager: Clear InputCLEAR INPUT'. Aber auch Garbage Collection: ... beim CPC 464beim CPC 464 kann man den Effekt mit kaum mehr Aufwand simulieren:

1000 WHILE INKEY$<>"":WEND

In Maschinensprache sieht das ähnlich einfach aus:

; Flush keyboard buffer
;
FLUSH:  Maschinencode über HIMEM: CALLCALL #BB09       ; KEY MANAGER: BB09: KM READ CHARKM READ CHAR (Hole Zeichen, falls vorhanden)
        JR   C,FLUSH     ; CY=1, wenn ein Zeichen da war. Dann noch mal.
        RET              ; sonst fertig.

spezielle Tastencodes

In den Tasten-Übersetzungstabellen hat der Eintrag &FF eine spezielle Bedeutung: Hiermit wird angedeutet, dass diese Tastenkombination kein Zeichen erzeugen soll.

Aber auch noch weitere, reservierte Zeichencodes gibt es: So wird mit &FE der Shift-Lock-Status und mit &FD der Caps-Lock-Status invertiert. Das sind die Die Fließkomma-Routinen: FunktionenFunktionen, die man mit 'CAPS_LOCK' und 'CAPS_LOCK' plus 'CTRL' erreicht.

&FC wird normalerweise von der 'ESC'-Taste erzeugt. Zusätzlich wird aber auch das Zeichen &EF in den Tastenpuffer eingefügt, wenn der Break-Mechanismus aktiv ist. Das ist dafür gedacht, den Tastenpuffer bis zu der Stelle leeren zu können, an der der Anwender das Programm unterbrochen hat. In Einleitung: BASIC
Anhang: Basic
Basic
wird das aber nicht vom Anwender-Programm, sondern vom Basic-Interpreter vorgenommen.

Speziell die Behandlung der Break-Taste scheint Garbage Collection: ... beim CPC 464beim CPC 464 noch nicht ganz ausgegoren zu sein. Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 wurden hier einige Änderungen vorgenommen:

So ist es Garbage Collection: ... beim CPC 464beim CPC 464 noch möglich, die Zeichen &FC und &EF mittels INKEY$ einzulesen, wenn man eine Taste mit dieser Belegung definiert. Wenn man den Break-Mechanismus abschaltet (Maschinencode über HIMEM: CALLCALL &KEY MANAGER: BB48: KM DISARM BREAKBB48) kann das sogar die 'ESC'-Taste sein. Der CPC 6128 weigert sich aber beharrlich, sowohl das Zeichen &FC als auch &EF herauszurücken.

Garbage Collection: ... beim CPC 464Beim CPC 464 enthält der Basic-Interpreter noch einen Der Linien-Algorithmus: Fehler 3Fehler, der es trotz 'ON BREAK GOSUB' möglich macht, das Programm mit 'ESC' zu stoppen. 'Breaks' während der Zeileneditor auf eine Eingabe wartet (INPUT, LINE INPUT), stoppen in allen Fällen das Programm.

Das folgende Programm zeigt, wie man den Break-Mechanismus ganz ausschaltet, aber trotzdem noch software-mäßig einen Break erkennen kann.

100 Maschinencode über HIMEM: CALLCALL &KEY MANAGER: BB48: KM DISARM BREAKBB48                 ' entspricht ON BREAK CONT Garbage Collection: ... beim CPC 464beim CPC 664/6128
110 '
120 KEY DEF 66,0,159,159,159   ' Break-Taste
130 KEY 159,CHR$(13)+CHR$(27)  ' erzeugt jetzt erst ENTER dann ESCAPE
140 '
150 ' Demo:
160 '
170 INPUT Operationen: BD5B / 349A / 349A:  FLO SUBa                            ' lässt sich nicht breaken
180 IF INKEY$=CHR$(27) THEN GOTO 170   ' Erklärung der Anschlussbelegung: TestTest, ob man breaken wollte
190 FOR i=0 TO 1000:PRINT"#";:NEXT     ' lässt sich auch nicht breaken

Weitere Sonderbehandlungen nimmt Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager aber mit den Zeichen nicht mehr vor. Alle anderen Kontroll-Funktionen, die einzelnen Zeichen bei der Arbeit mit dem Zeileneditor zugeordnet sind, werden nicht vom MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
Key Manager
ausgewertet. Hier nimmt der Zeileneditor selbst die Zusatz-Interpretationen vor.

drei Abhol-Methoden

Neben der Möglichkeit, mit INKEY(nr) eine Taste direkt zu Erklärung der Anschlussbelegung: Testtesten (wobei Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager nicht tatsächlich Einleitung: Die Tastatur
Anhang: Die Tastatur
die Tastatur
neu abfragt, sondern auf die 10 Datentypen: Bytes
Datenbreite: Bytes
Bytes
der letzten Abfrage zurückgreift), besteht also für das Vordergrund-Programm die Möglichkeit, sich schon fertig ausgewertete Zeichen von der Tastatur abzuholen.

Hierbei gibt es aber nochmals zwei unterschiedliche Möglichkeiten: Die eine, die unter Einleitung: BASIC
Anhang: Basic
Basic
normalerweise nicht zur Verfügung steht, ist die, dass man sich alle Zeichen so abholt, wie sie vom Anwender eingegeben wurden (außer der speziell interpretierten Zeichen &FC bis &FF). Hierfür muss man die Vektoren &KEY MANAGER: BB18: KM WAIT KEYBB18 und &KEY MANAGER: BB1B: KM READ KEYBB1B benutzen.

Von Einleitung: BASIC
Anhang: Basic
Basic
wird jedoch ein anderer Vektor zum MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
Key Manager
benutzt, der von der Möglichkeit Gebrauch gemacht, die Zeichen mit Codes von 128 (&80) bis 159 (&9F) expandieren zu lassen. Dabei werden diese Zeichen nicht weitergegeben, sondern in einer Übersetzungstabelle ein hierfür definierter Datentypen: StringsString gesucht. Hat der Benutzer durch einen Tastendruck ein solches 'Die Tastatur: ErweiterungszeichenErweiterungszeichen' erzeugt, so wird dem laufenden Programm mit jedem Aufruf des Vektors &KEY MANAGER: BB06: KM WAIT CHARBB06 oder &KEY MANAGER: BB09: KM READ CHARBB09 ein Zeichen aus dem entsprechenden Erweiterungs-String zurückgegeben, bis dieser vollständig abgearbeitet wurde.

Auch diese Tabelle ist im RAM angelegt und kann geändert werden. In Einleitung: BASIC
Anhang: Basic
Basic
geschieht das mit dem Befehl:

KEY nr,"Datentypen: Stringsstring"

Return to Sender

Für Maschinesprache-Programme besteht darüber hinaus die Möglichkeit, ein Zeichen zurückzugeben. Man kann sich ein Zeichen vom MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
Key Manager
abholen und, wenn es einem nicht gefällt, das Zeichen (oder ein anderes) zurückgeben.

Damit lassen sich manche Probleme lösen, an denen man sonst schwer zu knacken hätte. In Einleitung: BASIC
Anhang: Basic
Basic
ist diese Möglichkeit aber nicht vorgesehen. Man kann aber die Die Tastatur: ErweiterungszeichenErweiterungszeichen benutzen, um mit einigen Tricks hier doch etwas zu erreichen. Wird nämlich ein Die Tastatur: ErweiterungszeichenErweiterungszeichen gerade ausgegeben, so muss sich Die Abteilungen des Betriebssystems: Der Key Managerder Key Manager ja irgendwie selbst darüber auf dem Laufenden Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Halthalten. Dazu benutzt er zwei Speicherstellen seines System-RAMs, in die er die Nummer dieses Datentypen: StringsStrings einträgt und welches Zeichen im Datentypen: StringsString gerade dran ist:

             | CPC 464 | CPC 664/6128
-------------+---------+-------------
Zeichen im $:|  &B4DE  |   &B628
Exp$-Nummer: |  &B4DF  |   &B629
-------------+---------+-------------

Im folgenden Beispiel fügt ein Basic-Programm sich selbst neue Zeilen ein:

 10 ' Selbst-vernderndes Basic-Programm   (c) G.Woigk Erklärung zu den Anschlüssen: Vcc und Vss
Erklärung zu den Anschluss-Bezeichnungen: Vcc und Vss
vs
. 22.5.86 (CPC 6128) 20 ' ----------------------------------- ----------------------- ---------- 30 ' 90 PRINT 100 PRINT "Geben sie die Formel ein: 110 PRINT 120 LINE INPUT "Y = ",Operationen: BD5B / 349A / 349A: FLO SUBa$ 130 PRINT 140 INPUT "von Die verwendeten Abkürzungen bedeuten: x:X = ",x1 150 INPUT "bis Die verwendeten Abkürzungen bedeuten: x:X = ",x2 160 CLS 170 KEY 150,"500 y="+Operationen: BD5B / 349A / 349A: FLO SUBa$+CHR$(13)+"GOTO 220"+CHR$(13) ' Einfügen der Zeile 500 180 PAPER 0:PEN 0 ' und weiter in Zeile 220 190 POKE &B628,0 ' MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
Key Manager
austricksen. 200 POKE &B629,150 210 STOP ' Hiernach liefert der MAIN FIRMWARE JUMPBLOCK: KEY MANAGER
Die Firmware des Schneider CPC: KEY MANAGER
KM
die Zeichen aus Zeile 170 220 PEN 1:CLS ' und deswegen geht es hier weiter. 230 FOR Die verwendeten Abkürzungen bedeuten: x:x=x1 TO x2 500 ' Hier wird die neue Zeile eingefügt. 510 PRINT "Die verwendeten Abkürzungen bedeuten: x:X =";Die verwendeten Abkürzungen bedeuten: x:x;"--> Y =";y 520 NEXT 600 RUN

Valid HTML   Valid CSS