Das PC-Tastatur-Interface
von Enrico Grämer
Zuerst möchte ich mich hiermit recht herzlich bei Jörg Linder und Ralf Kästner bedanken, welche das Interface vorab getestet haben. Des weiteren bedanke ich mich bei Mario Leubner für die freundliche Unterstützung.
Es gab ja schon einige Lösungsvarianten, die originale Gummitastatur zu ersetzen, aber sie alle haben aus meiner Sicht Nachteile. Zuerst die D005 von MPM, welche zwar besser zu bedienen ist, aber nicht mehr Funktionen als das Original bietet. Dann die verschiedenen Varianten der P8000-Tastatur, die zwar auch schon wieder einen wesentlich höheren Komfort bieten, aber zum einen nur schwer beschaffbar sind, und zum anderen die Tasten z.T. neu beschriftet werden müssen.
Alle diese Nachteile bestehen mit dem hier aufgezeigten Lösungsvorschlag nicht mehr. Denn PC-Tastaturen sind ja überall billig zu bekommen, und die Tastaturfunktionen des KC's sind, bis auf 3 Ausnahmen (Tastenclick, TPKC-Belegung, Umschaltung CP/M - CAOS), der Beschriftung einer deutschen PC-Standard-Tastatur zumindest logisch zugeordnet.
Wie aus dem Schaltplan zu ersehen ist, ist es mit maximal 4 IC's wirklich nur ein minimaler Bauteilaufwand. Herzstück des Ganzen ist der zum Industriestandard 8051 kompatible Controller AT 89 C 2051 von ATMEL. Der MAX 232 dient als Pegelwandler zwischen TTL und V 24, der EEPROM IC 2 enthält die Umkodierungstabellen und einige BASIC-Befehle. IC 3 enthält, wenn vorhanden, die selbst zu programmierenden Funktionstastenbelegungen. Soll das Interface am M053 betrieben werden, entfallen MAX 232 und die Elkos C4 bis C7. Die Pin's 13, 12 und 14, 11 des MAX 232 müssen dann noch verbunden werden. Die Stromversorgung erfolgt dann, anstatt über den Keyboard-Anschluß, über das RS-232-Modul.
Wie aus den beiliegenden Tabellen zu ersehen ist, ist der Funktionsumfang sehr hoch. Zusätzlich zu den normalen Buchstaben- und Zahlenbelegungen ist auch noch der Control-Code, 48 BASIC-Befehle und des weiteren sogar die Sonderbelegung für TPKC vorhanden. Außerdem können auch bis zu 48 Funktionstasten mit jeweils maximal 41 Zeichen, oder auch weniger Funktionstasten mit mehr Zeichen, aber maximal 2048 Bytes selbst definiert werden. Wem dies alles dann aber immer noch nicht reichen sollte, dem ist es nun erstmals möglich, auch Befehle zur Tastatur zu senden und somit jede einzelne Taste abzufragen, ihre Reaktion auf Drücken und Loslassen einer Taste zu ändern und die LED's zu schalten.
Nun aber zum Wichtigsten: die Kosten. Selbstverständlich bin ich gern bereit, die IC's gegen Rückporto zu programmieren. Die Kosten für einen kompletten Bausatz (incl. Gehäuse und Platine) werden sich auf ca. 50 - 60 DM belaufen. Bei einer größeren Stückzahl wäre es mir möglich, die Platinen sehr günstig anfertigen zu lassen. Des weiteren bekommt man ja Mengenrabatt bei den Versandfirmen für die Bauteile, so daß sich die Kosten noch etwas verringern lassen. Wer also Interesse hat, sollte sich unbedingt bei mir melden.
Programme zur Tastatur im Archiv BSP.PMA:
ECHO Echo-Funktion; Tastatur vorhanden? PROGTAST Programmiert Anwender-EEPROM der Tastatur PROGDAT Beispieldatei zu PROGTAST READ_ID Auslesen der PC-Tastatur ID-Byte SETCAOS Umschalten auf CAOS-Belegung SETCPM Umschalten auf CP/M-Belegung SETLED Schaltet alle LED's an SET_1KEY Schaltet Taste 'A' auf nur Make-Code SET_KEYS alle Tasten auf nur Make-Code schalten TASTRATE Tastaturrate auf 2 Hz, 1 s einstellen V24TAST.KOP Tastatur-Koppeltreiber für CP/M
Sendecodes zur Tastatur und Rückmeldungen von der Tastatur zum KC
Datenübertragungsformat: 1200 BPS 8N1 (erst höherwertiges, dann niederwertiges Byte senden)
- [0000H] Systemreset + Senden 0DH
- Tastatur- und KC-reset nur interne Version
- Tastatur- und KC-reset nur interne Version
- [0001H] Tastaturreset + Senden 0DH
- [0002H] Umstellen auf Senden PC-AT-Tastatur Scancodes Mode 3 (siehe Tabelle)
- [0003H] Sende PC-Tastatur-ID-Bytes: 0FAH + 2 Bytes (meist 83ABH)
- [0004H] Programmiere Anwender-EEPROM
- max. 2048 Byte, 48 Funktionstasten (F1-F12 mit Shift und Caps)
- alle Zeichen außer 0FEH und 0FFH sind erlaubt
- 41 Bytes je Taste + 0FFH (Ende der Taste)
- bei weniger als 41 Bytes Rest mit 0FFH auffüllen
- Kennzeichnung Dateiende: 0FEH
- bei Code 00H wird eine Pause eingeschoben (nach 0DH notwendig)
- Reihenfolge der Tastenbelegung: F1-F12; ohne Umschalttaste; mit Shift; mit Caps; mit Shift und Caps = 2016 Bytes + 0FFH
- [0005H] Teste, ob Anwender-EEPROM vorhanden ist
- Rückmeldung: 01H wenn vorhanden; 0FFH wenn nicht vorhanden
- Rückmeldung: 01H wenn vorhanden; 0FFH wenn nicht vorhanden
- [0006H] Umschalten auf CAOS-Belegung + Tastaturreset + Senden 0DH
- [0007H] Umschalten auf CP/M-Belegung + Tastaturreset + Senden 0DH
- [0008H] Einstellen der Tastaturübertragungsrate 1)
- Standardeinstellung ist 30 Hz mit Autorepeatverzögerung 150 ms; Bit 7 ist immer 0
Bit 6 Bit 5 Verzögerung 0 0 150 ms 0 1 500 ms 1 0 750 ms 1 1 1 s Bits 4 - 0 Frequenz Bits 4 - 0 Frequenz 00000 30,0 Hz 10000 7,5 Hz 00001 26,7 Hz 10001 6,7 Hz 00010 24,0 Hz 10010 6,0 Hz 00011 21,8 Hz 10011 5,5 Hz 00100 20,0 Hz 10100 5,0 Hz 00101 18,5 Hz 10101 4,6 Hz 00110 17,1 Hz 10110 4,3 Hz 00111 16,0 Hz 10111 4,0 Hz 01000 15,0 Hz 11000 3,7 Hz 01001 13,3 Hz 11001 3,3 Hz 01010 12,0 Hz 11010 3,0 Hz 01011 10,9 Hz 11011 2,7 Hz 01100 10,0 Hz 11100 2,5 Hz 01101 9,2 Hz 11101 2,3 Hz 01110 8,6 Hz 11110 2,1 Hz 01111 8,0 Hz 11111 2,0 Hz - Standardeinstellung ist 30 Hz mit Autorepeatverzögerung 150 ms; Bit 7 ist immer 0
- [0009H] Setze alle Tasten 1)
0F7H Autorepeat für alle Tasten 0F8H Alle Tasten liefern einen Make- (beim Drücken) und einen Break-Code (beim Loslassen) 0F9H Alle Tasten liefern nur ein Make-, aber keinen Break-Code 0FAH Autorepeat für alle Tasten sowie Make- und Break-Codes - [000AH] Setze einzelne Taste 1)
0FBH + Scancode einer Taste: Taste bekommt Autorepeat 0FCH + Scancode einer Taste: Make/Break-Funktion für diese Taste 0FDH + Scancode einer Taste: nur Make-Funktion für diese Taste - [000BH] LEDs an-/ausschalten 1) (gesetztes Bit heißt: LED ist an )
Bits 7-3: sind immer 0 Bit 0: Scroll Lock Bit 1: Num Lock Bit 2: Caps Lock - [000CH] Startet Scannen der Tastatur
- muß nach den Befehlen 0009H und 000AH aufgerufen werden
- [000DH] Echo
- Tastatur antwortet mit 0EEH; Kann zur Feststellung der Anwesenheit der Tastatur verwendet werden
1) Diese Befehle sollten nur verwendet werden, wenn anschließend der Befehl 0002H ,,Sende Scancodes`` aufgerufen wird.
Tastenbelegung der AT-Tastatur unter CP/M und CAOS
Tastaturebene | erreichbare Zeichen und Funktionen |
nach Reset | NUM und CP/M-Modus aktiviert |
ohne Umschalttaste | Großbuchstaben, Zahlen |
mit Shift | Kleinbuchstaben, Zeichen über Zahlen |
mit Caps | Kleinbuchstaben, Zahlen |
mit Caps und Shift | Großbuchstaben, Zeichen über Zahlen |
Numlock aus | Hexeingabe über Ziffernblock, MODIFY- Modus |
Ctrl + A bis Z | Controlcodes |
Ctrl + F1 bis F12 | Basicbefehle (in Kombination mit Shift und Caps) |
Alt + F1 bis F12 | 48 anwenderdefinierte Funktionstasten je max. 41 Zeichen (in Kombination mit Shift und Caps) |
Alt + 2 Zeichen 0 bis F | Hexcodes 0 bis 0FFH |
Alt Gr + Cursor rechts | Restorefunktion, alle Zeichen bis Enter werden wieder angezeigt (nur im CP/M-Modus) |
Ctrl + Alt + Del | Reset (bei der internen Version Systemreset; KC und Tastatur) |
Spezielle CP/M-Codes
Tastenbetätigung | Funktion |
Ctrl + Cursor hoch | Curs on (82H) |
Ctrl + Cursor runter | Curs off (83H) |
Ctrl + Rollen | Page/Scroll - Modus (85H) |
Ctrl + Bild hoch | Bild 0 (93H) |
Ctrl + Bild runter | Bild 1 (94H) |
Ctrl + Ü | USA/Deutsch (8CH) |
Ctrl + Ziffernblock 8 oder 4 | 80/40 Zeichensatz (89H) |
Ctrl + Ziffernblock 9 | Ink (88H) |
Ctrl + Ziffernblock 3 | Paper (86H) |
TPKC-Sonderfunktionen
Steuerzeichen | Funktion | Tastenbetätigung |
^S | ein Zeichen nach links | Cursor links |
^D | ein Zeichen nach rechts | Cursor rechts |
^E | eine Zeile nach oben | Cursor hoch |
^X | eine Zeile nach unten | Cursor runter |
^W | Rollen eine Zeile rückwärts | Ctrl + Cursor hoch |
^Z | Rollen eine Zeile vorwärts | Ctrl + Cursor runter |
^R | eine Seite zurück blättern | Bild hoch |
^C | eine Seite vorwärts blättern | Bild runter |
^A | ein Wort nach links | Ctrl + Cursor links |
^F | ein Wort nach rechts | Ctrl + Cursor rechts |
^QS | Zeilenanfang | Pos1 |
^QD | Zeilenende | Ende |
^QE | in erste Zeile des Bildes | Shift + Pos1 |
^QX | in vorletzte Zeile des Bildes | Shift + Ende |
^QR | Dateianfang | Ctrl + Pos1 |
^QC | Dateiende | Ctrl + Ende |
^QB | Blockanfang | Alt + Pos1 |
^QK | Blockende | Alt + Ende |
^G | Zeichen auf Cursor löschen | Entf |
<Del> (1FH) | Zeichen links von Cursor löschen | Backspace |
^T | ab Cursor bis Wortende löschen | Shift + Entf |
^QY | ab Cursor bis Zeilenende löschen | Ctrl + Entf |
^KY | markierten Block löschen | Alt + Entf |
^V | Einfügen ein/aus | Einf |
^I | Tabulator | Tab |
^KP | Drucken einer Datei | Druck |
Abbildungen
Abb. 1: Bestückungsplan
Abb. 2: Leiterplattenlayout
Abb. 3: Stromlaufplan
Abb. 4: Tastaturbelegung
Und hier die Bilder noch einmal in besserer Qualität im PostScript-Format zum Downloaden: