Zenith is a Nintendo Game Boy emulator and research project written in Rust. Currently it is in a fully playable state including graphics, audio, save states, controller support and even Game Boy Printer functionality through serial cable emulation. It passes all cpu instruction and timing tests.
Gameboy button | Keybind | Secondary keybind |
---|---|---|
Dpad Up/Left/Down/Right | W/A/S/D | Arrow keys |
Button A | C | O |
Button B | V | P |
Select | N | |
Start | M |
The next goal for the project is adding Game Boy Color support and iterating on nice-to-have UX features such as changeable keybinds. Other Game Boy models (Game Boy Advance) is currently left outside of the scope of the project for its different architecture and compatibility.
The project can be built and run using cargo. SDL2 is used for cross platform video and audio. On windows SDL2.dll needs to be located in the same directory as the binary when linking dynamically.
cargo run --release
cargo build --release
cargo run path/to/romfile.gb # Additionally a rom file can be passed as the first argument
Current test suite can be run with cargo test -r -- --nocapture
note that the tests print output about different testroms to stdout. Criterion nenchmarks can be run with cargo bench
.
- Gbdev.io https://gbdev.io/
- Pandocs https://gbdev.io/pandocs/
- Complete Game Boy reference https://gekkio.fi/files/gb-docs/gbctr.pdf
- GBEDG https://hacktix.github.io/GBEDG/