Amiga mit Linux debuggen

Das AmigaOS bietet eine Debug-Konsole als einfachen Weg zur Fehlersuche. Log-Daten können über die linkbare Debug.lib geschrieben werden, welche auch von allerlei Tools wie MuForce, Mungwall oder PatchWork genutzt wird. AmigaOS stellt einen einfachen internen Debugger namens ROMWack bereit (der in späteren Versionen durch das noch einfachere SAD ersetzt wurde). Aber auch DiagROM schreibt Diagnosedaten über die serielle Schnittstelle, was praktisch ist, wenn ein RAM-Chip oder etwas im Videobereich defekt ist.

Die Log-Ausgabe wird an die serielle Schnittstelle gesendet und kann von einem daran angeschlossenen Terminal gelesen werden. In den guten alten Zeiten konnten sich nicht so viele Bastler ein echtes Terminal oder einen zweiten Computer dafür leisten, also wurden Tools wie Sushi oder Sashimi genutzt, um die Debug-Ausgabe in ein Shell-Fenster umzuleiten. Das funktionierte gut, solange das System nicht komplett abgestürzt war.

Heute kann man davon ausgehen, dass fast jeder Amiga-Besitzer einen zweiten Computer zu Hause hat, und wenn es nur ein zweiter Amiga ist. 😉 Dieser Blogartikel handelt davon, wie man seinen Amiga mit deinem Linux-PC verbindet und die Debug-Ausgabe erhält.

Hardwareseitig benötigt man einen Adapter mit einem weiblichen DB25-Anschluss an dem einen Ende und einem USB-Stecker an dem anderen Ende. Ich benutze einen dieser USB-zu-Seriell-Konverter, die in Hardware-Shops für wenig Geld zu finden sind. Sie sind oft mit einem männlichen DB9-Stecker ausgestattet, weil sie dafür gedacht sind, an Peripheriegeräte (wie Modems) angeschlossen zu werden. Um sie mit einem Computer zu verbinden, wird ein sogenanntes Nullmodem benötigt. Das ist ein kleiner Adapter, der es ermöglicht, zwei Computer direkt miteinander zu verbinden, indem die Sende- und Empfangsleitungen gekreuzt werden. Zuletzt brauchen wir noch einen DB9-zu-DB25-Stecker, um das andere Ende des Nullmodems mit dem Amiga zu verbinden.

Dieser Hardware-Stack wird auf der einen Seite an die serielle Schnittstelle des Amiga und auf der anderen Seite an einen USB-Anschluss des PCs angeschlossen. Denke daran, den Amiga abzuschalten, bevor du etwas an die serielle Schnittstelle anschließt. Im Gegensatz zu USB sind die Anschlüsse alter Computer nicht dafür ausgelegt, Geräte anzuschließen oder zu trennen, während das System eingeschaltet ist. Das könnte die Hardware beschädigen!

Softwareseitig müssen wir auf dem Amiga keine Treiber installieren. Die Debug- oder Diagnoseausgaben werden einfach an den seriellen Anschluss gesendet. Unter Linux können wir jeden Terminal-Emulator verwenden. Der bekannteste ist sicherlich minicom.

Die Standardeinstellungen für die serielle Schnittstelle sind 9600-8N1 (9.600 bps, 8 Bits pro Zeichen, keine Parität, 1 Stoppbit). Allerdings wird die Debug-Ausgabe einfach direkt an den seriellen Anschluss gesendet. Wenn du die seriellen Parameter auf der Amiga-Seite geändert hast oder das serial.device für etwas anderes verwendest, nutzt die Debug-Ausgabe die aktuellen Einstellungen einfach mit. Der Handshake muss jedoch in jedem Fall abgeschaltet sein.

Der vielleicht einfachste Weg ist, eine Datei namens ~/.minirc.amiga mit folgendem Inhalt zu erstellen (ändere den Wert pu port zu deinem tatsächlichen TTY-USB-Gerät):

pu port             /dev/ttyUSB0
pu baudrate         9600
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No
pu xonxoff          No

Bei vielen Linux-Distributionen muss der Benutzer außerdem zur Gruppe dialout hinzugefügt werden, um auf ein serielles Gerät zugreifen zu können:

sudo usermod -aG dialout $(whoami)

Starte danach einfach minicom mit dem amiga-Profil:

minicom amiga

Jetzt solltest du die gesamte von AmigaOS erzeugte Debug-Ausgabe in dem minicom-Fenster sehen. Für interaktive Debugger wie ROMWack kannst du außerdem Befehle in die Konsole eingeben.

Um minicom zu verlassen, drücke STRG-A und dann Q. 😉

Amiga CD32

Im Gegensatz zu anderen Amiga-Modellen hat das CD32 keinen dedizierten RS-232-Anschluss. Stattdessen bietet es eine einfache serielle Schnittstelle am Aux-Anschluss, die intern mit Paulas UART-Pins verbunden ist.

Um einen Adapter zu bauen, benötigst du ein PS/2-Kabel (z.B. von einem Verlängerungskabel oder einem alten PS/2-Eingabegerät) und einen auf MAX3232 basierenden TTL-zu-DB9-Pegelwandler. Diese Wandler gibt es für wenige Euro auf Online-Marktplätzen.

Schneide ein Ende des Kabels ab und verbinde die Adern wie folgt mit dem Konverter:

  • Pin 2: TXD
  • Pin 3 (und die Abschirmung): GND
  • Pin 4: VCC
  • Pin 6: RXD

Lass die verbleibenden zwei Adern unverbunden und überprüfe die richtige Polarität, bevor du die Adern an den Konverter anschließt!

Das CD32 bietet keine Steuer- und Handshake-Signale, aber glücklicherweise werden diese für Debugging- und Diagnosezwecke nicht benötigt.