A portable multi-system Sega emulator for Genesis, Sega CD, Master System, Game Gear, and SG-1000 🎮
See the codeDownload the latest desktop version of Sandopolis from here or try Sandopolis in your web browser.
Footage of Sandopolis running a few games:
Sonic & Knuckles | The Revenge of Shinobi |
Golden Axe II | Streets of Rage |
See ROADMAP.md for the list of implemented and planned features.
[!IMPORTANT] This project is still in early development, so compatibility is not perfect. Bugs and breaking changes are also expected. Please use the issues page to report bugs or request features.
You can download the latest pre-built binaries from the project's release page.
You can download and use the latest pre-built Docker image for the web version of Sandopolis from the GHCR:
docker run -d -p 8085:80 --rm ghcr.io/pixel-clover/sandopolis-web:latest
Then open http://localhost:8085 in your browser.
Alternatively, you can build the emulator from source by following the steps below.
git clone --depth=1 https://github.com/pixel-clover/sandopolis.git
cd sandopolis
[!NOTE] If you want to run the tests and develop Sandopolis further, you may want to clone the repository with
git clone --recursive https://github.com/pixel-clover/sandopolis.git. Note that you also need to havegit-lfsinstalled to download some of the files like test ROMs.
# This can take some time
zig build -Doptimize=ReleaseFast
If the build is successful, you can find the built binary at zig-out/bin/.
[!NOTE] To build from source, you mainly need to have Zig and Git installed. The current version of the emulator is developed and tested using Zig 0.16.0.
Run the sandopolis binary to start the emulator GUI:
sandopolis
Run sandopolis --help to see the list of available command-line options.
Example output:
A portable multi-system Sega emulator for Genesis, Sega CD, Master System, Game Gear, and SG-1000
Usage:
sandopolis [flags] [rom_file]
Arguments:
rom_file Path to a ROM file (.bin, .md, .smd, .gen, .sms, .gg, .sg), a .zip archive containing one, or a Sega CD disc image (.cue, .iso) (optional)
Flags:
-h, --help Shows help information for this command [Bool] (default: false)
--audio-mode Audio render mode: normal, ym-only, psg-only, unfiltered-mix [String] (default: "")
--audio-queue-ms Audio queue budget in milliseconds (40-150) before backlog recovery [String] (default: "")
--renderer SDL render driver override (e.g. software, opengl) [String] (default: "")
--config Path to the unified config file (default: SANDOPOLIS_CONFIG, platform app data, or ./sandopolis.cfg) [String] (default: "")
--pal Force PAL/50Hz timing and version bits [Bool] (default: false)
--ntsc Force NTSC/60Hz timing and version bits [Bool] (default: false)
--version Print version information and exit [Bool] (default: false)
[!IMPORTANT] Sandopolis boots Sega CD games either from a pair of
.cueand.binfiles, or a single.isofile. Note that Sega CD needs a few BIOS files (normallysegacd.bios_us/segacd.bios_eu/segacd.bios_jp, orbios_CD_U.bin/bios_CD_E.bin/bios_CD_J.binfiles) that are not included in this project. Place the BIOS files per build in the locations mentioned below:
- For the desktop build, put the files in the
biosdirectory beside the config file (sandopolis.cfg).- For the Libretro build, place the files in the frontend's system directory.
- For Sandopolis web, upload the bios files through
Settingsmenu. You need to do it only one time normally, and the files will be kept in the browser you're using.
See CONTRIBUTING.md for details on how to make a contribution.
This project is licensed under the MIT License (see LICENSE).
Sandopolis implementation logic was checked with the following implementations for finding errors and verifying correctness:
Zig
83.6%
C
10.8%
JavaScript
3.6%
HTML
1.5%
A portable multi-system Sega emulator for Genesis, Sega CD, Master System, Game Gear, and SG-1000 🎮
See the codeDownload the latest desktop version of Sandopolis from here or try Sandopolis in your web browser.
Footage of Sandopolis running a few games:
Sonic & Knuckles | The Revenge of Shinobi |
Golden Axe II | Streets of Rage |
See ROADMAP.md for the list of implemented and planned features.
[!IMPORTANT] This project is still in early development, so compatibility is not perfect. Bugs and breaking changes are also expected. Please use the issues page to report bugs or request features.
You can download the latest pre-built binaries from the project's release page.
You can download and use the latest pre-built Docker image for the web version of Sandopolis from the GHCR:
docker run -d -p 8085:80 --rm ghcr.io/pixel-clover/sandopolis-web:latest
Then open http://localhost:8085 in your browser.
Alternatively, you can build the emulator from source by following the steps below.
git clone --depth=1 https://github.com/pixel-clover/sandopolis.git
cd sandopolis
[!NOTE] If you want to run the tests and develop Sandopolis further, you may want to clone the repository with
git clone --recursive https://github.com/pixel-clover/sandopolis.git. Note that you also need to havegit-lfsinstalled to download some of the files like test ROMs.
# This can take some time
zig build -Doptimize=ReleaseFast
If the build is successful, you can find the built binary at zig-out/bin/.
[!NOTE] To build from source, you mainly need to have Zig and Git installed. The current version of the emulator is developed and tested using Zig 0.16.0.
Run the sandopolis binary to start the emulator GUI:
sandopolis
Run sandopolis --help to see the list of available command-line options.
Example output:
A portable multi-system Sega emulator for Genesis, Sega CD, Master System, Game Gear, and SG-1000
Usage:
sandopolis [flags] [rom_file]
Arguments:
rom_file Path to a ROM file (.bin, .md, .smd, .gen, .sms, .gg, .sg), a .zip archive containing one, or a Sega CD disc image (.cue, .iso) (optional)
Flags:
-h, --help Shows help information for this command [Bool] (default: false)
--audio-mode Audio render mode: normal, ym-only, psg-only, unfiltered-mix [String] (default: "")
--audio-queue-ms Audio queue budget in milliseconds (40-150) before backlog recovery [String] (default: "")
--renderer SDL render driver override (e.g. software, opengl) [String] (default: "")
--config Path to the unified config file (default: SANDOPOLIS_CONFIG, platform app data, or ./sandopolis.cfg) [String] (default: "")
--pal Force PAL/50Hz timing and version bits [Bool] (default: false)
--ntsc Force NTSC/60Hz timing and version bits [Bool] (default: false)
--version Print version information and exit [Bool] (default: false)
[!IMPORTANT] Sandopolis boots Sega CD games either from a pair of
.cueand.binfiles, or a single.isofile. Note that Sega CD needs a few BIOS files (normallysegacd.bios_us/segacd.bios_eu/segacd.bios_jp, orbios_CD_U.bin/bios_CD_E.bin/bios_CD_J.binfiles) that are not included in this project. Place the BIOS files per build in the locations mentioned below:
- For the desktop build, put the files in the
biosdirectory beside the config file (sandopolis.cfg).- For the Libretro build, place the files in the frontend's system directory.
- For Sandopolis web, upload the bios files through
Settingsmenu. You need to do it only one time normally, and the files will be kept in the browser you're using.
See CONTRIBUTING.md for details on how to make a contribution.
This project is licensed under the MIT License (see LICENSE).
Sandopolis implementation logic was checked with the following implementations for finding errors and verifying correctness:
Zig
83.6%
C
10.8%
JavaScript
3.6%
HTML
1.5%