Cross-platform multi-console emulator supporting a number of 8-bit and 16-bit gaming consoles.
* Emulation for the following consoles:
- Sega Genesis / Mega Drive
- Sega CD / Mega CD
- Sega Master System / Mark III
- Game Gear
- Nintendo Entertainment System (NES) / Famicom
- Super Nintendo Entertainment System (SNES) / Super Famicom
- Game Boy / Game Boy Color
* GPU-based renderer with integer prescaling and optional linear interpolation
* Configurable pixel aspect ratio for each console with several different options: accurate to original hardware/TVs, square pixels, and stretched to fill the window
* Support for the Sega Master System FM sound unit expansion
* Support for the Sega Genesis SVP chip, used in Virtua Racing
* Support for the most common NES mappers, plus a number of less common mappers
* Support for most SNES coprocessors (e.g. Super FX, SA-1, DSP-1, CX4, S-DD1, SPC7110)
* Support for both 3-button and 6-button Genesis controllers
* Support for keyboard controls and DirectInput gamepad controls
* Save states, fast forward, and rewind
* Some simple horizontal blur and naive anti-dither shaders for blending dithered pixel patterns, which were extremely common on these consoles due to limited color palettes and lack of hardware-supported transparency
* Optional 2x CPU overclocking for Sega Master System and Game Gear emulation
* Optional 2-4x GSU overclocking for SNES Super FX games
* Can run the Titan Overdrive and Titan Overdrive 2 demos for the Mega Drive
This project requires the latest stable version of the Rust toolchain to build.
This project requires SDL2 core headers to build.
Linux (Debian-based):
sudo apt install libsdl2-dev
Windows:
On Linux only, the GUI requires GTK3 headers to build.
Linux (Debian-based):
sudo apt install libgtk-3-dev
GUI:
cargo run --release --bin jgenesis-gui
CLI:
cargo run --release --bin jgenesis-cli -- -f <path_to_rom_file>
To view all CLI args:
cargo run --release --bin jgenesis-cli -- -h
To build with maximum optimizations (better runtime performance + smaller binary size at the cost of long compile time):
RUSTFLAGS="-C target-cpu=native" cargo build --profile release-lto
...After which the executables will be in target/release-lto/
.