GameBoy (Color) emulator.
Emulation still has a few quirks (see issues), but compatibility is pretty good. This was developed as a side project and is by no means finished or polished.
A web version compiled to javascript via emscripten is available at http://senryoku.github.io/SenBoyWeb/.
You will need a fairly recent compiler, meaning with C++14 and std::experimental::filesystem support. Compilation is manually being tested on Windows (MinGW) with g++ 6.1.0, but Linux with g++5 or more should be fine (see Travis CI). I have no way to test OSX, so if you know how to setup a OSX compiler fulfilling these constraints on Travis, please tell me!
You will need CMake and a copy of SFML 2.X (see Dependencies). On Windows, or if you used a non standard install path, you may want to set the CMake variables CMAKE_PREFIX_PATH to where are stored the SFML libraries and SFML_INCLUDE_DIR to the folder containing the SFML headers (using cmake-gui or the command line). Once this done, this should be enough:
cmake .
make
SenBoy now have a basic GUI! Yay! Bring it up (or hide it) by pressing Escape or Enter.
You can also pass a rom path via the command line to run it :
./SenBoy path/to/the/rom [options]
| Option | Effect |
|---|---|
| -d | Start in debug mode |
| -b | Skip Boot ROM |
| -s | Disable sound |
| --dmg | Force execution in original GameBoy mode |
| --cgb | Force execution in GameBoy Color mode |
Controls uses any connected Joystick, or the keyboard. There is no way to configure it ! Values are hard coded to match a Xbox360/XboxOne controller and the keyboard uses the following mapping:
| Gameboy Button | Keyboard Key |
|---|---|
| A | F |
| B | G |
| Select | H |
| Start | J |
| Up | Up Arrow |
| Down | Down Arrow |
| Left | Left Arrow |
| Right | Right Arrow |
| Turbo A | V, X on Gamepad |
| Turbo B | B, Y on Gamepad |
When SenBoy is running, the following shortcuts are available:
| Key | Action |
|---|---|
| Escape/Enter | Show/Hide GUI |
| Backspace | Reset |
| Space | Advance one instruction (in debug) |
| M | Toggle Real Speed |
| RB (Joystick) | Unlock framerate (hold) |
| D | Toggle Debugging (Halt Execution) |
| L | Advance one frame |
| N | Clear all breakpoints |
| P | Toggle Post-process (nothing) |
| NumPad + | Volume Up |
| NumPad - | Volume Down |
| Alt+Enter | Toggle Fullscreen |
| Ctrl+S | Save (saves RAM to disk) |
| Ctrl+Q | Quit |
- Joypad interrupts: These are rarely used so I pretty much forgot to fix my implementation. What games uses them?
- Gameboy Color Mode
- DMG Games in CGB mode (Correct compatibility mode; some sprites disappears)
- Application debugging (See Issues)
- (Other Mappers? What popular games uses other mappers than MBC1/3/5?)
- (Constant coding style...)
Blargg's cpu_instrs individual tests:
| Test | Status |
|---|---|
| 01-special | ✅ PASS |
| 02-interrupts | ✅ PASS |
| 03-op sp,hl | ✅ PASS |
| 04-op r,imm | ✅ PASS |
| 05-op rp | ✅ PASS |
| 06-ld r,r | ✅ PASS |
| 07-jr,jp,call,ret,rst | ✅ PASS |
| 08-misc instrs | ✅ PASS |
| 09-op r,r | ✅ PASS |
| 10-bit ops | ✅ PASS |
| 11-op a,(hl) | ✅ PASS |
| instr_timing | ✅ PASS |
| 01-read_timing | ❌ FAIL |
| 02-write_timing | ❌ FAIL |
| 03-modify_timing | ❌ FAIL |
| interrupt_time | ✅ PASS |
| halt_bug | ❌ FAIL |
SenBoy is NOT sub-instruction accurate.
- SFML 2.X for graphical output and input handling.
- Gb_Snd_Emu-0.1.4 for sound emulation (Included).
- dear imgui (Included)
- imgui-sfml (Included)
- http://gbdev.gg8.se/ for their awesome wiki.
- Shay 'Blargg' Green for his tests roms, his Gb_Snd_Emu library and all his contributions to the emulation scene!



