Skip to content

capslock321/oxide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

151 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Oxide Emulator

A simple (mostly functional!) Game Boy emulator written using the Rust programming language.


Features

  • 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)

Building

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 --release

The resulting binary by default should end up inside the target folder.

Building the SDL2 frontend

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-dev

Similarly, 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.

Running

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 version

Currently, 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.

The oxide.cfg Configuration File (egui frontend only!)

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.

Licensing

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.

About

A Nintendo Game Boy emulator written in Rust.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published