SNES9x for OS/2 - ported by Marty Amodeo
SNES9x Core code version 1.39
OS/2 interface source Release 13
====================================================

This is a port of an emulator for a game system that plays two of my
five favorite all-time games (Zelda 3 and Super Metroid for those who
are curious).  I have wanted to port this for a LONG time, but with all
the work on MAME and Retrocade, I never got around to it.  Well, I
finally bit the bullet and did it.

What's New?:
=> Drag and drop ROM support
   You will now be able to launch SNES games by dragging the ROM image and
   dropping it on your SNES9x window.  If a game is already running and a
   ROM is dropped, the current game will be shut down and the dropped game
   will run.
=> Drag and drop saved state (*.S9X) support
   After starting a game, you can now drop your saved state file (*.S9X)
   onto the SNES9x window and the state will be restored.  Note that this
   does not check if you are loading the correct state for the currently
   loaded game.  This is currently your responsibility.  This feature
   will allow you to load in a saved state with any name, so you can now
   effectively use multiple saved states.  Although the state will always
   be saved with the same name as the ROM, you can copy it to other names
   and load it up with the drag and drop method.
=> Fully customizable keyboard (due to DualMode library update)
   Every key can be remapped and time-dependent programs can be assigned
   to them, like rapid fire functions and even more complex moves like
   Street Fighter "Dragon Punches" or your favorite fight game's combo
   moves.
=> SNES9x is now tolerant of complex window shapes
   Those of you who use Sit-O-Chirari or other such enhancers that make use
   of oddly shaped windows will not have a problem with SNES9x crashing
   in DIVE.DLL anymore.
=> Configuration dialog window changed
   Window was resized so that it fits better on machines running their
   desktops at lower resolutions.


System Requirements:
=> EMX runtime library
   Pick it up from Hobbes:
   http://hobbes.nmsu.edu/pub/os2/dev/emx/v0.9d/emxrt.zip

=> DART sound support
   Your sound card must support DART otherwise this version of SNES9x will
   not have sound.

=> DIVE support for 8 or 16 bit graphics
   This support is standard for any reasonably modern OS/2 drivers.

=> Run from an HPFS partition or other filesystem supporting long filenames

=> MGLServer and DualMode.DLL version 6 or later (included in this archive)


Recommended Support:
=> SDDHELP.SYS from SDD beta 37 or later (included in archive)
   This will add support for full screen operation of SNES9x.

   NOTE:  MGLServer.EXE must be in the current directory or be able to be
   located on your system PATH for full screen support to work.  You may
   also need the GRAPHICS.BPD file included in this archive if you are
   not running Scitech Display Doctor as your primary video drivers.  This
   file should reside in a directory named "drivers" under the
   working directory of SNES9x.  This directory should be created for you
   when you unzip the archive.


Known deficiencies/limitations:
=> You may only run ONE COPY of SNES9x with full screen graphics enabled
   at a time (though multiple windowed copies are allowed).

=> Currently no joystick support.

=> Old versions of GAMode will cause the refresh rate of PMShell to change
   when it is run from SNES9x's "SDD Configuration".  If your monitor loses
   synchronization when you select this option, you will have to reboot
   your system to recover.  This usually indicates that you are running an
   old version of Scitech Display Doctor.  This problem has been fixed in
   beta 39 and above.  Please download an update from Scitech for best
   results.

=> Networking support has not been implemented.  If anyone wants me to
   implement this, let me know and I'll consider it.

=> Prolonged exposure may cause eye fatigue and a condition known to the 
   medical community as "Nintendo Thumb".


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

** YOU NEED EMX TO RUN SNES9x **  Download it (EMXRT.ZIP) from Hobbes or 
your favorite OS/2 software archive.

