Linuxboy is a (hopefully) feature-rich Game Boy emulator mostly intended to be used as a full-blown debugger. I'll most likely write a series of blog posts explaining the inner working in the near future to help emulator beginners understand how the Game Boy worked and how to implement it in code, but for now just I'll focus on actually developing the damn thing.
Currently the emulator supports most of the features of the original Game Boy except for audio and other types of memory banking which are not MBC1.
- Finish memory banking
- Implement Saving
- Enable/Disable Bootrom
- Remove Bootrom dependency
- Fix sprites rendering priority
- Audio support
- Button remapping
- Joypad support
- Graphical debugger
Keep in mind that full compatibility doesn't mean perfect emulation, it just means that no errors have been found yet.
Game | Compatibility | Notes |
---|---|---|
Tetris | 🔵🔵🔵🔵🔵 | |
Dr. Mario | 🔵🔵🔵🔵🔵 | |
Bubble Ghost | 🔵🔵🔵🔵🔵 | |
Kirby's Dream Land | 🔵🔵🔵🔵⚪️ | Kirby's inhale behaves weirdly sometimes. |
Kirby's Dream Land 2 | ⚪️⚪️⚪️⚪️⚪️ | Won't boot. |
Legend of Zelda, The: Link's Awakening | 🔵🔵🔵⚪️⚪️ | Tiles sometimes don't load properly when switching areas. |
Mega Man II | 🔵🔵🔵🔵⚪️ | Sprites are sometimes rendered below tiles. (Air Man) |
Metroid II: Return of Samus | 🔵🔵🔵🔵️🔵 | |
Tennis | 🔵🔵🔵🔵🔵 | |
Super Mario Land | 🔵🔵🔵🔵🔵 | |
Super Mario Land 2: 6 Golden Coins | 🔵🔵🔵🔵🔵 | |
Wario Land: Super Mario Land 3 | 🔵🔵🔵🔵⚪️ | Sprites sometimes flicker when in little Wario mode |
Pac-Man | 🔵🔵🔵🔵🔵 | |
Donkey Kong | 🔵🔵️⚪️️⚪️⚪️ | Weird flashing on menu and levels. |
Castlevania II: Belmont's Revenge | 🔵🔵🔵⚪️⚪️ | HUD is displayed weirdly, tiles pop in and out mid game. |
F-1 Race | 🔵🔵️️⚪️⚪️⚪️ | Race track is not rendered properly. |
Linuxboy depends on SDL2 and GLEW for rendering which can be easily installed by using your preferred package manager.
To compile just run:
make
And to run:
./lboy rom [-options]
usage: ./lboy rom [-h] [-b addr] [-s scale [-x width -y height]] [-w addr] [-l state]
- -b, --break: set breakpoint at 'addr' (hex).
- -h, --help: print help message and quit.
- -s, --scale: set screen width to 160 * 'scale' and screen height to 144 * 'scale'.
- -x, --width: set screen width to 'width'.
- -y, --height: set screen height to 'height'.
- -w, --watch: add 'addr' to the watch list.
- -l, --state: load CPU state from 'state'.
- -n, --bootstrap: load bootstrap.
Key | Action |
---|---|
w | UP |
s | DOWN |
a | LEFT |
d | RIGHT |
j | A |
k | B |
u | START |
i | SELECT |
q/F1 | QUIT |
F2 | DEBUG |
F3 | DUMP TILE MAP |
F4 | SAVE CURRENT STATE |
F5 | DISABLE V-SYNC |