Tämä asiakirja on saatavilla myös suomeksi. This document is also available in English.

Marko Mäkelä: alte Rechner: Commodore C2N Datasette Emulator mit RS-232-Schnittstelle

1. Was ist ein C2N232?

Das C2N232 ist eine kleine RS-232-Schnittstelle, die in den Kassettenport eines 8-Bit Commodore-Rechners eingesteckt werden kann:

1.1 Woher kommt der Name C2N232?

Der Name C2N232 besteht aus zwei Teilen: C2N und 232. C2N ist der ursprüngliche Modellname des Commodore-Bandgerätes, auch als Datasette bekannt. Die Nummer 232 weist auf RS-232 hin, den dominierenden Standard für asynchrone serielle Kommunikation.

1.2 Welche Commodore-Modelle werden unterstützt?

Das Gerät paßt an alle 8-Bit Commodore-Rechner, die über eine Kassettenschnittstelle verfügen. Bei der 264-Reihe wird ein Adapter benötigt, da der Stecker anders aussieht.

Das Gerät kann auch mit anderen 8-Bit-Rechnern benutzt werden. Die Treibersoftware unterstützt das Kassettenformat vom Tangerine Oric-1.

1.3 Was für Software gibt es für das C2N232?

c2n
emuliert das ursprüngliche Kassettenformat von Commodore (LOAD, SAVE, OPEN)
c2nload
Schnellader, der in unter 10 Sekunden geladen und gestartet wird und das eigentliche Programm 38.400 Bits per Sekunde überträgt
faucet
Lader für Low-Level Kassettenimages (.tap)
cisp
ermöglicht das Umprogrammieren des eingebauten Firmware im C2N232
cbmlink
Fernsteuerung von Commodore-Rechner und Kopieren von Speicherinhalte, Dateien und Disketten
cbmconvert
wandelt verschiedene Dateiformaten von Commodore-Rechnern um

1.4 Wie ist die RS-232-Schnittstelle verdrahtet?

Die RS-232-Schnittstelle ist mit dem IBM PC/AT kompatibel. In anderen Worten, am C2N232 gibt es eine D-Sub-Buchse mit 9 Kontakten.

Normalerweise wird ein Verlängerungskabel an die RS-232-Buchse des C2N232 angeschlossen. Nur drei Drähte sind unbedingt nötig: Pin 5 (Masse), 2 (gesendete Daten) und 3 (empfangene Daten). An einem 25poligen Stecker sind diese Signale an den Pins 7, 3 und 2 angeschlossen. Die Buchse am C2N232 ist als DCE verdrahtet, das heißt, ein Nullmodem-Kabel kann nicht benutzt werden.

2. Grundlagen

2.1 Wie startet man die Software?

In den folgenden Prozeduren wird angenommen, daß Sie einen Commodore 64 benutzen.

2.1.1 Die einfachste Weise: c2nload

  1. Drücken Sie die Tasten SHIFT und STOP gleichzeitig, oder tippen Sie LOAD und drücken Sie RETURN.
  2. Der Commodore meldet sich mit PRESS PLAY ON TAPE.
  3. Auf dem großen Rechner, starten Sie die Übertragung folgenderweise. Wahrscheinlich müssen Sie den Dateinamen, den Namen der seriellen Schnittstelle und des Rechnermodells anpassen.
    Commodore AmigaOS:
    c2nload -c serial.device -m 64 datei.prg
    Microsoft Windows:
    c2nload -c com1 -m 64 datei.prg
    Unix:
    c2nload -c /dev/ttyS0 -m 64 datei.prg
  4. Der Commodore schaltet das Bild aus.
  5. Nach einer Weile meldet sich der Commodore mit FOUND DATEI.PRG.
  6. Drücken Sie die C=-Taste sofort oder halten sie die Taste so lange gedrückt, bis die FOUND-Meldung ganz kurz erscheint, so daß der Computer den Rest des Programms nicht verpaßt, da das C2N232 das Steuersignal des Kassettenmotors ignoriert. Drücken Sie nicht die Leertaste, oder es kann sein, daß der Rechner den Rest überspringt und auf das nächste Programm warten wird.

Wenn das Programm durch einen SYS-Befehl gestartet wird, können Sie die SYS-Adresse mit der Option -j angeben.

2.1.2 Die umfangsreicheste Methode: cbmlink

  1. Laden Sie den cbmlink-Server wie beschrieben im vorigen Abschnitt, zum Beispiel c2nload -c /dev/ttyS0 -m 64 -j 52224 cbmprg/c2n232/c64/plain.prg.
  2. Der Commodore meldet endlich READY.
  3. Jetzt kann cbmlink auf dem großen Rechner gestartet werden.
    Commodore AmigaOS:
    cbmlink -c c2n232 serial.device
    Microsoft Windows:
    cbmlink -c c2n232 com1
    Unix:
    cbmlink -c c2n232 /dev/ttyS0
  4. Es bietet sich an, das cbmlink-Serverprogramm auf Diskette zu speichern oder einen Bootsektor für den Commodore 128 erzeugen, um die Benutzung des langsamen Bandprotokolles in Zukunft zu vermeiden. Bitte beachten Sie, daß in der jetzigen Version von cbmlink die Optionen -fr und -fw weder die Zeichensätze umwandeln noch Verzeichnisnamen von Pfadnamen entfernen. Am besten benennen sie die Dateien zuerst um, so daß sie nur Großbuchstaben enthalten, z.B. C64 SYS52224. Das Serverprogramm für einen nicht erweiterten Commodore 64 kann folgendermaßen auf Diskette kopiert werden.
    Commodore AmigaOS:
    cbmlink -c c2n232 serial.device -fw cbmprg/c64/plain.prg
    Microsoft Windows:
    cbmlink -c c2n232 com1 -fw cbmprg\c64\plain.prg
    Unix:
    cbmlink -c c2n232 /dev/ttyS0 -fw cbmprg/c64/plain.prg

2.2 Ist die Datasette nicht langsam?

Ja, aber das Kassettenprotokoll wird nur für das Laden des c2nload-Schnelladers gebraucht, für einige Sekunden. Die Übertragungsgeschwindigkeit von eigentlichen Programmen ist von der RS-232 auf 38.400 Bits oder ungefähr 3.840 Bytes per Sekunde beschränkt.

2.3 Können Low-Level Kassettenimages (.tap-Dateien) geladen werden?

Das Programm faucet funktioniert für manche Dateien.

2.4 Wird das C2N232 von einem Terminalprogramm unterstützt?

Mit der jetzigen Firmware kann das C2N232 leider nur über die RS-232-Schnittstelle gesteuert werden. In der Zukunft werden neue Firmware und Beispielroutinen veröffentlicht, die es ermöglichen, das C2N232 von der Commodore-Seite aus zu kontrollieren.

2.5 Die Software funktioniert nicht richtig unter Windows!

Haben Sie im Geräte-Manager sichergestellt, daß der Hardware-FIFO-Puffer der seriellen Schnittstelle aktiv ist?

Sie finden den Geräte-Manager über die Systemsteuerung. Doppelklicken Sie dort auf das Symbol System. Dadurch wird das Fenster Eigenschaften von System geöffnet. In diesem Fenster, klicken Sie auf das Register Geräte-Manager. In Windows 2000 enthält das Fenster kein Register mit diesem Namen. Stattdessen müssen Sie auf das Register Hardware und auf die Schaltfläche Geräte-Manager klicken.

Eine Liste von Gerätetreibern erscheint. Unter Anschlüsse (COM und LPT) klicken Sie bitte doppelt auf den seriellen Anschluss, über den das C2N232 betrieben wird.

Ein Fenster Eigenschaften von COM-Anschluss (COMx) taucht auf. Klicken Sie auf das Register Anschlusseinstellungen. Wählen Sie das Protokoll Hardware und klicken Sie auf die Schaltfläche Erweitert, um das Fenster Anschlusseinstellungen zu öffnen. Stellen Sie sicher, daß das Feld FIFO-Puffer verwenden angeklickt worden ist.

Alle anderen Einstellungen sollten von der C2N232-Software richtig gesetzt werden. Wenn die Software immer noch nicht richtig funktioniert, klicken Sie auf die Schaltfläche Standard in dem Fenster Anschlusseinstellungen bzw. auf die Schaltfläche Standard wiederherstellen unter dem Registermenü Anschlusseinstellungen im Fenster Eigenschaften von COM-Anschluss.

2.6 Die Software funktioniert nicht richtig mit USB-Adaptern!

In der Regel sind die Treiber von USB-RS-232-Adaptern mangelhaft. Unter Mac OS X funktionieren die Adapter von Keyspan. Auf dem Prolific PL-2303 basierte Adapter funktionieren sowohl unter Windows als auch GNU/Linux mit einigen Anpassungen. Trotz ihrer teuren Preise sind weder der Adapter FTDI US232B noch die Bausteine von FTDI empfehlenswert, weil der Linux-Treiber keine Flußkontrolle beim Senden unterstützt. Auch der Windows-Treiber scheint die Flußkontrolle die meiste Zeit zu ignorieren.

Der Windows-Treiber von Prolific (August 2005) kann den Rechner zum Absturz bringen. Im Linux-Treiber funktioniert die XON/XOFF-Flußkontrolle nicht, aber zum Glück wird CTS/RTS richtig unterstützt.

3. Wie wird die Firmware aktualisiert?

Die Firmware kann über die RS-232-Schnittstelle umprogrammiert werden. Dazu kann man einen Rechner mit Unix oder Microsoft Windows benutzen.

3.1 Wie wird die Platine verdrahtet?

Vier aktiv gesteuerte Signale (RxD, TxD, CTS und RTS) müssen angeschlossen werden. Zusätzlich muß die RESET-Leitung des AT90S2313-Microcontrollers auf Masse gezogen werden und die Platine muß mit Strom versorgt werden.

In der Produktionsversion der Platine gibt es zwei Stellen für Verbindungsbrücken. Eine befindet sich beinahe unter dem Microcontroller, und sie kann immer verbunden bleiben. Die andere (der RESET-Schalter des AT90S2313) liegt an dem Kassettenstecker. Diese muß während der Aktualisierung der Firmware geschlossen werden.

3.2 Wie lädt man die Software (Firmware)?

Zunächst einmal sollten Sie mit dem folgenden Kommando eine Sicherheitskopie der alten Firmware erstellen.

Commodore AmigaOS:
Leider gibt es noch keine Amiga-Version von cisp.
Microsoft Windows:
cisp -c c2n232 com1 -s firm-old.s19
Unix:
cisp -c c2n232 /dev/ttyS0 -s firm-old.s19

Nun sollten Sie einmal kurz die Steckbrücke für das RESET-Signal (am Kassettenstecker) entfernen und wieder aufstecken, oder die Betriebsspannung des C2N232 kurz unterbrechen. Anschließend kann die neue Firmware mit dem folgenden Kommando eingespielt werden.

Commodore AmigaOS:
Leider gibt es noch keine Amiga-Version von cisp.
Microsoft Windows:
cisp -c c2n232 com1 -e -l firmware.s19
Unix:
cisp -c c2n232 /dev/ttyS0 -e -l firmware.s19

Eine Überprüfung der neu eingespielten Firmware ist mit diesem Kommando möglich (zuvor muss wiederum der RESET-Jumper kurz entfernt und wieder aufgesteckt werden).

Commodore AmigaOS:
Leider gibt es noch keine Amiga-Version von cisp.
Microsoft Windows:
cisp -c c2n232 com1 -v firmware.s19
Unix:
cisp -c c2n232 /dev/ttyS0 -v firmware.s19

3.3 cisp: failed to enable the programming mode

Haben Sie vergessen, die RESET-Leitung auf Masse zu ziehen oder das C2N232 mit Strom zu versorgen? Haben Sie die RS-232-Schnittstelle richtig verdrahtet? Unterstützt Ihr Unix-Rechner CTS/RTS-Handshake?

3.4 detect: device is locked

Da die RESET-Leitung nicht unter der Kontrolle des Programms cisp liegt, ist es schwer, diesen Fehler zu korrigieren. Vor allem wird der AT90S2313 nach einem Programmiervorgang mit cisp -l alle Zusammenarbeit ablehnen. Um die Firmware zu prüfen, müssen Sie entweder das C2N232 aus- und einschalten oder die RESET-Brücke entfernen und zurückbringen.

4. Wo bekomme ich ein C2N232?

Wenn Sie sich nicht eines selbst nach einem der Platinenlayouts bauen möchten, bitte nehmen Sie Kontakt mit Nicolas Welte auf. Die von Marko Mäkelä produzierte Adapter (130 Stück) sind ausverkauft geworden. Für die neueste Produktionsreihe betrug der Preis 20 € – inklusive Porto in die ganze Welt.

4.1 Wie sieht das C2N232 aus?

[Die Oberseite der C2N232-Platine]

Sehen Sie sich unsere Bildergalerie an für weitere Bilder. Marko hat die Geräte ohne Gehäuse verkauft, aber Sie können es wie Nicolas Welte machen. Er hat ein DB9-nach-DB25-Gehäuse für das C2N232 angepaßt und die Unterseite des Kassettensteckers an das Gehäuse geklebt:

[Ein DB9-nach-DB25-Gehäuse mit zwei kleinen Löchern an einer Seite][Die Unterseite des C2N232-Kassettensteckers am Gehäuse geklebt]

4.2 Was für Software wird benötigt?

Dateiname Zweck Systeme
c2nload Ein kleiner selbststartender Schnellader für das C2N232 Commodore AmigaOS, Microsoft Windows und Unix-ähnliche Systeme; alle Commodore-Rechner, die von Kassette laden können
c2n Datasetten-Emulator für das C2N232 Commodore AmigaOS, Microsoft Windows und Unix-ähnliche Systeme
cbmlink Dateiübertragung und Fernsteuerung von Commodore-Rechnern Commodore AmigaOS, Microsoft Windows und Unix-ähnliche Systeme

Alle Commodore-Programme sind in 6502-Assembler geschrieben worden, während alles andere in C implementiert wurde. Für Amiga- und Windows-Benutzer gibt es vorkompilierte Programme. Die Benutzer Unix-ähnlicher Systeme müssen die Programme zunächst aus dem Quelltext heraus kompilieren.

4.3 Woher bekomme ich die Firmware?

Die C2N232-Firmware-Seite enthält den Firmware-Quelltext und etwas Dokumentation. Wenn Sie den Code ändern möchten, werden Sie die GNU Binutils benötigen, um ihn zu übersetzen.

Das Programm cisp, mit dem die Firmware auf den AT90S2313 hochgeladen wird, ist auch auf der Firmware-Seite verfügbar. Es funktioniert zumindest unter FreeBSD, Linux und Microsoft Windows. Möglicherweise können Sie auch andere Software benutzen.

Geschichte und Zukunft

Die Idee, das C2N232 zu entwickeln, kam am 30. Juni 2001, als Marko Mäkelä einen Commodore-Hackerkameraden in Newcastle upon Tyne traf, Christopher Phillips. Christopher hatte keine Datenübertragungsschnittstelle zwischen seinem Commodore 64 und seinem Hauptrechner, Apple Macintosh. Die einzige sinnvolle Schnittstelle des Mac ist RS-232, und vorhandene Lösungen, die eine parallele Schnittstelle benötigen, kamen nicht in die Frage.

Der erste Prototyp wurde in July oder August gebaut, und die Entwicklung der Software startete zum gleichen Zeitpunkt.

Zuerst, etwas Code wurde geschrieben, um die Pulsbreiten des Schreibsignals auszulesen, so daß die Einzelheiten des Datenformats herausgefunden werden konnten. Die Informationen in Commodore 64 Whole Memory Guide von Tim Arnot waren ungenau. Das Programm c2n, das Pulsen auf Commodore-Kassetten kodiert und dekodiert, wurde geschrieben, und cbmconvert wurde mit dem Commodore-Kassettenformat ergänzt.

Zunächst wurde die Funktion entwickelt, um Pulsen abzuspielen. Am 11. September 2001 wurden die letzten Fehler beseitigt, als Juha Kouri und Turo Heikkinen Marko in Espoo besuchten, um die Schaltung mit einem Speicheroszilloskop zu betrachten.

Die Entwicklung des schnellen Übertragungprotokolls dauerte mehrere Monate wegen anderen Tätigkeiten. Das Protokoll wurde so gebaut, daß es auf allen 8-Bit Commodore-Rechnern funktioniert. Wenn der Bus frei ist, befinden sich beide Signale, READ und WRITE, im logischen 1-Zustand. Sowohl das Empfangen als auch das Senden werden vom Commodore gestartet, indem der WRITE-Signal auf 0 gezogen wird. So wird der Protokoll richtig funktionieren, auch wenn der Rechner den Register löscht, das fallende Flanken am READ-Signal erkennt, während der Bus frei ist. Das Timing des Sendevorgangs ist sehr kritisch: der Prozessortakt muß konstant bleiben.

Das Speicheroszi wurde wieder im Oktober oder November gebraucht, um das schnelle Übertragungsprotokoll an der Commodore 264-Reihe zu testen. In diesen Rechnern ist der READ-Signal ja nicht kantenempfindlich wie in allen anderen Commodore-Rechnern.

Eine Protoserie von zwanzig C2N232-Geräten wurde vor der Serienproduktion gebaut. Am 22. Mai 2002 wurde das erste Gerät auf eine professionell hergestellte Leiterplatte zusammengelötet.

Die elektrischen Bauteile, die in April 2002 bestellt wurden, sind endlich Anfang Juli angekommen. Die ersten Geräte wurden Juli oder August 2002 geliefert. Alle 110 Geräte wurden in 2004 ausverkauft.

Im Sommer 2003 entwickelte ich für den C2N232 eine Verbindung zum seriellen Bus von Commodore. Die Verbindung emuliert ein Gerät wie Diskettenlaufwerk erfolgreich, aber aus irgendeinem Grund kann das verbesserte C2N232 nicht als Controller tätig sein, d.h., Befehle an ein Diskettenlaufwerk schicken. Ich habe die Entwicklung im Dezember 2003 eingestellt. Die aktuellste Firmware mit mangelhafter Unterstützung des seriellen Bus und meine Kurznotizen zum Testen sind verfügbar.

Ich habe keine Interesse, noch eine Serie von C2N232 zu produzieren. Nicolas Welte hat geplant, eine neue Version mit Hardware-Unterstützung für den seriellen Bus zu bauen, aber es dauert manchmal lange mit diesartigen Hobbyprojekten.

Danksagung

Juha Kouri und Turo Heikkinen haben mir bei der Erstellung und Vermessung der Prototypen geholfen. Nicolas Welte hat mir einige schwer erhältlichen Bauteilen versorgt.

Nicolas Welte und Wolfgang Moser haben Verbesserungen für dieses Dokument vorgeschlagen.

Links