#215 – GB/C Flash Cart

Erinnert sich noch jemand an Artikel 93? Nein? Kein Problem, ich versuche mal kurz eurem Gedächtnis etwas auf die Sprünge zu helfen. „Damals“ haben wir mit Hilfe des „GB Cart Flashers“ ein spezielles Game Boy Modul samt verbautem Flashspeicher (Flash Cart) mit einer ROM-Datei beschrieben. Einfach gesagt: Wir haben auf ein Game Boy Modul ein Spiel unserer Wahl gepackt! 😉

Schön und gut, aber wozu die Geschichtsstunde? Das ist doch alles schon eine gefühlte Ewigkeit her! Nun, wie es der Zufall will, bin ich mittlerweile noch an ein paar weitere Flashmodule für den Game Boy (Color) gekommen:

Fun Fact: Lasst euch von den bunten Aufklebern auf den Modulen nicht täuschen, darin stecken ein paar waschechte Flash Carts! 😉

Ein paar davon habe ich auch bereits mit ROM-Daten beschrieben und mit einem – zugegeben sehr einfachen – selbstgebastelten Etikett versehen. Das ist meiner Meinung nach einer der größten Vorteile dieser Flashkarten. Anstatt einfach irgendwelche originalen (nicht modifizierten) Spiele auf so ein Modul zu packen, kann man von Fans weiterentwickelte und verbesserte Versionen der Spiele auf die Karten aufspielen. So können die Hacks bzw. Mods auch auf echter Hardware (und nicht nur im Emulator) gespielt werden – cool! 🙂

Konkret haben wir hier mit „Hard Awakening“ einen deutlich schwereren ROM-Hack zu „The Legend of Zelda: Link’s Awakening DX“ – fast so wie die „Master Quest“ bei Ocarina of Time! 😉

Fun Fact: In dem Spiel bekommt ihr beispielsweise nicht gleich zu Beginn euer Schwert, sondern müsst euch erst über zahlreiche Umwege und mit Hilfe anderer Gegenstände durch die ersten Spielabschnitte kämpfen. Nicht nur die Spielwelt, sondern auch die Dungeons wurden überarbeitet und sind deutlich schwerer als in der Vorlage – definitiv eine Empfehlung für Fans des Originals! 😉

Auch sehr empfehlenswert für Freunde der zweiten Pokémon-Generation ist „Pokémon Prism“, ein auf Pokémon Kristall basierender ROM-Hack, welcher um zahlreiche Mechaniken, Pokémon und sogar eine komplett neu spielbare Überwelt erweitert wurde.

Fun Fact: An diesem Hack wurde jahrelang gearbeitet und das merkt man auch. Meiner Meinung ist es eines der besten, wenn nicht sogar das beste Pokémon-Fanspiel der zweiten Generation! 😉

Oh weh, ich schweife schon wieder ab! Eigentlich hatte ich doch etwas ganz Anderes geplant, als euch etwas über ROM-Hacks zu erzählen, also schnell zurück zum Thema! 🙂

Neben den bereits vollständig umgebauten Modulen habe ich zusätzlich folgende Platine von einem Kollegen aus einem Spieleforum für ein paar Euro erworben. Mit dieser Platine soll sich angeblich exakt so eine „Flash Cart“ (also ein beschreibbares Game Boy Modul) bauen lassen. Na, wenn das nicht nach einer perfekten Retro-Challenge für uns klingt! 🙂

Wie bei jeder losen Platine muss das Teil erst noch mit ein paar Bauteilen bestückt werden. Immerhin – ganz bei Null anfangen müssen wir nicht- denn wer genau hinsieht, dem ist vielleicht bereits aufgefallen, dass schon ein Chip verlötet ist. Tatsächlich war der Verkäufer so nett und hat bereits einen Flashbaustein (29f016) mit 16Mbit (also 2 Megabyte) verlötet.

Fun Fact: Bei „normalen“ Game Boy Spielen befindet sich an dieser Stelle ein (nur lesbarer) ROM-Chip. Logisch – das Modul soll ja auch nur dieses eine Spiel „abspielen“ können. Der Vorteil einer Flashkarte mit verbautem Flashspeicher ist, dass der Speicher sich mit Hilfe eines speziellen Gerätes (wie z.B. dem GB Cart Flasher) immer wieder neu beschreiben lässt – fast so wie ein USB-Stick! 😉

