ZSNES is an open-source Super Nintendo Entertainment System emulator written in x86 assembly, C, and C++. Bleeding with cutting edge SNES emulation, ZSNES is easily comparable to other leading SNES emulators, such as Snes9x, SNEeSe, Super Sleuth, and bsnes.
Special thanks to the Snes9x team for all of their help and also for the excellent SNES emulator they have developed. We wish them the very best of luck!
The ZSNES Development Team, including all developers and contributors, is in no way responsible for any damage caused by the use of this software. Please read the license for more details.
Due to legal issues, the ZSNES Development Team can provide you neither with ROMs nor links to them. In addition, ZSNES may not be distributed with ROM images. However, as with many cases like this, Google is your friend.
There are still many bugs left in ZSNES, so don't expect it to run all your favorite games. If ZSNES doesn't work for you, then don't use it. Use Snes9x, SNEeSe, Super Sleuth, or bsnes instead! In fact, even if you use ZSNES, use those emulators too!
The following are implemented
- Complete 65816 instruction set
- SRAM support
- LoROM and HiROM support
- SlowROM and FastROM support
- Full DMA support
- HIRQ/VIRQ/NMI Interrupts
- Support for several SNES file formats (SMC, SFC, SWC, FIG, MGD, MGH, UFO, BIN, GD3, GD7, DX2, USA, EUR, JAP, AUS, ST, BS, 048, 058, 078,), including split files (1, 2, 3; A, B, C)
- Interleaved format support (except SuperFX games)
- PAL/NTSC timing support
Graphics engines (PPUs)
The following are implemented in both graphics engines, all color modes:
- Graphic modes 0,1,2,3,4,5,6,7
- 8x8, 16x16, 32x32, and 64x64 sprite support (flipped in all directions)
- 8x8 and 16x16 tiles
- 32x32,64x32,32x64,64x64 tile modes
- Full HDMA effects for wavy backgrounds, interesting mode 7 effects, etc.
- Mode 7 rotating and scaling effects
- BG priorities
- Sprite priorities
- Add/sub of back area
- Mosaic effects
About the old graphics engine:
- Line engine
- Missing lots of windowing and DMA effects
- More accurate at drawing some things
- 13-bit color rendering. (This is a compromise between color accuracy and speed. Not all transparencies will work correctly with this engine.)
What's available in the old graphics engine when using an 8-bit color video mode:
- Offset per tile mode (mode 2/vertical only)
- High-res 512 horizontal resolution (missing in 16x16)
- Single and dual windowing routines
What's available in the old graphics engine when using a 16-bit color video mode:
- Palette changing in the middle of a screen
- Screen addition (full and half)
- Screen subtraction (full)
- Fixed color addition/subtraction
- Window clipping for fixed color
About the new graphics engine:
- Tile engine
- Nearly complete engine with a few bugs
- Can draw mostly everything on the SNES
- 15-bit coloring
What's available in the new graphics engine when using an 8-bit color video mode:
- Offset per tile mode (mode 2/vertical only, mode 4)
- High res 512 resolution and 448/478 vertical resolution
- Windowing effects
- High resolution mode 7 (only in 640x480x256 video mode; active when all other video filters are disabled)
What's available in the new graphics engine when using a 16-bit color video mode:
- All of old graphics engine 16-bit
- High resolution mode 7
- High resolution 16x16 tiles for mode 5
- Full 15-bit color transparencies for improved picture quality (MMX compatible CPUs only)
The following are present in sound:
- 16-bit digital stereo sound
- SPC700 Sound CPU
- DSP Sound Processor
- Echo effects
- FIR filter
- ADSR volume effects
- GAIN volume effects
- Noise effects
- Pitch modulation
The following special input devices are emulated:
The following special cartridge processors are emulated, in whole or in part:
|Seta DSP 10||99%|
|Seta DSP 11||80%|
|SPC7110||100% except decompression|
The following add-on devices are emulated:
|Special Cartridge / Add-On||Progress|
|Broadcast Satellaview (BS-X)||50%|
|Nintendo Super System||100% except the menus|
|Same Game, SD Gundam G-Next||100%|
The following features are missing:
What will not run (or not play properly):
Please read our statement on game compatibility.
- Some SuperFX games (regardless of interleave status)
- Interleaved SuperFX games (deinterleave them with NSRT)
- Some Broadcast Satellaview (BS-X) games
- Games with unknown co-processors
- Games that don't have a valid header
- Games that hit a severe bug in the 65816/PPU/SPC700/DSP routines
- Games that require special timing
- Support for save states, including rewinding
- Extensive movie recording and dumping features
- Many emulation speed options, including automatic frame skipping to compensate for slower machines
- Full cheat code support (including Game Genie, Pro Action Replay, and GoldFinger)
- Automatic IPS soft-patching (including up to 11 sequential patches)
- Custom-built GUI with many time-saving features
- Support for loading Zip, gZip, and JMA-compressed ROMs
- Randomized ROM loading
- Support for input from keyboards, joysticks, and gamepads, as well as a key combination editor
- Many video output options, including graphics-enhancing filters
- Highly configurable sound output options
- Netplay (currently disabled)
Supported operating systems
ZSNES absolutely requires a 100% x86-compatible processor. You probably already meet this requirement. Most consumer-grade processors sold by Intel and AMD use the x86 instruction set.
Because much of ZSNES' source code is written in x86 assembly, it will only run on processors that are 100% x86 compatible. "Ports" to other architectures are impossible; we recommend Snes9x as the SNES emulator of choice for portability.
Playing a special chip game will significantly increase CPU usage. For these games, you may require a processor faster than those listed below.
Free space requirements
The program files alone require about 1MB. The amount of disk space required for other files varies greatly. For example, uncompressed ROMs (not included!) require 256KB-6144KB each. Save states typically require about 270KB each; however, this can increase up to an additional 200KB for special chip games.
- OS: Windows 95/98/ME
- CPU: Pentium II (or equivalent) 233MHz (500MHz recommended)
- RAM: 32MB (64MB recommended)
- OS: Windows 2000/XP/2003/Vista
- CPU: Pentium II (or equivalent) 266MHz (500MHz recommended)
- RAM: 64MB of RAM (128MB recommended)
- API: DirectX v8.0a or later must be installed
- Video: any video card that supports DirectDraw (acceleration recommended)
- Sound: any sound card that supports DirectSound (acceleration recommended)
- OS: Linux, BSD, or Mac OS X
- CPU: 266MHz (500MHz recommended, especially if using X)
- RAM: 32MB (64MB recommended; more if SDL is compiled to use X)
- API: SDL v1.20 or later
- Video: almost any video card will work (hardware OpenGL support and acceleration highly recommended)
- Sound: any sound card supported by SDL (using ALSA or OSS)
- OS: Microsoft DOS (some non-MS DOSes may work)
- CPU: Pentium II (or equivalent) 233MHz
- RAM: 32MB (minimum of 17MB free, required for loading 48mbit ROMs)
- Video: VGA card
- For 16-bit color and therefore proper support of transparencies, an SVGA card with VESA 2 and Linear Frame Buffer support is required.
- You may be able to use Scitech Display Doctor to enable VESA 2 support on some cards that don't already support it.
- Sound: Sound Blaster Pro or 100% compatible (SB16 or 100% compatible recommended)
These system requirements assume you are running the DOS port under pure DOS. If you are using the DOS port from within Windows, the CPU and RAM requirements will be the same as for the Win port.
- Download the latest version of ZSNES from ZSNES.com. The file you download is an archive containing the ZSNES binary file and documentation.
- Extract the contents of the archive into a new folder on your hard drive. Do not simply overwrite an older version of ZSNES.
- You can now run ZSNES by executing the ZSNES binary, named
zsnes.exe(DOS). ZSNES is not packaged with an installer, so there will be no entry in the Windows Start Menu.
Note: In Windows, you can create a shortcut to ZSNES to make it easier to open the program. Right-click on the
zsnesw.exe icon to bring up the context menu, and left-click
Create Shortcut. A shortcut to the executable file will appear in the folder. You can now move the newly-created shortcut to your Desktop or Start Menu. Opening the shortcut will run ZSNES from its original location.
Re-Installation / Reset to default settings:
If you find that you are experiencing a number of unexplained errors in ZSNES, or if you wish to reset all settings back to their defaults, simply delete the configuration files that were generated by ZSNES the first time you ran the program.
If you wish to uninstall ZSNES, simply delete the entire folder (and thus, all files contained within) into which you installed ZSNES (as described in Step 2 of Installation, above).
If you have since put additional files (such as ROMs) into your ZSNES install folder, and do not wish to delete or move them, you will have to delete the individual ZSNES files. Please refer to the Files section for information on individual files and file types related to ZSNES. You will also need to delete the
Note: ZSNES does not use the Windows registry, nor does it generate "hidden" configuration files all over your system.
SDL Port / Compiling from source
- Download the latest source release of ZSNES from ZSNES.com.
- After unpacking, navigate to the
srcdirectory and run the following commands:
- ./configure --enable-release
- make install
- Other, more detailed instructions are provided in the
If you wish to uninstall ZSNES, you can run make uninstall as root if you still have your
Otherwise, you will need to navigate to
/usr/local/bin and delete
zsnes. Then navigate to
/usr/local/man/man1 and delete
zsnes.1. Or just delete the
man1 directory if you have nothing else in it.
You will need root access to perform the above actions.
You will also need to delete
~/Library/Application Support/ZSNES in Mac OS X. Do note that various files are saved in here by default (such as game saves); be sure to back them up if you want to keep them.
- Install ZSNES.
- Run ZSNES.
- If you're using Windows, double-click on the executable file.
- If you're using DOS, navigate to the ZSNES installation folder and type zsnes.exe at the command line.
- Configure the input settings (Config Menu -> Input) as desired, or use the default settings.
- Configure the video settings (Config Menu -> Video) as desired, or use the default settings.
- Configure path settings (Config Menu -> Paths) if you don't want all the automatically generated files going into the same directories as your ROMs.
- Load a game (Game Menu -> Load) and start playing.
- When you are ready to stop playing, you have a number of choices to save your game.
- If your game has its own native save function, just use it.
- If your game does not have a save function, or you are at a point in the game where you can't save, you can create a save state. Do this by pressing F2.
- After you save your game:
- You can load a new game using the same steps as above, or
- Exit the emulator by going to Game Menu -> Quit.
- When you are ready to return to a previously saved game, just re-load that game.
- Load an in-game save in the normal way.
- If you saved a state, you can load that state by pressing F4.
This section only covers very basic usage. Please read the entire documentation for more information.
You can change the default keys for the standard SNES controller under Config->Input.
|SNES Button||Player 1 Key||Player 2 Key|
|D-Pad Up||Arrow Up||J|
|D-Pad Down||Arrow Down||M|
|D-Pad Left||Arrow Left||N|
|D-Pad Right||Arrow Right||,|
|Start||Return / Enter||Left Ctrl|
|Select||Right Shift||Left Alt|
|L (Left Shoulder)||D||Page Up|
|R (Right Shoulder)||C||Page Down|
You can change the default keys for special input devices under Config->Devices.
The special input devices just use input from your mouse for movement and aiming.
|Super Scope Button||Computer/Mouse Button|
|Fire||Left mouse button|
|Cursor Mode Button||Right mouse button|
|Key||Function||Where to Customize|
|Esc||When a game is loaded, toggle the GUI (pauses emulation while GUI visible).||Cannot be changed|
|F1||Open the F1 Quick Menu.||Cannot be changed|
|F2||Save a state to current slot.||Config->Saves|
|F3||Open the save state slot chooser.||Config->Saves|
|F4||Load a save state from the current slot.||Config->Saves|
|F5 <--> F12||Toggle sound channels 1 through 8, respectively||Misc->Misc Keys|
|1 2 3 4||Toggle background layers 1, 2, 3, and 4, respectively||Misc->Misc Keys|
|5||Toggle sprite/object layer||Misc->Misc Keys|
|6||Panic Key - Reset all switches to default (enable Offset Mode, Windowing, all background layers, sprite/object layer, and sound channels; disable Add-on Devices; reset Emulation Speed Throttle)||Misc->Misc Keys|
|8||Toggle New Graphics Engine||Misc->Misc Keys|
|9||Toggle Windowing||Misc->Misc Keys|
|0||Toggle Offset Mode||Misc->Misc Keys|
|T||While using Netplay, press to open the Chat window||Misc->Misc Keys|
Note: Besides these default keys, there are many other keys that you can configure in the GUI.
Warning: If you care about your progress in a game, remember to use in-game saves regularly! Do not rely solely on save states!
When you "save a state," ZSNES creates a file that contains the values of all the variables that change while ZSNES is emulating a game. These values are specific to the exact moment that you saved the state. You can then load a save state at a later time, thus returning ZSNES to the exact point in the game when you saved the state originally. This allows you to save your progress at a point that might not normally be possible with in-game saves, or in games that don't have in-game saves at all.
Save states are typically not compatible between emulators, and sometimes not even between different versions of the same emulator, often due to internal core changes. In fact, it should be noted that save states created prior to v0.600 of ZSNES will not work in current versions.
To remedy this problem, first load the state in any version of ZSNES from v0.600 to v1.42. Then, immediately after loading, save another state. The new state you just created should (hopefully) load correctly in ZSNES v1.50 and higher.
Since ZSNES does not support save states created by any other SNES emulator, you can instead use the emulator-independent SRAM (.srm) data to transfer game progress from one emulator to another.
Each ZSNES save state is approximately 270KB in size. Special chip games may require an additional 200KB, however.
How to Use Save States
You can create and load save states using the GUI.
It's much easier to just use the default quick keys for these features. Press F2 to save, F4 to load, and F3 to open the save state slot chooser (with graphical preview). However, if you don't like that method, many other save and load techniques are available.
Warning: Playing back a previously recorded movie will overwrite any SRAM data for the current game with the SRAM data contained in the ZMV file. This means you should enable Do Not Save SRAM when playing around with movies!!
Note that re-recording, chapters, and appending will not work with movies recorded in the old ZMV format (movies made prior to ZSNES v1.50).
The ZSNES movie format (ZMV) has been completely rewritten and is now better and more feature-rich than before, with the most capabilities yet implemented in an emulator. Three of the most notable new features are re-recording, dumping ZMVs to AVI, and movie subtitles, described below.
A movie file consists of a save state, SRAM data (when applicable), and the recorded controller data, as well as any chapters (states) that have been inserted. It also keeps track of a few other things which are negligible with regard to the overall filesize. Movie files should record at less than 1KB/minute (60KB/hour).
ZSNES should be able to record most actions you can do with a real SNES, including resetting. During playback, the game will reset just as you did during recording.
You cannot record games that use the Konami Justifier special input device. Lethal Enforcers is the only game known to require this device.
You cannot record games while using Netplay.
You should be able to record ZSNES movies for all game types; however, ZMVs are heavily dependant on save states, so any games that exhibit problems while using save states will also exhibit problems when recording and playing movies.
For best results, you should play back movies with the same version of ZSNES that was used to record them. Otherwise, keypresses may become desynchronized from the emulation playback.
You do not have to do everything perfectly the first time you record a movie. ZSNES allows you to re-record parts of a movie, inserting the newly recorded parts seamlessly into the previously recorded parts. You can accomplish this in a number of ways:
You can insert chapters into your movies, to which you can seek during movie playback.
You are limited to 65535 (216-1) chapters created during recording, in addition to 65535 (216-1) created during playback.
Subtitles allow you to create a short message that will be visible on-screen during playback of a movie.
- Create an empty file in your save directory (or wherever your movies are saved).
- The subtitle file must be named in the following manner:
- Subtitle file name = ZMV file name = ROM file name. (Example:
smw.sfc(Super Mario World ROM),
- If you are using movie slot 0, file extension =
- If you are using movie slot 1 through 9, change the last letter of the extension to match the movie slot you are using. (Example: slot 1 =
.su1, slot 5 =
.su5, slot 9 =
- Subtitle file name = ZMV file name = ROM file name. (Example:
- For each subtitle you want in the movie, add a new line to the subtitle file, with the following information:
- Start Frame:Frame Duration:Message
- For example: 10:100:Beating the Last Boss without the quotes. In this example, the message "Beating the Last Boss" will appear in the tenth frame and stay visible for 100 frames (thus, until the 110th frame).
- ZSNES can display only one subtitle at a time. So make sure that the start frame for the next subtitle is not during the duration time of the previous subtitle. You must also list your subtitles sequentially for all of them to be played (they cannot be out of order).
- ZSNES can display a maximum of 34 characters (of a subtitle message) across the width of the screen.
- Now save your new subtitle file. Open ZSNES, play a movie, and you should see your subtitles appear!
IPS patches are files that are applied to an original ROM, which change the programming of the ROM in some way. They are primarily used to translate ROMs into another language; however, they can be used for a variety of purposes. Visit Romhacking.net for more information about translations and ROM hacks.
ZSNES has the ability to automatically "soft-patch" a ROM. This means that after ZSNES loads a ROM into its memory, it will apply the IPS patch to the in-memory ROM data, not the ROM file on your hard disk. This eliminates the need to keep two copies of a ROM: the original, and the patched.
Applying a single IPS file to a ROM:
- Make sure Enable Auto-Patch is checked in Config->Options.
- The IPS file must be either in your Saves directory or in the same directory as the ROM.
- The IPS file and the ROM file must have matching filenames. For example,
SD3.ips. If your ROM file is compressed, the IPS file must match the compressed filename. For example, if you have the file
SD3.sfccompressed inside the file
Seiken Densetsu 3 (J).zip, the IPS file must be named
Seiken Densetsu 3 (J).ips.
- If you meet the above three conditions, just load your ROM file as normal, and ZSNES should automatically patch the IPS file to the in-memory ROM. Remember, your original ROM file will not be changed.
- If you have done everything outlined in the steps above, and your game does not appear to be working, refer to the FAQ.
Applying multiple IPS files to a ROM:
ZSNES has the ability to apply up to eleven separate IPS files to the same ROM file. You must give each IPS file a specific extension to tell ZSNES in what order to apply them. Aside from changing the extension of the IPS files, just follow the directions above.
|IPS file extension||Applied When?|
ZSNES will not apply non-sequentially extensioned IPS files. This means that if you have three IPS files, named
patch.ip6, ZSNES will only apply the first two.
Please remember that the order in which you apply the IPS patches may be important. Applying the patches in the wrong order may result in strange bugs, or even an unplayable game. Please refer to the documentation that accompanied your IPS file.
Alternative method of applying IPS files to compressed ROMs:
The simplest method of applying an IPS file to a compressed ROM is to simply place the IPS file in the same archive as the ROM. The filename of the IPS file does not have to match the compressed or uncompressed filename of the ROM. Do not add more than one IPS file of a given extension to an archive. Results can be unpredictable as to which of the same-extension IPS files will be applied to the ROM.
If your ROM is compressed, ZSNES will first look for IPS files inside the archive. If it finds any, it will only load IPS files from inside the archive, and will not look anywhere else. Otherwise, ZSNES looks in the Saves directory and the same directory as the ROM.
Currently, ZSNES supports Game Genie, Pro Action Replay, and GoldFinger codes.
How to use cheat codes:
- Load the ROM to which you want to apply cheats.
- Press ESC to toggle the GUI. Open the Add Code dialog from the Cheat Menu. You can enter up to 255 codes for each game.
- After adding your codes, press ESC until you are back to your game.
To use a multi-line cheat code, just enter each line as a separate code!
How to use
Troubleshooting Cheat Codes
- Try using the Fix button in the Browse Cheats dialog.
- Some codes are meant to be used with different versions of the same game. If a cheat code doesn't work and there is one for both Game Genie and Pro Action Replay, try them both.
- Remember that Game Genie codes require the - (dashes).
- Try resetting the game. Any code for a game that mentions a term similar to "Start with" means that the game must be reset in order to take effect.
- If you are having a hard time with comparative searches, make sure to delete the
tmpchtsr.___file in your ZSNES directory.
This section attempts to explain the various files that are created, loaded, or used by ZSNES.
Most of the data files that are specific to individual ROMs are named in the following manner:
- The filename of the data file is the same as the filename of the ROM from which it was created.
- The file extension of the data file changes, depending on the following:
- If there are no "slots" for the data file, then it is just the normal file extension (srm, bmp, png, raw, cht, cmb, cfg, txt).
- If you are using slot 0, then it is just the normal file extension (zst, zmv, sub, ips, spc).
- If you are using slots 1-9, then the last letter of the file extension changes to match the slot number (zs1-zs9).
- If you are using slots 10-99, then the last two letters of the file extension change to match the slot number (z10-z99).
|File Name||File Extension||File Type Name||Description||Where Created?|
|Whatever you want, or have them automatically named by NSRT.||smc, sfc, swc, ...||ROM (Game)||These are common extensions for ROMs, which are computer files of the game data on real SNES cartridges.||Wherever you put them.|
|romname||srm||Static RAM||This is the in-game save file. It is automatically generated by ZSNES when you use the in-game save function. Some games use Static RAM as working RAM rather than to save a game. This format should be compatible among all emulators.||Saves folder|
|romname||zst, zs1-zs9, z10-z99, zss||ZSNES Save State||See the Save States section for more information.||Saves folder|
|romname||zmv, zm1-zm9||ZSNES Movie||See the Movies section for more information.||Saves folder|
|romname||mzt, mz1-mz9||ZSNES Movie States||Directories which contain the various save state data for that particular movie. See the Movies section for more information.||Saves folder|
|romname||sub, su1-su9||ZSNES Subtitle||See the Subtitles section for more information.||Saves folder|
|romname||ips, ip0-ip9||International Patching System||See the IPS Patching section for more information.||Saves folder, Same folder as ROM|
|romname_***** / img*****||bmp, png||Images||These are snapshots of the game screen, created by ZSNES when you use the F1 Menu. The file name is appended by a number, up to 99999.||Snapshots folder|
|romname||spc, sp1-sp9, s10-s99||SPC Sound||These files are created by ZSNES when you dump the SPC data of the game you are playing by using the F1 Menu. Note: In Windows, the ||SPCs folder|
|romname||cht||Cheat Data||This file contains cheat codes that you entered using the Cheat Code Editor. These files are generally compatible between different versions of the same emulator, but not necessarily between different emulators.||Saves folder|
|romname||cmb||Key Combination Data||These files contain key combination data, created when you use the Key Combination Editor.||Saves folder|
|romname||inp||ZSNES Input||These files contain input configuration for the specific game.||Saves folder|
|sounddmp||raw||Sound Buffer Dump||This is a dump of sound buffer data, created when you use the appropriate F1 Menu option.||SPCs folder|
|data||cmb||Key Combination Data||This file contains key combination data, created when you use the Key Combination Editor for an unspecific game.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|
|zsnes / zsnesw||exe (Win/DOS)||ZSNES executable||This is the main ZSNES executable binary file.||"ZSNES Folder" means the location of this executable|
|zsnes / zsnesw / zsnesl||cfg||ZSNES Configuration File||User-editable configuration file where you can set almost any option in ZSNES.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|
|zmovie||cfg||ZSNES Movie Configuration File||User-editable configuration file where you can change advanced movie dumping features.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|
|zinput||cfg||ZSNES Input Configuration File||User-editable configuration file where you can change settings for controllers and extra SNES devices. This is the same as the files with the .inp extension, but is used globally.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|
|zfont||txt||ZSNES Font Configuration File||This is where the appearance of text in the ZSNES GUI is configured.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|
|rominfo||txt||ROM Information||This contains information about the ROM you most recently ran. You can configure this behavior under Config->Options.||ZSNES folder (Win/DOS) / ~/.zsnes (SDL) / ~/Library/Application Support/ZSNES (SDL - Mac OS X)|