bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use.
Go to file
asuramaru 39c37ec2d1 Fix SNES auto-joypad polling
anomie's notes indicate that polling begins between cycles 32.5-95.5, but his
notes were slightly off. 32.5-95.5 is referring to the PPU dot clock. If you
multiply by 4 you get the cycle count, 130-382. It's pretty clear that in
256-cycle units, that would need to be 130-384 or you'd have no event when it
lands on cycle 384. Jonas Quinn confirmed that with his testing in any case.

I chose to split the cycle range in half and run things every 128 clocks. So
that reduces us to 32.5-64.0, or 130 to 256 + 258-384. The reason I chose 128
over 256 was so I could emulate the time it takes to perform the joypad
latching. I don't believe you can set the controller latch to 1 and then 0
immediately. It needs time to let the controllers see this happening and then
release the latch, and time to let that take effect. Polling the controllers is
only one operation so it makes sense that happens once every 256 cycles, which
is why I have the (counter&1) test for that.

Think about it this way: we know the polling sequence takes 4224 cycles, and
4224/256 is 16.5. Isn't that a little strange to have half a cycle? But if we
consider the latching is actually twice as fast, then it's 2x128 + 16x256. If we
run on a 128-clock counter, it becomes 2x128 + 16x2x128, or 34 total states. But
now since we don't actually poll on the second half of each 16x2x256 states, we
don't need to bother running the event there, so we can stop at 33 instead of 34
and it's the same thing. And by doing that, it turns our polling duration into
4224 cycles, just like we've observed.

Fixes #61.
2020-10-29 15:24:40 +11:00
.assets Make the README use local assets, not remotely-hosted ones. 2020-07-30 10:31:09 +10:00
.github/workflows Implement GitHub Actions Based CI. 2020-10-19 17:37:02 +11:00
bsnes Fix SNES auto-joypad polling 2020-10-29 15:24:40 +11:00
hiro Fix region auto-detection when using native file dialogs. 2020-10-27 23:20:56 +11:00
libco Merge commit '5e109224fb3480d806e44d74587d052c7f88bf83' into master 2020-10-09 02:31:32 +11:00
nall nall: fix bad memory access pattern in string.format 2020-10-28 18:35:28 +11:00
ruby PulseAudio compilation fix. 2020-02-23 20:36:28 +09:00
shaders Added 17 new pixel shaders courtesy of hunterk porting and testing them. 2019-10-05 13:44:51 +09:00
sourcery v107.8 2019-07-17 21:11:46 +09:00
.cirrus.yml Prevent Debian packages from prompting for configuration. 2020-06-09 06:02:16 +10:00
.gitattributes Language detection fix attempt 1. 2019-10-12 15:47:34 +09:00
.gitignore hiro: qt.moc should be generated, not committed to the repo. 2020-09-18 22:31:17 +10:00
CREDITS.md Convert bsnes into a group project and relicense it to GPLv3 or later. 2020-03-23 00:57:29 +09:00
GPLv3.txt Update version and license 2017-10-24 23:37:22 -04:00
LICENSE.txt Use byuu.org/bsnes as the official homepage. 2020-10-27 23:21:19 +11:00
README.md Make the README use local assets, not remotely-hosted ones. 2020-07-30 10:31:09 +10:00
update-subtrees.sh Apply bsnes' customisations back on top of the upstream SameBoy source. 2020-10-12 18:40:44 +11:00

README.md

bsnes

bsnes logo

bsnes is a multi-platform Super Nintendo (Super Famicom) emulator, originally developed by byuu, 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

Nightly Builds

Preview

bsnes user interface bsnes running Bahamut Lagoon bsnes running Tengai Makyou Zero