Spätestens jetzt ist klar, um was sich der heutige Beitrag drehen soll. Heute möchte ich mich auf das Abenteuer einlassen und mal selbst so eine Flash Karte mit Hilfe der Platine bauen! 🙂

Fangen wir gleich an. Wie wir ja bereits festgestellt haben, ist auf der Platine bereits ein Flashbaustein verbaut. Das ist aber leider noch nicht genug, denn damit das Modul auch wirklich funktioniert, werden noch einige weitere Komponenten benötigt. Welche das sind? Nun, um das zu verstehen, müssen wir etwas tiefer in die Theorie (Hardware eines Game Boy Moduls) einsteigen. Keine Angst – ich werde definitiv keine Wissenschaft daraus machen, versuchen mich kurz zu halten und nicht weiter abzudriften, ich weiß wie langweilig Theorie ist! 😉

Einfach gesagt besteht jedes Game Boy Modul aus mindestens einer Platine mit 32 Pins sowie einem ROM-Baustein (auf welchem die eigentlichen Programm- bzw. Spieldaten gespeichert sind). Der ROM-Chip ist über 16 Adressleitungen direkt mit den Pins der Platine (und somit dem Game Boy) verbunden. Ganz einfache Spiele, welche nicht größer als 32kB sind, verwenden diese Architektur. Ein sehr populärer Vertreter dieser Gattung ist z.B. das Modul von „Tetris“.

Fun Fact: Tatsächlich ließen sich mit den 16 Adressleitungen 2^16 Byte, was 65536 Byte, bzw. 64kB entspricht, ansprechen, aber die interne Aufteilung des Speicherbereichs (Memory Map) lässt eine Nutzung der oberen 32kB nicht zu.

Im Lauf der Zeit wurden Spiele aber komplexer und die 16 Adressleitungen (mit denen der ROM-Speicher adressiert werden kann) reichten nicht mehr aus um den gestiegenen Bedarf an Speicherplatz für die Spieldaten zu decken. Als Lösung hat man einfach einen weiteren Baustein in die Module verbaut, den sog. „MBC“ (Memory Bank Controller). Mit Hilfe dieses Chips kann nicht nur mehr Speicher adressiert werden, ebenso wird die Möglichkeit geschaffen auf weitere im Modul verbaute Hardware (z.B. RAM oder Zeitgeber-Chips) zuzugreifen. MBCs gibt es in zig verschiedenen Ausführungen. Eine recht einfache Variante ist der MBC1, welcher z.B. im Modul des Spiels „Dynablaster“ (den meisten wohl eher unter dem Titel „Bomberman“ bekannt) verbaut ist um die 128kB an Programmdaten zu adressieren.

Doch wie funktioniert das eigentlich, mehr Speicher zu adressieren? Letztendlich kann auch der MBC-Chip nicht zaubern und die Limitierungen der Hardware überlisten. Natürlich kann nicht einfach direkt ein größerer Speicherbereich adressiert werden, denn es gibt ja nur 16 Adressleitungen. Im Endeffekt ermöglicht der Baustein einem Spielprogramm lediglich das Ansteuern mehrerer 16kB großer Speicherbereiche im ROM-Chip mit Hilfe einer Technologie namens „bank switching“. Das Spiel kann also selbst (durch das Setzen bestimmter Werte im Speicher) entscheiden, auf welchen 16kB großen Speicherbereich im ROM-Chip es gerade zugreifen möchte – sehr clever! 😉

Doch damit nicht genug! Neben ROM-Chips (lesbarer Speicher) wollten einige Spiele auch etwas RAM (schreibbaren Speicherbereich) zur Verfügung stehen haben um dort Daten zur Laufzeit hinzuschreiben (z.B. zum Entpacken von Level- oder Grafikdaten oder zur Ablage von Spielstanddaten). Auch hierbei spielt der MBC-Chip eine Rolle, denn er kann neben den ROM-Zugriffen auch verschiedene RAM-Speicherbereiche verwalten. Dafür muss natürlich im Modul ein zusätzlicher RAM-Chip verbaut werden. Ebenso wird eine Knopfzelle zum Erhalt des RAMs nach Ausschalten der Konsole benötigt. Ein Beispiel für ein Modul mit MBC5-Chip, 2048kB ROM und 8kB RAM wäre „Conker’s Pocket Tales“:

