Snes9x: The Portable Super Nintendo Entertainment System Emulator
=================================================================
Files included in the Snes9x archive:
  Snes9x.exe
  readme-windows.txt
  faqs-windows.txt
  changes.txt
  snes9x-license.txt

version 1.61  February, 2022
Home page: http://www.snes9x.com/
Source code: https://github.com/snes9xgit/snes9x/


Contents
========

Introduction
Getting Started
Requirements
Controllers Support
Game Saving
Cheat Support
Movie Support
Netplay Support
Miscellaneous
Compatibility
Problems
Technical Information
Credits



Introduction
============

What is Snes9x?
---------------
Snes9x is a portable, freeware Super Nintendo Entertainment System (SNES)
emulator. It basically allows you to play most games designed for the SNES and
Super Famicom Nintendo game systems on your Mac, Linux, Windows and so on. The
games include some real gems that were only ever released in Japan.

The original Snes9x project was founded by Gary Henderson and Jerremy Koot as a
collaboration of their earlier attempts at SNES emulation (Snes96 and Snes97.)
Over the years the project has grown and has collected some of the greatest
talent in the emulation community (at least of the SNES variety) some of which
have been listed in the credits section, others have helped but have been lost
in the course of time.

Why Emulate the SNES?
---------------------
Well, there are many reasons for this. The main reason is for nostalgic
purposes. In this day and age, it's hard to find a SNES and many good games.
Plus, many of us over the course of time have lost our beloved consoles (may
they R.I.P) but still have our original carts. With no other means to play them,
we turn to emulators. Besides this there are many conveniences of doing this on
the computer instead of dragging out your old system.

Advantages consist of:
- ability to save in any location of the game, despite how the game was
  designed. It's amazingly useful when you don't want to redo the same level
  over and over.
- built-in peripherals. This is anything from multi-taps, to super scopes, to
  cheat devices.
- ability to rip sprites and music for your own personal use.
- easier to organize and no stacks of cartridges.
- filters can be used to enhance graphics and sounds on old games.

As with all things there are disadvantages though:
- if you have an ancient computer, you aren't likely to get a playable
  experience.
- some games are still unemulated (though this a very tiny minority.)
- the emulator can be difficult for new users to configure.



Getting Started
===============

Launch Snes9x using the Windows explorer to locate the directory where you
un-zipped the snes9x.exe files and double-click on the snes9x.exe executable.
You could create a shortcut to Snes9x and drag that icon out onto your desktop.

Loading Games
-------------
Use the Open option from the File menu to open the ROM load dialog. The dialog
allows you to browse your computer to locate the directory where you have stored
your SNES games. Single-click and then press Load to load and start the game.

SNES ROM images come in lots of different formats. Snes9x supports zipped ROMs
as long as there is only 1 per zip file. Also Snes9x can open gzip and jma
compressed files.

Game Color System
-----------------
Snes9x displays the ROM information when a ROM is first loaded. Depending on the
colors used you can tell whether or not a ROM is a good working ROM, or if it's
been altered or is corrupted.

  white   the ROM should be a perfect working copy.
  green   the ROM is mode 1 interleaved.
  orange  the ROM is mode 2 interleaved.
  aqua    the ROM is Game Doctor 24M interleaved.
  yellow  the ROM has probably been altered. Either it's a translation, PD ROM,
          hacked, or possibly a bad ROM. It may also be an overdumped ROM.
  red     the ROM is definitely hacked and that a proper version should be
          exist. Some ROM Tools such as NSRT can also fix these ROMs.

When asking for help on the Snes9x forums, please list the color and CRC32 that
is displayed. This will help to find out what the problem is.

These colors do NOT signify whether a game will work or not. It is just a means
for reference so we can understand what may or may not be a problem. Most often
the problem with games that don't work is that they are corrupt or are a bad dump
and should be redumped.

SNES Joypad Emulation
---------------------
The default key mapping for joypad 1 is as follows:

  'up arrow'     Up direction
  'down arrow'   Down direction
  'left arrow'   Left direction
  'right arrow'  Right direction
  'V'            A button
  'C'            B button
  'D'            X button
  'X'            Y button
  'A'            L button
  'S'            R button
  'Enter'        Select button
  'Space'        Start button



