ZSNES is a fast Super Nintendo emulator for PCs. It is free software licenced under the GNU GPL, and has versions for DOS, Windows, and Linux. The Linux version has also been ported to BSD. To achieve maximum performance, it is written in a mixture of C and x86 assembly language. Its main competitor is Snes9x, which is written in pure C, making it more portable but significantly slower.

ZSNES's main feature is, of course, complete and accurate emulation of the SNES's 65816 CPU and SPC700 sound chip. All of the basic graphical modes are supported, including the famous Mode 7. This level of emulation runs acceptably on a Pentium 133, and at full speed on a Celeron 300A. If 16 bit colour mode is available it supports the SNES's hardware transparency. It also supports a number of video interpolation modes, which increase the resolution of the SNES from its native 256x224. These include 2xSAI, Super Eagle, Super 2xSAI, HQ2x, and a basic linear interpolation which is almost free on MMX-enabled machines. The graphics engine also supports a pseudo-scanline effect which can look quite good. The sound implementation supports sound interpolation and filtering, and also the noise effect generated by a subtle flaw in the SPC700 chip.

The emulator also emulates several 'accessories' for the SNES. The DSP, SuperFX, SA-1, and SDD-1 chips are all emulated, though at a significant performance hit. Nevertheless, a Duron 800 will run all of these at full speed. Unfortunately, there are variants of the DSP chip, used in Dungeon Master and Top Gear 3000, which are not emulated. The SPC7110 chip is also not emulated, although there are hacks which allow games that use these chips, such as Far East of Eden Zero to be played. The Super Scope light gun and SNES mouse are supported through the use of the PC mouse. Up to five virtual controllers can be used, mapped to gamepads and various regions of the PC keyboard. Cheat devices such as the Game Genie and Pro Action Replay are also emulated. In addition to the local multiplayer options, network multiplayer is implemented in the Windows and Linux systems, though using this feature over the Internet is unlikely to be fast enough to work, compared to a LAN.

ZSNES's interface is a simple graphical system that is the same on all three plaforms, implemented through DirectX on Windows and SDL on Linux This is in comparison to Snes9x, which implements significantly different native intefaces on its different ports. All of the options for controlling the emulator's behavior are accessible from the GUI, obviating the need to edit configuration files.

ZSNES has a long history. Most of it is covered on the project website. I've been using it since version 0.3x on a Pentium 133, where the games were playable with sound but were jerky (~10 fps), although this was better than Snes9x at the time. Version 0.600 brought the first form of the current GUI, and by 0.900 the emulation was almost complete. The Windows version was added at the time of 1.10, and the Linux version with version 1.20. The code was made GPL at the same time. That was in May 2001, and since then ZSNES has been quite stable with very infrequent updates. Version 1.36 was released in July 2002, and the next version was released two and a half years later in December 2004.

On suitably recent hardware, ZSNES almost plays better than a real SNES. The high-resolution graphics and accurate emulation of all games, including fan translations, allow gamers to revisit their past joys from the 16-bit era. It also allows people to try games they never got around to playing back then, though this is a legally dubious practice. You really should own cartridges for all ROM images you download.

The main developers of ZSNES are _Demo_ and pagefault, as well as zsKnight who is retired. The project website is http://www.zsnes.com/ . There is also the Zsnes WIP (Work In Progress) site at http://ipher.znes.org/zsnes .


(CC)
This writeup is copyright 2003-2004 D.G. Roberge and is released under the Creative Commons Attribution-NonCommercial-ShareAlike licence. Details can be found at http://creativecommons.org/licenses/by-nc-sa/2.0/ .