
Wer auf einem emulierten (PC-basierten) Commodore C64 Software entwickelt, wird das Problem kennen: Die deutsche PC-Tastatur entspricht nicht der Tastatur eines Commodore-Computers, und irgendwann bekommt man einen Knoten ins Hirn, wenn man bestimmte Tasten sucht. Ich rede hier zum Beispiel von den Zeichen *, #, -, +, ; usw., die immer wieder benötigt werden.
Zwar werde ich bei der Tastensuche immer besser, je mehr ich am Computer sitze, jede Programmierpause gibt mir aber wieder einen holprigen und frustrierenden Wiedereinstieg.
Angebote wie das „8BitDo Retro Wireless C64 Edition Mechanical Gaming Keyboard“ taugen in meinen Augen nicht als Lösung, da hier alle (!) spezifischen Commodore C64-Tasten fehlen.
Eine echte Alternative wäre noch der Anschluss einer alten Tastatur aus einem defekten C64 mittels USB-Anschluss am PC. Dies erreicht man recht einfach über das Produkt Keyrah, welches man über die deutsche Firma Jens Schönfeld GmbH beziehen kann. Da aber meistens defekte C64 im Brotkasten-Format angeboten werden, ist hier das Schreibgefühl alles andere als berauschend. Außerdem durfte ich ausreichend Erfahrung sammeln im Reparieren von alten Tasten, die nicht mehr auf den Tastendruck reagiert haben. Kein Spaß! Erwähnen sollte ich noch die Lösung Keymmodore aus Spanien, die aber die gleichen Nachteile wie Keyrah mit sich bringt.
Es gibt auch offensichtlich einen Weg, die für mich angenehme Tastatur aus einem TheC64 Maxi (oben im Bild) zu einer normalen USB-Tastatur zu machen. Das ist aber eine Bastellösung, die ich für mich nicht wollte. Außerdem tippt man wieder auf dem Brotkasten. Und zum Abschluß noch zwei Erwähnungen um das Bild rund zu machen: die MEGA65 Tastatur und das PETSCIIBOARD. Das erste Produkt kostet US$ 316.53, die zweite Lösung ist nicht mehr erhältlich.
Ein paar Jahre habe ich den C64 Emulator von Thomas Hochgoetz (https://c64emulator.111mb.de/) verwendet. Dort kann man leider nur eine sehr beschränkte Anzahl von Tasten ummappen (F9 – KEYS) und der ganze Prozess ist sehr archaisch. Zwar kann man die Tastatur des Betriebssystems mit WIN+SPACE bzw. die Sprache mit ALT+SHIFT anpassen, man sieht die Änderung aber nicht am Bildschirm und muss sich blind durchprobieren. Der Emulator bleibt von Software zum Ändern der Tastaturbelegung völlig unbeeindruckt, ich hatte es dazu ohne Glück mit dem Tool SharpKeys von Microsoft versucht.
Da ist der VICE-Emulator (https://sourceforge.net/projects/vice-emu/) schon besser. Die Tastenzuordnung wird über ein keyboard mapping file mit der Dateiendung .vkm gesteuert. Einzelne keyboard mapping files können über die Einstellungen ausgewählt werden. Damit kann man das obige Problem mit *, #, -, +, ; lösen, nicht jedoch die Tatsache, dass die speziellen PETSCII-Zeichen des Commodore-Computers weiterhin nicht erreichbar sind.
Ich habe jetzt für mich eine günstige und einfache Lösung gefunden: Ich habe an meinen Entwicklungs-PC per PS/2-USB-Adapter die Commander X16 Mini Perixx -Tastatur der Firma TexElec angeschlossen (https://texelec.com/product/cx16-mini-keyboard/). Dort sind alle speziellen PETSCII-Zeichen des Commodore-Computers verfügbar, sogar die Run/Stop– und Restore-Taste. Die Commodore „Chicken Lips“-Taste ist mit dem Commander X16-Logo ersetzt, das stört mich allerdings nicht.

Die Perixx-Tastatur liefert nicht das allerbeste Schreiberlebnis im Vergleich zu manch anderen Tastaturen (Cherry MX!), akzeptabel ist es aber allemal. Und immer noch besser als der originale Brotkasten.
Hinweis: Die obige Perixx-Tastatur darf nicht mit dem „Commander X16 Deluxe Keyboard“ der Firma WASD verwechselt werden. Dieses sieht ähnlich aus und verfügt über bessere Tasten, wird aber nicht mehr angeboten.
Hat man in Windows eine US-Englische Tastatur eingestellt, dann sind die meisten Tasten des C64 leicht zu erreichen. Ich habe in Windows eingestellt, dass ich nur für VICE die englische Tastatur verwende, das macht die ganze Sache noch eleganter. Dazu die Einstellungen („Settings“) vom Betriebssystem öffnen, „Devices“, „Typing“, „Advanced keyboard settings“. Dort dann „Let me use a different input method for each app window“ auswählen. Man kann jetzt in der Applikation, in unserem Fall VICE, mit WIN+SPACE auf die englische Tastatur wechseln. Leider merkt sich das Betriebssystem die Einstellung nicht und man muss bei jedem Aufruf von VICE wieder per WIN+SPACE die Tastatur auf Englisch umstellen.
Jetzt noch in den Einstellungen von VICE (Preferences / Settings… / Input devices / Keyboard) das Keyboard mapping auf „Symbolic“ einstellen und sicherstellen, dass das Host keyboard layout of „American (us)“ steht. Fertig! Ein symbolisches Tasten-Mapping war mir wichtig, da ich mich eben nicht mehr auf mein Muskelgedächtnis hinsichtlich einzelner Tasten verlassen wollte. Ich möchte, dass jede Taste so funktioniert, wie sie auch beschriftet ist.
Mit SHIFT+TAB kann man zwischen den beiden Zeichensätzen des C64 wechseln, solange das MODE Flag an Adresse $291 auf 0 steht. Im „uppercase/graphics“-Modus erhält man beide PETSCII-Grafik-Zeichen. Das linke auf der Taste durch Drücken der TAB-Taste, das rechte durch SHIFT. Im „uppercase/lowercase“-Modus kann man dafür mit SHIFT zwischen kleinen und großen Buchstaben wechseln.
Die auf der zweiten Tastenreihe von oben aufgedruckten Farbcodes lassen sich ebenfalls ansteuern: TAB für die Farben unten, CTRL für die Farben oben. Konkret: TAB+8 entspricht „yellow“, CTRL+8 entspricht „light gray“.
Spezielle Tasten, die keinen Keycode an Adresse $CB (203) erzeugen, können über die Funktion SHFLAG ($28D, 653) abgefragt werden. Der zurückgegebene Wert bedeutet:
- 0: Weder SHIFT, CTRL noch TAB in Kombination mit einer anderen Taste gedrückt
- 1: SHIFT gedrückt (ARROW, INST, LEFT-ARROW und UP-ARROW erzeugen ebenfalls eine 1!)
- 2: TAB gedrückt (die TAB-Taste nimmt die Funktion der Commodore Logo-Taste ein, da am PC die WIN-Taste vom Betriebssystem überwacht wird, genauso wie ALT für VICE eine spezielle Bedeutung hat)
- 4: CTRL gedrückt
- 5: CTRL+SHIFT gedrückt
- 6: CTRL+TAB gedrückt
- 7: CTRL+SHIFT+TAB gedrückt
Das Ganze kann mit folgendem einfachen BASIC-Programm überprüft werden:
10 GET A$: IF A$="" THEN 10
20 PRINT PEEK(653)
30 GOTO 10
Ein paar weitere Besonderheiten gibt es noch:
- Während man die Zeichen 1, 2, 3, 4… durch einfachen Tastendruck erreicht, gilt dies für die beiden letzten Tasten in dieser Reihe vor dem BACKSPACE nicht. Hier erhält man „-“ und „=“ statt dessen, also eigentlich die Zeichen, die man in Kombination mit SHIFT erwarten würde
- Die ganze Tastenreihe von F9 bis RUN/STOP erzeugt in BASIC per Default keinen Keycode. Das gilt auch für die MENU- und PAGE UP-Tasten. Die RUN/STOP-Funktion liegt auf der ESC-Taste. Dieses Verhalten ist im VICE-Handbuch erklärt
- Die Kombinationen F1/F2, F3/F4, F5/F6 und F7/F8 erzeugen in BASIC jeweils den gleichen Keycode. Man löst das Problem aber in Kombination mit dem SHFLAG. Der Tastencode 4 steht für „F1“. Ist gleichzeitig SHFLAG = 1, dann wurde „F2“ gedrückt.
Wenn man eine Erklärung dafür sucht, warum die Commodore-Taste („Logo-Taste“, „CBM-Taste“) mit TAB ersetzt ist, muss man in das verwendete keyboard mapping file von VICE schauen. Am Beispiel von gtk3_sym.vkm, dort steht
Tab 7 5 8200 /* Tab = CBM */
Bedeutet: Die TAB-Taste des PCs ist an gesetztem Bit 7 waagrecht und Bit 5 horizontal der C64 Keyboard Matrix. Das genau ist die Commodore-Taste am C64. Der Wert 8200 steht für das Shift-Register und die beiden Werte
0x0008 8 key can be shifted or not with this keysym/scancode
0x2000 8192 key is (left) cbm on emulated machine
In der gleichen Datei findet sich auch die Erklärung, warum die Run/Stop-Funktion auf der ESC-Taste des PC liegt:
Escape 7 7 8
Bit 7 waagrecht und Bit 7 horizontal der Keyboard Matrix steht für die Run/Stop-Taste des C64.
Arbeitet man nun im Assembler Turbo Macro Pro (TMP), dann stellt man leider fest, dass die wichtige ARROW-Taste des C64 auf die END-Taste des PC gelegt wurde. Man kann dies aber mit folgendem Eintrag im keyboard mapping file rückgängig machen:
# End 7 1 0
grave 7 1 0 /* for TMP */
Jetzt funktioniert TMP wie erwartet; zum Beispiel springt ARROW+1 zu BASIC zurück.