Die Spielemodule

Kaum eines der Spiele für den Gameboy passt in die 32 KByte ROM, die im Adressraum des Prozessors vorgesehen sind. Daher kommt eine in der 8- und 16-Bit-Ära häufig anzutreffende Technik zum Einsatz, das Banking. Der Speicher wird in viele gleich große Bereiche (Bänke) unterteilt, von denen nur einige gleichzeitig für den Prozessor zugreifbar sind. Beim Gameboy sind zwei Bänke mit einer Größe von 16 KByte gleichzeitig nutzbar, theoretisch ist so beliebig großer Speicher realisierbar.

Stellenmarkt
  1. Anforderungs- / Prozessmanager (m/w/d) im Beschwerdemanagement
    Dortmunder Energie- und Wasserversorgung GmbH DEW21, Dortmund
  2. Teamleiter (m/w/d) im Bereich Softwareplattformen
    ALMEX GmbH, Hannover
Detailsuche

Daher sitzt in den meisten Spielmodulen nicht nur ein Speicherchip, sondern zusätzlich ein sogenannter Memory Bank Controller (MBC). Dessen Grundfunktion ist sehr simpel: Er enthält ein Register, in das die Adresse der ausgewählten Bank geschrieben wird. Das klingt komplexer, als es ist, die Bankadresse sind lediglich die oberen Adressbits. Sie werden zusammen mit den 14 untersten Adressbits an die Adressleitungen des ROMs geführt.

Daneben ist ein (sehr einfacher) Adressdecoder enthalten, der die auszuführende Aktion wählt. Er wählt das passende Bankregister aus, je nachdem, ob die obere oder untere 16-Kbyte-Bank gelesen wird. Apropos Register: Wie kommt da eigentlich die Bankadresse rein? Auch dafür sorgt der Adressdecoder. In den Speicherbereich des Spielemoduls kann nämlich auch geschrieben werden. Den ROM interessiert das nicht, allerdings kann so das Register mit einem Wert befüllt werden.

Neben dem ROM sitzt in einigen Modulen - allen, die Spielstände speichern - zudem ein RAM. Auch der wird in den Speicherbereich des Prozessors eingeblendet, der entsprechende Bereich umfasst 8 KByte. Die Module können mehr RAM enthalten, dann wird auch dieser in Bänke unterteilt.

  • Das Mainboard des Gameboys ist übersichtlich: in der Mitte der Prozessor mit Grafik- und Soundeinheit, rechts oben der Grafikspeicher, darunter der normale RAM. Unten befindet sich der Steckverbinder für die Module. (Bild: Johannes Hiltscher/Golem.de)
  • So sieht ein Spielemodul von innen aus: rechts unten der ROM, links unten der RAM. Über dem RAM ist der MBC aufgelötet (hier ein MBC5), rechts oben die Pufferbatterie für den RAM. Sie sorgt dafür, dass dessen Inhalt nach dem Ausschalten erhalten bleibt. (Bild: Johannes Hiltscher/Golem.de)
  • Link und der Gegner bestehen aus je vier 8 x 8 Pixel großen Sprites (rot umrandet), der Hintergrund aus ebenso großen Tiles (grün umrandet). (Bild: Johannes Hiltscher/Golem.de)
So sieht ein Spielemodul von innen aus: rechts unten der ROM, links unten der RAM. Über dem RAM ist der MBC aufgelötet (hier ein MBC5), rechts oben die Pufferbatterie für den RAM. Sie sorgt dafür, dass dessen Inhalt nach dem Ausschalten erhalten bleibt. (Bild: Johannes Hiltscher/Golem.de)

Welche MBCs gibt es?

Golem Karrierewelt
  1. ITIL 4® Foundation: virtueller Zwei-Tage-Workshop
    18./19.07.2022, virtuell
  2. Cinema 4D Grundlagen: virtueller Drei-Tage-Workshop
    04.-06.07.2022, Virtuell
Weitere IT-Trainings

Von Nintendo sind vier verschiedene MBCs dokumentiert. Module, die nur einen ROM enthalten, beispielsweise Tetris, müssen extra behandelt werden. Die Chips heißen - ganz kreativ - MBC1, MBC2, MBC3 und MBC5 und unterscheiden sich in ihren Fähigkeiten. Alle unterstützen neben dem ROM auch RAM, der MBC3 enthält zusätzlich noch eine Echtzeituhr. Die Menge an unterstütztem Speicher variiert zwischen den verschiedenen MBCs.

Einige MBCs unterstützen zudem unterschiedliche Aufteilungen auf ROM und RAM, die über das Register vom Spiel eingestellt werden. Das muss bei der Implementierung berücksichtigt werden. Mit Ausnahme des MBC5 gibt es eine weitere Besonderheit: Die unterste ROM-Bank kann nicht gewechselt werden. Das ist durchaus sinnvoll, da sich hier die Einsprungpunkte für die Interrupts befinden. Zudem haben die meisten Spiele einige zentrale Programmteile, die immer genutzt werden und sich daher stets an einer festen Adresse befinden müssen.

