#247 – el commodore – XXI – Final Cartridge Mod

Puh, endlich haben wir das 1581er-Laufwerks-Projekt abgeschlossen. Ich muss euch (bzw. alle, die bereits seit Wochen von dem Thema gelangweilt sind) aber enttäuschen – ganz durch sind wir mit dem C64 immer noch nicht! 😛 Immerhin – zumindest schauen wir uns heute ein anderes Stück Hardware an, es wird Zeit für etwas Neues. Also eigentlich eher etwas „neues Altes“. Erinnert ihr euch noch an das Steckmodul „Final Cartridge III+“ für den C64?

In Artikel 153 haben wir das gute Stück zusammengebaut und im folgenden Beitrag 154 haben wir uns etwas genauer mit den Funktionen des Steckmoduls beschäftigt. Abschließend hatten wir die Platine in ein stylisches Plexiglasgehäuse verfrachtet. Was gibt es also noch über das Teil zu erzählen?

An und für sich bin ich mit dem Ding schon zufrieden. Dank der optimierten Laderoutine werden z.B. Disketteninhalte vergleichsweise schnell gelesen und auch die verbauten Programme und Tools machen das Arbeiten mit dem C64 wesentlich einfacher/effizienter.

Eine Sache, die mich an dem Modul, bzw. der darauf laufenden Firmware aber stört, ist die Tatsache, dass man mit am C64 angestecktem Modul beim Start des Rechners immer in der „Desktop-Oberfläche“ der Final Cartridge landet:

Möchte man das nicht, muss man während des Startvorgangs des C64 die „RUN/STOP“-Taste gedrückt halten. Dann wird der Rechner direkt im BASIC gestartet und es stehen trotzdem die komfortablen BASIC-Erweiterungen (z.B. Diskettenindex lesen via „F7“, Programm laden via „F5“, Programm starten via „F3“) zur Verfügung.

Das ist prinzipiell schon ok, aber, wenn ich ehrlich bin, wäre es mir lieber, wenn die Final Cartridge immer im BASIC-Modus starten würde und nur bei gedrückter Taste während des Startvorgangs das Desktop-Interface laden würde. Also quasi genau umgekehrt wie es eigentlich vorgesehen ist! 😀

Klingt gut, aber jetzt kommt die Preisfrage: Was müssen wir tun, damit das Modul nach unserer Pfeife tanzt? 😉

Als erstes sollten wir uns mal die Software der Final Cartridge genauer ansehen. Glücklicherweise haben C64-Enthusiasten die binären Firmware-Images der zahlreichen, unterschiedlichen Versionen der Final Cartridge gesammelt und zum Download zur Verfügung gestellt! In dem Paket findet sich tatsächlich auch das ROM-Image von unserer „FCIII+ 4.1“:

Die ROM-Images für C64-Steckmodule liegen meist in zwei unterschiedlichen Formaten vor. Während die BIN-Dateien die rein binären Daten eines Moduls repräsentieren, ist das CRT-Format ein vom Emulator „VICE“ verwendetes Format, welches neben den reinen Binärdaten zusätzlich Informationen zum Typ der genutzten Steckmodul-Hardware enthält. Das ist gut, denn so können wir die CRT-Datei direkt im VICE-Emulator einbinden und testen:

Fun Fact: Es gibt sogar Tools zum Konvertieren der Formate! Immer wieder verblüffend, wie viel Lebenszeit Leute in so vermeintlich unsinnige Projekte stecken! 😀

Scheint zu funktionieren, das Bild des Desktop-Interfaces kennen wir ja bereits vom Test der Final Cartridge an der echten C64-Hardware! 🙂

Soweit so gut, doch wie kehren wir jetzt das Startverhalten der Final Cartridge um? Leider gibt es keine Einstellung oder irgendwelche Hardware-Schalter, die das ermöglichen. Im Endeffekt bräuchten wir dafür vermutlich den Quellcode der Final Cartridge Firmware, welchen wir dann bearbeiten und neu kompilieren müssten. Gute Idee, aber leider konnte ich den Sourcecode nirgendwo finden und es ist fraglich ob man das Zeug mit aktuellen Tools überhaupt noch umwandeln könnte. Macht nichts, denn ich habe eine weitere Idee, wie wir es schaffen könnten! 🙂

