rustyboy
is a simple Game Boy emulator implemented in Rust. It is currently a
WIP - the end goal is get Pokemon Red/Blue running. An emphasis is placed on
understandable code over creating a super accurate emulator.
The Cargo workspace feature is used to keep the emulator itself separate from
any particular rendering/window management/input handling frontend. All code
relating to the emulator itself is found in the core/
directory, while
particular usages of that core library are found in other directories (see the
list of emulator frontends below).
wgpu/
- Targets desktop platforms (Linux, Mac, Windows) and the browser (WASM + WebGPU) via pixels.terminal/
- Execute the emulator inside a terminal with the Game Boy display expressed with a grid of Unicode characters.gbdoctor/
- Run the emulator without a display and the CPU state logged in the format expected by the Game Boy Doctor tool. This frontend exists for development and testing purposes.
- CPU
- Registers and flags
- Implement instructions
- Interrupt handling
- Pass all Blargg test ROMs
- STOP instruction
- Memory map
- Timer
- Cartridges
- No MBC
- MBC-1
- MBC-5
- Joypad input
- Graphics
- Draw background
- Background scolling
- Draw window
- Draw sprites
- Handle flipped sprites
- Handle 8x16 sprites
- Correct ordering of sprite and background tiles
- Frontends
- Desktop
- Web
- Terminal
- Refactoring
- Remove unnecessary dependencies
- Simplify cartridge/MBC API
- Make internal emulator state (e.g., CPU registers) publicly accessible
- Remove GB Doctor part of public API
- Tidy up and better document GPU code
- Simplify cycle counting
- Tetris
- Dr. Mario
- The Legend of Zelda: Link's Awakening
- Kirby's Dream Land
- Super Mario Land
- Pokemon Red/Blue