Nintendo Switch (OLED-Modell) Weiss

Was bedeutet das für den Emulator?

Zuerst einmal muss für jeden MBC, den der Emulator unterstützen soll, eine entsprechende Funktionalität für den Speicherzugriff programmiert werden. Ich habe jeweils eine Klasse geschrieben, in die der Inhalt des jeweiligen Spielemoduls geladen wird - also die Spieldaten (ROM) und eventuell vorhandener RAM. Das ist sicher nicht die effizienteste Lösung, dafür ist sie kaum fehleranfällig.

Eine Frage stellt sich allerdings: Woher weiß der Emulator, welcher MBC verwendet werden muss? Muss am Ende gar eine Datenbank gepflegt werden, in der alle Spiele eingetragen sind? Nein, denn glücklicherweise hat Nintendo offensichtlich an Emulatorprogrammierer gedacht: Alle benötigten Daten, also der verwendete MBC und die Größe des auf dem Modul installierten ROM und RAM, stehen im Informationsblock des Spielemoduls.

Die Laderoutine für ROMs prüft daher zuerst, welcher MBC verwendet wird und wie die Speicheraufteilung ist. Dann erzeugt sie eine Instanz der zu verwendenden MBC-Klasse, die die benötigte Menge an Speicher anlegt. Anschließend werden die Daten des ROMs in die Klasseninstanz geladen, eine Datei mit dem RAM-Inhalt ausgewählt und deren Daten ebenfalls geladen. Hier zeigt sich ein Vorteil des Emulators: Während ein physisches Spielemodul nur einen RAM-Baustein hat, können in der Emulation beliebig viele existieren. So können beliebig viele Spielstände gespeichert und sogar ausgetauscht - oder manipuliert - werden.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Das SoundmodulZusammenfassung 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9.  


mipi 06. Jun 2022 / Themenstart

+1 Bin schon auf den Folgeartikel zur Umsetzung der parallel stattfindenden HW-Abläufe...

TarikVaineTree 05. Jun 2022 / Themenstart

Sheep It Up ist für mich ein Musterbeispiel eines Homebrewspiels für den GB. Simpel...

Kakiss 29. Mai 2022 / Themenstart

Ich finde es daher umso erstaunlicher, wie die Leute Cores für den Mister erstellen. Ich...

Olstyle 29. Mai 2022 / Themenstart

Zuerst noch einmal vielen Dank für den Artikel. Bei aller Abkürzung hätte ich mir aber...

Kommentieren



Aktuell auf der Startseite von Golem.de
LED-Panel und Raspberry Pi
Eine schicke Berlin-Uhr fürs Wohnzimmer

Es braucht nur ein 64x64-LED-Panel und ein bisschen C#-Programmierung, um die Berlin-Uhr auf den Raspberry Pi zu bringen.
Eine Anleitung von Michael Bröde

LED-Panel und Raspberry Pi: Eine schicke Berlin-Uhr fürs Wohnzimmer
Artikel
  1. Ohne Kreditrahmen: Action-Rollenspiele, die besser sind als Diablo Immortal
    Ohne Kreditrahmen
    Action-Rollenspiele, die besser sind als Diablo Immortal

    Enttäuscht von Blizzards Pay-to-Win-Diablo? Diese aktuellen Rollenspiele für Mobile und PC sind die besseren Alternativen.
    Von Rainer Sigl

  2. Spielebranche: Pokémon-Go-Macher und Unity entlassen Hunderte Mitarbeiter
    Spielebranche
    Pokémon-Go-Macher und Unity entlassen Hunderte Mitarbeiter

    Niantic stoppt Projekte wie ein Transformers-Spiel, der Engine-Hersteller Unity kündigt vor allem mit KI beschäftigten Angestellten.

  3. Elektra Trainer: Elektroflugzeug aus Bayern fliegt zum ersten Mal
    Elektra Trainer
    Elektroflugzeug aus Bayern fliegt zum ersten Mal

    Der Elektra Trainer ist eines der wenigen elektrischen Flugzeuge für zwei Personen. Den Jungfernflug absolvierte der Pilot aber solo.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • LG UltraGear 27" WQHD 165 Hz 299€ • Switch OLED günstig wie nie: 333€ • MindStar (MSI Optix 27" WQHD 165 Hz 249€, MSI RX 6700 XT 499€) • Sony PS5-Controller 56,90€ • Alternate (SSDs & RAM von Kingston) • PNY RTX 3080 12GB günstig wie nie: 929€ • Top-TVs bis 53% Rabatt [Werbung]
    •  /