Commodore C64/C128 mit PC verbinden

Mal wieder ein Projekt für einen kalten, nassen Wintertag in Deutschland: Wie kann man einen alten Commodore C64/C128 Computer aus den 80iger Jahren mit einem modernen Windows-PC verbinden und Daten austauschen? Sozusagen den besten Computer der Welt (Commodore 🙂 ) mit dem verbinden, was heutzutage grau und langweilig auf unseren Schreibtischen steht. Da ich im Internet die eine oder andere Fehlinformation zu diesem Thema gelesen habe und die angegebenen Quellcodes auch nicht immer funktioniert haben, hier nun meine Anleitung.

Zum Verbinden eines Commodore C64/C128 Computers mit einem modernen PC gibt es in meinen Augen zwei Anwendungsfälle: 1) Der Commodore Computer wird zu einem Terminal an einem UNIX/Linux-Computer. Dieser Fall ist sehr gut hier beschrieben und wird von mir nicht wiederholt. 2) Der Commodore Computer soll mit einem Windows-PC Daten austauschen, z.B. wenn das Ergebnis einer Software auf dem C64/C128 auf den PC zur Weiterverarbeitung transferiert werden soll.

Für die Verbindung zwischen C64/C128 und PC wird die Möglichkeit des User Ports zur seriellen Übertragung herangezogen. Standard dafür wäre ein serielles Kabel („Nullmodem-Kabel“) zwischen Windows-PC („data terminal equipment“ (DTE)) und dem C64/C128 (ebenfalls „data terminal equipment“ (DTE)) über die RS-232-Schnittstelle mit einem DB9-Stecker. Eine solche hat aber weder ein moderner PC noch der C64/C128. Üblich am PC sind heutzutage serielle USB (A)-Schnittstellen. Der C64/C128 hat am User Port RS-232-ähnliche Leitungen, allerdings auf TTL-Niveau, also mit 0/5 statt -12/12 Volt Pegel.

Lösen kann man das z.B. günstig über ein „DTech FTDI USB zu TTL Seriell Adapter 5V UART Kabel“ wie im Bild zu sehen:

Dieser Adapter verbinden den seriellen USB (A)-Anschluss am PC mit einem s.g. 2.54 mm pitch 0.1 header, den man normalerweise auf eine Pin-Brücke mit 6 Pins stecken würde. Der Pegel der USB-Schnittstelle wird über den eingebauten FT232RL-Chip auf UART/TTL gewandelt, also perfekt passend für den C64/C128.

Nach Einstecken des USB-Kabels in den PC sieht der Geräte-Manager des Windows-Betriebssystems dieses als neue serielle (COM)-Schnittstelle:

Über die Eigenschaften / Anschlusseinstellungen lassen sich die Einstellungen (300 Baud, 8N1, Hardware Flow Control) passend für den Commodore Computer bzw. dessen Terminalprogramm einstellen:

Theoretisch kann man auch höhere Geschwindigkeiten als 300 Baud einstellen, diese reicht für den ersten Test aber aus. Bei 2400 Baud ist eh Schluss.

Hinweis: Hardware Flow Control über die Signal-Leitungen RTS (Request To Send) und CTS (Clear to Send) setzen ein Kabel mit Hardwareflusskontrolle voraus. Ein 3-Draht-Nullmodem (RxD, TxD, GND) funktioniert nicht. Ein Gerät setzt den RTS-Pegel auf „high“, wenn es Daten senden möchte, und auf „low“, wenn es bereit ist Daten zu empfangen.

Jetzt verbindet man den schwarzen Buchsenstecker („pin header“) mit einem User Port-Stecker, wie im nachfolgenden Bild zu sehen:

Das könnte man sicherer auch schöner machen, reicht mir aber für den Test aus. In die schwarze Buchse links habe ich für wenige Cent eine 2.54 mm Stiftleiste gesteckt, um mich beim Anlöten der Kabel leichter zu tun. Die Schrauben am User Port-Stecker dienen lediglich dazu, diesen aus dem C64/C128 herausziehen zu können, ohne die Kabel zu belasten. Die Pin-Belegung und Verdrahtung folgt folgendem Schema:

Wer aufmerksam der Verdrahtung folgt, sieht, dass zwischen User Port und der schwarzen Buchsenleiste die Empfangs- (RxD, receive data) und Sende-Leitungen (TxD, transmit data) gekreuzt sind. Dies ist notwendig um ein Nullmodem-Kabel zu erhalten. Ebenfalls gekreuzt sind CTS und RTS, um einen Hardware-Handshake zu ermöglichen. Die Signal-Erde (GND) des pitch headers wird mit dem speziellen Signal Ground (N) des User Ports verbunden, nicht mit dem Protective Ground (A). Auf dem obigen Bild zur Verdrahtung habe ich die Anschlüsse A und N mit Bleistift auf den Stecker geschrieben, um diesen ja richtig herum einzustecken. Die Reihe A-N ist die Unterseite, der Stecker ist leider nicht verpolungssicher gebaut!

Startet man jetzt auf dem PC und dem C64/C128 ein Terminalprogramm, so kann man zwischen diesen beiden Computern Daten austauschen. Ich verwende dazu PuTTY auf dem Windows-PC und Elite Term 1.0 auf dem C64/C128. In PuTTY ist es wichtig, die richtigen Einstellungen für die serielle Schnittstelle (hier: COM3) zu übernehmen und die Session als serielle Verbindung zu starten.

Warum die Flusskontrolle an dieser Stelle auf „None“ stehen muss, kann ich nicht wirklich erklären. Ich vermute aber, dass sich die RTS/CTS Flusskontrolle auf Hardware-Ebene (siehe oben, Geräte-Manager) mit dem Protokoll von PuTTY ins Gehege kommt.

Die Fenstergröße habe ich zusätzlich auf 40×24 Zeichen eingestellt. Das lokale Echo ist auf „Force on“ eingestellt. „Implicit LF in every CR“ ist wichtig, damit PuTTY nach einem Return den Cursor eine Zeile tiefer setzt:

In Elite Term stellt man im Menü „Modem“ die Baudrate auf „300“ sowie im Menü „Terminal“ die Einstellungen „Half Duplex“ ein:

und startet dann ebenfalls in diesem Menü das ASCII-Terminal. In PuTTY wird die Session (das Terminal-Fenster) mit „Open“ gestartet:

Alles was man nun im Terminal-Fenster von PuTTY eingibt

erscheint wie von Geisterhand auf dem Bildschirm des C64/C128:

Umgekehrt funktioniert es auch. Alles was man in Elite Term eintippt, erscheint im Fenster von PuTTY.

Leider verhält sich jedes Terminalprogramm auf dem C64/C128 etwas anders und man muss experimentieren, bis man ein geeignetes gefunden hat. Das Terminalprogramm CarTer hat zum Beispiel kein lokales Echo, so dass am C64/C128 eingetippte Zeichen zwar am PC, nicht aber am Commodore Computer selbst sichtbar wurden. In CCGMS hat eine „half duplex“-Verbindung für das lokale Echo gesorgt, allerdings werden die Zeichen zwischen C64/C128 nicht korrekt dargestellt (ASCII vs. PETSCII).

Während Elite Term mit ANSI-Steuerzeichen nichts anfangen kann, kann man im Terminalprogramm CarTer manche davon verwenden. So verschiebt die Zeichenkette

ESC [ A 

den Cursor um eine Zeile nach oben (ohne Leerzeichen eingeben). Die Zeichenkette

ESC [ 2 J

löscht den Bildschirm auf beiden Seiten. Man muss in CarTer allerdings die Tastenbelegung beachten. Das ESC-Zeichen ist nicht wie auf der Tastatur abgebildet zu erreichen, sondern über die „<-“ Taste, oberhalb der CONTROL-Taste.

Das soll es jetzt mal gewesen sein für Teil 1 dieses kleinen Projektes.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Der Zeitraum für die reCAPTCHA-Überprüfung ist abgelaufen. Bitte laden Sie die Seite neu.