A Game Boy Color emulator with fast Link Cable and IR sensor support over TCP.
You can compile and run it on your linux machine or use it in your browser here (Note: the browser version does not have support for the link cable).
- GameBoy and GameBoy Color emulator
- PPU implements fifo rendering
- Audio with dynamic rate control
- Fast TCP Link Cable and IR sensor
- Support for MBC1, MBC1M, MBC2, MBC3, MBC30, MBC5, MBC7 and HuC1 cartridges
- Battery saves and savestates
- Game Boy Printer
- Game Boy Camera
- Supports keyboard and gamepad controllers
Various dependencies are needed to build the desktop app:
- libadwaita
- libmanette
- opengl
- glew
- openal
- zlib (compressed savestates)
- gstreamer (camera input for Game Boy Camera)
In addition to these dependencies, the following tools are needed to build the desktop app:
- make
- gcc
- rgbds
- imagemagick
# 1. Clone this repository
git clone https://github.com/mpostaire/gbmulator.git
# 2. cd into the cloned repository
cd gbmulator
# 3. Compile gbmulator
make
# 4. Install gbmulator
sudo make install
# To uninstall gbmulator, run the following command
sudo make uninstall
After installation, GBmulator should be available from the app launcher of your desktop environment. You can also call it from the command line with the (optional) path of a rom as the first argument.
gbmulator path/to/rom.gb
The following table show the default keybindings (they can be changed in GBmulator's menus except those marked with a '*').
Action | Key |
---|---|
UP | Up |
DOWN | Down |
LEFT | Left |
RIGHT | Right |
A | Numpad 0 |
B | Numpad period |
START | Numpad 1 |
SELECT | Numpad 2 |
*Load savesate 1 → 8 | F1 → F8 |
*Create savesate 1 → 8 | Shift + F1 → F8 |
There is also support for gamepad controllers.
- implement other MBCs
- find out what are the accurate timings for the ppu pixel fifo/fetcher (especially for corner cases)
- android link cable via bluetooth + cross platform link cable
- Maybe: web link cable using Emscripten WebSockets API (https://emscripten.org/docs/porting/networking.html and https://github.com/emscripten-core/emscripten/blob/main/system/include/emscripten/websocket.h. Example gist: https://gist.github.com/nus/564e9e57e4c107faa1a45b8332c265b9)
- rewrite Makefile (it's a mess) maybe use CMake instead
- https://gbdev.io/pandocs/
- http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf
- https://gekkio.fi/files/gb-docs/gbctr.pdf
- https://izik1.github.io/gbops/
- https://gbdev.gg8.se/wiki/
- https://www.youtube.com/watch?v=HyzD8pNlpwI
- https://github.com/AntonioND/giibiiadvance/blob/master/docs/TCAGBD.pdf
- https://pixelbits.16-b.it/GBEDG/ppu/
- https://shonumi.github.io/articles/art2.html