Ein in Rust geschriebener Game Boy (DMG-01) Emulator.
Status: In aktiver Entwicklung (Work In Progress). Aktuell liegt der Fokus auf der Implementierung der CPU-Instruktionen und der Architektur. Es ist noch keine grafische Ausgabe von Spielen möglich.
Dieses Projekt dient primär zu Lernzwecken, um die interne Funktionsweise des Game Boys, die Z80-ähnliche Prozessorarchitektur und hardwarenahe Programmierung mit Rust zu verstehen.
- CPU Core:
- Nachbildung der Register (8-Bit und 16-Bit Paare wie
AF,BC,HL). - Implementierung des Flag-Registers (Zero, Subtract, Half-Carry, Carry).
- Fetch-Decode-Execute Zyklus implementiert.
- Nachbildung der Register (8-Bit und 16-Bit Paare wie
- Instruction Set:
- Unterstützung für reguläre und
CB-prefixed Opcodes. - Teilweise Implementierung von Arithmetic, Load und Jump Instruktionen.
- Unterstützung für reguläre und
- Architektur:
- Modulare Struktur (
Cpu,MemoryBus,InstructionEnums). - Eigene Datentypen für typsicheres Decoding (z.B.
R8,R16Enums).
- Modulare Struktur (
- Testing & Qualitätssicherung:
- Integration von RGBDS: Das Projekt nutzt
build.rs, um Assembler-Test-ROMs (test_roms/*.asm) automatisch zu kompilieren. - Unit-Tests: Die CPU wird gegen echte, kompilierte Hardware-Instruktionen getestet, um bit-genaue Ergebnisse sicherzustellen (z.B.
all_adds_and_loads).
- Integration von RGBDS: Das Projekt nutzt
- Frontend:
- Initiale Einbindung von Raylib für zukünftiges Rendering und Input-Handling.
Um das Projekt zu bauen und die Tests auszuführen, werden folgende Tools benötigt:
- Rust & Cargo (neueste stable Version)
- RGBDS (
rgbasm,rgblink,rgbfix) - Wird benötigt, um die Test-ROMs imtest_roms/Ordner zu kompilieren. - Raylib Development Libraries (abhängig vom Betriebssystem).
Das Projekt nutzt ein Build-Skript, das automatisch die Assembly-Dateien kompiliert, wenn Änderungen erkannt werden.
# Projekt bauen
cargo build
# Tests ausführen (führt die CPU-Tests gegen die kompilierten ROMs aus)
cargo test
# Emulator starten (Aktuell Debug-Fenster)
cargo run
Die Entwicklung stützt sich auf diverse technische Dokumentationen, die im docs/ Ordner referenziert werden.
Die CPU-Implementierung orientiert sich unter anderem an:
- Decoding Gameboy Z80 Opcodes - Algorithmus für das Instruction Decoding.
- RGBDS Community & Pan Docs.
- Grundlegendes CPU-Gerüst & Memory Bus
- Automatische Kompilierung von Test-ROMs via
build.rs - Instruction decoding
- Vervollständigung des Instruction Sets (ALU, Stack, Misc)
- Timer Implementierung
- PPU (Pixel Processing Unit) & Rendering
- Interrupt Handling
- Memory Banking Controllers (MBC)
Disclaimer: Dieses Projekt ist nicht mit Nintendo verbunden.