If you already have the needed/desired device drivers installed, just unzip
the main Zip file (which you've undoubtedly already done) and you're ready to
go!  You might wish to review the Configuration from the Emulation menu
before starting a game to customize your keyboard, joystick, video, and audio
options.

If you have a registered version of Scitech Display Doctor, you may press the
"Scitech Display Doctor Setup" button.  When prompted, enter the directory into
which the SDD utility programs were installed (specifically, GAMode).  SNES9x
will then check which video modes are available and add the modes used by
SNES9x if they are not present.  If the modes are added to your system, you can
then run GACtrl to set their refresh rates and center them properly on your
monitor if you wish.

To "tune in" the Super Nintendo video modes manually, if you don't want to let
SNES9x do it for you, run the following commands at a full screen OS/2 command
prompt from your SDD installed directory:

gamode add 256 224 8
gamode add 256 224 16

If you do not have a registered version of Scitech Display Doctor installed on
your system, or if you are using an IBM-licensed version (SDD SE), you will not
be able to use the custom video modes.  SNES9x will default to using 640x480.
You can tell it to stretch the image to occupy the full screen if you wish.
(See the extra command line arguments documented below or refer to the
configuration window.)

Make sure you have installed and booted up with the correct version of the
SDDHELP.SYS device driver from Scitech if you wish to enable full screen
operation.  An appropriate version is included in this archive, however, you
should *NOT* install it if you already have an up-to-date version of SDD
installed on your system.

Now you should be all ready to run SNES games in OS/2!


Command Line Parameters
=======================

None of these command line parameters are necessary anymore due to the
GUI, but they are still supported.  Note that all console output will be
directed to a file named DEBUG.LOG in the working directory.

If you wish to get a list of many common SNES9x command line parameters,
just run the executable with no parameters and it will list them.  I'll
only document the OS/2-specific ones here.  The Configuration window in
SNES9x itself will allow you to configure all of the major parameters
easily and save the settings to an INI file.  Command line parameters can
override your INI settings if you wish.

-maxskip:  This is the maximum number of frames to skip in a row before
           displaying another frame.  If this is set to zero, it will
           keep skipping frames until it is caught up.  The default is 3.
           If this is set too low for slower computers, it can slow down
           the emulation speed and music.  If it is set too high on slow
           computers, you won't be able to see what's happening!

-transparency:  Not an OS/2-specific option, but useful to highlight.  This
                option enables transparency effects in the emulation.  It 
                requires a 16 bit color video mode and enabling this option
                will automatically enable 16 bit color video.  It can slow
                the emulation down a bit, but makes the emulation as
                accurate and visually appealing as possible.  This is
                disabled by default.

-soundbuffer:  Sets the sound buffer size used by DART.  Don't set it too low
               or your sound drivers may have problems.  It defaults to 2048
               bytes.

-stretchblit:  If you're stuck using one of the 640x480 graphics modes
               because you can't "tune in" 256x224, then this option will
               tell SNES9x to stretch the video image to occupy the full
               640x480 instead of centering it on the screen.

-nocustommodes:  Disallows MGL to attempt to create a custom video mode if
                 the mode it desires isn't available.  This will cause SNES9x
                 to fall back to 640x480 if 256x224 isn't found.

-soundshare:  Tells SNES9x to open the audio device as a shared device.  This
              will cause the sound to be interrupted when another app wants
              to make a noise, or if you have sound drivers that mix shared
              audio streams (like the SBLive drivers) it will allow the SNES
              audio to be mixed with the system audio.


Controls
========

Controls can be configured via the Configuration option.  Click on the function
you wish to set in the list box and press the "Change Key Assignment" button.
Then press the key or joystick button you wish to assign to that function.
Note that the X and Y axis of the joystick (if present) are automatically
assigned to the directional controls of the first SNES controller.

SNES Player 1 Start             = Enter
SNES Player 1 Select            = TAB
SNES Player 1 Top Left Button   = Q
SNES Player 1 Top Right Button  = W
SNES Player 1 X Button          = S
SNES Player 1 Y Button          = A
SNES Player 1 A Button          = X
SNES Player 1 B Button          = Z
SNES Player 1 Pad Up            = Up arrow key
SNES Player 1 Pad Down          = Down arrow key
SNES Player 1 Pad Left          = Left arrow key
SNES Player 1 Pad Right         = Right arrow key

SNES Player 2 Start             = Keypad Enter
SNES Player 2 Select            = Keypad +
SNES Player 2 Top Left Button   = Keypad /
SNES Player 2 Top Right Button  = Keypad *
SNES Player 2 X Button          = PageUp
SNES Player 2 Y Button          = Home
SNES Player 2 A Button          = PageDown
SNES Player 2 B Button          = End
SNES Player 2 Pad Up            = Keypad Up arrow key
SNES Player 2 Pad Down          = Keypad Down arrow key
SNES Player 2 Pad Left          = Keypad Left arrow key
SNES Player 2 Pad Right         = Keypad Right arrow key

SNES Power Off (stop game)      = Escape
SNES Halt (pause/resume)        = F12
Save system state snapshot      = F1
Load system state snapshot      = F2
Screen capture to the clipboard = F3
Toggle full screen and window   = F11

SNES mouse support is enabled by default in full screen mode.  It can be
enabled for windowed mode by selecting the "Grab mouse in windowed mode"
option from the configuration window.  This will cause SNES9x to take control
of the mouse until the game is paused or the window focus changes.


Misc.
=====

Snapshots will be saved into a directory named "snapshots" under the
directory in which the SNES9x executable lies.  If it does not exist, it
will be created.  These files will be saved with the name of the game and
an appropriate extension.  For example, a machine snapshot of Zelda will
be saved to snapshots\zelda.s9x.

You should be able to load the .s9x files into versions of SNES9x for
other platforms, and their saved states can be loaded into the OS/2 version
if they are named properly.  The .s9x files should be compatible with the
.s96 files made with older versions of SNES9x.  Also, .srm files from older
versions of SNES9x should be compatible with this version.

You can interact with SNES9x using your OS/2 desktop now too.  To launch a
game, simply drag the ROM image (*.SMC, *.SWC, *.SFC, or *.FIG) to the SNES9x
window and it will launch.  Likewise, you can load saved states through a
drag and drop operation.  Saved states will always be saved with the naming
convention described above, but using the drag and drop method, a saved state
with any base name can be loaded (as long as it has the S9X extension).  Note
that loading in a saved state from a different game than the one running is
a bad idea.  Be sure you are loading in the correct state for the current game.

Please give me feedback if you are having graphics compatibility problems.

I hope you all enjoy this as much as I do!  :-)

Send your feedback and bug reports to mamedev@stny.rr.com.  Keep your eye on
http://emuos2.netlabs.org for the latest in Retrocade, MAME, and SNES9x news!