Requirements
============

System Requirements
-------------------
Windows XP and up.
DirectX 9.

Certain games use added hardware which will require a faster machine. The specs
listed above are the minimum to use Snes9x in any playable form. It is
recommended that you get a semi-modern machine with a 800MHz CPU if you want
good results. A 1GHz CPU is recommended for those that want a near perfect
experience.

Software
--------
You will need access to SNES ROM images otherwise you will have nothing to run!
Some home-brewed ROM images can be downloaded from http://www.zophar.com/.
Please note, it is illegal in most countries to have commercial ROM images
without also owning the actual SNES ROM cartridges, and even then you may be
liable under various EULAs.


CG Shaders
--------
If you want to use CG Shaders in Snes9x for windows you need to install the
CG Toolkit from nvidia's developer zone:
http://developer.nvidia.com/object/cg_download.html

CG shaders work in both D3D and OpenGL. Various shaders can be found in
Themaister's Emulator Shader Pack:
https://github.com/Themaister/Emulator-Shader-Pack
You can also try the shaders in the libretro common-shaders repository:
https://github.com/libretro/common-shaders

GLSL Shaders
--------
Support for GLSL shaders is available when using OpenGL. A number can be
obtained from the libretro glsl-shaders repository:
https://github.com/libretro/glsl-shaders

Slang Shaders
--------
Slang shaders may also be used with OpenGL. The primary location to get these
is the libretro slang-shaders repository:
https://github.com/libretro/slang-shaders

Controllers Support
===================

The real SNES has two ports to connect input devices. Usually 1P and 2P SNES
joypads are connected but various devices and adopters can be plugged.

Multi Player 5
  known as Multi Tap; a five player adapter, allowing up to five people to play
  at once on games that supported it.

SNES Mouse
  a 2-button mouse, originally supplied with a paint program.

Super Scope
  a light-gun; it used infrared to provide wireless communication between the
  gun and the console unit.

Justifier
  a gun similar to Super Scope, supported with one gun-shooting game.

Snes9x can emulate those input devices with the keyboard, mouse and gamepad.

Configuring Keyboard and Gamepad
--------------------------------
Add support for your gamepad and calibrate it using Windows' applet from the
Windows control panel BEFORE starting Snes9x, then use Joy-pad Configuration
dialog in Snes9x to customize the keyboard/gamepad to SNES joypad mappings.