Fun Fact: RAM-Speicher, welcher mit Hilfe einer Knopfzelle gehalten wird, wird typischerweise „SRAM“ genannt. Den Begriff kennt ihr bestimmt aus vergangenen Blogbeiträgen schon! 😉

Einige Spiele gingen selbst darüber hinaus und verwendeten zusätzliche Hardware-Bausteine im Modul, welche ebenfalls mit Hilfe des MBC-Chips angesteuert werden. Ein absoluter Klassiker, den jeder kennt, ist „Pokémon – Goldene Edition“. Im Modul ist neben einem MBC3-Chip, 2048kB ROM und einem 32kB RAM-Baustein zusätzlich noch ein RTC-Chip (Schwingquarz für die „Echtzeituhr“) verbaut. Auch hierfür (also zur Erhaltung der Uhrzeit) wird die Knopfzelle benötigt!

Fun Fact: Die doppelte Belastung der Knopfzelle durch SRAM und RTC-Chip ist einer der Gründe, wieso man in freier Wildbahn häufig Pokémon-Spiele mit leerer „Speicherbatterie“ findet! 🙂

Uff – hatte ich nicht versprochen, dass wir nicht zu tief in die Theorie abdriften?! 😀 Nichts wie zurück in die Praxis. Wollten wir nicht eigentlich selbst so eine Flashkarte bauen? Es steht ja immer noch die Frage im Raum, welche Komponenten wir denn nun für das Teil noch benötigen, damit sie funktioniert! Also mal sehen: Flashbaustein zum Beschreiben als Ersatz für einen ROM-Chip: Check! RAM-Baustein: Fehlt! MBC-Chip: Fehlt! Knopfzelle: Fehlt! Auch ein paar Kleinteile (Widerstände, Kondensatoren, RAM Protector): Fehlen auch! Na da haben wir ja einiges vor…

Die Frage ist nur, woher wir die fehlenden Teile bekommen könnten? Die Kondensatoren und die Knopfzelle sind kein Problem, doch leider werden diese Chips schon seit Jahren nicht mehr hergestellt und so können wir sie nicht neu erwerben. Was nun? Es hilft nichts, letztendlich benötigen wir ein „Spendermodul“ aus welchem wir die beiden benötigten Chips (SRAM + MBC) auslöten können. Dabei kann allerdings nicht jedes beliebige Modul verwendet werden, denn abhängig davon, welchen Typ von Flashkarte (MBC1, MBC3 oder MBC5) man bauen möchte, muss ein geeigneter Spender ausgewählt werden. Um ehrlich zu sein, ist es mir ein Graus ein funktionierendes Spiel (egal wie gut oder schlecht es sein mag) für so ein Bastelprojekt zu schlachten. Dementsprechend glücklich bin ich, dass ich folgendes defektes Modul gefunden habe:

In „Ronaldo V-Football“ ist ein MBC5-Controller, ein paar Kondensatoren und Widerstände sowie ein LH5164 RAM-Baustein mit 64Kbit (8kB) verbaut. Das sind exakt die Teile, die uns interessieren! 😉

Trotz mehrfacher Kontaktreinigung läuft das Spiel nicht. Ich vermute, dass entweder der ROM-Chip (LH538W, 1024kB) defekt ist, oder, dass irgendeine Leiterbahn auf der Platine gebrochen ist. Der Aufwand das herauszusuchen bzw. zu reparieren ist nicht gerechtfertigt, dementsprechend können wir das Spiel prima als „Organspender“ für unsere Flash Cart verwenden! 🙂

Jetzt müssen wir „nur noch“ die Bausteine aus dem alten Modul auslöten. Leichter gesagt als getan, denn die Teile sind nicht nur sehr klein, auch lassen sie sich ohne professionelles Werkzeug (Entlötstation) nur schwer ausbauen. Den RAM-Baustein habe ich letztendlich aber dann doch mit viel Flussmittel, einer Entlötlitze, einem Stück Draht, und verdammt viel Geduld rausbekommen.

Fun Fact: Tatsächlich wurden in einigen Modulen (z.B. Pokémon, Wario Land 3, Harvest Moon 2) größere RAM-Bausteine mit 256Kbit, bzw. 32kB verbaut. Diese können wir später leider nicht auf unsere Flash Cart aufspielen, denn dafür müssten wir einen größeren SRAM verlöten. Kein Thema, denn für die meisten Spiele reichen die 8kB RAM aus unserem Spendermodul locker aus! 😉

