
The SNES emulator with the extra e's...

        SSSSS   NN    NN  EEEEEE           SSSSS
       SS   SS  NNN   NN  EE              SS   SS
        SS      NNNN  NN  EE       eeee    SS       eeee
         SSS    NN NN NN  EEEEE   ee  ee    SSS    ee  ee
           SS   NN  NNNN  EE      eeeeee      SS   eeeeee
       SS   SS  NN   NNN  EE      ee      SS   SS  ee
        SSSSS   NN    NN  EEEEEE   eeee    SSSSS    eeee

                                            v0.706 (Public BETA)
                                            15 July 2002

  Please read the license (at the end of this file)
   before using or distributing SNEeSe in any way!

  This release is dedicated to Avarice, a friend I expect not to see
   for quite awhile, and shall miss...

  THIS IS NOT SHAREWARE NEVER HAS BEEN...ITS FREE AND SHOWS ;-)

- In memory of the Emu News Service/Emu News World, which served as a strong
  backbone for emulation, and will not be soon forgotten...
                                        http://www.emunews.net/

NOTE:
 This release has SPC emulation, it may get some ROMs to work that would
  not with APU skipper.
 This release also has sound, but the sound may be unstable.
  Send critical bug reports (this is, report only the ROMs that crash the
  emulator) to: esaelon@aol.com
 Please list the ROM, ROM filename, the settings you were using in the
  emulator, when it crashed, etc. Thanks for the help!

Credits
"""""""
New development
Primary Developer/Maintainer
 Charles Bilyue'    (TRAC)      esaelon@aol.com
Assistant Developer (Sound system emulation)
 Brad Martin        (Butcha)    bmartin@umr.edu
                                http://home.gvi.net/~martin
New logo
 stainless

Old logo
 neptron                        http://ciot.pair.com/neptron/

Former SNEeSe team
Project founder
 Lee Hammerton      (Savoury SnaX)
Original logo
 Windwalker
GUI improvements, testing
 Santeri Saarimaa   (Gridle)
Assistant developer
 Charles Bilyue'    (TRAC)
Sound system emulation
 Lee Hammerton      (Savoury Snax)
 Brad Martin        (Butcha)
 archeide

 Shawn Hargreaves & Co. - Allegro 3.9.34 WIP library!

- Thanks, Greets, and News moved to end of file


Also try:
 FakeNES, a CVS open-source portable NES emulator in POSIX C with builds
  available for DOS, Win32-DirectX and Linux, by stainless, RobotBebop,
  TRAC, and Lord_Nightmare.     http://fakenes.sourceforge.net/

--------------! For true SNES emulation buy a SNES ;-) !--------------