The dialog is easy to use: select which SNES joypad you are configuring using
the combo box (#1 to #5). Make sure that you click the 'enabled' box on that
controller or Snes9x won't recognize a controller being plugged in. Click on the
text box next to 'UP' and then press the key on the keyboard or button on your
gamepad that you would like to perform the UP action. The focus will
automatically move on to the 'RIGHT' text box, press the key or gamepad button
that you want to perform the RIGHT action, and so on until you've customized all
the SNES joypad buttons.

Use of the special diagonal keys should only be used by keyboard users who are
having problems pressing more then one or 2 buttons at a time. First you must
hit 'toggle diagonals' so that you are able to change them.

Using Input Devices
-------------------
SNES Mouse, Super Scope, Justifier and Multi Player 5 are disabled by default,
but you can enable them like so:

First, load your game. Then select the optional controller you want enabled from
the Input menu. Or, the controller is selectable by pressing '7' to cycle to it.

If you use NSRT to add header information to your ROMs, Snes9x will
automatically detect this information and choose the best controller
configuration for you when the game starts up. Incompatible choices will also be
grayed out from the Input menu, but if you really want, they remain selectable
by pressing '7'.

The default key mapping for input devices is as follows:

  '`'  Superscope turbo button.
  '~'  Superscope pause button.
  '7'  rotates between Multi Player 5, SNES mouse on port 1, SNES mouse on port
       2, SuperScope and Justifier emulation. (need to enable special
       controllers in the menu first)



Game Saving
===========

Many SNES games take a very long time to complete from start to finish, so they
allowed your progress to be saved at the predefined places chosen by the game
designers. The game cartridge contains a battery-backed RAM, known as SRAM, and
your save data remain in this SRAM until the battery shutoff.

Snes9x has two methods for saving games. One is the same as of the real SNES
shown above; emulating SRAM. The SRAM contents are saved into a file (.srm) so
you don't need to be worried about the battery shutoff. The other is more
convenient way than the real SNES; 'freezing' or 'snapshotting' the game. It
means saving the whole game state anywhere you want, beyond the game designers'
intent - ideal for saving your game just before a tricky bit!

Freeze files and SRAM files are normally written to and read from the folder
called Saves where your snes9x.exe is located, but sometimes this is not
desirable or possible, especially if it's a CD-ROM, which of course is
usually read-only! You can change the folder where Snes9x saves and loads freeze
and SRAM files using the Settings Dialog, available from the Options menu.

Using the SRAM File
-------------------
It's easy enough, just save the game as you do with the real SNES. Snes9x
outputs the contents of the emulated SRAM into a file (.srm) when you load a new
game or quit Snes9x. This file is automatically loaded the next time you play
the game.

Freezing and Defrosting the Game State
--------------------------------------
Snes9x provides 9 slots for freezing the whole of your game state. During the
game, press Shift+F1 to F9 to save a game, and just F1 to F9 to load it again
later.

Real-Time Clock Emulation
-------------------------
Some games have a battery-backed real-time clock (RTC) in their cartridge to
bring a real-time event in the game. Snes9x saves the state of RTC into a file
(.rtc) and also into a freeze file. Note that because it's a 'real-time' clock,
when these files are loaded, the emulated clock is automatically advanced in
reference to your system's time and date.

Fool-Proof System
-----------------
If you quit the game by error without saving your long-time progress, try to
find '.oops' file in the same folder as freeze files. If it exists, try to load
it. It's a freeze file automatically generated if you don't save anything for a
long time.



Cheat Support
=============

Cheat codes allow you to cheat at games. They might give you more lives,
infinite health, enable special powers normally only activated when a special
item is found, and etc. Two major formats are well-known: Game Genie and
Pro-Action Reply (PAR). Many existing Game Genie and PAR codes can be found via
Internet.

Snes9x supports both Game Genie and PAR, as well as the standard raw format:
xxxxxx=bb or xxxxxx=cc?bb. Also you can create your own cheat codes with the
cheat search tool.
Cheats are saved in .cht files and are automatically loaded the next time a game
with the same filename is loaded.

Technically, a cheat code consists of two elements; an address in SNES memory
map where you want to overwrite, and a value which is overwritten on the
address. Beware of cheat codes designed for a ROM from a different region
compared to the one you are playing or for a different version of the ROM; the
source of the cheats should tell you which region and for which version of the
game they were designed for. If you use a code designed for a different region
or version of your game, the game might crash or do other weird things because
the cheat address might be different between regions and versions.

Cheat Code Entry
----------------
Use the Cheat Code Entry and Editor dialog from the Cheats menu to enter Game
Genie or PAR, or raw codes. Type a cheat code into the 'Enter Cheat
Code' text edit box and press Return key. Be sure to include the '-' when typing
in a Game Genie code. You can then type in an optional short description as a
reminder to yourself of what function the cheat performs. Press Return key again
or click the Add button to add the cheat to the list.

Note that the Add button remains insensitive while 'Enter Cheat Code' text edit
box is empty or contains an invalid code. The cheat code is always translated
into an address and value pair and displayed in the cheat list as such.

It is also possible to enter cheats as an address and value pair. Type in a
code of the form 'address=value' in the 'Enter Cheat Code' box, with both
address and value in hexadecimal.

Double-clicking on an cheat line from the list in the dialog or clicking on the
'En' column toggles an individual cheat on and off. All cheats can be switched
on and off by checking and unchecking the 'Apply cheats' item from the Cheat
menu.

Selecting a cheat from the list causes its details to be filled into the text
edit boxes in the dialog box; the details can then be edited and the Change
button pressed to commit the edits. Note that the 'Enter Cheat Code' text edit
box always redisplays the cheat code as a Pro-Action Replay code regardless of
whether you originally entered it as a Game Genie or Pro-Action Replay code.

Selecting a cheat from the list then pressing the Delete button permanently
removes that cheat.

Snes9x contains a database of cheats for several known games. Click the
'Search Database' button with a game loaded, and it will try to add existing
cheats for your current game.

Cheat Search
------------
Snes9x also allows new cheats to be found using the Search for New Cheats
dialog, again available from the Cheats menu. The easiest way to describe the
dialog is to walk through an example.

Let's give ourselves infinite health and lives on Ocean's Addams Family platform
game:

Load up the game; keep pressing the start button (Return key by default) to skip
past the title screens until you actually start playing the game. You'll notice
the game starts with 2 health hearts and 5 lives. Remember that information, it
will come in useful later.

Launch the Cheat Search dialog for the first time; Alt+A is its accelerator.
Press the Reset button just in case you've used the dialog before, leave the
Search Type and Data Size radio boxes at their default values and press OK.

Play the game for a while until you loose a life by just keeping walking into
baddies; when the game restarts and the life counter displays 4, launch the
Cheat Search dialog again but this time press the Search button rather than
Reset. The number of items in the list will reduce, each line shows a memory
location, its current value and its previous value; what we're looking for is
the memory location where the game stores its life counter.

Look at address line 7E00AC, its current value is 4 and its previous value was
5. Didn't we start with 5 lives? Looks interesting...

Note that some games store the current life counter as displayed on the screen,
while others store current number of lives minus 1. Looks like Addams Family
stores the actual life count as displayed on the screen.

Just to make sure you've found the correct location, press OK on the dialog, and
play the game until you loose another life. Launch the Cheat Search dialog again
after the life counter on screen has been updated and press the Search button.
Now there are even fewer items in the list, but 7E00AC is there again, this time
the current value is 3 and the previous value was 4. Looks very much like we've
found the correct location.

Now that we're happy we've found the correct location, click on the 7E00AC
address line in the list and then press the Add Cheat button. Another dialog,
Cheat Details, will be displayed. Type in a new value of say 5, this will be
number of lives that will be displayed by the lives counter. Don't be greedy;
some games display a junk life counter or might even crash if you enter a value
that's too high; Snes9x keeps the value constant anyway, so even if you do loose
a life and life counter goes down by one, less than 20ms later, Snes9x resets
the counter back to the value you chose!

If the memory location you add a cheat on proves to be wrong, just go to the
Cheat Code Editor dialog and delete the incorrect entry.

Now let's try and find the Addams Family health counter. While two hearts are
displayed on the screen, visit the Cheat Search dialog and press the Reset
button followed by OK. Play the game until you loose a heart by touching a
baddie, then visit the Cheat Search dialog again.

Press the Search button to update the list with all memory locations that have
gone down in value since the last dialog visit. We're going to have to try and
find the heart memory location now because there were only two hearts to start
with.

Look at address line 7E00C3, its current value is 1 and its previous value was
2. Scrolling through the list doesn't reveal any other likely memory locations,
so let's try our luck. Click on the 7E00C3 line, press the Add Cheat button and
type in a new value of say 4 into the dialog that appears and press OK. Press OK
on the Search for New Cheats dialog to return to the game.

At first sight it looks like 7E00C3 wasn't the correct memory location because
the number of hearts displayed on screen hasn't gone up, but fear not, some
games don't continually update health and life displays until they think they
need to. Crash into another baddie - instead of dying, the number of hearts
displayed jumps up to 4! We've found the correct location after all!

Now every time you play Addams Family you'll have infinite lives and health.
Have fun finding cheats for other games.



Movie Support
=============

Movie support allows you to record your actions while playing a game. This can
be used for your own personal playback or to show other people that you can do
something without them having to be around when you did it.

Recording a Movie
-----------------
Simply click the File menu and click on Movie. Click the Record button. Here you can
decide when to start recording. If you want to record from the very start of a
game, click on 'Record from reset.' If you want to start recording from where
you are already in a game, click 'Record from now.' You can also choose which
controllers to record. If you are playing by yourself leave joypad 1 as the only
one selected. The more controllers you choose to record the larger the file size
will be.

Playing Back a Movie
--------------------
To play back a movie you recorded, click File menu, Movie, Play and select the
file to play. Make sure the movie was recorded with the same ROM that you have
loaded.

Re-recording a Movie
--------------------
If you make a mistake while recording a movie, there is a movie re-record
function. Simply create a freeze file anytime while recording. If you want to
re-record, load the freeze file and it will bring up the message 'movie
re-record'. Loading any freeze file while a movie is playing or recording will
cause this to happen. If you want to watch a video with no chance to
accidentally alter it, check 'Open as read only' when you go to play it.



MSU1 Support
===============
MSU1 is supported in either Mercurial Magic (MSU-1 distribution pack) format, or
by placing the .msu/.pcm files next to the rom file itself.



Netplay Support
===============

NOTE 2017 OV2: netplay has not been maintained and tested in a long time, so it
might be broken.

Netplay support allows up to five players to sit in front of different computers
and simultaneously play the same game, or just watch someone else play a game.
All the computers have to be connected to a network that allows TCP/IP traffic
to flow between them; this includes a local Ethernet-style network, a
direct-cable connection, or, if you're lucky and have short ping times, the
Internet.

How to Netplay
--------------
It's currently easier if you use Snes9x in windowed mode while using netplay,
mainly because netplay currently displays status information in the window's
title bar, and it might be necessary to setup a separate chat application so you
can talk to the other players when deciding what game to play next.

One machine has to act as a server which other players (client sessions) connect
to. The 'master' player, player 1, uses the server machine; the master decides
what game to play. The server machine should be selected to be the fastest
machine on the fastest connection in the group taking part due to the extra
functions it has to perform.

Load up a game, then select the 'Act as server' option from the Netplay menu to
become a netplay server; the 'network', in whatever form it takes, will need to
be initialized, if necessary, before you do this. Then just wait for other
players to connect...

Clients connect to the server using the 'Connect to server...' dialog, again
available from the Netplay menu. Type in the IP address or host name of the
machine running the Snes9x server session and press OK. The first remote client
to connect will become player 2, and so on. Start Menu->Run->winipcfg will tell
you your current IP address, but note that many ISPs will allocate you a new IP
address each time you sign in.

The server will request the client loads up the correct game first before
joining the game. Then the server will either send the client SRAM data and
reset all players' games if the 'Sync Using Reset Game' option is checked, or
send it a freeze file to get the new client in sync with the other player's
progress in a game.

If the master player loads a different game, the server will request that the
clients load the game. If the master player loads a freeze file, the server will
automatically send that to remote clients.

Client sessions must be able to keep up with the server at all times - if they
can't, either because the machine is just too slow, or its busy, the games will
get out of sync and it will be impossible to successfully play a multi-player
game...

...To make sure this doesn't happen, don't move the Snes9x window unnecessarily
and don't use Ctrl+Alt+Del to display the task manager while playing. Also stop
any unnecessary applications and as many background tasks as possible. Even
something as simple as a text editor might periodically write unsaved data to
the disk, stealing CPU time away from Snes9x causing it to skip a frame or delay
a sound effect; not a problem for most games, but the Bomberman series (the best
multi-player games on the SNES) sync the game to sound samples finishing.



Miscellaneous
=============

Using IPS/UPS/BPS Patch
----------------------
Snes9x automatically patches without overwriting the ROM image.

- Put the IPS/UPS/BPS file into the same folder as the ROM image or in the folder
  configured as patch folder
- Rename the name to the same as the ROM image (except extension, it is '.ips'
  or '.ups' or '.bps').
- (IPS only) If you want to use multiple IPS files at a time, set their
  extensions to '.000.ips', '.001.ips', ...
- Open and load the ROM image.

Additional Keyboard Controls
----------------------------
Snes9x has various functions to play games with fun. The default mapping is as
follows. Go to Input > Customize Hotkeys... to configure these and more.

  'Pause'              pauses or unpauses the emulator.
  'Escape'             shows or hides the menu bar.
  'Alt'+'Enter'        toggles between full-screen and windowed mode.
  'Ctrl'+'Shift'+'R'   resets the game.
  'Shift'+'F1-F9'      saves a freeze file into the slot 1-9.
  'F1-F9'              loads a freeze file from the slot 1-9.
  'F12'                takes a screenshot.
  'Shift'+'Page Down'  toggles turbo on the 'A' button. Note: toggles for all
                       controllers.
  'Shift'+'End'        toggles turbo on the 'B' button...
  'Shift'+'Page Up'    toggles turbo on the 'X' button...
  'Shift'+'Home'       toggles turbo on the 'Y' button...
  'Shift'+'Ins'        toggles turbo on the 'L' button...
  'Shift'+'Del'        toggles turbo on the 'R' button...
  'Shift'+'['          toggles turbo on the 'Select' button...
  'Shift'+']'          toggles turbo on the 'Start' button...
  '6'                  toggles swapping of joypad one and two.
  'Shift'+'='          increases frame rendering skip rate, making the screen
                       updates more jerky but speeding up the game.
  'Shift'+'-'          decreases frame rendering skip rate, making the screen
                       updates more smoothly, but potentially slowing down the
                       game. Repeatedly pressing the key will eventually switch
                       to auto-frame skip rate where the rate is dynamically
                       adjusted to keep a constant game play speed.
  '-'                  increases emulated frame time by 1ms - slowing down the
                       game. (auto-frame skip must be on)
  '='                  decreases emulated frame time by 1ms - speeding up the
                       game. (auto-frame skip must be on)
  '\'                  pauses the game, or slowly advances gameplay if it's
                       already paused. To return to normal, press the 'Pause'
                       key.
  'Tab'                turbo mode.
  ','                  toggles display of input, so you can see which SNES
                       buttons are registering as pressed.
  '.'                  toggles movie frame display on/off. Movie must be open.
  'Shift'+'8'          toggles movie read-only status. Movie must be open.
  '1-4'                toggles background 1-4 on/off.
  '5'                  toggles sprites on/off
  '9'                  (not recommended) toggles transparency effects on/off.
  '8'                  (not recommended) toggles emulation of graphics window
                       effects on/off.
  '0'                  (not recommended) toggles H-DMA emulation on/off.



Compatibility
=============

Compatibility with Other Ports
------------------------------
All the files generated by Snes9x are compatible between platforms, except for
the extension of the freeze files.

Compatibility with Other SNES Emulators
---------------------------------------
Cheat files (.cht) are common between Snes9x and higan/bsnes. higan stores
these as cheats.bml in the higan subdirectory of a game folder.
RTC files (.rtc) are common between Snes9x and bsnes.
SRAM files (.srm) should be common among all SNES emulators.


Problems
========

Problems with ROMs
------------------
If Snes9x just displays a black screen for over 10 seconds after you've loaded a
ROM image, then one of the following could be true:

- You just loaded some random ROM image and it isn't even a SNES game or you
  only have part of the image. Snes9x only emulates games designed for the Super
  NES, not NES, or Master System, or Game Boy, or <insert your favorite old
  games system here>.
- Someone has edited the Nintendo ROM information area inside the ROM image and
  Snes9x can't work out what format the ROM image is in. Try playing around with
  the ROM format options on the ROM load dialog.
- The ROM image is corrupt. If you're loading from CD, I know it might sound
  silly, but is the CD dirty? Clean, unhacked ROM images will display [checksum
  ok] when first loaded, corrupt or hacked ROMs display [bad checksum].
- The original SNES ROM cartridge had additional hardware inside that is not
  emulated yet and might never be.
- You might be using a file that is compressed in a way Snes9x does not
  understand.

The following ROMs are known to currently not to work with any version of
Snes9x:

  SD Gundam GX                     DSP-3
  Hayazashi Nidan Morita Shougi    Seta-11
  Hayazashi Nidan Morita Shougi 2  Seta-18

Problems with Sound
-------------------
No sound coming from any SNES game using Snes9x? Could be any or all of these:

  Installing the latest drivers for your sound card might help. Another Windows
  application might be holding exclusive access to the sound card - in
  which case you will need to stop that application and then restart Snes9x.
- The sound card's volume level might be set too low. Snes9x doesn't alter the
  card's master volume level so you might need to adjust it using the sound
  card's mixer/volume controls usually available from the task bar or start
  menu.
- Make sure your speakers and turned on, plugged in and the volume controls are
  set to a suitable level.
- If experiencing crackling, try the following in the Sound Settings dialog:
    * Ensure the "Synchronize with sound core" option is enabled.
    * Increase the buffer size.
    * Switch the sound driver from WaveOut to XAudio2 or vice-versa.
    * If "Automatic Input Rate" option is disabled, enable it. Otherwise,
      disable it and lower the "Input Rate" value in steps of 10 until the
      crackling goes away.
    * Enable the "Dynamic Rate Control" option.
    * Change the "Playback Rate" to 48000Hz. Versions of Windows since Vista
      have included a sound server that controls audio. It usually runs at
      48000Hz, and matching this means Windows doesn't try to convert it.
      Contrary to other advice, running at 32000Hz does NOT provide any
      benefits.



Technical Information
=====================

What's Emulated?
----------------
- 65c816 main CPU.
- Variable length machine cycles.
- 8 channel DMA and H-DMA.
- H-IRQ, V-IRQ and NMI.
- Sony SPC700 sound CPU.
- Sound DSP, with eight 16-bit, stereo channels, compressed samples, hardware
  envelope processing, echo, pitch modulation and digital FIR sound filter.
- SRAM, a battery-backed RAM.
- All background modes, 0 to 7.
- All screen resolutions including interlace mode.
- Pseudo hi-res mode.
- 8x8, 16x8 and 16x16 tile sizes, flipped in either direction.
- 32x32, 32x64, 64x32 and 64x64 screen tile sizes.
- Vertical and horizontal offset-per-tile.
- 128 8x8, 16x16, 32x32 and 64x64 sprites, flipped in either direction.
- Sub-screen and fixed color blending effects.
- Mosaic effects.
- Mode 7 screen rotation, scaling and screen flipping.
- Single and dual graphic clip windows, with all four logic combination modes.
- Color blending effects only inside or outside a window.
- Palette changes during frame.
- Direct color mode - uses tile and palette-group data directly as RGB value.
- SNES Mouse.
- Super Scope, emulated using computer mouse.
- Justifier, by Konami, similar to the Super Scope and used only in Lethal
  Enforcers.
- Multi Player 5, allowing up to five people to play games simultaneously on
  games that support that many players.
- Super FX, a fast RISC CPU used in several games.
- SA-1, a faster version of main CPU with some functions, used in several games.
- DSP-1, a custom chip used in several games, mainly racing games.
- DSP-2, a custom chip used only in Dungeon Master.
- DSP-4, a custom chip used only in Top Gear 3000.
- C4, a sprite scaler/rotator/line drawer/simple maths co-processor chip used
  only in Megaman X2 and X3.
- Seta-10, a custom chip used only in F1 Race of Champions 2.
- OBC1, a sprite management chip used only in Metal Combat.
- S-DD1, a data decompression chip used only in Star Ocean and Street Fighter 2
  Alpha.
- SPC7110, similar in use to S-DD1, used in a few Hadoson games.
- S-RTC, a real-time clock chip, used only in Dai Kaijyu Monogatari 2.
- Satellaview and BS-X, only partially.

What's Not?
-----------
- Exact sub-cycle timings of communication among most of parts - main CPU, sound
  CPU, DMA, H-DMA, IRQ, NMI, and so on. Snes9x cannot run games that require
  severe timings!
- Any other odd chips that manufactures sometimes placed inside the cartridge to
  enhance games and as a nice side-effect, also act as an anti-piracy measure.
  (DSP-3, Seta-11 and Seta-18, as examples)
- The expansion slot found in many carts.

Custom Chips
------------
Super FX
  The Super FX is a 10.5/21MHz RISC CPU developed by Argonaut Software used as a
  game enhancer by several game titles. Released SNES Super FX games included
  Yoshi's Island, Doom, Winter Gold, Dirt Trax FX, StarFox, Stunt Race FX and
  Vortex.

SA-1
  The SA-1 is a fast, custom 65c816 8/16-bit processor, the same as inside the
  SNES itself, but clocked at 10MHz compared to a maximum of 3.58MHz for the CPU
  inside the SNES. The SA-1 isn't just a CPU; it also contains some extra
  circuits developed by Nintendo which includes some very fast RAM, a memory
  mapper, DMA and, several real-time timers.

C4
  The C4 is custom Capcom chip used only in the Megaman X2 and Megaman X3 games.
  It can scale and rotate images, draw line-vector objects and do some simple
  maths to rotate them.

S-DD1
  The S-DD1 is a custom data decompression chip that can decompress data in
  real-time as the SNES DMA's data from the ROM to RAM. Only two games use the
  chip: Star Ocean and Street Fighter Alpha 2.

SPC7110
  The SPC7110 is a compression and memory mapping chip. It provides a few extra
  features as well. It functions as an RTC interface, and has a multiply/divide
  unit that has more precision than the SNES. The SPC7110 is found only in 4
  games: Super Power League 4, Far East of Eden Zero, Far East of Eden Zero -
  Shounen Jump no Shou and Momotaro Dentetsu Happy.

Others
  Other known custom chips: DSP-1, DSP-2, DSP-3, DSP-4, Seta-10, Seta-11,
  Seta-18, OBC1 and S-RTC.



Credits
=======

- Jerremy Koot for all his hard work on previous versions of Snes96, Snes97 and
  Snes9x.
- Ivar for the original Super FX C emulation, DSP-1 emulation work and
  information on both chips.
- zsKnight and _Demo_ for the Intel Super FX assembler, DSP-1 and C4 emulation
  code.
- zsKnight and _Demo_ for all the other ideas and code I've nicked off them;
  they've nicked lots of my ideas and information too!
- John Weidman and Darkforce for the S-RTC emulation information and code.
- Kreed and Maxim Stepin for excellent image enhancer routines.
- Nose000 for code changes to support various Japanese SNES games.
- Neill Corlett for the IPS patching support code.
- DiskDude's SNES Kart v1.6 document for the Game Genie(TM) and Pro-Action
  Replay cheat system information.
- Lord ESNES for some nice chats and generally useful stuff.
- Lee Hyde (lee@jlp1.demon.co.uk) for his quest for sound information and the
  Windows 95 icon.
- Shawn Hargreaves for the rather good Allegro 3.0 DOS library.
- Robert Grubbs for the SideWinder information - although I didn't use his
  actual driver in the end.
- Steve Snake for his insights into SNES sound sample decompression.
- Vojtech Pavlik for the Linux joystick driver patches.
- Maciej Babinski for the basics of Linux's DGA X server extensions.
- Alexander Larsson for the GGI Linux port code.
- Harald Fielker for the original sound interpolation code (never used directly
  due to problems).
- Takehiro TOMINAGA for many speed up suggestions and bug fixes.
- Predicador for the Windows icon.
- Lindsey Dubb for the mode 7 bi-linear filter code and the improved color
  addition and subtraction code.
- Anti Resonance for his super-human efforts to help get his fast sound CPU core
  and sound DSP core working in Snes9x.
- Brad Martin and TRAC for better and refined sound emulation.
- ernstp and entonne for patches and testing on Linux PPC.
- byuu for the most exact timing information and tons of the newest technical
  findings.
- Blargg for the most accurate timings between sound CPU and DSP and exact sound
  emulation codes.
- pagefault, TRAC, Dark Force, byuu, and others who have donated ideas and/or
  code to the project.



Nintendo is a trademark.
Super NES, Super Famicon, Super Scope and Super FX are trademarks of Nintendo.
Sufami Turbo is a trademark of Bandai Co., Ltd.
Game Genie is a trademark of Lewis Galoob Toys, Inc.
Pro Action Replay is a trademark of Datel Inc.
Macintosh, Mac and Mac OS X are trademarks of Apple Computer, Inc.
UNIX is a trademark of The Open Group.
Linux is a trademark of Linus Torvalds.
Windows is a trademark of Microsoft Corp.
Intel is a trademark of Intel Corp.
PowerPC is a trademark of International Business Machines Corp.
Sony is a trademark of Sony Corp.
Konami and Justifier are trademarks of Konami Corp.
Hudson is a trademark of Husdon Soft Co., Ltd.
Capcom is a trademark of Capcom Co., Ltd.

This document was originally authored by Gary Henderson

Updated most recently: 2019/2/26
