Peanut-GB ist eine einzelne Datei-Header-Game-Boy-Emulator-Bibliothek, die auf diesem Game-Boy-Emulator basiert. Ziel ist es, eine schnelle und tragbare Game Boy (DMG)-Emulatorbibliothek zu erstellen, die für jede Plattform verwendet werden kann, die über einen C99-Compiler verfügt.
Dieser Emulator ist sehr schnell . So sehr, dass es auf dem Raspberry Pi Pico mit voller Geschwindigkeit laufen kann! Schauen Sie sich BENCHMARK.md für Benchmarks von Peanut-GB an.
Derzeit wird nur der ursprüngliche Game Boy (DMG) unterstützt, die Vorarbeiten zur Unterstützung des Game Boy Color wurden jedoch abgeschlossen (siehe Nr. 50).
Dieser Emulator ist noch in Arbeit und kann ungenau sein (obwohl er Blarggs CPU-Anweisungen und Befehls-Timing-Tests besteht). Daher kann es sein, dass einige Spiele nicht ordnungsgemäß oder gar nicht ausgeführt werden. Suchen Sie bitte nach einem alternativen Emulator, wenn Genauigkeit wichtig ist.
Die Flaggschiff-Beispielimplementierung ist in Peanut_sdl.c enthalten, das SDL2 verwendet, um den Bildschirm zu zeichnen und Eingaben entgegenzunehmen. Führen Sie cmake
oder make
im Ordner ./examples/sdl2/ aus, um es zu kompilieren.
Führen Sie peanut-sdl
aus, wodurch ein Drop-Zone -Fenster erstellt wird, in das Sie eine ROM-Datei ziehen und dort ablegen können. Alternativ können Sie in einem Terminal peanut-sdl game.gb
ausführen, das automatisch die Speicherdatei game.sav
für das Spiel erstellt, wenn keine gefunden wird. Oder führen Sie peanut-sdl game.gb save.sav
aus, um eine Speicherdatei anzugeben.
Hinweis: Die hier gezeigten animierten GIFs sind auf 50 fps begrenzt, während die Emulation mit den nativen ~60 fps lief. Dies liegt daran, dass gängige GIF-Decoder die maximale FPS auf 50 begrenzen.
Aktion | Tastatur | Joypad |
---|---|---|
A | z | A |
B | X | B |
Start | Zurückkehren | START |
Wählen | Rücktaste | ZURÜCK |
D-Pad | Pfeiltasten | DPAD |
Wiederholen Sie A | A | |
Wiederholen Sie B | S | |
Normale Geschwindigkeit | 1 | |
Turbo x2 (Halten) | Raum | |
Turbo X2 (Umschalten) | 2 | |
Turbo X3 (Umschalten) | 3 | |
Turbo X4 (Umschalten) | 4 | |
Zurücksetzen | R | |
Palette ändern | P | |
Palette zurücksetzen | Umschalt + p | |
Vollbild | F11 / f | |
Frameskip (Umschalten) | O | |
Interlace (umschalten) | ich | |
BMP entsorgen (umschalten) | B |
Die Modi „Frameskip“ und „Interlaced“ sind standardmäßig deaktiviert. Der Frameskip schaltet zwischen 60 FPS und 30 FPS um.
Durch Drücken von „b“ wird jedes Bild als 24-Bit-Bitmap-Datei im aktuellen Ordner gespeichert. Weitere Informationen finden Sie unter /screencaps/README.md.
In keiner bestimmten Reihenfolge und ohne Anspruch auf Vollständigkeit verwenden die folgenden Projekte Peanut-GB.
Die Dokumentation der Funktionsprototypen finden Sie unten in Peanut_gb.h.
Die Frontend-Implementierung muss der Bibliothek eine Reihe von Funktionen bereitstellen. Diese Funktionen werden beim Aufruf von gb_init festgelegt.
Für weitere Funktionalität können die folgenden optionalen Funktionen definiert werden.
Diese Funktion ist für das LCD-Zeichnen erforderlich. Legen Sie diese Funktion mit gb_init_lcd fest und aktivieren Sie die LCD-Funktionalität in Peanut-GB, indem Sie ENABLE_LCD auf 1 definieren, bevor Sie Peanut_gb.h einbinden. ENABLE_LCD ist standardmäßig auf 1 gesetzt, wenn es nicht zuvor definiert wurde. Wenn gb_init_lcd nicht aufgerufen wird oder lcd_draw_line auf NULL gesetzt ist, ist das LCD-Zeichnen deaktiviert.
Die an lcd_draw_line gesendeten Pixeldaten enthalten sowohl Farb- als auch Ebenendaten. Die ersten beiden niedrigstwertigen Bits sind die Farbdaten (Schwarz, Dunkel, Hell, Weiß). Bits 4 und 5 sind Layer-Daten (OBJ0, OBJ1, BG), die verwendet werden können, um dem Spiel mehr Farben hinzuzufügen, auf die gleiche Weise, wie es der Game Boy Color bei älteren Game Boy-Spielen tut.
Diese Funktionen werden für die Audioemulation und -ausgabe benötigt. Peanut-GB beinhaltet keine Audioemulation, daher muss eine externe Bibliothek verwendet werden. Diese Funktionen müssen definiert werden und die Audioausgabe muss aktiviert werden, indem ENABLE_SOUND auf 1 definiert wird, bevor Peanut_gb.h einbezogen wird.
Diese Funktionen werden für die serielle Kommunikation benötigt. Legen Sie diese Funktionen mit gb_init_serial fest. Wenn diese Funktionen nicht eingestellt sind, verhält sich die Emulation so, als ob kein Verbindungskabel angeschlossen wäre.
Diese Funktionen werden von Peanut-GB bereitgestellt.
Diese Funktion setzt das gespielte Spiel zurück, als ob die Konsole aus- und wieder eingeschaltet worden wäre. gb_reset wird von gb_init aufgerufen, um die CPU-Register zu initialisieren.
Diese Funktion gibt die Speichergröße des gespielten Spiels zurück. Diese Funktion gibt 0 zurück, wenn das Spiel keine Speicherdaten verwendet.
Diese Funktion betreibt die CPU, bis ein Vollbild auf dem LCD gerendert wird.
Diese Funktion berechnet einen Hash des Spieltitels. Dieser Hash wird auf die gleiche Weise wie Game Boy Color berechnet, um Game Boy-Spielen Farbe zu verleihen.
Diese Funktion gibt den Namen des Spiels zurück.
Stellen Sie die Uhrzeit der Echtzeituhr (RTC) ein. Einige Spiele verwenden diese RTC-Daten.
Veraltet: nicht verwenden. Der RTC wird intern angekreuzt.
Führen Sie beim Zurücksetzen ein Bootrom-Image aus. Nach dem Aufruf von gb_set_bootrom muss ein Reset durchgeführt werden, damit diese Änderungen wirksam werden. Dies liegt daran, dass gb_init gb_reset aufruft, gb_set_bootrom jedoch nach gb_init aufgerufen werden muss. Das Bootrom muss entweder ein DMG- oder ein MGB-Bootrom sein.
Dieses Projekt ist unter der MIT-Lizenz lizenziert.