System Requirements
"""""""""""""""""""
Here is a rough guide to the things you need to run this emulator:

 - PC running MS-DOS/Win9x (can't guarantee full compatibility with
    compatible O/S's!)

 - 486 or better CPU (preferably better, this emulator is in beta
    stage and is slow and incomplete).

 - roughly 4-8 MB of memory free, dependant on ROM size.

 - VGA-compatible graphics card capable of mode 13h for the following
    8-bit display modes:
     320x200        - 320x200 (squashed to fit)
     320x240 Mode-X - 256x239
 - SVGA graphics card (either with native VESA 2 support, or with a driver
    providing VESA 2 support, such as UniVBE or Scitech Display Doctor)
    for the following display modes:
     16-bit using linear framebuffer
      320x200        - 320x240
      640x480        - 640x480 (pixels stretched to 2x2)
   Note that the 16-bit modes are slower and there is currently no
    advantage to using them!

 - A reasonable monitor (if you want to use the 256x239 or Mode-X modes!).

 - A Sound Blaster compatible sound card, only needed if you enable SPC
    with sound emulation.

 - Some SNES ROM images to try out. I will NOT give images due to ethics
    and copyright laws. Don't waste our time asking.

The config file
"""""""""""""""
 A config file is used so SNEeSe remembers what state it was in when the
user quit. It can be edited with a text editor for those interested, but
most options can be changed inside the GUI, with less hassle...

 If you want to change the standard .SRM extension for Save RAM files
(perhaps to prevent corruption of saved files, in case of bugs) simply
edit the SNEeSe.CFG file with a text editor and change the line:

saveextension=SRM

to

saveextension=RAM

to use the .RAM extension, for example.

 If you want to use a fixed save directory for your Save RAM files instead
of the same directory of the ROM (to keep all your ROM directories from
getting cluttered, and to be able to use Save RAM with ROMs on read-only
media such as CD-ROM), edit the SNEeSe.CFG file and add the line:

savedirectory=D:\SRAMDIR\

replacing 'D:\SRAMDIR\' with the save directory you wish to use.
The directory specified MUST exist - if not, it will not be created,
and SRAM loads and saves will simply fail without warning.
(note: the trailing slash is not required and may be omitted)

The GUI
"""""""
 The GUI can be opened by pressing ESC during emulation. From here you
can RESUME emulation, RESET the emulation, LOAD a new SNES ROM into
the emulator, setup some CONFIGURATION options (see below), get various
infos about the loaded ROM and current emulated hardware state, and EXIT
the emulator. Pressing ESC while in the GUI closes the current window,
if the last window is closed, emulation resumes. To move the bar use the
cursor UP/DOWN controls, to choose an option press ENTER (either one
will do).

In the file loading window:
 PAGE UP and PAGE DOWN allow you to travel through the listing a window
  at a time;
 HOME will go to the top of the list;
 and END to the bottom of the files/directories (first press),
 then to the bottom of the drives (second press).

There is no exclusion by extension, and no jump-to-pressed-letter in
the file loader yet, and LFNs are truncated... sorry, but will fix
all of these soon!

 The CONFIGURATION menu allows you to change some features of the
emulation as follows:

  ???x???x???              - The first option in the list will
                             show the current emulation resolution.
                             When you press ENTER a window will open
                             allowing you to choose a new resolution.
                             If the resolution cannot be set, it will
                             revert to standard 320x200x256 mode.

  Min Frameskip: ?         - You can modify the amount of frames to
  Max Frameskip: ?           skip by pressing left or right arrow.
                             Default is 4 for maxframeskip (show at least
                             every 4th frame), 0 for minframeskip.

   Max Frameskip sets the maximum number of frames that will be skipped
    before a frame is drawn.
   Min Frameskip sets the number of frames that will always be skipped before
    a frame is drawn. a min skip of 0 tells SNEeSe to wait for at least one
    timer tick (50/60Hz) to have passed before emulating a frame (to slow
    down machines that are running too fast)
   Min Frameskip will never be above Max Frameskip. In the config file,
    'maxframeskip' has precedence over 'minframeskip'.
   Setting Min Frameskip and Max Frameskip to the same number effectively
    disables all speed-throttling.

  Keyboard on player 1     - This option toggles joystick or keyboard
                             mode for controller 1. Now toggles to
                             mouse support, in mouse mode joypad will
                             still function using keyboard controls.

  Keyboard on player 2     - This option toggles joystick or keyboard
                             mode for controller 2.
                             Only 1 joystick/joypad is supported,
                             don't map it to both unless you want
                             mirrored controls for some reason...
                             Also toggles to mouse support.

  Define keys for player 1 - This option lets you redefine the
                             keys for controller 1. Since version 0.15
                             this has been done through the GUI, it
                             shows a nice picture of the SNES joypad
                             and asks the keys. You can press ESC
                             anytime to stop redefining.

  Define keys for player 1 - This option lets you redefine the
                             keys for controller 2.

  Emulate SPC              - Toggle SPC emulation/skipper. SPC emulation
  Skip SPC                   must be enabled with below option for sound.

  Sound Enabled            - Enable/disable sound output when
                             emulating the SPC. Selects mono or
                             stereo too, NB stereo uses 2* more
                             voices so not all cards / systems
                             may support it.

Readme or don't bother e-mailing me
"""""""""""""""""""""""""""""""""""
When you attempt to use a ROM you should take note of any information
displayed on the screen. For instance, if a ROM just bombs back to DOS,
and all the information displayed looked like rubbish, the ROM image
format may not be supported by the emulator (split ROMs, certain
interleaved ROMs, certain memory maps), the ROM may be corrupted,
or the ROM may have hit a bug in the emulator.

To start the emulation, type SNEESE and then the file name of the ROM to
load, or with no filename to go straight into GUI (you can load a ROM from
the GUI, but it's painful!)

SNEESE thisrom.smc

You may also try any combination of the following switches:
Memory map:
 -fl  Force LoROM memory map
 -fh  Force HiROM memory map
ROM format:
 -fi  Force interleaved ROM (only supported for HiROM)
 -fn  Force non-interleaved ROM
Copier header:
 -h   Force ROM copier header
 -n   Force no ROM copier header
Video standard:
 -fvp Force PAL video standard
 -fvn Force NTSC video standard
Audio output:
 -ds  Disable sound
 -s   Enable sound (stereo)
 -sm  Enable sound (mono)
Video output:
 -m#  Set screen mode
  Available screen modes:
   0:320x200x256 VGA       1:320x200x256 VGA FIT   2:320x240x256 MODE-X
   3:256x239x256 VGA       4:320x200x16b VESA2     5:320x240x16b VESA2
   6:640x480x16b VESA2     7:640x480x16b VESA2 FIT 8:320x240x256 VESA2
Paths and files:
 -saveext RAM     Set extension for save RAM files
 -savedir .\saves Set save directory
Performance:
 -pt  Disable cache preloads    -pt2 Disable cache preloads (alt)
 -pb  Enable cache preloads     -pb2 Enable cache preloads (alt)
 -pm  Enable MMX support        -pf  Enable FPU copies
 -pd  Disable MMX/FPU support
Options:
 -fps Start with frames-per-second (FPS) counter enabled
 -gui Enable GUI
 -cli Disable GUI

If two or more switches conflict, the last switch takes priority.

Once the ROM title is displayed, press a key to start the emulation.

If the GUI is enabled (default):
To pause the emulation and enter the GUI, press ESC. The GUI will pop up
and allow you to return to the emulation, reset the emulation, load
another ROM, reconfigure the emulator, display information about the
ROM, or exit the emulator. Use the cursor and ENTER keys to navigate
through the menus.

If the GUI is NOT enabled:
To exit the emulation, press ESC.

Regardless of whether GUI is enabled or not:
To break out of the emulator (quick-exit) press Ctrl-Alt-End.
Use this if the emulator stops responding to input (including ESC).

If you have any helpful information on DSP, SuperFX, sound, bug fixes,
or any other emulation or general improvements, and would like to
send me some constructive comments or help (NOT - are you gonna have
DSP/FX/better sound/better graphics/more speed/etc., when for the same)
feel free to e-mail me at:

 esaelon@aol.com

Or you can visit the SNEeSe homepage at:
 http://sneese.n3.net/
 http://www.emuunlim.com/sneese/
 http://skyscraper.fortunecity.com/online/312/sneese.html

The source code for this release of SNEeSe should be available at the
homepage.

Any email about obtaining copyright ROMs will likely be forwarded to the
appropriate authorities, so don't waste our time!


About the performance switches
""""""""""""""""""""""""""""""
Switches -pt (preload_cache=0 in the config file) and -pb
(preload_cache=1) control if data areas that are expected to be written
to will be preloaded into the host CPU's internal cache before they are
used. This is likely to help performance on CPUs with a 64-bit data bus,
a write-back internal cache and no write-allocation.  Such CPUs include
original '586' Intel Pentiums, both with and without MMX, and possibly
other CPUs for similar mainboards, such as AMD K5s.

Switches -pt2 (preload_cache_2=0) and -pb2 (preload_cache_2=1) control
a limited form of the above, that should help performance on most or all
CPUs with a write-back internal cache and no write-allocation.  Such CPUs
include 486DX4s, write-back enhanced 486DX2s, Pentium Overdrive CPUs for
486 systems, AMD 5x86s, and similar CPUs.

'preload_cache' and 'preload_cache_2' both default to enabled if the
detected CPU family is 5, representing Intel Pentium and similar CPUs.

Switches -pm (use_mmx=1), -pf (use_fpu_copies=1), and -pd (use_mmx=0,
use_fpu_copies=0) control usage of MMX instructions, and usage of the
FPU for copying data.

MMX instructions will be used if MMX support is detected and 'use_mmx' is
enabled.  'use_mmx' defaults to enabled if MMX support is detected.

The FPU will be used for copying data if an FPU is detected and
'use_fpu_copies' is enabled.  This is faster on original '586' Intel
Pentiums without MMX.  'use_fpu_copies' defaults to enabled if an FPU
is detected, if MMX is NOT detected, and if the detected CPU family is 5,
representing Intel Pentium and similar CPUs.


What can SNEeSe do in this version?
"""""""""""""""""""""""""""""""""""
Emulation details:
 - 65c816 main CPU with 254/256 opcodes implemented, including BRK/COP
    interrupts. The last two remain unimplemented (WDM/STP) since they
    do nothing important and can help detect runaway ROMs!
 - SPC700 sound CPU with 250/256 opcodes implemented, running with
    on-demand execution.
    BRK/RETI, BCD (DAS/DAA), SLEEP/STOP remain unimplemented.
 - Partial sound DSP support and sound generation.
 - NMI/IRQ interrupts running (timings are a little out).
 - Hblank/Vblank CPU timing.
 - Partial SlowROM/FastROM support (fixed-cycle, buggy).
 - LoROM and HiROM memory maps (up to 32Mbit).
 - ROM loader supporting whole and split (*.1) ROM images, LoROM,
    HiROM, and interleaved HiROM, with or without 512-byte copier header(s)
 - DMA and HDMA, all 8 channels, modes 0-4 (5-7 supported but possibly
    incorrect), HDMA may have some bugs. DMA timing is not implemented.
 - Most hardware registers emulated.
 - SNES joypads 1 and 2 and mouse are supported.
 - BG modes 0-7, 8x8 and 16x16 tiles, X/Y flip, palette mapping,
    scrolling, tile priorities.
    - Full offset change support in modes 2 and 4.
    - Partial wide-tile support in modes 5 and 6 (odd pixels are skipped).
    - Partial priority-per-pixel support in mode 7 (may still have bugs).
 - Full mosaic effect in BG modes 0-4, backgrounds with no offset change.
 - Full mosaic effect in BG modes 2 and 4, backgrounds with 8x8 tiles and
    offset change.
 - Partial mosaic effect in BG modes 0-4, backgrounds with 16x16 tiles and
    offset change (vertical direction only).
 - Partial mosaic effect in BG modes 5-6 (vertical direction only).
 - Full mosaic effect in BG mode 7.
 - Screen sizes 32x32, 64x32, 32x64, and 64x64 supported.
 - Sprites are supported in all sizes (8x8, 16x16, 32x32, 64x64), with
    name and base select, priority rotation, correct sprite-to-sprite
    priorities, and correct time/range limitation.
Extras:
 - Specialized 'squashed' copy so entire SNES screen is visible on a
    standard 320x200 VGA mode 13h screen.
 - Speed-throttling with speed-capping, and minimum/maximum frameskip
    control.
 - GUI and config file.

 - Keyboard working as follows:
    The following settings are fixed:
     ESC     - Open GUI
     F1-F8   - Toggle sound channels
     F11     - Toggle FPS (frames-per-second) counter
     F12     - Toggle 'rendering break' counter
                tells how many times the delayed renderer is forced to
                synchronize rendering in the last frame
     ~       - Fast-forward (lock to the configured max frameskip)
     1-4     - Toggle BG layers 1-4
     5       - Toggle sprites
     6       - Reset BG layers/layering order/sprites/sound channels
     7       - Toggle offset change
     8       - cycle between 3 layering orders
     0       - Save PCX of current display
    The following settings are reconfigurable:
     Keypad cursor keys - joypad direction
     Q,A     - L/R buttons
     W,S     - X/Y buttons
     E,D     - A/B buttons
     [,]     - Select/Start buttons

 - A 4 or 6 button joystick/joypad can be used in place of the keyboard,
   selectable from the GUI.
   *** Joystick/joypad support is not available in this release.

What is left to do in this emulator?
""""""""""""""""""""""""""""""""""""

The following list contains a sampling of changes that are planned,
in a order vaguely similar to when they can be expected...
it may not be complete!

TO DO:
~~~~~~
 Screen rendering
  OBJ limitations: Time/range over flag emulation
  Mosaic   : Horizontal Mosaic effect in BG modes 0-6
  Performance: Implement tile-based rendering + more
  Windowing: Used to cut holes in layers, as well as determining area of
   color arithmetic
  Offset change: All offset change in mode 6
  Color +/-: This relies on windowing, and allows overlaying BGs like the
             rain in Zelda
  Direct color mode: Used in ActRaiser 2, Secret of Mana, others
  Priority per pixel in mode 7: May have priority problems
  Plenty of other missing stuff...

 Source   : More source cleanup/clarity/commentation
 Keyboard : Replace or extend keyboard handler to help with interface
 Joypad   : Implement joystick/joypad support
             (could some kind soul help out with this???)
            Button reconfig
            Better joypad hardware emulation

 Command-line interface: More control, especially over configuration
 DMA      : Implement DMA timing
 CPU      : Correct bus timing

 SPC      : Needs better communication with sound DSP
  Skipper  : Fails to work on MANY ROMs, need at least an alternate skipper
 Sound DSP: Pitch modulation, echo, FIR, correct noise, etc.

 GUI: interface cleanup/rewrite/ease-of-use/versatility/mouse

 ROM loader: More memory maps, compressed ROMs...
 Savestates: ...

Known ROM Compatibility
"""""""""""""""""""""""

 Anyone want to do a real compatibility list? Would really help!

 This compatibility list is not 100% current, and is somewhat sorted by
  time, the longer since it's been tested, the farther down on the list!
 Also - just because a ROM is listed as working, the degree to which it
  does is NOT guaranteed!

 Also, if ROM uses something listed above (windowing, color arithmetic, etc.)
  as a feature that is not currently supported, that will NOT (in most cases)
  be noted in the compatibility list.

 Additionally, if a ROM requires the SPC, this will NOT be listed, however
  if a ROM requires no SPC, that should be listed.


 Read the missing feature list for that!
---
---
 The compatibility list has been removed due to inaccuracy and lack of
  updates.

History
"""""""
 ATTENTION!
  I am aware that there is a bug where the emulator sometimes freezes
   when returning to the emulation from the GUI.
  If anyone can determine a reliable means of reproducing it, it would
   be much appreciated if they would please report it to me as soon
   as possible at: esaelon@aol.com .
  Thank you for your support!
 0.706
  65c816: Added support for the inability to acknowledge an IRQ in the
   instruction immediately after one that clears the I flag, fixes
   Marko's Magic Football
 0.705
  65c816: Optimized portions of the main execution loop
  SPC700: Optimized portions of the main execution loop, cycle
   conversions, and timer calculations
  Memory map: Removed the hack for Mega Man X/Rock Man X, it was
   mistakenly commented out some time ago, but is no longer needed
  Memory map: Added support for ROM mirroring, fixes
   Mega Man X/Rock Man X
  SRAM: Corrected addressing in 512kbit and 1Mbit SRAMs, fixes
   Dezaemon and Thoroughbred Breeder 3
 0.702
  Other: Added code to use the FPU or MMX to clear the framebuffer,
   and to allow disabling of cache preloading
  Config: Added options control usage of FPU/MMX and cache preloading
  Source: Fixed a few minor issues which prevented compilation with
   NASM 0.98.34
  SRAM: Added support for SRAMs larger than 512kbit - unfortunately,
   something must be off as nothing requiring it seems to work yet
  SRAM: Fixed a serious bug in support for HiROM SRAM larger than 64kbit
  Render: Fixed a bug which caused 8x8-tile offset change layers without
   mosaic to not display correctly in mode 4
  Render: Fixed a bug where tile priority was unlikely to behave
   properly in 8x8-tile offset change layers with mosaic
 0.701
  Sound: Fixed some issues in GAIN register emulation
  Sound: Fixed some issues related to envelope updates
  65c816: Fixed a bug in 16-bit ADC/SBC where invalid values could
   sometimes be stored in the accumulator, fixes a crash in Terranigma
 0.70
  Sound: Fixed a serious bug in ENVX reading, fixes samples being cut
   short in Super Offroad: The Baja
  Sound: Fixed a serious bug in mixing epilog, fixes freezes in
   Terranigma
 0.694
  Render: Fixed a bug which caused char 0 repeat outside the screen
   area to not work
  Render: Added full mosaic effect to modes 2 and 4, 8x8-tile backgrounds
   with offset change
 0.692
  Render: Fixed a bug in modes 5-6 where screen map selection was
   sometimes incorrect when 64-tile screen width was used (fixes
   Seiken Densetsu 3 menu screens)
  Timing: Fixed a bug where IRQs could be set for non-existant H-timer
   positions
  Render: Added full mosaic effect to modes 0-4, 16x16-tile backgrounds
   without offset change
 0.69
  SPC700: Eliminated some self-modifying code
  Timing: Fixed an IRQ-related bug in register $2137 (SLHV) (thanks to
   SNES'9X)
  Render: Added full mosaic effect to mode 7
  Render: Added full mosaic effect to modes 0-4, 8x8-tile backgrounds
   without offset change
  Timing: Changed timing of RDNMI/HVBJOY vblank start closer to NMI
   like it was before 0.68 - fixes ActRaiser title
  PPU: Eliminated some self-modifying code
  PPU: Fixed a bug in VRAM access (fixes some issues on Earthworm Jim 2
   copyright screen)
 0.68
  Input: Fixed a bug in the input code
  GUI: Added the ability to configure shift keys for controllers
  Source: Fixed a makefile issue where non-profiling builds were
   linked with profiling enabled - it is safe to delete the
   gmon.out files that were being produced (thanks to stainless
   for reporting)
  Render: Overhauled 8x8 tile background plotters
  65c816: Fixed several address wrapping bugs
  65c816: Optimized 16-bit loads
  SPC700: Fixed a bug in POP PSW where the 'direct page' offset was
   sometimes incorrectly set, fixes Super Punch-Out!!
  SPC700: Various minor bug fixes and optimizations
  SPC700: Optimized 16-bit loads
 0.666
  Render: Fixed a bug which was causing BG3 high priority tiles to not
   be drawn in mode 1 when BG3 highest priority was disabled
  Render: Restructured the 16x16 tile background plotters
  Render: Added support for offset change in modes 2 and 4,
   16x16-tile layers
  Render: Fixed a bug in the offset-change elimination speed hack
   (was causing it to sometimes disable offset-change despite it
   being used)
  Render: Corrected address wrapping for the vertical offset table in
   mode 2, fixes WWF Wrestlemania Arcade
  PPU: Altered background offset register behavior, fixes Theme Park
   (thanks to anomie and Matthew Kendora)
  Sound: Changed the behavior of the BRR decoding rate for noise-enabled
   channels
  Render: Fixed an OBJ setup bug for large OBJ partially off the left
   edge
  GUI: Fixed a bug where the logo wasn't always displayed
  Logo: Thanks to stainless for providing a new logo!
 0.665
  Render: Corrected OBJ range limitations (thanks to anomie and Neviksti)
  Render: Removed BG3 highest priority from mode 0 since it doesn't
   actually exist (thanks to anomie)
  Render: Readded mode 7 rendering for the sub-screen
  SPC700/APU skipper: Added APUI00-APUI03 port mirroring
 0.662
  Render: Corrected mode 7 EXTBG (priority-per-pixel) emulation
   (thanks to anomie and Neviksti)
  PPU: Corrected OAM register emulation (thanks to anomie and Neviksti)
 0.66
  Sound: Fixed sound DSP key-on behavior
  Sound: Fixed a memory leak when sound was disabled
  Sound: Fixed crashes when switching sample sizes
  Sound: Fixed some issues with 8-bit sound
  Sound: Overhauled portions of the mixing code
  Render: Enabled some portions of the tile cache code which should have
   been already
  Source: Overhauled the makefile
  Source: Reorganized background rendering code
  Render: Added support for offset change in mode 4, 8x8-tile layers
  Render: Added code to eliminate emulation of offset-change when it
   is unused
 0.653
  Sound: Fixed sound<>SPC timing speed, the conditional-compile directive
   was placed a few lines too late
 0.652
  Sound: Fixed a sound DSP behavior issue - DSP address bit 7 is
   significant (was ignored since 0.625), fixes Donkey Kong Country
   series, others
 0.651
  Render: Fixed a few cases where a segment register was not properly
   restored
  Render: Cache-related optimizations in mode 7
 0.65
  65c816: Optimizations in flag handling and memory access
  SPC700: Optimizations in memory access
  Render: Altered method of decoding 4- and 8-bitplane tiles
  Render: Altered method of clearing framebuffer
 0.641
  Source: Removed some debugging code that was no longer needed
  Source: Removed errors and warnings when compiling under GCC 3
 0.64
  Render: Simplified/reoptimized mode 7 rendering
  Render: Corrected depth of low priority sprites in mode 7
  Timing: Fixed a bug which caused some events to occur one instruction
   too late
  Render: Overhauled sprite limitations and priority rotation,
   fixes Final Fantasy: Mystic Quest, perhaps others
  SPC700: Optimizations in flag handling
 0.63
  Render: Reimplemented priority-per-pixel in mode 7
  Render: Fixed a bug that caused some calculations to be done too
   often in mode 7
 0.625
  Sound: Removed some debugging code that was breaking Secret of
   Evermore
  Sound: Altered some of the envelope update timings
  Render: Fixed a mode 7 off-by-one-line bug
 0.62
  Sound: Fixed severe slowdown when sustain was set to infinite
  Sound: Fixed severe slowdown with noise
  65c816: Fixed a crash bug related to WAI instruction
  Render: Fixed a bug where sprites were not recomputed when highest
   priority sprite was changed (fixes star sprite test in test ROM)
  Timing: Changed first non-vblank scanline to 0
 0.61
  Frameskip: Fixed two bugs in the speed-throttle code: one when speed
   limiter was disabled (min frameskip > 0), one when fast-forward was
   used
  Render: Added code to eliminate emulation of unneeded priorities
  Render: Reoptimized and overhauled the general structure of mode 2
   offset change emulation
  Render: Fixed a bug in mode 7 outside-screen-area clip mode
  GUI: Fixed the behavior of the FPS counter for FPS > 99
  GUI: Added a 'rendering break' counter - tells how many times the
   delayed renderer is forced to synchronize rendering in the last frame
  GUI: Modified the keyboard handling to solve stability issues caused
   by a problem in the DJGPP/Allegro code - GUI is again enabled by
   default
  Sound: Fixed the register behavior of disabled voices
  Sound: Fixed sample looping when loop position changed
  Sound: Improved performance of sound generation
  Sound: Added option to allow generation of 8-bit output samples,
   and a GUI option to toggle sample size
  Sound: Added a config file option to select the Allegro mixer mode
  Configuration: Added 320x240x256 VESA2 screen mode as mode 8
 0.60
  Render: Fixed a bug in mode 7 vertical-flip
  Render: Rewrote sprite rendering again - improves speed
  Configuration: Restructured config file
  Render: Added independent horizontal/vertical stretch options
  Source: Now linking with Allegro 3.9.34
  DMA: No longer preventing HDMA register from being written to during
   display - fixes some graphics glitches in Chrono Trigger
  PPU: No longer allowing writes to VRAM and OAM outside v-blank,
   force-blank
  PPU: No longer allowing writes to CGRAM outside v-blank, h-blank,
   force-blank
  65c816: Modified cycle counter and wait-for-interrupt emulation
  Timing: Improved 65c816<>SPC700 timing slightly
  GUI: GUI is now by default DISABLED because of instability - those who
   still wish to bear with it can enable it via a commandline switch
  Commandline: Added several new configuration switches
 0.55
  Sound: Many changes to volume envelope timing
  Sound: Corrected synchronization of sound mixing and volume envelope
   generation
  Sound: Implemented noise generation
  Sound: Changed sound to use a double-buffering method - sound may
   skip on slower systems
 0.53
  65c816: Fixed a bug in the MVP/MVN opcodes that could seriously
   disrupt timing (fixes Final Fantasy: Mystic Quest)
 0.52
  Stability: Fixed a serious bug in the tile decoder that has caused
   crashes since the decoder was rewritten in 0.40
  Timing: Corrected an error in the CPU timing
  Interface: Added a fast-forward key (tilde)
 0.51
  Render: Fixed a bug that caused some sprites to be corrupted
 0.50
  65c816: Completed the memory mapper changes started in 0.49
  Source: Moved some debugging-related code into its own file
  Source: More source cleanup
  Stability: Fixed bugs in SRAM loading/saving (files opened weren't
   being closed) - appears to have fixed the last of the exit crashes
  Config: Changed the default save RAM file extension to SRM, and
   removed support for the old 'frameskip' setting in the config
   file
 0.49
  Render: Implemented BG3 highest priority in mode 0
  Render: Corrected wrapping from end of tilesets
  GUI: Now uses standard keyboard controller auto-repeat
  Interface: Emulation no longer pauses when pressing certain keys
   (ESC to go to GUI, F1-F8 to toggle sound channels, 1-8 to change
   render options, 0 for screenshot)
  65c816: More changes to the memory mapper, for speed, accuracy, and
   allowing execution of code from SRAM (does anything use this?)
 0.48
  Source: Ported the sprite decoder/plotters to NASM
  Source: Ported the background layer decoder/plotters to NASM
  Source: Ported the hardware port handlers to NASM
  Render: Removed a sprite 'fix' I put in back in 0.47 - did nothing
   except slow things down
  Display: Removed an unnecessary part of the screen mode setup code
  Render: Fixed a bug that caused sprites to be disabled when mode 7
   layer was disabled
  Memory map: Added support for the special memory map used by
   Rock Man X and Mega Man X (allows uncracked ROMs to work properly)
 0.472
  Source: Ported the tile decoder/plotters to NASM
  Startup: Pulled out some debug code that caused the emulator to
   silently wait for a keypress at startup
 0.47
  GUI: Extended the width of the Load ROM window (per request)
  Source: Ported the mode 7 emulation to NASM
  Display: Tweaked with the 256x239x256 setup code - appears to have
   been causing problems under some conditions
  Config: if it can be detected that a full path was supplied to start
   the emulator, it will now force the current directory to that path
   (temporary fix for Windows Explorer drag-and-drop startup until I
   do it a more elegant way) - ensures SNEeSe can find its .cfg and .dat
   files
  Config: Fixed some of the defaults used when a config file isn't
   present
 0.46
  GUI: Fixed a few bugs that didn't allow the mouse to be enabled/used
  Source: Ported the DMA emulation to NASM
  Timing: Fixed a source inconsistency bug which could cause
   unpredictable SPC timing
  CPU: Altered the main memory mapper, should be faster than before
  Source: Ported the SPC700 CPU core to NASM
  65c816: Went back to more accurate stack operations in native mode
  Source: More cleaning up under the hood
  Render: Now clearing lines between actual end of display and maximum
   end of display
  Stability: Changed the way the internal render surface is transferred
   to the display - appears to have fixed the crashes during exiting
   that have been around since 0.43
 0.45
  Sprite: Fixed sprite intermediate render buffer clearing -
   fixes garbage sprites in Bill Laimbeer's Combat Basketball, probably
   others
  Source: Fixed source to compile with and now compiling with
   GCC 2.95.2, Allegro 3.9.32 WIP
  NOTE: All keymaps set in cfg files from previous versions are
   incompatible, and must be reset!
  Stability: No longer using GCC asm labels, as GCC doesn't seem to be
   handling them correctly causing stability problems
  Stability: Wasn't always setting es register up for string instructions,
   fixed
  DMA: Now updating DMA transfer size after PPU->CPU DMA
  Timing: Made several changes to improve IRQ function - fixes SF2
   Turbo, New Ninja Warriors, probably others
  Source: Ported the 65c816 CPU core to NASM
  Stability: Noticed I wasn't locking a var used in interrupt context,
   fixed
  Allegro: Disabled Ctrl-Alt-End/Ctrl-Break exiting until I can figure
   out why they sometimes restart my computer under Win95
  Timing: Changed the way CPU cycle counts are translated into SPC
   cycles - should allow for closer CPU<>SPC synchronization
 0.441
  APU skipper: Fixed a nasty bug that caused the emulator to crash
   upon entering the GUI if the APU skipper was enabled
 0.44
  Render: Implemented correct sprite priorities (helps MANY ROMs:
   Chrono Trigger, Super Mario Allstars, Terranigma to name a few)
 0.43
  Logo: Thanks to neptron (http://ciot.pair.com/neptron/) for providing
   a new logo!
  Disclaimer: Updated the disclaimer with more information on how
   SNEeSe may and may not be distributed
  Render: Wasn't resetting deinterleaved VRAM during Reset, now doing so
   (combined with resetting VRAM to 0, fixes missing tile on ActRaiser
   mode7 logo)
  PPU: Implemented delay-by-one-word read, from SNES'9X
   (was hoping it would fix Captain America... no luck)
  ROM loader: Added support for split ROMs (*.1)
  GUI: Fixed the controller configuration window (joypad pic was missing)
  Render: Fixed an offset change map address computation bug;
   helps vertical offset change in mode 2 (Tetris Attack looks much better)
  Render: Added tile priorities to offset change enabled mode 2
   (helps Art of Fighting)
  Render: Implemented priority per pixel in mode 7 (helps F1 Grand Prix)
  Render: Fixed a possible offset change map address wrap bug
  Render: Added horizontal scrolling support to mode 2 offset change
   renderer
  Render: Added screen size support to offset change map in mode 2
   offset change renderer (fixes Chrono Trigger menus!)
  Render: Added horizontal offset change to mode 2 offset change renderer
  Sound: Butcha: Implemented custom mixer - improves sound greatly in
   most cases (seems to have problems with some configurations? :( )
  HDMA: Implemented HDMA-start-within-frame (fixes Killer Instinct)
  Render: Changed the way the internal bitmap is stored/handled
   (helps mode-X speed, allows screenshots in linear VGA modes)
  GUI: Worked on the Load ROM interface a bit - '.' dir is now excluded,
   directories are updated in their entirety (not one window at a time),
   sorting is done (both in names, and in types - files are at the top,
   followed by dirs, then drives) you can use the HOME and END keys now,
   and drive switching can be done (A:-Z: are listed at the far bottom)
   -note: for directories larger than 998 entries, only the first 998
    entries will be read!
  Sound: Now allowing ENVX (envelope height) reading to be disabled in
   the GUI (helps Bomberman series)
  Sound: Fixed a bug that allowed the sound code to be used when the
   SPC was disabled
  Sound: Hacked in a fix to prevent some ROMs (Bill Laimbeer's Combat
   Basketball) from crashing the emulator
 0.41
  Render: Added 3-way layering order cycle, press 8 key
  Timing: Made a few tweaks that may improve IRQ timing
  Sound: Butcha: Implemented cycle-exact ADSR calculation, this fixes or
   improves sound on some things (Rampart), worsens on others
 0.40
  65c816: Fixed a bug that could cause WAI to miss a waiting IRQ
  Source: Many changes to reduce repetition in 65c816/SPC opcodes
  65c816: Made a few improvements to the register allocation
  Sound: Fixed a possible buffer underrun bug
  PPU: Went back to the old VRAM read method - 'VRAM read buffering'
   might make more sense, but it doesn't work well with ActRaiser...
  PPU: Fixed a bug in VRAM full address increment (untested...)
  Render: Completely changed the tile caching method
  DMA: Made a few slight changes to the DMA/HDMA emulation
  Timing: Rewrote event handling, now using more correct timing for
   rendering and HDMA
  Timing: Implemented pre-NMI delay (fixes Chrono Trigger intro freeze)
  Timing: Fixed controller ready bit in HVBJOY (fixes Chrono Trigger
   combat slowdown and combat menu flickering)
    Thanks to Neill Corlett for info!
  Timing: Implemented much more correct H-IRQ timing, should also allow
   multiple H-IRQ's on a scanline
  Source: Ported some of the source from GNU-AS (GAS) to NASM
   (memory mapper, APU skipper, special screenmode setup)
  Joypad: No longer reporting parodoxical inputs - up and down can
   no longer be pressed at the same time, nor can left and right
   (fixes a potential problem in Zelda 3 name entry)
  SPC700: Now updating SPC timers at least once every Vblank
  SPC700: Fixed a major bug that caused the SPC to freeze after about
   17.5 minutes of virtual execution
 0.371
  Config: Added save directory support (must be set manually in cfg file,
   read the config file section of the readme for info)
 0.37
  PPU: Modified the way VRAM read is done - now uses 'VRAM read
   buffering' which makes MUCH more sense, thanks to Ben Parnell
   of FCE Ultra (NES emulator) for info!
  Sound: Made a few improvements to the sample decompression routines
  Sound: Figured out why Soundscape cards weren't getting any sound
   and told Allegro to put the drivers in
  Sound: GUI should now be quiet on more cards
  CPU: Completely redid CPU opcode timing tables - thanks to Neill
   Corlett for better timing info!
  CPU: More improvements to the execution loop
  HDMA: Removed some unnecessary code that was in since the last rewrite
  Source: Removed an erroneous extra line in one file, thanks to TNSe^1999
   for finding this...
  Source: Added a kludge in many files to work around the DJGPP linker's
   lack of object file alignment
  SPC700: Changed flag format conversion to use lookup tables
  65c816: Fixed a few bugs related to the Break flag in emulation mode
   (allowing Break flag to be cleared, Break flag set on stack after NMI)
  65c816: Simplified stack operations
  PPU: Fixed a bug that caused CGDATAREAD to be disabled
  Commandline: Added support for video standard forcing (-fvp to force PAL,
   -fvn to force NTSC)
 0.36
  CPU: Timing base changed
  CPU: Redid the FastROM support, improving speed in cycle counting
  IRQ: Improved IRQ support (IRQs were being ignored in Vblank before,
   fixed)
  PPU: Improved joypad hardware emulation ('automatic read' timing)
  SPC: Improved speed in opcode fetcher, some source changes
  SPC: Now only resync'ing on CPU-SPC communication and on the start
   of Vblank (when sound update is done), doesn't appear to worsen
   anything and improves speed
  Other: Redid some of the debug dump from when the emulator exits
 0.35
  SPC: Many more optimizations and some source cleanup
  SPC: Fixed yet another bug in the CPU-SPC cycle calculation code -
   caused Reset to cause 'unpredictable behavior' when the SPC was enabled
 0.34
  Render: Slight tweaks inside the renderer, including a modification
   to the back area color addition hack
  Render: Implemented mosaic effect (vertical direction only)
  Render: Major tweaks to the vertical offset change support in mode 2 -
   still not correct but appears better
 0.33
  SPC: Fixed a very stupid, nasty bug that showed up in 0.26, that
   caused the DIV YA,X opcode to corrupt the stack pointer
  Sound: Fixed a bug that caused the sound driver not to be installed
   if a ROM filename was not specified on the command line
 0.32
  Sound: Fixed some problems that caused sound generation to be used
   when sound was disabled
  SPC: Fixed a bug that caused SPC timers to lose cycles in conditional
   branches
  SPC: Now allowing SPC timer targets to be set when timer is enabled
   as it seems to fix other timing problems
  Render: Fixed some problems with layers using 16x16 tiles having
   small virtual screens
 0.30
  GUI: Fixed yet another small GUI bug
  Joypad: Tore out the old joypad code
  Allegro: Now linking with Allegro 3.11, should fix some sound card
   incompatibilities
  SPC: Bug fixes in 4 SPC opcodes, and a serious bug in the SPC CTRL
   register fixed, AND a new sound DSP/sound generation core, all
   thanks to Butcha! (Compatibility noticably improved!)
 0.277
  SPC: Fixed timer 2 to be a 64kHz timer - had mistakenly made it 8kHz
   in the rewrite
  SPC: Fixed some bugs in the sound DSP, that could have potentially
   caused memory overwrite
 0.276
  APU skipper: fixed a nasty bug that showed up in (and went unnoticed
   since) 0.27, caused severe SNES timing problems
  GUI: Fixed a bug causing the CPU Reset to freeze up when the SPC is
   enabled after it having been disabled during execution
 0.275
  SPC: Many more optimizations to opcode fetcher
  SPC: Implemented TCALL instruction
 0.27
  SPC: More optimizations
  SPC: Completely rewrote SPC timers - fixes some SPC problems and sound
   playing too fast or slow
  SPC: Forcing SPC to 'catch up' once per 65816 'scanline' time period,
   may clear up more sound quirks (until sound generation code can be
   rewritten)
  Timing: Vblank timing adjusted slightly
 0.26
  HDMA: Fixed a bug where the transfer size for the first line of a set
   was corrupted
  HDMA: No longer repeats write to register for continue mode
  IRQ: Put in a better H-IRQ hack, until I do the timing
  Render: Palette is set for highest brightness in the frame (helps
   Chrono Trigger, SF2 series, others), thanks to an anonymous person
   for help
  Timing: Hblank timing code simplified
 0.251
  Render: Fixed the back color add hack (Mario World blue sky, others)
   that got broke somewhere along the way.
  Source: Fixed some problems in the makefile that gave some users
   trouble rebuilding.
 0.25
  CLI: Implemented a basic commandline interface, providing a means to
   override ROM loader autodetection
  Released to the public!
 0.25b17
  Timing: Reworked how Hblank is handled
  SPC: Now forced to 'catch up' once a frame, solves the 'lags' and
   improves sound overall
 0.25b16
  SPC: Source cleanup, general optimization (register allocation needs
   more improvement), a few more fixes
  DMA: Fixed a bug where DASL/DASH was not being reset to 0 after general
   DMA transfer (thanks to ESNES and Trepalium for pointing me to DMA -
   F-Zero is fixed!!!)
  Render: Fixed a stupid, nasty, bug in the new sprite code
 0.25b15
  GUI: Fixed another bug with changing SPC enable (menu item wasn't changed)
  Render: More changes to sprite render code
  PPU: Slight change to 16x8 multiply
  PPU: Fixed the emulation of the RDNMI register/timing - thanks to
   archeide of SNEmul for pointing me in the right direction!)
  65816: Fixed the write order of some instructions
  SPC: Now treating SLEEP and STOP as invalid opcodes for debugging purposes
   (is there any point in emulating these, similar to the 65816's STP?)
  SPC: Fixed part of the SPC register dump
  SPC: Implemented hidden 64 bytes of RAM at top of SPC address space
 0.25b14
  Fixed a bug in the GUI with changing SPC/sound enable
  Added a FPS counter - it works, unfortunately you can't always see it...
   must be enabled in the GUI
 0.25b13
  Reversed plot order back to the way it used to be before 0.16 - another
   speed increase (doh!)
 0.25b12 (unreleased)
  Implemented deinterleaved VRAM storage and a new mode 7 renderer:
   VRAM is now also stored as 32k low bytes and 32k high bytes. This has
   minimal effect overall but may provide a mode 7 speed increase, in
   particular for low-end systems (486)
  Fixed a bug where disabling mode 7 also disabled sprites
  More layering priority fixes in modes 2-6
  Altered the 256x240 mode to get rid of a lot of the excess border
  Reduced the 256x240 mode to 256x239
  Modified the way screen modes are handled with the GUI
  More tweaking with DMA/HDMA emulation
 0.25b11
  Tweaked with the screen core a bit, removing a lot of redundant code
  Improved the header detection in the ROM loader (thanks to Gridle for the
   suggestion)
  Modified the way frameskipping is handled
 0.25b10
  Tweaked with the controller code a bit - now DKC and Mario All Stars
   work as expected
 0.25b9
  Fixed a bug in VRAM read ports - they were suggested by zsKnight as a
   likely cause of gfx corruption, and making a change to match a noticed
   difference in the '9X source, gfx corruption went away in the following
   ROMs, and likely others: ActRaiser, FF2, Super Metroid, Wario's Woods...
  Fixed a stupid bug that showed up in 0.25b8 that stopped FF2 from starting
  Several layering priority fixes
 0.25b8
  Removed H-IRQ hack as it was causing more problems than it helped
  Implemented partial support for delayed IRQ
  Implemented a hack in WAI which causes the CPU timing to skip ahead to the
   next event
  Some SPC optimizations
  Another doc was wrong: increased SPC RAM back to 64k, sound is back to
   being reasonable (timing is still terrible)
 0.25b7
  More CPU speed-ups
  Hooked SPC back up with on-demand execution, however sound is not
   considered a 'demand', and SPC is slow and buggy still.
 0.25b6
  Layering priority fix: BG3 highest priority in mode 1 - BG3 high priority
   tiles now drawn over highest priority sprites, not under (helps Mario
   World map)
 0.25b5
  Fixed a bug in full VRAM address increment
  Fixed a bug that sometimes caused Reset to freeze emulator
  Fixed mode 7 outside-screen-area clip/char 0 repeat - it appears that
   two docs were wrong on this...
  Native mode XCE no longer forces M/X bits set
  Now always keeping 65c816 flags in a register during opcode execution
  More source reorganization
 0.25b4
  Fixed a bug in scrolling hardware ports
  Rewrote more opcodes to take better advantage of new opcode fetcher
 0.25b3
  Implemented alternate 65c816 opcode fetcher (should be considerably
   faster - original one likely to be removed in the future)
  Implemented interleaved HiROM support in ROM loader
 0.25b2
  Finished hooking in last of new horizontal calc code
  Slight speed-up tweak in 65c816 emulation
  Fixed a nasty bug that showed up in 0.25b1 that caused severe gfx
   corruption in at least one ROM (ActRaiser)
 0.25b1 (doh! date in readme said 4-3, should have said 23-3)
  Rewrote horizontal scrolling calc code to reuse data
  Reworked some of the tile cache invalidate tables/recaching code to
   store information on certain special cases of tiles to limit some
   unnecessary checks
  Implemented OAM decode caching - this increases sprite rendering speed
   noticably - more optimizations possible here...
 0.17b7
  Fixed data store method of double write registers (BG scroll, M7 matrix)
  More speed up tweaks in memory mapper and screen core
  Fixed a bug in HDMA code - fixes GPFs after fights in FF5, extra
   sprites in TMNT4 and missing sprites in Killer Instinct
  Disabled DJGPP LFN support (was causing problems in the Load ROM file
   selector in the GUI, because it's still expecting 8.3 filenames)
   Thanks to Lanice for pointing out the crashing! (doh)
  Rewrote a lot more bits of the GUI to use OOP and allow more advanced
   features to be implemented in the future
  Compiling in two new fonts: the font from ZSNES (thanks zsKnight!),
   and a slightly cosmetically modified version of the same
   (only the modified font is available in the GUI at this time)
 0.17b6
  More internal work on GUI
  Fixed a bug in mode 1 background priorities with BG3 high priority
   enabled - helps intro in FF5
  Oops! Removed some code that shouldn't have been in b5 - was causing
   the ROM loader to create a test file the size of the loaded ROM
  Fixed a bug that caused the color subtraction in back area hack to
   kick in sometimes when it shouldn't
 0.17b5
  Fixed a bug in the ROM loader that caused it to get in an endless loop
   on ROMs that weren't an even multiple of 32k (excluding header)
  Fixed a bug that prevented HiROM SRAM from working AND allowed it to
   overwrite other memory
  Implemented SRAM mirroring in HiROM
  Reduced SRAM allocated to 64k and SRAM supported in HiROM to 64k
  Changed the value certain areas of RAM were initialized to to closer
   match SNES '9X
  Changed memory mapper so LoROM/HiROM shared more code/data
  ROM loader: replaced the fstream code with stdio code - this seems to
   fix the problem with 32k ROMs not loading correctly
 0.17b4
  More work on background plotting speed, hw port emulation speed/accuracy
  SPC disabled - stopped working sometime between b2/b3 and needs to be
   rewritten anyway
  More CPU speed
  Fixed many non-emulation related bugs that caused crashes in pure DOS,
   and forced the switch to WDOSX before
  Reverted to standard DJGPP stub now that WDOSX is no longer necessary
  More fixes to LoROM SRAM mapping - SNES '9X source and one problematic
   ROM provided insight into the workings of SRAM mirroring
  Improved emulation of CGDATA/CGDATAREAD:
   now use seperate vars for odd byte reads
  DMA modes 2+ had been disabled for some strange reason (doh!) - fixed
 0.17b3
  Now using WDOSX, because of having too many problems with the standard
   DJGPP stub
  Moved plenty of code around in gfx engine for potential speed increase
   and code size reduction
  Most data moved around in hw port emulation
  Most hw ports now reset in Reset (used in 'Reset Emulation' and
   'Load ROM' in GUI) - some still remain (especially in SPC)
  More work on ROM loader
  Can now go in GUI without specifying ROM on command line, however trying
   to load a ROM in GUI is still painful!
 0.17b2
  Simplified hardware ports in memory mapper
  Improved emulation of OPHCT/OPVCT
  Statically allocating SRAM, WRAM, VRAM, SPC address space, OAM now
  Improved emulation of OAMDATA/OAMDATAREAD:
   now use seperate vars for odd byte reads
  Fixed a bug where 8 bytes too few were being allocated for OAM
  SRAM allocation halved (only 128k now)
  LoROM: SRAM supported reduced to 64k, writes prevented if ROM says less
   exists (allows Puzzle Bobble to start)
 0.17b1
  Implemented speed throttling (thanks to Richard Mitton of the New
   Zealand Story Emulator for help with this!)
  GUI overhaul begun ('3D' appearance added, code is becoming more object
   oriented)
  CFG handler rewrite begun
  Source cleanup/overhaul begun
  LoROM 16+Mbit and HiROM memory maps fixed (thanks to zsKnight for help!)
  Implemented Hblank emulation/CPU timing (thanks to zsKnight and the '9X
   source for help and info!)
  Fixed emulation of SLHV register (thanks to '9X source for info!)
  Fixed SPC memory map to only have 32k of RAM
  Fixed a few CPU opcodes
  Fixed a memory overwrite bug in a few CPU opcodes which caused the
   emulator to deconfigure controller keymaps

 0.16f: Various bug fixes and speed-ups.

Thanks go out to...
"""""""""""""""""""
 Nintendo, for making the SNES...
 and the SNES software developers, who suffered through the SNES design,
  showing what it could do, and making it what it is today!

 Pastor M. M. Angel: you know what you're doing with code...
 Y0SHi and Marat Fayzullin: Nintendo emulation wouldn't have come nearly
  this far without you...
 Lord ESNES: For supporting SNES emulation so much, and giving so much
  help to the authors of the more primitive SNES emulators...
 SNES '9X team, past and present: for putting so much effort into making
  it what it is today... fix those quirks!
 ZSNES team, past and present: zsKnight, _Demo_, Pharos, pagefault,
  stainless, ...: For ZSNES. Need I say more?
 Lee Hammerton: for bringing this so far and giving me the opportunity
  to make it live on...
 archeide, Brad Martin: for getting the SPC and sound DSP and generation
  working in the first place...
 zsKnight: for always being so helpful!
 archeide: hope you get that tile editor figured out...

 Richard Ferreira (general code and optimization ideas and support)
 Richard Mitton of the New Zealand Story Emulator (speed-throttling ideas)
 zsKnight (for providing so much help and info... HDMA, memory maps, timing,
  and the list goes on...)
 SNES9X team (for spending so much time on trying to make such an exact
  emulator, and releasing the source to it!)
 zsKnight, for the 5x5 font for the GUI!
 Lanice, for finding the LFN bug in the GUI!
 KnucklesD, for getting on my case to put in save dir support!
 Windwalker, neptron, and stainless, for the logos!

 Beta testing:
  RibOnIzEr, QbProgger, AC/DC, Malenko, Richard Ferreira
  Y0ssarian, PoleStar, Steve, Vilmar, Enternal, [E|YSiUM], Goku-X, JaguarPaw,
  JJJJ, KnucklesD, dps, Cowering, Lanice, EddyB43 from EFnet-#snesromz and
  #classicgames, never coulda done it without you!

Greets
""""""
 TCF, Borson, neptron, Avarice, KnucklesD, Richard Ferreira, AC/DC
 Goku-X, Lanice, Azimer, TNSe, dps, polarz, rOss, Neill Corlett,
 Richard Mitton, illus, Slaik, StCreator, RibOnIzEr, Thane, QbProgger,
 krial, pagefault, stainless, Zero-X, MrGrim, kode54

 Everyone from EFnet IRC #snesromz, #classicgames, #snesdev, #zsnes, #mugen,
  and Newnet IRC #snesromz

 Savoury SnaX and Gridle

 archeide, Tim Riemann, Brad Martin, Qwertie, Martijn Kersbergen, B. Walker,
 Paul Robson, Aquarius-1, D.Kieselhof, zsKnight, _Demo_, Pastor M. M. Angel,
 Y0SHi, Albert Lloyd Sawyers, Zachary Williams, Lord ESNES, Jonathan Turner,
 W/\re\/\/0lf, Malenko, James Cartrette, Duncanthrax, rRNA, Dark Claw,
 Poiple Shadow, Flash, Windwalker, Chris Lacey, MaJiC, Dark Elf, Shade,
 + any I forgot.

License
"""""""
SNEeSe is copyright 1998-2002, Charles Bilyue'.

 Section 1. Description of project

 SNEeSe is a Nintendo SNES (Super Nintendo Entertainment System) and
  SFC (Super FamiCom, Super Family Computer) emulator. SNEeSe recreates
  through software a similar environment to the Nintendo SNES/SFC hardware,
  for the purpose of execution of SNES/SFC native software.

 Section 2. Definition of terms

 Unless otherwise specified, 'SNEeSe' refers to all source, binary,
  executable, and object code, all documentation, and all other material
  relevant to the development, production, use, and instruction of the
  SNEeSe emulator program.

 Unless otherwise specified, 'you' refers to the user of 'SNEeSe' (as
  described above).

 Section 3. Disclaimer of liability

 Any actions you initiate or perform involving SNEeSe, and any consequences
  of those actions are your responsibility. Responsibility for any of the
  aforementioned actions, including any damage which may result from it,
  is assumed by you.
 Permission is provided to use SNEeSe only in a manner which does not damage
  yourself or others. Any other use is a violation of this license.

 Section 4. What is expected of the user

 SNEeSe is helpware. If you see a problem, please attempt to remove or
  repair it, or notify the developer(s) of its existence.

 The user is allowed to use SNEeSe only if the user reads this license and
  agrees with and abides by the rules set forth by it.

 Use and distribution of SNEeSe is expressly prohibited by all who fail
  to read, agree with, or abide by the rules of this license, and
  constitutes a violation of license.

 Section 5. Distribution

 I grant all parties, not otherwise prohibited, privilege to distribute
  any SNEeSe public binary releases and any SNEeSe public source releases
  in any form, on any media, provided that:

  a) all files in the original release archives (sn*b.zip, sn*s.zip) are
   unmodified, unprocessed, and intact; they may be distributed either
   compressed (either in the original archive(s) or recompressed) or
   uncompressed (alone in their own respective directories, hereinafter
   considered identical to archive(s));
  b) if SNEeSe is distributed on physical media (floppy disk, CD-ROM,
   etc.) then the source and binary releases must be on the same physical
   media, in different archives;
  c) no files are added, removed, modified, or replaced from the archives,
   with the exception of adding a description file, and/or a single-file
   statement from the distributor;
  d) no commercial ROM images nor other commercial software are available
   on the same media ('web page', FTP server, DCC file server, floppy
   disk, CD-ROM, etc.) as any SNEeSe-related file (publicly or privately
   released binaries, source, documentation, logos, webpage source, etc.);
  e) if SNEeSe is to be distributed on the same media (as described above
   under subsection d) with any non-commercial ROM images or other non-
   commercial software, it must not violate the licenses for either SNEeSe
   nor said ROM images or software, and it is recommended that the current
   maintainer of SNEeSe be notified;
  f) whenever SNEeSe source and binary releases are distributed on the
   same media (as described above under subsection d), they must be kept
   seperate, in their own respective archives; and
  g) if the media, or the access to said media, by which SNEeSe is
   distributed is to be sold (as in a commercial venture), no more than
   a nominal fee for copying (not to exceed US$1.00) and, in the case
   where the actual physical media is sold, a nominal fee for the media
   (not to exceed US$4.00) may be charged, without prior written consent
   from the current copyright holder.

 This license grants absolutely no permission to distribute non-public
  releases of SNEeSe of any form, though any such permission that may be
  seperately granted would, unless otherwise agreed upon, also be subject
  to the above rules.

 It is highly recommended that the availability of the source code be
  mentioned when the binary in distributed, though it is not required.

 Distribution of SNEeSe with commercial software, including commercial
  ROM images, is expressly prohibited, unless otherwise agreed upon by
  the current copyright holder of said software.

 Such prohibited distribution is a violation of this license, and may be
  harmful to the developer(s) of SNEeSe, and to the emulation 'community',
  and is considered morally wrong.

 Sale of SNEeSe, in whole or any part, is expressly prohibited. The maximum
  charges allowed for distribution are listed above.

 Section 6. Distribution of modifications

 The following modifications to SNEeSe are expressly prohibited:

  any modifications to SNEeSe which circumvent the license verification;

  any modifications which make SNEeSe intentionally harmful in any way
   (damaging files, adding a virus, other actions which are not expected
   by potential users, etc.);

  any modifications to the SNEeSe license which inhibit it in any way;

  any modifications to any SNEeSe documentation, including the filenames
   (changes must be documented in a seperate file);

 Distribution of modified versions of SNEeSe must not contain such
  modifications, and must also adhere to the following:

  all modified versions must be based upon an official public source
   release;

  all original documentation of the version of SNEeSe that was used as a
   base must be included, unmodified;

  the source code for modified versions must be made available from
   the same distribution method as binaries, in a 'diffs' output file
   relative to the official public source release that was used as a
   base, that can be fed to 'patch' to recreate the modified version's
   source;

  at least one documentation file specific to the modified version,
   including a notice that the modified version IS not an official
   release, and identifying who made the modifications, and at least
   a summary of what they were, as well as the the commandline used to
   create the 'diffs' output file for the source code modifications;

  in cases in section 5 where distribution of both source and binaries
   was required, distribution of both source and binaries of both original
   release that was used as a base and of the modified version is required
   for modified versions.

 Except for these changes, all other issues of use and distribution are the
  same as for public releases.

 Section 7. Trademarks, Copyrights, etc.

 The rights of all trademarks mentioned in this document and in the emulator
  binary executable ("SNEeSe") are retained by their respective owners.

 I have no affiliation with rightful owner of trademarks, copyrights,
  patents, or otherwise of emulated hardware, nor of software that functions
  in the emulation.

 Section 8. Requests for ROM images.

 Requesting ROM images, also known as 'ROMs', from the developers of
  SNEeSe is forbidden, constitutes violation of license, and may lead to
  revocation of aforementioned granted privileges of use and distribution.

 Section 9. Violation of license

 Any user who violates this license agreement shall have all privileges
  granted by this license revoked, unless otherwise agreed to by the
  current copyright holder.

                                                Charles Bilyue'
