Hi all. I've been working on a GTK port of Snes9x in my free time, and it's at the point where it does pretty much everything I'd want it to do now. So, I figured I'd release it in case someone wants it.
I'm putting up 3 different files, each in various stages of compilation. I'd suggest building it all the way from patch form if you can, as it saves on limited bandwidth, and will be most compatible with your system.
Note: For version 57 and greater, the patching/building process has changed slightly. See below for the revised instructions.
Changes for version Snes9x 1.53 (GTK+ port revision 81)
* Snes9x 1.53 has been released. See the changes in the official announcement.Older changes are further below.
Download a Precompiled Binary (linux-i386, GTK, Xv, OpenGL, NetPlay, Joystick support) Download a Precompiled Binary (linux-x86-64, GTK, Xv, OpenGL, NetPlay, Joystick support)Built and tested on bleeding-edge Gentoo Download Snes9x 1.53 sources Download .deb (Ubuntu and Debian) Packages and Get Info About Apt Source Trees
Note: If you downloaded this, and experience crashes, redownload the file (and reapply/rebuild if source) and delete your $HOME/.snes9x/snes9x.xml file.DependenciesGTK 2.10 or greater with all dependencies
One of OSS, ALSA, PulseAudio, SDL or PortAudio 1.9+.
For Joystick support, you'll needSDL 1.2.12 or greater (only needed for Joystick support)
Obviously, building from source requires headers and development packages if you're on a binary-based distribution or OS.Building Instructions:
Run the configure script from the snes9x-1.52-src/gtk/ directory. If you want OpenGL support, also add the --with-opengl flag. For example:
snes9x-1.52-src/gtk$ ./configure --prefix=/usr --with-opengl
You can also add whatever other flags you like. Run ./configure --help to see potential options.
Depending on where your OS puts certain things, and if you've built some dependencies from source, you may need to specify some pkg-config paths. If you experience errors, use a configure command like this instead:
snes9x-1.51-src/gtk$ PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/local/lib/pkgconfig" ./configure --with-opengl
Then run 'make'
This'll produce a snes9x-gtk
executable file in the current directory. Copy it, run it, whatever. If you want to install everything, execute the following with super-user privileges:
snes9x-1.51-src/gtk# make installNotes:
Generally, it works like Snes9x does. If you can't find an option in the relatively simple GUI, you can use the same command-line arguments as you normally would in, for example, the unix port.OSS/ALSA issue with PortAudio
If PortAudio is built with ALSA support, ALSA will need to be installed to function. If you use OSS only and have removed some ALSA packages from your system, you will need to make sure PortAudio isn't compiled with ALSA support. See http://www.snes9x.com/phpbb2/viewtopic.php?t=3703&start=141
Previously, this port used libjsw for joystick support. As it turns out, libjsw supports very few operating systems, so I switched to SDL. libjsw will mess with your kernel joystick calibration on Linux, so you'll probably need to restart if you've calibrated on your current boot.Compiz
The latest version of Compiz fixes all known issues. If you're having trouble, upgrade Compiz.Missing Features/Bugs
The GUI is fairly sparse and condensed for simplicity. If there's a function missing that is a must-have or you find any bugs, just mention them, and I'll try to get them in eventually. Obligatory Screenshots Translating
In order to generate a translation file, you'll need to follow these steps:1. Install intltool
Intltool is provided in the repositories for your operating system.2. Generate a template
Change to the gtk/po directory inside the base source directory, and run intltool-update -p
snes9x-1.51-src/gtk/po$ intltool-update -p
Then copy the snes9x-gtk.pot file to a file called lang_CODE
.po where lang_CODE is the code for the language you're translating to. I.e. if you're translating to English, then you'll do:
snes9x-1.51-src/gtk/po$ cp snes9x-gtk.pot en_GB.po3. Edit the file, then send it in
Editing the .po file is fairly straightforward. Just fill in the blank lines below the default strings with the translated versions. More info (non-snes9x specific) on this process and programs to help can be found at http://www.wesnoth.org/wiki/GettextForTranslators
When you're done, either post the file here, or send the file to me. Be sure to include the name under which you want to be credited.Changelog
Changes for version 79
* Now included in Snes9x 1.52. See the Snes9x 1.52 changelog for details.Changes for version 78
* Added PulseAudio and ALSA sound-drivers and adapted existing drivers to the new sound core.
* Added a Serbian translation from Milan Kostić.
* Added lower-resolution icons.
* Added more configuration for the NTSC and EPX filters.
* Several bug-fixes.
* Fixed an issue where, after failing to load a ROM, the emulator would be paused forever.Changes for version 77
* Added a toggle to joypad configuration to allow or disallow direct use of modifier keys.
* Changed the option to disable screensaver so that it uses XResetScreenSaver and xdg-screensaver due to XTestFakeKeyEvent being removed in the latest X.org release.
* Added pt_BR translation. [Tiberio Vitor]Changes for version 76
* Fixed a bug where the sound driver would switch from SDL in the Preferences dialog if one of OSS or PortAudio was not installed.
* Fixed a bug where the fullscreen window would lose focus.Changes for version 75
* Updated fr_FR translation [Tukuyomi]
* Added es_VE translation [inukaze]
* Fixed screensaver disable option so it doesn't send a fake keypress when Snes9x isn't focused.Changes for version 74
* Changed resolution setting to store width and height instead of a screen's mode index.
* Fixed a bug where the PortAudio driver wouldn't output sound at 44100hz.
* Allowed changing the behavior of the ESC key so it exits Snes9x.
* Fixed a couple thread deadlocking problems in the audio mixer that could result in no sound.Changes for version 73
* Removed the powerof2 function to fix compile problems on OpenBSD.
* Changed fullscreen mode to issue a raise signal to the window manager after remapping.
* Fixed a compile error when XRandR support isn't being built.Changes for version 72
* Included Tukuyomi's updated French localization.
* Added a new regular-interval audio mixer to significantly improve sound quality.Changes for version 71
* Added a new SDL audio output driver.
* Refactored video driver initialization code.Changes for version 70
* Removed dependency on gtkglext for OpenGL output.
* Allowed theme icon to be used for window mini-icon.
* Changed screensaver disable code again.Changes for version 69
* Fixed compilation with --with-debugger.
* Fixed pane colors in preferences.
* Updated French locale. (tukuyomi)
* Allow compilation of OSS sound driver on *BSD.Changes for version 68
* Avoid extra round-trips to X server to disable the screensaver.
* Fixed shared memory leak when using XVideo driver. (kernigh)Changes for version 67
* Fixed compilation with the --with-debugger flag.
* Added a 4:3 aspect ratio option for Maintain Aspect Ratio.
* Added several new automatic sizing options to the View menu.
* Added an OSS sound driver, and configuration to select which sound drivers to compile in, and which to use from those built in.
* Modified the screensaver disable to only operate when the game is running. Prevents bizarre keycodes from showing up in preferences.Changes for version 66
* Added SPC7110 pack directory support.
* Added a hack to prevent SuperFX snapshot loads from crashing when pointer size isn't 4 bytes.Changes for version 65
* Changed to string literals in some vararg functions to fix strict compiler errors. (Mandriva PLF)
* Changed the --with-debug flag to not strip necessary debugging information.
* Readded the patch to the delta file so it can still be used with other Snes9x-based projects.
* Fixed more paths in configure.Changes for version 64
* Changed the screensaver disabling code to work with more screensavers/power managers (courtesy of byuu).
* Added a hack to check for SiliconMotion drivers reporting invalid masks in Xv.
* Added a few build fixes for OpenBSD courtesy of Kernigh.Changes for version 63
* Added Tukuyomi's French localization.Changes for version 62
* Relicensed to LGPL, and added Snes9x license exceptions. See gtk/doc/LICENSE.
* Added axis emulation for joystick hats.Changes for version 61
* Fixed a build-system regression that caused NetPlay failure.Changes for version 60
* Removed option for multitap adapter in controller port 1. The port 2 multitap should now work as expected.Changes for version 59
* Optimized the new scanlines filter.
* Changed the configure script to output more information about optional features.Changes for version 58
* Added reset and swap functions for configuring joypad buttons, and made available a shortcut key to swap the first and second joypad bindings.
* Added a new gamma-correct "Scanlines" filter. The NTSC filter scanlines still do not use gamma correction.
* Fixed build process when Xv is not found or is disabled.Changes for version 57
* Switch to a separate, different building process. Changes for version 56
* Added translation support.
* Added stock icons to preferences.
* Added an option to configure scanline intensity for the NTSC filter.Changes for version 55
* Fixed a bug where the saved window size would be pulled from the maximized state.
* Synced sound buffer sizes between Snes9x and PortAudio and changed PortAudio backend to reflect selected buffer size.Changes for version 54
* Set default sound buffer size to 32ms (2 frames) instead of 16ms (1 frame).
* Set max for Blargg's NTSC adjustments to 1.0 instead of instead of 1.01Changes for version 53
* Default to LSB ordering on big-endian with Xv.Changes for version 52
* Changed defaults on a number of sound options to help prevent save state glitches.
* Other small changes.
* Added the option for allowing opposite d-pad directions to preferences, and disabled it by default.Changes for version 51
* Fixed an issue where joystick events wouldn't be sent to the preferences window.
* Set DisableInvalidVRAMAccess to TRUE by default again, and add an option for configuring it.Changes for version 50
* Force a clear of joystick init events when a rom is loaded on start.Changes for version 49
* Allow joystick shortcuts to be used when a rom is not loaded.
* Require a full down+up keystroke when exiting the emulator.
* Added back the frames-behind code in NetPlay.Changes for version 48
* Removed the APU hack from NetPlay. Use the "sync using reset" option until the snapshot properly saves the APU state or live with no sound.
* Revised the cheat window to be cleaner and smaller, and to allow cheat descriptions.
* Changed the behavior of the key-binding boxes. The next entry will be selected automatically after entering a binding. Escape will tab between entries without changing the binding, and Shift-Escape will clear the current entry.
* Fixed the ntsc filter scanlines to use the correct color format.Changes for version 47
* OpenGL: Made several changes to the driver to improve performance.Changes for version 46
* OpenGL: Added a new (often faster) PBO format that uses 16-bit transfers.
* Removed the ports packaged with Snes9x from the pre-patched tarball to reduce download size.
* Changed the default generated color byte-order to 1555.Changes for version 45
* Xv: Fixed a NULL dereference in the initialization code.
* Xv: Changed byte-ordering to map to provided masks, instead of just the common arrangements.
* Xv: Added an option to invert the byte order when it is reported incorrectly.
* Fixed a rather serious buffer overflow in the config system.Changes for version 44
* Added an option to Preferences->Emulation to prevent the screensaver completely while Snes9x is open.Changes for version 43
* Joystick events now prevent screensavers from starting.Changes for version 42
* Disabled NetPlay's "pause when X frames behind." A working option will be in a future release.
* Xv: Removed the X sync immediately after the image is displayed to avoid a spinlock with vsync.Changes for version 41
* Re-added auto-painting to the Xv driver. It will now only be used if the driver advertises it.Changes for version 40
* Removed colorkey auto-painting from Xv driver. This isn't needed, since the key is already drawn when exposed.Changes for version 39
* Added more verbosity to sound initialization.
* 'clean' target will now clear port-specific files, too.
* Fixed possible null dereferences in sound initialization.Changes for version 38
* Added command-line option -mutesound for disabling sound.
* Fixed a regression that caused sound driver callbacks to occur too often.Changes for version 37
* Added a setting to adjust the sound buffer size.
* Fixed a spurious edit that made the last release pointless.Changes for version 36
* Properly enumerate all available sound APIs for initialization instead of trying only the PortAudio default.Changes for version 35
* Added a toggle box for the status bar to the View menu.Changes for version 34
* Fixed several fullscreen issues.
* Fixed possible shared memory violation when switching to the Xv driver.Changes for version 33
* Added a splash to the background instead of using the default window color.
* Allow persistence of the game image when switching video drivers.
* Allow access to the GUI in fullscreen mode. To enable this, one must uncheck the box for the old escape behavior in the Emulation tab of Preferences.
* Changed key-binding buttons into entries.
* OpenGL: Fix issue with no display when turning NPOT texture support off.Changes for version 32
* OpenGL: Fix very specific case where the NTSC filter won't work with NPOT textures and GL_RGB PBOs enabled.
* OpenGL: Added option to turn on non-power-of-two/rectangle textures instead of automatically activating them. This option is off by default.Changes for version 31
* Fixed memory leak in Xv driver.Changes for version 30a
* Xv driver now prefers adaptors more formats. Fixes a regression that causes use of lossy modes when lossless are available.
* Fixed a few small bugs.
* Add a key binding for exiting Snes9x to the bindings in the emulator tab.Changes for version 29
* 30(a): Snes9x now properly leaves fullscreen mode on exiting.
* Adjusted display pane in preferences to be cleaner. Preferences will also remember its size.Changes for version 28
* Artifacts around edges in the Xv driver are fixed by changing the stored image size.
* Disabling sound emulation is no longer possible. Instead, a mute option is included. Sound emulation is needed to run many games, so the ability to disable it was a bad idea in the first place.
* Fixed an issue with no sound in NetPlay when not using the Sync by Reset option.
* When another player pauses in NetPlay, the status bar will now properly show the paused state.
* Added a setting to pause the emulator when the focus switches away.Changes for version 27
* The Xv driver will now choose the first (default) output port, instead of the last.
* Added netplay support.
* The status bar is now less verbose.
* Xv output can now be compiled out.
* XRandR support will now fail cleanly if the server doesn't support it. It can also be compiled out.
* OpenGL support no longer compiles binaries that only work on the build system's GLX version.
* The OpenGL output will resize textures on NPOT systems to avoid darker and miscolored right and bottom edges.
* The multithreaded scaler and filter option now allows the user to specify a number of threads up to 8.
* Fixed install target if directories don't already exist.Changes for version 26
* Fixed OpenGL BGRA format on little-endian to correctly use the fast upload path.
* Miscellaneous other fixes.
* Added complete support for different byte-orders in Xv.Changes for version 25
* Changed Xv to select 16 bit RGB modes first to possibly improve data transfers.
* Fixed an issue with compiling on non-standard platforms.
* Fixed inconsistencies with "Maintain Aspect Ratio" in Xv and GTK drivers.
* Attempted to fix issue where key-binding buttons wouldn't stay clicked.
Changes for version 24
* Appended Xrandr library in case it isn't indirectly linked in.Changes for version 23
* Fixed a couple of issues with fullscreen.
* Removed Complex2x filter and instead supplied a "Force Hires Output" option.Changes for version 22b
* Attempted to resolve stall when leaving fullscreen with resolution changing enabled.
* Changed "Maintain aspect ratio" to use 8:7 instead of basing it on whatever the pixel size of the given image is.
* Fixed nasty fullscreen problems introduced in v22a.Changes for version 22a
* Added pixel-doubling Complex2x filter.Changes for version 22
* Further refined fix for colored border issue in Xv.
* Attempted to fix colored border issue in Xv again.Changes for version 21
* Prevented -filter command-line parameter from skipping the next parameter.
* Attempted fix of colored border filtering issue in Xv.Changes for version 20
* Attempted fix of event loss in Xv.
* Added a -filter command-line parameter.
* Added XVideo output.Changes for version 19
* Adjusted NTSC filter options to be offsets with respect to the output format.
* Set Auto-Frameskip on by default instead of a fixed 0-frameskip.
* Set use pixel buffer objects by default in OpenGL.
* Added NTSC filter.Changes for version 18
* Fixed bug with install target not defining a default prefix.
* Refactored several things.
* Fixed regression where OpenGL must be available when running application if support is compiled in.Changes for Version 17
* Improved race condition on leaving fullscreen mode with a resolution change.
* Fixed some HIG problems.
* Disabled automatic use of texture rectangle extension in OpenGL.Changes for Version 16
* Added new targets to make for compatibility.Changes for Version 15
* Fixed a divide-by-zero in the mouse motion handler.Changes for Version 14
* Adjusted configure script to more accurately report missing dependencies.
* Added an install target to make, along with a .desktop file and icon.
* Fixed the problem where individual thresholds for joystick axes weren't used at all.Changes for Version 13
* Fixed a bug where the threshold for a joystick axis binding could use the threshold from another joystick with the same axis bound.Changes for Version 12
* Allow individual thresholds for joystick axis bindings. New joystick mappings are set with the value in the Joystick Options pane. You will need to reassign any existing axis bindings.Changes for Version 11
* Allow simple calibration for joysticks. This is primarily for fixing centering issues on control sticks and analog triggers/buttons.
* Fixed several minor bugs/issues.
* Use unwrapped glXGetProcAddress to retrieve OpenGL extension functions.Changes for Version 10c/d
* Hack to work around gtkglext bug.Changes for Version 10b
* More robust OpenGL pixel buffer compatibility.
* Made custom folder selection box use selected folder, not current folder.Changes for Version 10a
* Fixed some crashes in the cheat dialog.Changes for Version 10
* Made PBO external format configurable.Changes for Version 9a
* Implemented custom folder support for SRAM saving.
* Added a basic cheat entry dialog.
* With OpenGL Pixel-Buffer Objects enabled, do pixel swizzling prior to upload. Can improve OpenGL speed ~50%.Changes for Version 9
* Preliminary movie support.Changes for Version 8
* Preliminary support for OpenGL Pixel-Buffer Objects for texture uploading.
* Many small enhancements.
* Changed joystick support to allow large numbers of axes instead of 3, i.e. for analog triggers, multiple control sticks, and so on.Changes for Version 7
* Some refactoring.
* Altered auto-framerate method to be less sensitive to CPU usage changes.Changes for Version 6
* OpenGL driver now stores textures in 32-bit RGBA format to avoid hitting software paths on some cards.
* Implemented multithreaded filters and scaling.
* Changed joystick numbering scheme. (1st joystick is #1 instead of #0)Changes for Version 5
* Fixed hqxx filtering bug. (http://www.snes9x.com/phpbb2/viewtopic.php?t=3775)
* Fixed issue with joysticks where every joystick's events were sent to the first one.
* Implemented saved window size.
* Added .zip to filters for file chooser.Changes for Version 4
* Simplified OpenGL texture uploading code--decreases CPU usage.
* Added .jma to filters for file chooser.Changes for version 3a
* Save last directory when choosing roms.
* Fixed missed joystick event when axis changes too quickly.Changes for version 3
* Fixed issue with joysticks causing crashes.Changes for version 2
* Now uses SDL for joystick support instead of libjsw for more compatibility. Restarting your joystick driver/OS may be necessary to reset and undo calibration.
* Refactored the graphics code.
* Partially reverted OpenGL bilinear fix, as it causes issues with 512 pixel width games.
* Joystick support is now optional. Use the --with-joystick configure flag to build with joystick support.
* Fixed bug with crashing when Preferences are opened.
* Possibly fixed issue with libjsw. Older libjsw versions have a bug that causes crashes on JSClose--please upgrade to libjsw 1.5.6, if possible.
* Fixed issue with edge artifacts after changing scaling modes when using OpenGL bilinear filtering.