Auf der Seite, auf welcher sich der Download der unterschiedlichen Final Cartridge Firmware Versionen findet, habe ich auch folgende Informationen gefunden. Scheinbar gibt es eine speziell modifizierte Firmware-Version, welche den direkten Einstieg in die BASIC-Oberfläche unterstützt:

Na, das klingt doch genau nach dem was wir suchen, oder? Ich denke wir sollten diese „Version 13“ der Firmware mal im Emulator ausprobieren. Und tatsächlich – das System bootet direkt im BASIC-Modus und nicht in das Desktop-Interface. Geil! 🙂

Fun Fact: Hält man die „RUN/STOP“-Taste (ESC im Emulator) gedrückt und startet das System neu, wird in das Desktop-Interface gebootet.

Leider löst das unser eigentliches Problem nur bedingt, denn bei der Firmware-Version 13 handelt es sich leider um ein recht altes Image, bei welchem die ganzen schönen Tools fehlen, welche auf unserer „echten“ Final Cartridge (samt aktueller Firmware) zur Verfügung stehen. Hier der Vergleich:

Ok, das bedeutet im Endeffekt, dass wir anhand der Binärdaten irgendwie herausfinden müssen, an welcher Stelle das eine Byte gepatched wurde, sodass wir die Änderung dann in dem neuen Image (mit den ganzen schönen Tools) machen können. Klingt irgendwie kompliziert! 😀

Keine Angst, so schwer ist das gar nicht. Um herauszufinden, an welcher Stelle die Firmware modifiziert wurde, sollten wir die originale V12-Firmware, sowie die angepasst V13-Firmware erst mal in einen Hexeditor (z.B. „HxD“) laden.

Vergleicht man nun die beiden CRT-Dateien miteinander, findet sich tatsächlich nur an der Adresse x“E1“ (fast direkt am Anfang) ein Byte Unterschied! Bei der modifizierten Firmware wurde der Wert x“F0“ durch x“D0“ ersetzt. Schon verrückt, was ein Byte Unterschied manchmal ausmacht! 😉

Fun Fact: Wenn man es genau nimmt ist es tatsächlich sogar nur 1 Bit Unterschied. Der Wert x“F0“ ist binär betrachtet b“1111000“ und x“D0“ steht für b“1101000“. Ich weiß schon – wen interessiert‘s? 😛

Natürlich sollten wir uns der Vollständigkeit halber auch das binäre Format ansehen. Dort findet sich ebenso nur ein Byte Unterschied, allerdings an der Adresse x“91“:

Sehr cool, jetzt wissen wir, wie die V13-Firmware angepasst wurde. Sofern sich die neueren Firmware-Versionen nicht allzu sehr verändert haben, bzw. unterscheiden, müssten wir mit dieser Information in der Lage sein, unsere aktuelle Firmware (FCIII+ 4.1) so zu modifizieren, dass sie auch im BASIC-Modus startet. Dafür ändern wir einfach das eine Byte mit einem Hexeditor ab:

Und das war es auch schon. Jetzt sollten wir noch schnell im Emulator testen, ob unsere Änderung auch funktioniert. Läuft – anstelle des Desktop-Interfaces wird jetzt direkt BASIC geladen und mit gehaltener ESC-Taste bei einem Neustart landen wir im Desktop. Sehr schön! 🙂

Nachdem das so gut funktioniert hat, können wir versuchen noch einen Schritt weiter zu gehen und die unter „Tools“ zusammengefassten Hilfsprogramme verändern, bzw. erweitern. Warum ich das tun will? Nun, bei meinen bisherigen Tests der Final Cartridge ist mir aufgefallen, dass einige Programme in veralteten Versionen vorliegen oder einfach nicht zu 100% funktionieren.

Kein Problem, denn hierfür gibt es eine Softwaren namens „Final Cartridge III+ Editor“. Damit lassen sich bis zu 16 verschiedene Tools (jeweils max. 15 kB groß, Gesamtpaket nicht größer als 186 kB) auswählen und damit eine eigene Firmware erstellen.

Damit das klappt muss jede einzelne PRG-Datei hinzugefügt, benannt und die jeweilige „Startadresse“ des Programms angegeben werden. Doch woher bekommen wir diese Adresse?

