ZSNES

Last updated
ZSNES
Original author(s) zsKnight, _Demo_, pagefault, and Nach
Developer(s) ZSNES Team
Initial release0.150 / October 14, 1997;26 years ago (1997-10-14)
Final release
1.51 / 24 January 2007;17 years ago (2007-01-24)
Written in x86 assembly, C, C++, PSR
Operating system Linux, DOS, Windows, Mac OS X, FreeBSD, Xbox
Available inEnglish
Type Video game console emulator
License Since 1.50: GPL-2.0-only
1.17b to 1.42: GPL-2.0-or-later
Until 1.17: Proprietary
Website zsnes.com OOjs UI icon edit-ltr-progressive.svg

ZSNES is a free software Super Nintendo Entertainment System emulator written mostly in x86 assembly with official ports for Linux, DOS, Windows, and unofficial ports for Xbox and macOS.

Contents

Background

Development of ZSNES began on 3 July 1997 and the first version was released on 14 October 1997, for DOS. Since then, official ports have been made for Windows and Linux. The emulator became free software under the GPL-2.0-or-later license on 2 April 2001. Despite an announcement by adventure_of_link stating that "ZSNES is NOT dead, it's still in development" made on the ZSNES board after the departure of its original developers zsKnight and _Demo_, [1] development has slowed dramatically since its last version (1.51 released on 24 January 2007). Much of the development efforts concentrated on increasing the emulator's portability, by rewriting assembly code in C and C++, [2] including a new GUI using Qt. [3]

ZSNES is notable in that it was early in being able to emulate several of the SNES enhancement chips at some level. [4] Until version 1.50, ZSNES featured netplay via TCP/IP or UDP. [5]

An early ZSNES feature of interest were "ZMV movies". This feature enabled players to record their play session inputs and then output those to a ZMV file, in such a way that another user with a copy of ZSNES, a matching ROM file, and the ZMV file, should be able to "watch" the other person's gameplay. This long preceded mass availability of gameplay videos online, being an early form of sharing this type of content.

Because ZSNES is largely written in low-level assembly language for x86 processors, the idea of porting ZSNES to devices using RISC architectures such as ARM is highly unfeasible. Commercial gaming consoles did not typically use x86 processors (with the original Xbox being the most well-known exception) prior to the eighth generation, with the 2013 releases of the Xbox One and PlayStation 4. [6]

Development history

The first public release of ZSNES was version 0.150, on October 14, 1997. It incorporated the entire 65816 instruction set from the SNES's modified WDC 65C816 microprocessor, as well as SRAM support and partial Mode 7 implementation. It also already offered save states to a .ZST file as an additional feature. This initial version missed certain DSP features. [7]

Version 0.600 from September 9, 1998, was the first to feature developer Pharos (as a coding assistant), and was a milestone release due to the implementation a of new 16-bit graphics engine, as well as featuring an entirely new GUI with more functions available than before. [8] Shortly afterwards, version 0.700 from October 27, 1998, was the first to compile with C code. [9]

Starting from version 0.900c/a from July 4, 1999, an important feature for the time was added, which was native ZIP compression support, which allowed users to save space in the then expensive hard disks. Also, work intensified on improving support of the SA-1 chip. [10]

Version 1.000 from September 1, 2000, marks ZSNES's first official Windows release, [11] and the next several versions of the emulator focused on improving the quality of this port. In April 2, 2001, the software's source code was released and the team was joined by coder Teuf. [12]

Release 1.30b from June 16, 2001, can be considered a landmark in Super Nintendo emulation, as it added initial support to Star Ocean and its S-DD1 compression chip. [13] This title pushed the limits of the system's hardware, boasting voice clips and enhanced graphics, and was tricky to even get running on an emulator.

After zsKnight's departure for personal reasons in July 2001, the project made a release in homage to him and his family, version 1.337, from September 30, 2001. [14] The emulator continued being updated until July of 2002, but releases halted, and it would be more than two years until a new public release was out.

When version 1.40 eventually released on December 25, 2004, it marked a turning point for the project, with new contributors and significant overhauls to the emulator's ageing systems. Developers Nach and pagefault particularly focused on removing several of the infamous hacks that were part of ZSNES's code base, implementing proper code that tricky games relied on. In tandem with that, extensive work was carried out to better support special chips. [15]

Version v1.50 from December 22, 2006, was another major overhaul, which according to the developers: "ZSNES is a program with over 200,000 lines of source code, and in this release, over 25% of that has been modified; also, around 15% of the assembly has been ported to C." [16] This was the final major release of the emulator, being followed by the minor 1.51, and winding down thereafter.

Reception

ZSNES was generally well-regarded in its heyday, with British game magazine Retro Gamer in 2005 calling the emulator "very impressive" and praising the "incredible toaster mode". [17]

However, with the more recent development of more accurate SNES emulators such as Snes9x and higan as computers have gradually become more powerful, retrospective reviews have criticized ZSNES not only for its relatively low accuracy, but also because its former popularity has led several fan-made translations and modifications to be designed with specific workarounds for the emulator's inaccuracies, which often makes them unplayable both on real hardware and in the newer emulators that have superseded ZSNES. Some of these other emulators even include a mode which is explicitly designed to replicate the quirks of ZSNES, allowing the ZSNES-focused mods to become playable again. [18]

In 2015 an exploit that allowed a specially crafted SNES ROM to gain control of the host system, and thus be able to execute malicious code, was discovered in version 1.51; a partially fixed preview build was released shortly afterwards. [19]

See also

Related Research Articles

<span class="mw-page-title-main">Debian</span> Linux distribution based on free and open-source software

Debian, also known as Debian GNU/Linux, is a Linux distribution composed of free and open-source software and optionally non-free firmware or software developed by the community-supported Debian Project, which was established by Ian Murdock on August 16, 1993. The first version of Debian (0.01) was released on September 15, 1993, and its first stable version (1.1) was released on June 17, 1996. The Debian Stable branch is the most popular edition for personal computers and servers. Debian is also the basis for many other distributions that have different purposes, like Proxmox for servers, Ubuntu or Linux Mint for desktops, Kali for penetration testing, and Pardus and Astra for government use.

<span class="mw-page-title-main">Application binary interface</span> Binary interface between two program units

In computer software, an application binary interface (ABI) is an interface between two binary program modules. Often, one of these modules is a library or operating system facility, and the other is a program that is being run by a user.

In computing, cross-platform software is computer software that is designed to work in several computing platforms. Some cross-platform software requires a separate build for each platform, but some can be directly run on any platform without special preparation, being written in an interpreted language or compiled to portable bytecode for which the interpreters or run-time packages are common or standard components of all supported platforms.

<span class="mw-page-title-main">MAME</span> Arcade game emulation software

MAME is a free and open-source emulator designed to recreate the hardware of arcade game systems in software on modern personal computers and other platforms. Its intention is to preserve gaming history by preventing vintage games from being lost or forgotten. It does this by emulating the inner workings of the emulated arcade machines; the ability to actually play the games is considered "a nice side effect". Joystiq has listed MAME as an application that every Windows and Mac gamer should have.

x86-64 64-bit version of x86 architecture

x86-64 is a 64-bit version of the x86 instruction set, first announced in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging mode.

<span class="mw-page-title-main">Damn Small Linux</span> Lightweight, desktop-oriented Linux distribution

Damn Small Linux (DSL) is a computer operating system for the x86 family of personal computers. It is free and open-source software under the terms of the GNU GPL and other free and open-source licenses. It was designed to run graphical user interface applications on older PC hardware, for example, machines with 486 and early Pentium microprocessors and very little random-access memory (RAM). DSL is a live CD with a size of 50 megabytes (MB). What originally began as an experiment to see how much software could fit in 50 MB eventually became a full Linux distribution. It can be installed on storage media with small capacities, like bootable business cards, USB flash drives, various memory cards, and Zip drives.

PearPC is an architecture-independent PowerPC platform emulator capable of running many PowerPC operating systems, including pre-Intel versions of Mac OS X, Darwin and Linux. It is released under the terms of the GNU General Public License (GPL). It can be executed on Microsoft Windows, Linux, FreeBSD and other systems based on POSIX-X11. The first official release was made on May 10, 2004.

<span class="mw-page-title-main">Snes9x</span> Emulator for the SNES video game console

Snes9x is a Super Nintendo Entertainment System emulator with official ports for MS-DOS, Linux, Microsoft Windows, AmigaOS 4, macOS, MorphOS, Xbox, PSP, PS3, GameCube, Wii, iOS, and Android. Windows RT and Windows Phone 8 have an unofficial port named Snes8x.

<span class="mw-page-title-main">Kodi (software)</span> Free software media player

Kodi is a free and open-source media player and technology convergence software application developed by the Kodi Foundation, a non-profit technology consortium. Kodi is available for multiple operating systems and hardware platforms, with a software 10-foot user interface for use with televisions and remote controls. It allows users to play and view most streaming media, such as videos, music, podcasts, and videos from the Internet, as well as all common digital media files from local and network storage media, or TV gateway viewer.

Homebrew, when applied to video games, refers to software produced by hobbyists for proprietary video game consoles which are not intended to be user-programmable. The official documentation is often only available to licensed developers, and these systems may use storage formats that make distribution difficult, such as ROM cartridges or encrypted CD-ROMs. Many consoles have hardware restrictions to prevent unauthorized development.

<span class="mw-page-title-main">Free and open-source graphics device driver</span> Software that controls computer-graphics hardware

A free and open-source graphics device driver is a software stack which controls computer-graphics hardware and supports graphics-rendering application programming interfaces (APIs) and is released under a free and open-source software license. Graphics device drivers are written for specific hardware to work within a specific operating system kernel and to support a range of APIs used by applications to access the graphics hardware. They may also control output to the display if the display driver is part of the graphics hardware. Most free and open-source graphics device drivers are developed by the Mesa project. The driver is made up of a compiler, a rendering API, and software which manages access to the graphics hardware.

<span class="mw-page-title-main">PCSX2</span> Video game console emulator

PCSX2 is a free and open-source PlayStation 2 emulator for Windows, Linux, and macOS that supports a wide range of PlayStation 2 video games with a high level of compatibility and functionality. Although PCSX2 can closely mirror the original gameplay experience on the PlayStation 2, PCSX2 supports a number of improvements over gameplay on a traditional PlayStation 2, such as the ability to use resolutions up to 8 times larger than native, anti-aliasing and texture filtering.

<span class="mw-page-title-main">PCSX-Reloaded</span> Video game console emulator

PCSX is a free and open-source, video game console emulator that allows software designed to be used with the Sony PlayStation to run on personal computers. Over the years, development changed hands several times with PCSX-Reloaded (PCSXR) now being the main version. As of 2021, the emulator seems to be no longer under active development. A newer, actively maintained fork of PCSX-Reloaded is PCSX-Redux.

higan (emulator) Multi-system emulator

Higan is a free and open source emulator for multiple video game consoles, including the Super Nintendo Entertainment System. It was developed by Near. Originally called bsnes, the emulator is notable for attempting to emulate the original hardware as accurately as possible through low-level, cycle-accurate emulation and for the associated historical preservation efforts of the Super NES platform.

<span class="mw-page-title-main">Video game console emulator</span> Program that reproduces video game consoles behavior

A video game console emulator is a type of emulator that allows a computing device to emulate a video game console's hardware and play its games on the emulating platform. More often than not, emulators carry additional features that surpass limitations of the original hardware, such as broader controller compatibility, timescale control, easier access to memory modifications, and unlocking of gameplay features. Emulators are also a useful tool in the development process of homebrew demos and the creation of new games for older, discontinued, or rare consoles.

The Android Package with the file extension apk is the file format used by the Android operating system, and a number of other Android-based operating systems for distribution and installation of mobile apps, mobile games and middleware. A file using this format can be built from source code written in either Java or Kotlin.

Mupen64Plus, formerly named Mupen64-64bit and Mupen64-amd64, is a free and open-source, cross-platform Nintendo 64 emulator, written in the programming languages C and C++. It allows users to play Nintendo 64 games on a computer by reading ROM images, either dumped from the read-only memory of a Nintendo 64 cartridge or created directly on the computer as homebrew.

<span class="mw-page-title-main">RetroArch</span> Emulator and media player frontend

RetroArch is a free and open-source, cross-platform frontend for emulators, game engines, video games, media players and other applications. It is the reference implementation of the libretro API, designed to be fast, lightweight, portable and without dependencies. It is licensed under the GNU GPLv3.

<span class="mw-page-title-main">86Box</span> PC emulator

86Box is an IBM PC emulator for Windows, Linux and Mac based on PCem that specializes in running old operating systems and software that are designed for IBM PC compatibles. Originally forked from PCem, it later added support for other IBM PC compatible computers as well.

Randal (Randy) Linden is a software developer known for various software ports and versions of video games, as well as emulators.

References

  1. badinsults (9 October 2009). "ZSNES is not dead, it is still under active development". Archived from the original on 12 June 2019. Retrieved 23 July 2010.
  2. grinvader. "Re: Current Status FAQ". ZSNES board. Archived from the original on 3 April 2012. Retrieved 24 October 2011.
  3. "ZSNES GUI 3.0 the first screenshot". ZSNES board. Archived from the original on April 3, 2012. Retrieved 24 October 2011.
  4. "History - ZSNES Documentation".
  5. "ZSNES Home Page". ZSNES. 2007-01-25. Retrieved 2020-04-24. Changes: v1.50 - December 22, 2006: Netplay, Modem, IPX code removed...As much as we hated to, we had to remove all computer to computer playing options in order to fix up the other subsystems since the code was spread throughout ZSNES. We hope to in future versions to reimplement it and also provide new features.
  6. Deathlike2 (3 November 2007). "No Port requests" . Retrieved 23 July 2010.{{cite web}}: CS1 maint: numeric names: authors list (link)
  7. "History - ZSNES Documentation".
  8. "History - ZSNES Documentation".
  9. "History - ZSNES Documentation".
  10. "History - ZSNES Documentation".
  11. "History - ZSNES Documentation".
  12. "History - ZSNES Documentation".
  13. "History - ZSNES Documentation".
  14. "History - ZSNES Documentation".
  15. "History - ZSNES Documentation".
  16. "History - ZSNES Documentation".
  17. "Retro Coverdisc". Retro Gamer (15): 108. 2005.
  18. Byuu (9 August 2011). "Accuracy takes power: one man's 3GHz quest to build a perfect SNES emulator". Ars Technica. Retrieved 24 October 2011.
  19. "#792420 - zsnes: emulator escape vulnerability - Debian Bug report logs". Debian . Retrieved 28 July 2016.