The biggest changes in this release are some reversions which fix a couple games, some accuracy improvements which fix a couple more games, and some optimizations that speed things up a bit.
The Windows port now has an extra "Hacks" settings dialog that allows enabling some settings to allow older ROM hacks to work. The GTK port's hack settings are still hidden behind the -Ddangerous-hacks=true compile flag. The libretro port has had the remaining hack added. Use with caution and don't submit bug reports associated with enabling these hacks.
- Fixed subscreen blending with master brightness < 100%. - Fixed NMI timing when toggling enable bit. Fixes Chou Aniki--hack removed. - Reverted an IPL map optimization that misses a weird edge case that caused The Great Battle III to lock up. - Clamp MSU1 addition to max amplitude instead of wrapping. Proper MSU1 tracks will not be affected by this. - Save mipmap_input parameter with customized GLSL and slang shaders. - Actually use mipmap_input parameter. - Optimized subscreen math with help from Dwedit. - Revert to measured APU clock speed instead of nominal speed. Fixes An American Tail. - Fixed broken BPS patch support. (ArtiiP) - Fixed MSU1 track restarting on load state. Win32: - Changed window flags to allow NVIDIA cards to auto-enable exclusive fullscreen mode in OpenGL. - Added a hidden option "DWMSync" that allows OpenGL to sync to the window manager while in windowed or borderless windowed mode. - The automatic frame skip option no longer limits to 59.94Hz. - Fixed bad icon scaling. - Added a hacks dialog to enable settings for older hacks to run. libretro: - Added ability to use Satellaview data in same directory as ROM. - Fixed deviation from proper libretro spec. - Added option to use the software NTSC filter. (stellarporter) GTK: - Added icons to the entries to clear binding assignments. - Fixed overlap in xBRZ multithreading. - Changed glFenceSync option to an OML_sync option that works better. - Fixed accumulation of partial pixel data on mouse motion when we update the mouse position more than once per frame. - Allow one key to be bound to many controller buttons on the same controller. - Force menu and button icons. - Add the view menu to right-click when SNES mouse isn't used. - Remove unused status bar option. - Startup background can be changed in snes9x.conf. - Improved PortAudio driver. Unix: - Fixed sound output that broke with APU refactor.
Hopefully this fixes everything. We've had good luck with the .2 releases in the past.
Warning: Please don't use. Use the 1.59.2 release
Many things changed in this release. The largest change is a refactoring of the sound handling, which means sound should work better than before and consume less CPU time.
.slang shader support
We have added support for libretro .slangp presets and .slang shaders. These can currently only be used with OpenGL on the Windows and GTK versions. A large set of shaders can be downloaded from:
The DirectSound driver has been glitch-prone for a while, so it has removed and replaced with a WaveOut driver. WaveOut is the most basic Windows method for outputting sound, and has used the same output path as DirectSound since Windows Vista. There are only small differences between the two, but the main one is that WaveOut doesn't loop by default, which means we can use a push API and have Dynamic Rate Control. XAudio2 is still available and recommended if your system supports it.
More git subprojects have been added, so without git it will be more difficult to compile. See how2compile.txt in the win32/docs directory for details.
The build system has been switched to Meson. Packagers will need to adapt, but most operating systems already have Meson available and being used in packages. The procedure to build is fairly simple:
- Change to the gtk port directory:
- Run meson:
meson builddir --prefix=/usr --buildtype=release
- Change to the build directory and run ninja:
cd builddir; ninja
- Install if you wish:
sudo meson install
A full list of options is in meson_options.txt.
- Change to the gtk port directory:
.slang support requires SPIRV-Cross, which is a git submodule of Snes9x. git can retrieve this with:
git submodule update --init shaders/SPIRV-Cross
If a source archive is used, .slang support will be disabled unless you download the submodule. This can be done by extracting an archive from https://github.com/KhronosGroup/SPIRV-Cross/release to that directory, or by creating a temporary git repository in the extracted Snes9x source by running
git initand using the above command.
- Count clock cycles to synchronize SA1 with S-CPU properly. Based mostly on work by Vitor Vilela. - Only allow instant IRQ when toggling IRQ. Fixes WWF - Wrestlemania. - Refactored APU output code to buffer less on the client side. Removed 8-bit, Mono, and Reverse Stereo options. - Consistently handle interlacing when we skip frames. - Changed APU clock to reflect nominal values for original hardware. - Fix C4 square instruction regression. Win32: - Don't display Joypad 2 pressed keys if disabled. - Add support for libretro ".slang" shaders to OpenGL driver. - Removed glitch-prone DirectSound audio driver in favor of a generic Wave Out driver. - Moved sound sync to drivers to be more reactive. This makes sound sync and dynamic resampling work more reliably. - Cleaned up dialog boxes to be more consistently spaced. - Fixed TVMode filter in Direct3D and OpenGL modes. - Fixed an interaction slowdown with OpenGL and Blargg NTSC filters. libretro: - Fix multiline cheats. GTK+: - Switch from autotools to Meson build system. - Readd glFinish option as alternative to glFenceSync. - Fix size fallthrough with xBRZ filter. - Fix loading of key bindings with spaces in them and modifier keys used alone. - Add support for libretro ".slang" shaders to OpenGL driver. - Use a cleaner onscreen font. - Trap errors to allow OpenGL <= 2.1 to run again. - Break display settings up to make it easier to access hardware accel section.
This is a small, but important, bugfix release. Movie support, which was broken in 1.56 has been fixed. The GTK+ port will be able to save config files again while using non-latin languages. Aside from that, there have been some cleanups and a bit of UI refinement. The only emulation change is an adjustment to a timing hack.
Snes9x 1.58 - Move the LICENSE file to the base directory and use a stub in all the source files referring to it. - Adjust Chou Aniki timing hack. - Use 1-based numbering when displaying pressed keys. - Hide controller port if disabled when displaying keys. - Fix movie playback. libretro: - Fix interlaced modes when overscan crop is enabled. - Allow overriding -flto. (orbea) GTK+: - Use shared snes_ntsc implementation. - Remove extra LGPL licensing to avoid confusion. - Don't translate config file entries. Fixes breakage on non-C languages. - Fix issue where config file doesn't contain all configurable entries. - Remove config options for Netplay, Joystick, and JMA. SDL 2.0 is now mandatory. - Updated gettext and removed intltool. update-po should now catch all translatable strings. - If available, reduce input lag option will now use fences instead of glFinish to prevent hogging the CPU. - Onscreen text can be variable width and will show up in some more cases now. Win32: - Add audio device selection (XAudio2 only)
Snes9x 1.57 has been released. Changes include a big update to the libretro port, several accuracy fixes, a few new features, and some deprecations.
Support for xml HLSL shaders in the Windows port and xml GLSL shaders in the GTK+ port has been removed. We recommend downloading and using shaders from the libretro repository at https://github.com/libretro/glsl-shaders instead.
For those packaging the GTK+ port, note that building with GTK+ 3 is now highly recommended over GTK+ 2 and should have no regressions. Also note that Wayland compatibility is implemented, which, if enabled, also requires GTK+ to have been compiled with Wayland support. The configuration file format for this port has changed to a simple .ini-style that can be edited by hand and is saved as snes9x.conf, keeping with the other ports' convention, in the user's config directory. This will cause any changes to settings made with previous versions to be reset to default. Frame-skipping options have also been simplified to remove never-used "fixed" rate settings and to simplify interaction with dynamic rate control and sound sync.
Snes9x 1.57 - Various seta010 emulation fixes. (kps501) - Pass blargg OAM tests with proper write behavior. (BearOso) - Prevent interlacing in BG modes 1-4. (BearOso) - Corrected IRQ and NMI emulation to allow more games to work properly. (BearOso, OV2) - Use 1 instead of 0 for initial PPU left window coordinate, fixing garbage in left column of pixels in some games. (turhope) - Added interpolation option hack for DSP. (kps501, mudlord, BearOso) - Added sprite-tile limit disabling hack. (Tatsuya79) - Added libretro's fast snapshot support. (OV2) - Add overclocking hack that increases IPC (retrotalker) - Fix controller initialization issues preventing some games from using multitap. (retrotalker) - Proper write behavior for register $2122. (BearOso) - Fix transparency issue with Star Fox asteroids. (redguy, BearOso) - Increase SuperFX speed to more accurately represent hardware, and fix bugs with Stunt Race FX and Yoshi's Island. (BearOso) - Resize viewport on state load. (retrotalker) - Many fixes to variables not saved or saved incorrectly in save states. (Dwedit) - Pass decimal tests in blargg's math test ROMs. (BearOso) - Remove memory leak in loadzip.cpp. (bonimy) - Fix screen size not reverting when overscan is turned on then off mid-frame. (BearOso) Win32: - Include DirectDraw libraries and compile with DirectDraw support by default. (OV2) - Add a link to DirectX installer in error message displayed when the needed DirectX libraries can't be found. (OV2) - Save window position when exiting via menu (OV2) - Make custom ROM dialog resizable. (OV2) - Fix various cheat dialog issues. (OV2) - Remove d3d9x DLL dependency by using DirectXMath. (OV2) - Remove rarely-used HLSL shader option. (OV2) - Add InitialSnapshotFilename support. (BearOso) - Disable BG toggle keys by default. (BearOso) - Proper centering and cropping for overscanned and regular height modes. (OV2) - Remove ability to disable the SNES's hires modes. (OV2) - Added a Super Famicom-style icon resource to the EXE. (BearOso) MacOS: - Partial support for new cheats format. (OV2) - Fix MacOS build. (marconett) - Set default for new config options. (tmkk) - Fix compilation on Mac OS Mojave (meepingsnesroms) libretro: - Massive update of libretro code to latest downstream. (fr500, kps501, OV2, twinaphex, BearOso, hiddenasbestos, m4xw, kxyxz, claudiuslollarius) GTK+: - Use datarootdir instead of datadir on install. (orbea) - Fix --with-system-zip configure flag. (BearOso) - Draw interlaced fields when ready. (BearOso) - Initial Wayland support. (remicalixte) - Allow XV only in X11. (BearOso) - Add Wayland support via EGL. (BearOso) - Significant rewrite of OpenGL driver to support newer standards. This won't work on cards < OpenGL ~1.5. (BearOso) - Changed frameskip option to speed throttling option with simpler, but more relevant methods of speed control. (BearOso) - Add support for relative-style save slots. (ichigo-0, BearOso) - Remove XML config file format in favor of one more like Win32. Make joystick bindings and more options human- readable and editable. (BearOso) - Try more device nodes when initializing OSS. (BearOso)
This is a another small bug fix and minor feature release.
- Fixed IRQ corner case that caused Umihara Kawase's water
to cover the whole screen. (BearOso)
- Adjusted IRQ timing slightly. Fixes Dragon Ball Z - Super
Butouden 2. (BearOso)
- Clear WAI when IRQLine is active. Fixes Top Gear 3000. (BearOso)
- Fix reading the wrong tile data in mosaic drawing. Gets
rid of glitch at top of FF6 battle transitions. (BearOso)
- Break a specific opcode into cycles. Fixes Little Magic. (BearOso)
- Win32: Don't mix garbage into the last line with NTSC
- Win32: Allow disabling scanlines in NTSC filter. (BearOso)
- GTK+: Added an undo load state option. (BearOso)
- GTK+: Fixed compilation on big-endian systems. (OV2)
- Win32, GTK+: Added integer scaling option. (BearOso)
- GTK+, Unix: Preserve current joypad state when rewinding. (BearOso)
Small hot-fix release. See release notes for 1.56.
- Automatic input rate now only works for close multiples (BearOso) of 60Hz. - Win32: Cheats are now shown in the correct order in the (BearOso) list view. - GTK+: Check for version greater than 3.22 when using GTK+ (BearOso) 3. - GTK+: Don't resize code and description field in GTK+ 2. (BearOso)
Note for GTK+ port packagers: OpenGL support now requires libepoxy, joystick support requires SDL 2.0, not 1.2, and the default GTK+ version selected by configure is now 3 instead of 2.
- Increased the speed of SA1 emulation to match hardware (BearOso) more closely. - Fixed negative SA1 division (BearOso, Jonas Quinn) - Changed the location where we poll input to potentially (Brunnis, BearOso) reduce lag. - Fixed the interlace fields being swapped after skipping (BearOso) frames. - More updates for BS-X support. (LuigiBlood) - Updated xBRZ to version 1.6. (zenju, OV2) - Added a DMA timing hack for rpgone's Koryu no Mimi (OV2) translation. - Updated HDMA to not update indirect addresses until after (BearOso) transfers are completed. - Improved cheats support. This stores cheats in a human- (BearOso, OV2) readable and editable format as gamename.cht. Cheats are converted from the old format on load. They can be added in many different formats, but they will convert to the simple address=condition?byte format. Also, now included is mightymo's cheat database, and the ability to match a game and automatically load cheats from it. - Don't reset a pending NMI on vblank end. Fixes Super (furrykef) Punch-Out. - Redo NMI timing. Fixes Secret of Evermore (PAL). (BearOso) - Test for transparency before dithering on SuperFX. This (RedGuy(yyy)) fixes some graphical artifacts in Star Fox. - Change some of the SDD1 guesswork mapping. Fixes a Tales (BearOso) of Phantasia hack. - Return PPU1 MDR for reads of $2137 instead of CPU MDR. (BearOso) Fixes Mario's Time Machine graphical glitch. - Memset less memory for sprite calculations. (Nebuleon) - Don't spuriously update register 14 when running SuperFX. (BearOso) Fixes graphical glitches in Doom. - Added a SuperFX clock modifier variable. (BearOso) - Write CPU MDR during some DMA and HDMA transfers. Fixes (BearOso) Speedy Gonzales and Funaki Masakatsu Hybrid Wrestler. - Calculate next IRQ time in advance instead of continously (BearOso, OV2) checking for it. - Added some IRQ timing quirks. Fixes at least Marko's (BearOso, OV2) Magic Football. - Fixed wrong tile selection in offset-per-tile mode. (BearOso) - Advance the VRAM pointer even if VRAM writes at the time (kps501) are invalid. - Return 0x80 instead of 0xff in DSP1 simulation. Fixes (kps501) Powerfest '94 Mario Kart. - Initialize controllers on reset. Fixes Looney Tunes (kps501) B-Ball multitap. - Attached APU instruction tracer and made some additions (BearOso) to debugging output. - Fix line doubling in interlaced mode. (kps501) - Added support for M.A.C.S. rifle peripheral. (kps501) - Fixed a bug where the MSU1 channels were reversed. (qwertymodo) - Win32: Added dynamic rate control support for XAudio2 (OV2) - Win32: Added different volume level configuration for (OV2) regular and turbo speed. - Win32: Added option to disable EPX scaling for messages (OV2) - Win32: Improve multi-rom loading. (OV2) - Win32: Add libpng and zlib dependencies as submodules for (qwertymodo, OV2) easier compiling from source. - Win32: Fixed icon registration. (OV2) - Win32: Better support for running while unfocused. (OV2) - Win32: Changed icon. (BearOso) - Win32: Report hidpi support. (BearOso) - Win32: Added mute hotkey and hotkeys for saving/loading (OV2) from file. - Win32: Disabled hotplugging in favor of a menu option to (OV2) reconfigure joysticks. - Win32: Added a reduce input lag option. (BearOso) - Win32: Added ability to use GLSLP shaders with OpenGL, (OV2) including a dialog to tweak custom parameters. - GTK+: Added dynamic rate control support for audio to (BearOso) reduce buffer overflows and underflows. - GTK+: Increased SDL requirement to version 2.0. This (BearOso) improves joystick compatibility. - GTK+: Improved GTK+ 3.0 support and made it the default. (BearOso) - GTK+: Added ability to start from a snapshot on the (julien2512) command line. - GTK+: Added automatic input rate handling. (BearOso) - GTK+: Use 16-bit 5-6-5 pixel format for better colors. (BearOso) - GTK+: Now disables the compositor in fullscreen mode. (BearOso) - GTK+: Changed icon. (BearOso) - GTK+: Require libepoxy for OpenGL support. (BearOso) - GTK+: Add full compatibility with GLSLP shaders, with a (BearOso) parameters dialog to configure them. - Unix: Add xinerama support and window position hints. (Francesco149)
- Added support for the MSU-1 coprocessor. (qwertymodo)
- Added support for MSU-1 distribution pack. (qwertymodo)
- Added support for BS-X Satellaview memory packs and data (LuigiBlood)
- Improved BS-X memory mapping accuracy. (LuigiBlood)
- Fixed APU error causing issues with some games. (byuu, qwertymodo)
- Added option to ignore patch checksums. (qwertymodo)
- Fixed build warnings / undefined behavior. (bonimy)
- Correct pixel placement in hires. (BearOso, OV2)
- Fixed RAM mapping for Light Fantasy. (hex_usr, BearOso)
- Added Circuit USA APU timing hack. (BearOso)
- libretro: Merged some changes from downstream repository. (OV2)
- GTK+: Allow use of XDG config directory. (BearOso)
- GTK+: Add 10th save slot. (YamashitaRen)
- GTK+: Updated Spanish translation. (jristz)
- Win32: Switched to Studio 2017. (OV2)
- Win32: Fixed problems when minimized in d3d. (OV2)
- Win32: Split Patch/Rom directory. (OV2)
- Win32: Simplified compilation by removing or including
some dependencies (included CG headers, completely
removed FMOD and FMOD_EX, moved direct draw to compile
switch) and reworking solution/configurations. (bonimy, OV2)
- Win32: Fixed crash with movie dialog (OV2)
- Win32: Changed hotplugging (OV2)