Tastatur K7672 am KC - DIE Lösung?
von Kai-Uwe Irrgang
Auf der Suche nach einer besseren Tastatur für den KC sind wir ja schon lange Zeit. Neben dem D005 sind auch gute Eigenbaulösungen entstanden, denkt man z. B. an die P8000 von Hendrik Wagenknecht. Mir kamen vor einiger Zeit eine K7672.06 und eine K7672.03 zwischen die Finger, so daß ich auf dieser Basis meine Tastatur aufgebaute.
Ein großer Vorteil der K7672 ist, daß man an der Hardware, je nach Ausbaustufe, nichts bzw. fast nichts ändern muß. Außerdem sind reichlich Tasten vorhanden. Zur Anzeige von Statusinformationen sind 6 LED's und zur Ausgabe eines internen Click ein Signalgeber eingebaut.
Eine Arbeit, die ich mir wegen der deutlichen Gebrauchsspuren "angetan" habe, war das einzelne Abschleifen jeder Taste mit feinem Sandpapier und die Beschriftung mit Abreibebuchstaben. Für das Auge hat sich diese Mühe auf jeden Fall gelohnt, zumal man dann seine individuelle Belegung auch richtig gekennzeichnet hat.
Um möglichst kompatibel zu bleiben, habe ich mir von Mario Leubner die D005-Quellen und von Frank Rydz die U806-Datenblätter geben lassen, wobei sich herausstellte, daß beide ebenfalls an einer K7672 "stricken". Dies läßt die Vermutung zu, daß mehrere solcher Tastaturen im Umlauf bzw. beschaffbar sind und sich eventuell eine Standardlösung schaffen läßt.
In Zusammenarbeit mit Mario habe ich dahingehend schon etwas "vorgearbeitet", so daß ich heute meine Variante präsentieren und zur Diskussion stellen möchte. Angesichts des Z8-Mikrocontrollers und der 4 kByte Speicher wären so viele "Raffinessen" programmierbar, daß am Ende keiner mehr durchsieht. Ziel muß es also sein, eine komfortable und vor allem kompatible Tastatur zu schaffen, die genau die Funktionen enthält, die wirklich benötigt werden. Doch nun zu den Besonderheiten meiner Version:
- der tastaturinterne Signalgeber wurde "stillgelegt", da dieses Signal für die Keybord-Ausgabe benutzt wird
- Umschalttaste für Senden über SIO ODER Keyboard-Buchse, der Zustand wird mittels einer LED angezeigt, d. h. momentan kann einfach während der Arbeit die Betriebsart gewechselt werden. Dazu muß die Tastatur natürlich gleichzeitig an beide Buchsen angesteckt sein.
An dieser Stelle tritt sicher die Frage nach dem Sinn auf. Ich habe es eigentlich nur für die Erprobungsphase vorgesehen, denn erstens sollten beide Betriebsarten getestet werden und zweitens habe ich mein M003 noch nicht so umgebaut, daß es TTL-Signale führt und auch einen +5V-Anschluß hat. In einer endgültigen Lösung wird man sich wahrscheinlich auf eine Variante festlegen, wobei dann auch der tastaturinterne Click wieder möglich wäre. Jede Betriebsart hat eine eigene Umcodierungstabelle, so daß Variationen in der Tastenbelegung zwischen beiden Betriebsarten möglich sind. - Mittels eines über eine Taste schaltbaren Repeat, der nur in der SIO-Ausgabe sinnvoll und aktivierbar ist, kann die Wartezeit vor dem Einsetzen des Repeat unterbunden werden. Auch dies wird mittels LED gekennzeichnet. In der Keyboard-Variante übernimmt der KC selbst die Überwachung des Repeat.
An dieser Stelle möchte ich anmerken, daß die Übertragungsgeschwindigkeit der SIO um ein Vielfaches höher ist. Um diesen Mangel der Keyboard-Variante etwas zu kompensieren, ist hier ein Puffer eingebaut, dessen Länge vorgewählt werden kann. In der Testphase hat sich herausgestellt, daß er aber nicht länger als drei Byte sein sollte, da dies einerseits ausreicht, um bei schnellem Schreiben wirklich keine Taste zu "verschlucken", so wie es bei der Orginaltastatur oft der Fall ist, andererseits ist bei einem langen Puffer der etwas eigenartige Effekt zu beobachten, daß die Zeichen auf den Bildschirm nachlaufen, wenn extrem schnelle Tastenbetätigung (die bei normalen Schreiben keiner erreicht) erfolgte. - Umschalttaste für CP/M - CAOS - Umschaltung der Tasten-Belegungstabellen, wobei möglichst nahe an der Orginaltastatur orientiert wurde.
Die CAOS-Betriebsart unterscheidet vier Belegungen:
Erstbelegung, nur Shift, nur Lock, Shift UND Lock.
Der CP/M-Modus unterscheidet drei Belegungen:
Erstbelegung (auch bei Shift UND Lock), Zweitbelegung (Shift XOR Lock) und Drittbelegung (Ctrl), Zustandsanzeige über LED.
In den EPROM's ist noch Platz, so daß weitere Ebenen, z.B. Shift+Ctrl+Taste, programmierbar wären. Allerdings ist mir dafür keine sinnvolle Nutzung eingefallen. - HEX-Modus, der sich nur im SIO-Modus aktivieren läßt und das Senden jeder Codierung erlaubt. Der aktive HEX-Modus wird über eine LED angezeigt. Ein dezimaler Eingabemodus wäre ebenfalls denkbar, aber umständlicher zu programmieren.
- Im CP/M-Modus wird bei eingeschaltenem Keyboard-Modus ein Zeichen mit Control-Taste mit der Folge F1-Zeichen gesendet.
- Die Shift-Lock-Taste wird tastaturintern behandelt. Ein Senden von 'CAPS' an den KC erfolgt auch im Keyboard-Modus nicht. Zustandsanzeige über LED. Um im Keyboard-Modus an die nur über CAPS erreichbaren Zeichen, wie z.B.: 'ß' zu gelangen, ist eine intelligente Senderoutine vorhanden, die in Abhängigkeit des zu sendenden Zeichen 'CAPS' vorausschickt und 'CAPS' erst genau dann nachschickt, wenn das vorhergehende Zeichen mit 'CAPS' war, das aktuelle aber ohne. Somit ist ein normal schneller Repeat auch dieser Zeichen gewährleistet. Der im KC vorhandene 'CAPS'-Zustand wird über LED gekennzeichnet.
ACHTUNG!
Das ist zwar die momentane Variante, aber Mario hatte angeregt, dies so nicht zu programmieren, da es Programme gibt, die das CAPS-Bit im KC unabhängig von der Tastatur schalten.
- Der Ziffernblock wurde zum HEX-Eingabe-Block erweitert bzw. umfunktioniert, da ich bei der täglichen PC-Praxis zu der Erkenntnis gelangt bin, daß man den externen Ziffernblock, wenn überhaupt, nur zur Eingabe von Ziffern benutzt. Die zweite Belegung mit den Sondertasten benutzt wohl kaum jemand. Andererseits fehlt aber gerade in der Assembler-Programmierung eine komfortable HEX-Eingabe, so daß ich diese Tastenbelegung gewählt habe.
- Beim Einschalten der Tastatur wird nach einer Wartezeit im SIO-Modus das Zeichen ENTER gesendet, um die Tastatur anzumelden. Wird eine CAOS-Version unter 4.3 verwendet, so muß in der SIO-Ausgabe jedem Zeichen eine Null nachgeschickt werden. Ab 4.3 ist dies nicht mehr nötig, dafür werden aber 15 F-Tasten unterstützt.
An dieser Stelle muß die Belegung der Tastatur noch einmal überdacht werden, da 12 F-Tasten vorhanden sind, die bis 4.3 gereicht hätten. Andererseits könnte man, wenn sowieso eine doppelte Belegung notwendig ist, gleich nur acht Tasten (F1 und F2/F9 bis F8/F15) vorsehen und die dann freien vier Tasten (ehemals F9 bis F12) anderweitig verwenden, z.B. zum Schalten des internen Click.
Soviel an dieser Stelle von mir. Jetzt seid Ihr an der Reihe, weitere Vorschläge zu unterbreiten bzw. Euch darüber zu äußern, welche der vorgestellten Funktionen gewünscht werden und welche vielleicht überflüssig sind. Besonders würde mich interessieren, ob Ihr die SIO- oder die Keyboard-Variante bevorzugt, oder ob es doch per zwei Leitungen umschaltbar bleiben soll, denn alles Gute ist nie beisammen.
Die Vorteile der SIO sind die erheblich schnellere Übertragung und die 256 statt nur 128 Sendeworte. Desweiteren ist der HEX-Modus verfügbar und der Repeat wahlweise abschaltbar. Auch die Repeat-Geschwindigkeit könnte veränderlich gestaltet werden. Nachteile: ein (-er der "knappen") Vollduplexkana(e)l(e) ist permanent blockiert, zudem muß das betreffende M003-Modul umgebaut werden und nicht jede Software unterstützt eine externe Tastatur.
Die Vorteile der Keyboard-Variante liegen ganz einfach darin, daß es die Nachteile der SIO nicht hat und sich aus KC-Sicht wie eine Orginaltastatur verhält. Die Nachteile sind die vergleichsweise geringe Geschwindigkeit und die Notwendigkeit, mit den Sendefolgen etwas zu tricksen. Der HEX-Modus fehlt ebenso wie die Möglichkeit der Einflußnahme auf den Repeat.
Für die Z8-kundigen habe ich die reichlich kommentierten Quelltexte kopiert. TO.ASM ist der für den oberen (0800H physisch aber 0000H logisch), also zu Einschaltzeitpunkt aktiven EPROM und TU.ASM der für den unteren (0000H physisch und logisch). Die Umcodierungstabellen sind zwar noch nicht bis ins Detail optimiert, aber für die Testphase völlig ausreichend.
Ich benutze einen OS/2 bzw. MSDOS-Assembler, so daß die Quellen vom CP/M-Z8-Assembler so nicht akzeptiert werden und etwas modifiziert werden müßten, falls sich jemand sein eigenes Programm schreiben möchte. An dieser Stelle wäre es aber sicher besser, seine Vorschläge einzubringen und so die "Endlösung" mit zu schaffen. Wenn diese gefunden ist, können die EPROM's (entweder 2*2716 oder 1*2732) bei Mario oder bei mir gebrannt werden.