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

  • [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

  • [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

     

  • [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

[Bestueckungsplan]

Abb. 1: Bestückungsplan

[Layout]

Abb. 2: Leiterplattenlayout

[Stromlaufplan]

Abb. 3: Stromlaufplan

[Tastaturbelegung]

Abb. 4: Tastaturbelegung

Und hier die Bilder noch einmal in besserer Qualität im PostScript-Format zum Downloaden: