Commodore Tapes retten und beschreiben mit TapeXUM

Die Nutzung von Kassetten war nicht auf Commodore-Rechner beschränkt, da der Datenträger an sich nicht kostspielig war und eine Alternative zum preisintensiven Diskettenlaufwerk darstellte. Ein Nachteil bestand in der geringen Übertragungsgeschwindigkeit. Für jene, die heute noch über ein entsprechendes Medium verfügen, ergibt sich jedoch die Problematik der Rettung dieser digitalen Informationen. Die Kompatibilität der Kassette ist auf den Betrieb auf einem Commodore-Rechner beschränkt (beispielsweise C64/VC20). Eine Übertragung der Daten von einem solchen Rechner auf einen PC ist nicht ohne Weiteres möglich. Daher wurde der TapeXUM-Adapter entwickelt, mit dem das Kassettenlaufwerk direkt an einen Windows-Rechner angeschlossen werden kann. Es besteht ebenfalls die Möglichkeit, die Kassetten zu beschreiben. In dieser Anleitung wird die Erstellung eines TapeXUM zur Übertragung von Daten von einer Kassette auf einen PC und zurück beschrieben.

Quelle dieser Anleitung: github.com/r1me/TapeXUM von r1me (Lizenz)


Bevor es losgeht, noch ein paar Hinweise (Wichtig!)
  • Viele Bauteile haben eine Polarität, die beachtet werden muss.
  • Es muss auf Kurzschlüsse geachtet werden. Ein Kurzschluss kann den Adapter beschädigen.
  • Wenn eine Kassette überschrieben wird, werden alle Daten gelöscht. Aktiviere den Schreibschutz der Kassetten, die nicht überschrieben werden sollen.
  • Nur im spannungsfreien Zustand an der Hardware arbeiten.
  • Vermeide statische Aufladung durch das Tragen eines Antistatik-Armbandes.
  • Es wird keine Haftung für Schäden übernommen, die direkt oder indirekt durch diese Anleitung entstehen.

Inhaltsverzeichnis dieser Anleitung

  • Die Komponenten
  • Der Aufbau
  • Die Firmware flashen
  • Der Jumper
  • Der erste Funktionstest
  • Eine Kassette vor- und zurückspulen
  • Ein Image einer Kassette erstellen
  • Ein Image auf eine Kassette schreiben
  • Daten von einem Image extrahieren
  • Ein Tape-Image im Emulator VICE verwenden

Die Komponenten

Der Entwickler dieses Projekts stellt die Gerber-Daten der leeren Platine auf PCBWay bereit. Sie können von dort bezogen werden.


Wir benötigen darüber hinaus die folgenden Komponenten:

USB Datenkabel
Widerstand 1KΩ 1/4W für LEDs x2 (~1KΩ Je höher der Wert, desto schwächer ist die Leuchtkraft der LEDs.)
Pin Header 2.54mm (für Jumper)
Netzteil 9VDC 500mA (Intern Positive)

Der Aufbau

Der Aufbau ist relativ einfach, dennoch gibt es einige Punkte, die beachtet werden müssen. Beachte, dass viele Komponenten eine Polarität aufweisen, die unbedingt eingehalten werden muss, da der Adapter andernfalls nicht funktionieren wird. Die Polarität bzw. Ausrichtung ist für alle Komponenten, abgesehen von den Widerständen, wichtig. Auf die Lötstellen des 2N3904-Transistors ist zudem besonders zu achten, da diese sehr nahe beieinander liegen.


Es gibt einen kleinen Fehler im Design der Platine, der jedoch keine Auswirkungen auf die Funktionsweise des Geräts hat. Statt des auf der Platine angegebenen 1K5-Widerstands sollte der 470 Ω-Widerstand verwendet werden.

Die Firmware flashen

Im nächsten Schritt wird die Firmware auf den Arduino Pro Micro geflasht. Wir finden sie auf der Projektseite des Entwicklers. Für den Flashvorgang wird das Tool AVRDUDESS verwendet, das mit einer komfortablen grafischen Oberfläche ausgestattet ist. Zunächst wird der Arduino mit dem Windows-Rechner verbunden. Dieser Arduino ist mit dem Arduino Leonardo kompatibel und wird daher im Gerätemanager von Windows als solcher erkannt. Im Gerätemanager wird neben dem Gerät auch die Portnummer angezeigt. Im Gegensatz zu anderen Arduinos ist dies nicht der benötigte Port. Um den Port für den Flashvorgang herauszufinden, ist es erforderlich, einen Reset durchzuführen. Dazu wird der RST-Pin des Arduinos kurz auf Masse gelegt.


Nach dem Reset werden das Gerät und sein Port im Gerätemanager geändert. Aber Achtung! Nach einigen Sekunden wird wieder der alte Port angezeigt. Wir müssen uns deshalb den Port notieren, solange der Arduino den Reset durchführt.


Nun starten wir AVRDUDESS und geben folgende Parameter ein
Programmer: avr109
MCU: ATmega32u4
Port: Den Port des Arduino den wir nach den Reset ermittelt haben
Flash: Den Pfad zur Firmware


Damit die Firmware geflasht werden kann, ist ein Reset auf dem Arduino erforderlich. Im Anschluss wird der Button “Program!” in AVRDUDESS gedrückt. Es ist zu beachten, dass nach dem Reset nur wenige Sekunden zum Flashen der Firmware zur Verfügung stehen. Sollte das Zeitfenster verpasst worden sein, ist eine Wiederholung des Vorgangs erforderlich.


Nach erfolgreicher Firmware-Installation sollte der Arduino im Gerätemanager als "xum1541 floppy adapter (PROMICRO_TAPE)" erkannt werden. Dies bedeutet, dass das Flashen der Firmware erfolgreich war. Das gelbe Ausrufezeichen kann vorerst außer Acht gelassen werden.

Der Jumper

Der Jumper wird auf die Stiftleiste auf EXT gesteckt. Dadurch wird eine externe Spannungsversorgung verwendet. Wenn der Jumper auf "USB" gesteckt ist, funktioniert der Motor der Datasette nicht. Dies ist nur für Debugging-Zwecke vorgesehen.

Der erste Funktionstest

Sobald der TapeXUM-Adapter vollständig aufgebaut wurde, kann mit dem ersten Funktionstest begonnen werden. Es wird kein Kassetten-Abbild erstellt, sondern nur der Datenstrom überprüft, um die Funktionalität des Adapters zu prüfen. Zunächst schließen wir die Datasette und die Stromversorgung an.
  • Die Datasette an den TapeXUM anschließen. Der Stecker kann nicht verkehrt herum eingesteckt werden.
  • Schließe den Arduino an den Windows-Rechner an.
  • Schließe die 9V-Spannungsversorgung an den TapeXUM an.

Die grüne LED sollte nun leuchten. Im nächsten Schritt werden die Tools heruntergeladen, die benötigt werden, um den TapeXUM-Adapter zu betreiben. Der Entwickler hat einen komfortablen Installer erstellt, der nur eine einzige Datei umfasst. Lade den Installer von github.com/r1me/TapeXUM herunter und führe die Datei XUMInstaller.exe aus, die sich im Archiv befindet. Im Zuge der Installation werden nicht nur die erforderlichen Tools, sondern auch der passende Treiber für den Arduino bereitgestellt.


Die Tools sollten nun im Ordner „C:\Programme\OpenCBM\“ zu finden sein. Da es sich um Kommandozeilen-Tools ohne grafische Oberfläche handelt, wird die Windows-Eingabeaufforderung (CMD) benötigt. Diese muss allerdings mit Administratorrechten ausgeführt werden, da wir die Befehle sonst nicht verwenden können. Dazu wird mit der rechten Maustaste auf CMD geklickt und anschließend auf „Als Administrator ausführen“.


Anschließend wird mit dem Befehl "cd C:\Programme\OpenCBM\" in das OpenCBM-Verzeichnis gewechselt. Nun wird das Tool "Tapfit" gestartet. Dieses stellt den Datenstrom grafisch dar. Sobald das Tool ausgeführt wird, sollte sich der Motor in der Datasette drehen. Wir legen eine Kassette ein und spulen sie an den Anfang zurück. Im Anschluss wird die Play-Taste unserer Datasette betätigt, um den Lesevorgang der Kassette zu starten. Sobald die Datenübertragung läuft, sollten 1 bis 3 Streifen sichtbar sein, die eine relativ gerade Ausrichtung aufweisen. Werden die Streifen stark verzerrt angezeigt oder sind die einzelnen Punkte überall verstreut, ist dies ein Anzeichen dafür, dass entweder die Datasette nicht richtig funktioniert oder die Daten auf der Kassette nicht mehr lesbar sind.

Beachte:
  • Die Datasette kann nur bei laufendem Motor bedient werden.
  • Am Anfang des Bandes sind keine Daten vorhanden. Das Tool TapFit zeigt zu diesem Zeitpunkt noch nichts an. Dies kann ca. 15 Sekunden dauern.

Sollten die Daten verzerrt angezeigt werden, kann dies auf eine defekte Datasette hindeuten. Bei meinen Tests trat dieses Problem mit zahlreichen Datasetten auf, da der Motorriemen seine Spannung verloren hatte. Vor der Verwendung dieser Datasetten ist eine Wartung erforderlich. 

Eine Kassette vor- und zurückspulen

Wie oben beschrieben, kann die Datasette nur bei laufendem Motor bedient werden. Um nicht jedes Mal das Tool „tapfit“ starten zu müssen, nur um die Kassette vor- oder zurückzuspulen, wird das Tool „tapcontrol“ eingesetzt.

tapcontrol on startet den Motor der Datasette
tapcontrol off schaltet ihn wieder aus

Ein Image einer Kassette erstellen

Wenn ein funktionierendes TapeXUM und eine funktionierende Datasette vorhanden sind, kann ein Image einer Kassette erstellt werden. Dazu wird eine Kassette in die Datasette eingelegt und bis zum Anfang zurückgespult. Dabei spielt es keine Rolle, ob es sich um eine Kassette vom Commodore 16, 64 oder VIC-20 handelt. Anschließend wird das Tool „tapread“ mit folgenden Parametern gestartet:

System
-c64pal : C64 PAL
-c64ntsc : C64 NTSC
-c16pal : C16 PAL
-c16ntsc : C16 NTSC
-vicpal : VIC-20 PAL
-vicntsc : VIC-20 NTSC
-spec48k : Spectrum48K
-x : unbekannt

Buffer (Optional)
-b10 : 10 MB
-b25 : 25 MB(default)
-b50 : 50 MB
-b100 : 100 MB

Sampling rate (Optional)
-s1 : 1 MHz (default)
-s16: 16 MHz (maximal präzision)

In unserem Beispiel wird ein Image einer C64-Kassette erstellt. Dazu wird der Befehl „tapread -c64pal test.cap“ verwendet. Dadurch wird ein Image mit dem Namen „test.cap” im OpenCBM-Verzeichnis erzeugt.


Wir werden dazu aufgefordert, die Wiedergabetaste auf der Datasette zu drücken. Der Vorgang wird ausgeführt und wir warten, bis das Band vollständig gelesen ist. Die Dauer des Vorgangs ist abhängig von der Länge der Kassette. Wir sollten anschließend das soeben erstellte Image sehen.


Wir haben das Abbild erstellt, können damit aber noch nicht viel anfangen, da es im CAP-Format vorliegt. Damit das Image verwendet werden kann, muss es zunächst in das TAP-Format konvertiert werden. Für diesen Vorgang wird ein spezieller Befehl verwendet. Dieser lautet cap2tap.exe.

cap2tap.exe test.cap test.tap


Nun sollte eine weitere Datei namens „test.tap” erstellt worden sein. Diese kann in den Emulator geladen und gestartet werden. Alternativ können auch einzelne Programme daraus extrahiert werden. Siehe dazu die entsprechenden Abschnitte weiter unten.

Ein Image auf eine Kassette schreiben

Das Kopieren eines Kassettenabbilds auf eine Kassette funktioniert ähnlich wie das Lesen von Kassetten. Wahrscheinlich verfügen wir über eine TAP-Datei, die wir auf die Kassette kopieren möchten. Da dieses Format nicht unterstützt wird, muss es zunächst in das CAP-Format konvertiert werden. Dies geschieht mit folgendem Befehl:

tap2cap.exe [Dateiname].tap image.cap

„[Dateiname].tap” bezeichnet das zu konvertierende Abbild. Hier wird der entsprechende Name zusammen mit dem Pfad zur Datei eingegeben. „image.cap“ ist die Zieldatei.


Auch in diesem Fall wird die Kassette bis zum Anfang zurückgespult. Beachte, dass beim Überschreiben einer Kassette alle vorhandenen Daten gelöscht werden. Nun wird der Befehl tapwrite verwendet, um die Daten auf die Kassette zu schreiben. Die Parameter sind optional. Einer davon ist jedoch sehr nützlich.

-aX: wartet X Sekunden bevor die Daten gesendet werden (optional)
-bY: Die Datenaufzeichnung läuft Y Sekunden nach den letzten Signal (optional)
-bz: Die Datenaufzeichnung läuft ohne Stop weiter (optional)

Der Parameter "-aX" wird verwendet, um zu verhindern, dass die Daten unmittelbar nach dem Befehl "tapwrite" auf die Kassette geschrieben werden. Da die ersten 15 Sekunden des Bandes nicht magnetisch sind, können dort keine Daten gespeichert werden. Dies würde zu einer unvollständigen Aufzeichnung führen. Der folgende Befehl wird eingegeben:

tapwrite -a15 image.cap

Nun drücke die Record-Taste auf der Datasette und warte, bis der Vorgang abgeschlossen ist.


Die soeben erstellte Kassette sollte nun in den C64 geladen werden können.

Daten von einem Image extrahieren

Nachdem der Inhalt einer Kassette erfolgreich auf den Computer übertragen wurde, kann er in einen Emulator geladen werden. Möglicherweise wird nur ein Programm aus dem Image benötigt. Eine Kassette kann auch mehrere Programme enthalten. Dafür gibt es ein Programm namens TAPClean. Suche auf der Webseite www.luigidifraia.com nach dem Tool “TAPClean Front End 0.40 for Windows” und installiere es. Damit wird das TAP-Image geöffnet. Anschließend klicken wir auf „Test”.


Nun wird eine Zusammenfassung der Daten gezeigt, die sich auf dem Abbild befinden. In diesem Fall interessiert uns die Extraktion eines einzelnen Programms. Klicke auf „Prg Files“, damit der Inhalt des Images angezeigt wird. Neben den Programmen finden wir dort auch andere Komponenten, zum Beispiel Loader. Durchsuche nun den Inhalt nach dem gewünschten Programm, klicke mit der rechten Maustaste auf eine Datei und speichere sie.


Die PRG-Datei kann nun in einem Emulator verwendet werden. Beachte, dass dies nicht mit jedem Programm möglich ist. In einigen Fällen wird ein Loader von einem Programm erfordert, ohne den ein Start des Programms nicht möglich ist.

Ein Tape-Image im Emulator VICE verwenden

Die von uns erstellten Images können problemlos in einen Emulator geladen werden. Es ist zu beachten, dass die Daten im TAP-Format gespeichert sein müssen. Die Konvertierung von CAP-Dateien in TAP-Images wurde bereits weiter oben beschrieben. Wir benötigen einen Emulator wie z.B. VICE, der von vice-emu.sourceforge.io heruntergeladen werden kann. In diesem Fall wird die 64-Bit-Version GTK3 eingesetzt. Das TAP-Image wird mit "Datei -> Attach datasette image ..." ausgewählt und mit "Autostart" wie auf dem echten C64 geladen.


Die Images können mehrere Programme enthalten, sogar ganze Sammlungen passen auf ein Band. Im Emulator ist es nicht erforderlich, wie beim echten C64, die genaue Startposition manuell zu ermitteln. Wenn die Datei mit "Datei -> Attach datasette image ..." geöffnet wird, sollte auf der rechten Seite des Fensters der Inhalt der Kassette sichtbar sein. Durch einen Doppelklick auf das gewünschte Programm wird dieses geladen.