A simple (mostly functional!) Game Boy emulator written using the Rust programming language.
- Full CPU emulation
- Full DMG PPU support (no CGB unfortunately)
- NoMBC, MBC1, MBC3 (no RTC), and MBC5 support (no Rumble)
- Full Audio support (egui frontend only)
Oxide requires the Cargo build system in order to be compiled, which you can get from here.
Note that there are two different graphical frontends for Oxide: an egui frontend and a SDL2 frontend, both located inside the ui folder.
To build, simply navigate to one of these frontends, and build using cargo.
$ cargo build
# or if you want to create a release build:
$ cargo build --releaseThe resulting binary by default should end up inside the target folder.
The SDL2 frontend requires additional dependencies in order to successfully build and execute.
On Linux/Unix based systems, you will need to install the SDL2 library. On most distros, you can install this via:
$ sudo apt install libsdl2-devSimilarly, Windows also requires the SDL2 library, which you can get from here. Move SDL2.dll into the root of the ui/sdl2 folder before building.
Oxide requires a bootrom to run! You can find an bootrom implementation inside the bootrom folder.
oxide-egui supports the following command line options, listed below:
Usage: oxide-egui.exe [OPTIONS]
Options:
-c, --config <CONFIG> [default: oxide.cfg]
-r, --rom <ROM>
--ram <RAM>
--height <HEIGHT>
--width <WIDTH>
--palette-white <PALETTE_WHITE>
--palette-light-gray <PALETTE_LIGHT_GRAY>
--palette-dark-gray <PALETTE_DARK_GRAY>
--palette-black <PALETTE_BLACK>
-b, --bootrom <BOOTROM_PATH>
--fps <TARGET_FPS>
--maintain-aspect-ratio <MAINTAIN_ASPECT_RATIO> [possible values: true, false]
--keybind-up <KEYBIND_UP>
--keybind-down <KEYBIND_DOWN>
--keybind-right <KEYBIND_RIGHT>
--keybind-left <KEYBIND_LEFT>
--keybind-a <KEYBIND_A>
--keybind-b <KEYBIND_B>
--keybind-start <KEYBIND_START>
--keybind-select <KEYBIND_SELECT>
-h, --help Print help
-V, --version Print versionCurrently, oxide-sdl2 is currently not very customizable. (sorry!) In order to configure and run it properly, you may need to change the constant variables inside ui/sdl2/src/main.rs.
oxide-egui also supports the use of a configuration file to handle settings. By default, oxide-egui will look for a file called oxide.cfg, however, this can be changed using the --config=<path to config file> command line option.
Documentation about each config setting can be found inside oxide.cfg.
Command line arguments take precedence over configuration file options! This means that if you were to specify a bootrom path inside the configuration file, but also specify another path using the --bootrom command line option, the command line path will override the configuration file path.
Oxide is licensed under the Apache 2.0 License. You can find a copy of the license inside the LICENSE file located in the root of this repository.


