A Game Boy Color emulator written in Rust.
| Wario Land 3 | Pokémon Crystal | Link's Awakening DX |
|---|---|---|
![]() |
![]() |
![]() |
| Sam Mallard | Tetris | black castle |
|---|---|---|
![]() |
![]() |
![]() |
- Gameboy color (CGB) support
- Gameboy games (DMG) support
- Save/Load support
- Dynamic window resize
- Palette swapping on boot for original GB games
- MBC support for (MBC1, MBC1M, MBC2, MBC3 and MBC5)
-
Clone the repository
git clone https://github.com/reddcarp/RustyBoy.git
-
Build binary
cd RustyBoy cargo build --release -
Run binary
./target/release/RustyBoy <path_to_rom>
When trying to run the project in WSL (Windows Subsystem for Linux), an error might happen when trying to create the window using Wayland.
Following is a workaround to this issue, forcing X11 usage:
WAYLAND_DISPLAY= ./target/release/RustyBoy <path_to_rom>WAYLAND_DISPLAY= cargo run -- <path_to_rom> RUST_LOG=DEBUG WAYLAND_DISPLAY= cargo run -- <path_to_rom> cargo test- Optimize core loop (to be able to run at a consistent 59 fps, even when on low power mode and outside release mode)
- Turbo mode (for on demand faster emulation)
- Better saves (better way to deduce when saving was requested in game, to lessen number of disk writes)
- Better colors (colors should look more washed out) see the color range with the rom https://github.com/pinobatch/240p-test-mini?tab=readme-ov-file
- PPU cycle accurate (Penalty algorithm + pixel fifo) https://gbdev.io/pandocs/pixel_fifo.html
- System Timer cycle accurate https://gbdev.io/pandocs/Timer_Obscure_Behaviour.html#timer-global-circuit
- MBC3 RTC (implement rtc so pokémon can have a real time clock) https://gbdev.io/pandocs/MBC3.html
- Audio https://gbdev.io/pandocs/Audio.html
- Additional frontend to play games in the terminal






