mirror of https://github.com/bsnes-emu/bsnes.git
3ca0504e67
Although Nintendo made many different cartridge circuit boards with different memory mappings, ROMs do not indicate which specific board they are intended to work with. Super Famicom emulators traditionally group mutually-compatible mappings together and use heuristics to guess which family of mappings the game expects. There's one family of mappings that maps ROM data to the top half ($8000-$FFFF) of memory banks in the Super Famicom address space. For historical reasons, this family is called "LoROM" and has three main variants: 1. ROM only, mapped to the top half of every possible bank. The boards database calls this "LOROM". 2. ROM mapped to the top half of every possible bank, RAM mapped to the bottom half of banks 70-7d,f0-ff. The boards database calls this "LOROM-RAM" 3. ROM mapped to the top half of low-numbered banks, RAM mapped to both halves of banks 70-7d,f0-ff. The boards database calls this "LOROM-RAM#A" The largest official game that used variant 3 was 1MiB, so a common heuristic is "if the ROM is 2MiB or less, use variant 3, otherwise use variant 2". 2MiB is used as the threshold instead of 1MiB, perhaps so somebody can expand a commercial ROM that uses variant 3 without having to rework it to suit a different mapping. Since v107 or so, higan (and by extension, bsnes) has implemented variant 3 by mapping ROM to banks 00-3f,80-bf, which exactly fits a 2MiB ROM. However, other emulators like Mesen, snes9x and higan v106 implement it by mapping ROM to banks 00-6f,80-ef, all the space that is left after the RAM is mapped. This doesn't affect any verified games in the `Super Famicom.bml` database, since those have specific, accurate memory maps. It also won't affect well-written games that only read from memory addresses they have populated. However, homebrew games and ROM hacks that have never existed on a real circuit board depend on these heuristics across all devices that read Super Famicom ROMs, including software emulators, flash-carts, and FPGA implementations, so bsnes should match what other emulators do. Fixes #278. |
||
---|---|---|
.assets | ||
.github/workflows | ||
bsnes | ||
docs | ||
extras | ||
hiro | ||
libco | ||
nall | ||
ruby | ||
shaders | ||
sourcery | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
CREDITS.md | ||
GPLv3.txt | ||
LICENSE.txt | ||
README.md | ||
mkdocs.yml | ||
update-subtrees.sh |
README.md
bsnes
bsnes is a multi-platform Super Nintendo (Super Famicom) emulator, originally developed by Near, which focuses on performance, features, and ease of use.
Unique Features
- True Super Game Boy emulation (using the SameBoy core by Lior Halphon)
- HD mode 7 graphics with optional supersampling (by DerKoun)
- Low-level emulation of all SNES coprocessors (DSP-n, ST-01n, Cx4)
- Multi-threaded PPU graphics renderer
- Speed mode settings which retain smooth audio output (50%, 75%, 100%, 150%, 200%)
- Built-in games database with thousands of game entries
- Built-in cheat code database for hundreds of popular games (by mightymo)
- Built-in save state manager with screenshot previews and naming capabilities
- Customizable per-byte game mappings to support any cartridges, including prototype games
- 7-zip decompression support
- Extensive Satellaview emulation, including BS Memory flash write and wear-leveling emulation
- Optional higan game folder support (standard game ROM files are also fully supported!)
- Advanced mapping system allowing multiple bindings to every emulated input
Standard Features
- MSU1 support
- BPS and IPS soft-patching support
- Save states with undo and redo support (for reverting accidental saves and loads)
- OpenGL multi-pass pixel shaders
- Several built-in software filters, including HQ2x (by MaxSt) and snes_ntsc (by blargg)
- Adaptive sync and dynamic rate control for perfect audio/video synchronization
- Just-in-time input polling for minimal input latency
- Run-ahead support for removing internal game engine input latency
- Support for Direct3D exclusive mode video
- Support for WASAPI exclusive mode audio
- Periodic auto-saving of game saves
- Auto-saving of states when unloading games, and auto-resuming of states when reloading games
- Sprite limit disable support
- Cubic audio interpolation support
- Optional high-level emulation of most SNES coprocessors
- Optional emulation of flaws in older emulators for compatibility with older unofficial software
- CPU, SA1, and SuperFX overclocking support
- Frame advance support
- Screenshot support
- Cheat code search support
- Movie recording and playback support
- Rewind support
- HiDPI support
- Multi-monitor support
- Turbo support for controller inputs