Dafür müssen wir die PRG-Datei, welche wir in das Image packen wollen, in einem Emulator via LOAD-Befehl laden. Anstatt das Programm jetzt aber per „RUN“ auszuführen, lassen wir uns das geladene BASIC-Script über den Befehl „LIST“ anzeigen. Daraufhin verrät uns das System die Speicheradresse des Programmeinstiegspunkts (SYS2240).

Diese muss in hexadezimaler Form als Startadresse im Editor angegeben werden. Die dezimale Adresse “2240“ entspricht der Hexadresse “08C0“, also geben wir den Wert „08C0“ als Startadresse an. Zugegeben – das ist schon etwas umständlich, aber so funktioniert das Tool nun mal! 😉

Fun Fact: Den dezimalen Startadressenwert kann man mit jedem beliebigen Werkzeug umrechnen, sei es nun ein Taschenrechner oder ein spezielles Online-Tool. Wer richtig hart drauf ist, rechnet das im Kopf aus! Ich bin faul, daher musste mir der Windows-Taschenrechner helfen! 😀

So habe ich nach und nach sämtliche wichtigen Programme aus den bisherigen Commodore-Artikeln zusammengesucht und in das Tool importiert. Eins kann ich euch sagen – es hat ganz schön lang gedauert die entsprechenden Startadressen herauszufinden! 😀

Beim Speichern des Images erzeugt der Editor eine Binärdatei. Um diese jetzt im Emulator auszuprobieren, müssen wir sie erst in das CRT-Format konvertieren. Praktischerweise beinhaltet der VICE-Emulator ein Tool namens „cartconv.exe“, mit dem sich genau das tun lässt!

Fun Fact: Natürlich habe ich wieder das eine Byte an der Adresse x“91“ auf x“D0“ angepasst, sodass unser frisch erstelltes Image auch direkt im BASIC-Modus startet! 😉

Jetzt können wir das konvertierte CRT-Image nochmal im Emulator testen. Es funktioniert genauso, wie gewünscht: Bei einem normalen Start wird BASIC samt Sonderfunktionen (F7=Index lesen, F5=Programm laden, F3=Programm starten) geladen. Hält man dagegen die „RUN/STOP“-Taste beim Systemstart gedrückt, wird in das Desktop-Interface gebootet und wir finden unsere Tools wieder:

Sehr schön, jetzt haben wir also ein modifiziertes und um einige hilfreiche Tools ergänztes Final Cartridge Image erstellt. Die letzte Frage, die wir noch klären müssen: Wie bekommen wir die Firmware jetzt auf die echte Hardware (also den EEPROM-Chip des FC3+-Steckmoduls) aufgespielt?

Da ich keinen (E)EPROM-Brenner besitze, habe ich die Hilfe eines Forumskollegen in Anspruch genommen. Dieser war so nett und hat mir den EEPROM (W27C020-70Z) mit der von mir erstellten, bzw. veränderten Firmware beschrieben. Dafür musste ich den Chip natürlich ausbauen und ihm zuschicken:

Wenige Tage später ist der frisch beschriebene EEPROM wieder hier eingetroffen und wir können das gute Stück im Modul verbauen.

Bleibt abschließend nur noch zu testen, ob alles funktioniert hat und das Modul nach unseren Wünschen tickt. Dafür stecken wir die Cartridge am C64 an und starten das System. Und tatsächlich – der Rechner startet direkt im BASIC-Modus und nicht in das Desktop-Interface. Hält man die „RUN/STOP“-Taste beim Systemstart gedrückt, wird in das Desktop-Interface gebootet. Erfolg! 🙂

Auch die von uns selektierten Programme sind im Tools-Menü vorhanden und lassen sich starten.

Fun Fact: Ich habe testweise mal ein paar Programme wie z.B. den Browser, die WiC64-Software oder den Disk Doctor aufgerufen – es hat alles problemlos funktioniert! 🙂

Na, mit dem Ergebnis bin ich ja echt mal richtig zufrieden. Ich denke, dass wir mit der gepimpten Final Cartridge ein cooles und vor allem hilfreiches Werkzeug an der Hand haben, um zahlreiche Arbeitsschritte auf dem C64 zu vereinfachen. Jetzt bräuchte ich eigentlich nur noch mehr Zeit, um mich mit der ganzen Software intensiver zu beschäftigen. Tja, man kann eben nicht alles haben! 😀

In diesem Sinne – bis die Tage, ciao!

Write a comment