Soweit so gut, fehlen ja bloß noch der MBC-Chip sowie ein paar Kleinteile. Ich habe ja schon mit so kleinen SMD-Bauteilchen immer meine Probleme, aber wie zur Hölle sollen wir den Chip mit seinen vielen mikroskopischen Beinchen an allen Seiten ablöten? Ich glaube, das kommt auf den Fotos gar nicht so gut rüber, aber das Ding ist kleiner als eine Nano-SIM-Karte! 😀

Na, wir wollen mal optimistisch bleiben. Nachdem das Lot mit etwas Flussmittel und der Entlötlitze abgesaugt wurde, können wir die einzelnen Pins mit einer Sicherheitsnadel leicht anheben um den Chip vom Board entfernen. Hier ist Vorsicht geboten, denn die kleinen Pins reißen sehr leicht ab!

Gott sei Dank ist das geschafft! Hier haben wir die beiden ausgelöteten Teile:

Diese müssen jetzt nur noch mit der neuen Platine der Flashkarte verlötet werden. Ich spare euch den Prozess, letztendlich sind wieder etwas Flussmittel, einiges an Schweiß und definitiv ein paar Nerven geflossen! 😉

Und, funktioniert das Ding? Um das zu testen, sollten wir mit Hilfe des GB Cart Flashers eine ROM-Datei auf das Modul aufspielen. Dafür verfrachten wir die Platine zurück in ihr Gehäuse, stecken sie am Cart Reader an und starten die Flasher Software. Schon klar – das ist für euch Profis nichts neues – das kennen wir ja bereits alles aus Artikel 93! 😉

Anschließend können wir eine ROM-Datei auf die Karte schreiben. Ich habe mich für „Donkey Kong“ entschieden, weil ich die Spieldatei noch von einem Test des Lesevorgangs mit dem Cart Reader (aus Artikel 186) auf der Festplatte herumliegen hatte! 🙂

Der Schreibvorgang ist erfolgreich und wir können die Eigenschaften des Moduls (bzw. der darauf aufgespielten ROM-Datei) auslesen. Gut zu wissen: Der verwendete MBC-Typ ist nicht nur durch den Hardware-Baustein ersichtlich, sondern in jeder ROM-Datei wird in einem Header-Bereich auch der Typ des Memory Bank Controllers gespeichert.

Fun Fact: Tatsächlich besitzt das originale Donkey Kong Modul eigentlich einen MBC1-Mapper, trotzdem läuft es auch auf unserer MBC3-Flashkarte. Gut, dass der Game Boy so tolerant ist und uns das im Falle von Donkey Kong durchgehen lässt. Das ist leider nicht bei jedem Spiel so, einige Games benötigen spezielle Hardwarekomponenten im Modul (einen bestimmten MBC oder weitere Chips)!

Endlich ist es so weit und wir können unser selbstgebasteltes Modul in den Game Boy (in diesem Fall – zum besseren Abfotografieren – in einen Game Boy Advance) einstecken. Und siehe da – es läuft ohne Probleme. Sehr geil! 🙂

Bleibt eigentlich nur noch die Frage zu klären, welches Spiel, bzw. welche ROM-Datei wir nun auf die selbstgebastelte Flashkarte aufspielen sollen? Nach einigem Hin und Her habe ich mich letztendlich für die „Remote Control“-ROM aus Artikel 93 entschieden.

Fun Fact: Das passt prima, denn wie es der Zufall will, habe ich von einer vor Jahren getätigten Bestellung noch einen passenden Modulaufkleber herumliegen! 🙂

Zur Erinnerung: Im Zusammenspiel mit einem Game Boy Color lassen sich mit der Software Infrarotsignale erlernen und über den Infrarotsensor des GBC verschicken. Zugegeben – so ein Modul habe ich ja eigentlich bereits, aber das ist überhaupt kein Problem. Einerseits schließt sich so wunderbar der Kreis zu Artikel 93 und andererseits gibt es neben dem einen Fernseher im Keller (vor dem das Modul samt Game Boy Color liegt) auch noch genügend andere Geräte mit Infrarotsensoren (Fernseher, Soundbar, etc.) welche ich nun prima mit dem zweiten Modul bedienen kann! 🙂

In diesem Sinne – bis die Tage, ciao!

Write a comment