
                           
                                                   
                             
                                                   
                               
                                                                               

                             SNESKey documentation
           Copyright (c) 1996-1997 Benji York, All Rights Reserved


                                Table Of Contents

        Introduction.............................................01
        Features.................................................02
        Installation.............................................03
        Converter Schematics.....................................04
           Connecting SNES Pads
           Connecting NES Pads
           Connecting Sega Genesis Pads
           Connecting Atari 2600 Joysticks
           Connecting Atari 2600 Spinners (a.k.a. Driving Controllers)
           General Comments
        The ini File.............................................05
        Command Line Switches....................................06
        Trouble Shooting.........................................07
        What I'd Like to Add.....................................08
        Adapter Cables No Longer Available.......................09
        Contacting the Author....................................10

        Key Abbreviations........................................Appendix A
        Disclaimer...............................................Appendix B
        Special Thanks...........................................Appendix C



Part 01 -- Introduction                                    SNESKey Documentation


        SNESKey is a hardware/software combination that allows the use of 
video game console control pads as input devices for computer programs,
especially games. The software allows the buttons on the controller to be
programmed as any key, or sequence of keys on the keyboard. The software also
has the ability to define buttons to be "shifts" that work in much the same
way the Ctrl, Alt, and Shift buttons on your keyboard work, except that you
get to decide what there shifted and unshifted values will be. The current
software allows for up to four buttons to be defined as shifts, this gives a
maximum of forty-eight different functions on a SNES controller. Very seldom
will all the shifts be used, but with all the variables in computer gaming,
flexibility is a good idea.

        Two quick notes, there are two diagnostic utilities included to help
you (1) see if the newest SNESKey keyboard simulation works on your machine
(KeyTest), and (2) see if control pad(s) connected to the parallel port are
working (SNESKey /x). When KeyTest is run and the command prompt reappears
there should be the text "SNESKey" waiting on the prompt, this is all KeyTest
does. If you don't see this text, then SNESKey may still work with your
machine, KeyTest tests the "newest" key simulation method. Look in the main
ini file for KeySimMethod and change it to "new", then, if that doesn't work,
try "old."



Part 02 -- Features                                        SNESKey Documentation


         Support for SNES controllers
         Support for NES controllers
         Support for Sega Genesis controllers
         Support for Atari 2600 joysticks
         Support for Atari 2600 spinners (a.k.a. driving controllers)
         Support for standard PC joysticks (including joypads)
         Support for other controllers being worked on: Saturn, Atari 2600
                (trak ball and video touch pad), Atari 7800, Turbo Grafx - 16,
                Playstation, Gravis GrIP, MS Sidewinder, and Nintendo64.
         I also have info about several others, but no controllers, so
                they'll have to wait until I get a controller, or someone
                willing to do some beta testing for me.
         Support for more than one typr of controller at a time: say you
                wanted to use your SNES pad and someone else wanted to use
                an Atari 2600 stick, you could both play at the same time.
         Support for more than one controller: up to 5 SNES and/or NES pads,
                (support for two Genesis pads is being worked on)
         Allows up to 4 "shifts"; this feature allows the pressing of one
                button on the controller to change the key presses generated
                by all the other buttons, this allows SEVERAL more functions
                to be put on the controller (I play Quake and never touch the
                keyboard, even to load games, or exit)
         Very configurable
         Very compatable
         Support for Windows95 games using TSR mode (better support coming)



Part 03 -- Installation                                    SNESKey Documentation


        Simply copy or unzip the various files into a directory called
"SNESKey" off of your root directory. For example:

        cd\
        md c:\sneskey
        copy a:\*.* c:\sneskey

        or, if you are unzipping the files:

        cd\
        md c:\sneskey
        pkunzip -d sneskey.zip c:\sneskey\

        After the files have been placed in their appropriate place, you must
add SNESKey to your path by editing your autoexec.bat file and adding
";c:\sneskey" to the end of the line that starts "path" or "set path=". Now
you need to reboot, so the changes can take effect. After your computer starts
you may wish to examine the example initiate (ini) files provided for several
games. If you have one of these games and wish to try the pad out right away,
you can simply copy the file into the directory the game is in, rename the
file to "sneskey.ini" (without the quotes) and edit the line in the ini file
that says "ProgPath = c:\directory\filename.exe" to reflect the correct path
and name of the program to run. Now you just have to change to the directory
of the game you want to run, type "go" and you should see the SNESKey banner
pop up and your game begin to load.



Part 04 -- Converter Schematic                             SNESKey Documentation


        Unless you have a pre-built converter you will have to build one, or
convert a controller before you can play any games.


 Connecting SNES pads
 

        DB-25 (male)                     SNES Connector

        Pin 01  
       Pin 14  
        Pin 02 Ŀ
       Pin 15  ĳ Data on 4th controll pad
        Pin 03 Ŀ
       Pin 16                      
        Pin 04                     
       Pin 17                          Ŀ
        Pin 05               ĳ o   Vcc
     Pin 18                   ĳ o   Clock
       Pin 06                     ĳ o   Reset
     Pin 19                  ĳ o   Data
       Pin 07 >          Ĵ
     Pin 20                           o   N/C
       Pin 08 >Ĵ               o   N/C
     Pin 21                     ĳ o   GND
       Pin 09 >              \_/ 
     Pin 22                      
       Pin 10    
     Pin 23                       
       Pin 11 ĳ Data on 5th controll pad
     Pin 24                       
       Pin 12 ĳ Data on 2nd controll pad
     Pin 25                       
       Pin 13 ĳ Data on 3rd controll pad
                                   
    

        The 2nd, 3rd, 4th, and 5th data are only for connecting up multiple
controll pads. Connect all the other pins exactly like the first pad, then
connect the data line of the 2nd, 3rd,  4th, and 5th SNES pads to the
appropriate pins on the db25. Configuring these controllers is discussed in
the section about the ini files.


 Connecting NES pads
 

        DB-25 (male)                     NES Connector

        Pin 01  
       Pin 14  
        Pin 02 Ŀ
       Pin 15  ĳ Data on 4th controll pad
        Pin 03 Ŀ   Ŀ
       Pin 16                       ĳĿ
        Pin 04                              ,Ŀ    
       Pin 17                             ,'  o ĳĳĿ Ground
        Pin 05                    Vcc ĳ o  o      Clock
     Pin 18                            o  o    Reset
       Pin 06                           o  o Ŀ      Data
     Pin 19                                   
       Pin 07 >                  
     Pin 20                                           
       Pin 08 >Ĵ           
     Pin 21                     
       Pin 09 >             
     Pin 22                      
       Pin 10    
     Pin 23                       
       Pin 11 ĳ Data on 5th controll pad
     Pin 24                       
       Pin 12 ĳ Data on 2nd controll pad
     Pin 25                       
       Pin 13 ĳ Data on 3rd controll pad
                                   
    

        The 2nd, 3rd, 4th, and 5th data are only for connecting up multiple
controll pads. Connect all the other pins exactly like the first pad, then
connect the data line of the 2nd, 3rd,  4th, and 5th NES pads to the
appropriate pins on the db25. Configuring these controllers is discussed in
the section about the ini files.

        You can also "mix and match" NES and SNES control pads by connecting
the data lines to whichever pad you wish (for example connect the 1st and 2nd
data lines to SNES pads, and connect the 3rd and 4th to NES pads. You would
then refer to the SNES pads in the ini file as [SNES] and [SNES2] and the NES
pads as [NES3] and [NES4].


 Connecting Sega Genesis pads
 

        DB-25 (male)                     Genesis DB-9 Connector (male)

        Pin 01 Ŀ
       Pin 14  ĳĿ
        Pin 02 >Ŀ                 
       Pin 15  ĳĳĳĿ
        Pin 03 >Ĵ                   
       Pin 16                               
        Pin 04 >Ŀ             
       Pin 17                  ĳĳĳĿ         
        Pin 05                 ĳĳĳĿ        
     Pin 18                                    ,,,           
       Pin 06                                ,'' o ĳĿ   Up
     Pin 19                       A/B     ĳ o            
       Pin 07                                    o         Down
     Pin 20                    Select   ĳ o             
       Pin 08                                     o Ŀ     Left
     Pin 21                    Ground      ĳ o            
       Pin 09                                    o Ŀ       Right
     Pin 22                   C/Start ĳĳ o           
       Pin 10                  ',, o ĳĳĳ Vcc
     Pin 23                                       '''       
       Pin 11 ĳĳĳ
     Pin 24                                               
       Pin 12 ĳĳ
     Pin 25                                             
       Pin 13 ĳ
                                              
    

        This circuit works for both 6 button and 3 button Genesis pads. Use
[Genesis3] as the title of the config section for a 3 button Genesis pad and
use [Genesis6] as the title of the config section for a 6 button Genesis pad.


 Connecting Atari 2600 Joysticks
 

        DB-25 (male)                     Atari DB-9 Connector (male)

        Pin 01                            
       Pin 14                                
        Pin 02 >Ŀ                   
       Pin 15  ĳĿ
        Pin 03 >Ĵ                     
       Pin 16                                 
        Pin 04 >Ŀ               
       Pin 17                  ĳĿ         
        Pin 05                 ĳĿ        
     Pin 18                                      ,,,           
       Pin 06                                  ,'' o ĳĿ   Up
     Pin 19                      Fire       ĳ o            
       Pin 07                                      o         Down
     Pin 20                       N/C           o             
       Pin 08                                      o Ŀ     Left
     Pin 21                    Ground       ĳ o            
       Pin 09                                     o Ŀ       Right
     Pin 22                       N/C          o           
       Pin 10                  ',, o ĳĳĳ Vcc
     Pin 23                                       '''       
       Pin 11 ĳĳĳ
     Pin 24                                               
       Pin 12 ĳĳ
     Pin 25                                             
       Pin 13 ĳ
                                              
    

        The Vcc line should NOT be neccesary for normal joysticks. Build the
circuit without it first, and see if it works. Use [2600] as the title of the
config section for an Atari 2600 controller.


 Connecting Atari 2600 Spinners (Driving Controllers)
 

        DB-25 (male)                     Atari DB-9 Connector (male)

        Pin 01 
       Pin 14 
        Pin 02 >Ŀ                   
       Pin 15  ĳĿ
        Pin 03 >Ĵ                     
       Pin 16                                 
        Pin 04 >Ŀ               
       Pin 17                  ĳĿ
        Pin 05                 ĳĿ        
     Pin 18                                      ,,,           
       Pin 06                                  ,'' o ĳĿ   Data0
     Pin 19                            Fire ĳ o            
       Pin 07                                      o         Data1
     Pin 20                                     o             
       Pin 08                                      o           
     Pin 21                          Ground ĳ o             
       Pin 09                                     o           
     Pin 22                                    o             
       Pin 10                  ',, o ĳ Vcc
     Pin 23                                       '''         
       Pin 11 ĳ
     Pin 24                                  
       Pin 12                                 
     Pin 25                                  
       Pin 13                                 
                                              
    

        For a single spinner, you can use the same circuit as the Atari 2600
or Genesis adapter, that way you can just swap the controllers out, depending
on which you want to use. The Vcc line should NOT be neccesary. Build the
circuit without it first, and see if it works.

        Use [2600 Spinner] as the title of the config section for an Atari
2600 spinner. Use [2600 Spinner N] where N > 2 for spinners other than the
first one. You may need to increase the TickFreq setting in the spinner ini
file to as high, or higher than 200 to get good results.

        To simplify the diagram above, I'll just describe how to connect a
second or third spinner. Data0, Data1, and Fire for spinner two go to pins
12, 13, and 1, respectively. Data0, Data1, and Fire for spinner three go to
pins 14, 16, and 17, respectively.


 General Comments
 

        It would be best if any diodes are Germanium, because they use less
power, and since the power is being pulled from the data lines of the parallel
port, we don't want to use too much. The diodes don't need to be "special" in
any way. Normal, switching diodes should work perfectly. If you use a regular
controller this arrangement will be ok, and provide a compact adapter for you
console controller, but if you want to get fancy (IR controllers, big
joysticks, programmable pads, multiple controllers on one port, etc.) you may
wish (or need) to pull power from the joystick port, or better yet, get a
power pack that plugs into the AC main and outputs +5V dc. This will allow
you to use any controller you could dream of (not to mention reduce the
complexity of the converter from simple to almost non-existent).

        The best way I have found to achieve a good result is to buy an
extension cable for your controller. They usually are about $10 for a pack of
one or two. Carefully remove the part of the connector that plugs in to the
console Get a male DB-25 connector and solder the wires, diodes, and the DB-25
together. Try to make the total assembly as small as possible because you want
to be able to fit it inside the DB-25 shell. What you end up with will be a
very cool adapter cable. Of course, you could do this to the end of a
controller, but that seems a bit permanent to me.

        You can install more than one type of controller on a port as long as
the input (to the PC) lines are different for every controller. The should be
able to share any output (from the PC) lines. If you have a question as to
whether specific controllers can be used together, email me. Notice that the
Genesis and Atari 2600 controllers use several data lines, so using them with
other controllers will be more difficult.

        Some notes: you need to connect the ground from any power adapter to
the ground created from pins 18 to 25 on the port, so everything will have a
common reference. Also, connecting the ground line to all the pins from 18 to
25 is not strictly neccesary. You may wish to just connect to one or a few,
and let it go at that.



Part 05 -- The ini File                                    SNESKey Documentation


        The use of the ini file is really straight forward, copy the bare
bones one (\sneskey\examples\simple.ini) into the directory of your game.
Rename it to "sneskey.ini". Change the lines that have to do with the key
configurations and program path, and type "go" at the command line. The way
the key config lines work is simple: the key sequences are separated by
commas, and the values of the different shift states are separated by
semicolons. Not a really good explanation, so look at this:

        B = a, b, c; 1, 2, 3; F1, F2, F3

        This line would make the "B" button on the controller generate the
keystrokes "a" "b" and "c" when none of the shift buttons are held down and
it is pressd, "1" "2" and "3" when shift one is down and it is pressed, and
"F1" "F2" and "F3" when shift two is down and it is pressed. Of course, most
of the time you will just want one keystroke per button, per shift state
(e.g. B = lctrl; lshift).

        You may also preface any key name with the word "pulse." This will
make SNESKey send the key up signal immediately after the key down. This is
useful when the shortest possible key-down time is necessary (e.g. very small
amount of movement).

        The "NumShifts =" line tells how many shift states to expect, and the
"Shifts =" line tells which buttons are shifts, and in what order. Every
button must have a value for each shift state, even if it is just "none" (to
find out all the abbreviations for the keys look in appendix A of this
document). For example, if I wanted there to be two shifts, the first being
Select, and the other being Start, this would be in the ini file, in the
[SNES] section:

        NumShifts = 2
        Shifts = Select; Start

        Any shift on the "Shifts =" line can be prefaced with the word
"toggle." This will make the shift be on when hit once, and stay on until hit
again.

        The first SNES controller is configured in the section [SNES] the
second, third, fourth, and fifth are configured in the sections [SNES2],
[SNES3], [SNES4], and [SNES5] respectively. Likewise, the first NES
controller is configured in the section [NES] the second, third, fourth, and
fifth are configured in the same way the SNES pads are.

        The ini files can also reside in a directory named "sneskey" directly
off of the current directory. For example, if you run a game from c:\path\
and "sneskey.ini" is not in that directory, then SNESKey will look in
c:\path\sneskey\ for the file before giving up.

        The ini files used to start SNESKey with the /x option must be valid
in every way. That means that (among other things) each button has to have a
definition (even if it is "none") and all the other required options have to
be set. 

        If you have problems, you should change the lines in the [Config]
section of the main ini file in c:\SNESKey until it works correctly (see the
Trouble Shooting section). Each line is accompanied by a description in the
ini file itself, so I won't go into detail here, if you really care, you
should be able to figure it out, its not very complicated.



Part 06 -- Command Line Switches                           SNESKey Documentation


        Here are the command line switches for SNESKey:

        /a     Pass Arguments - pass all the arguments that follow to the
               program being run. Example: to pass "/s /f4 game.rom" to the
               program type "go /a /s /f4 game.rom". If any other switches
               are to be passed to SNESKey put them before the "/a".

        /i     Info - Display general information about the programs
                    execution.

        /p     Pause - pause after the screen fills with status info, and
                    before the user program is executed.

        /t     TSR Mode - load as normal, but instead of executing a game,
                    return to DOS, but stay loaded

        /v     Verbose - show information about what is happening during
                    start up.

        /x     Test Screen - show status of controllers defined in local ini
                    file.

        /?     Show the help screen.

        A note: an alternate ini file can be specified on the command line
like so: "SNESKey myconfig.ini". This provides for having different
configurations for different people or different controllers.



Part 07 -- Trouble Shooting                                SNESKey Documentation


        Here is a list of problems and solutions that I encountered when
writing the program, and some I just thought might be problems. Many rely on
the test mode activated with the "/x" switch. It allows you to do a bare
bones check to see if the controller is alive and responding.


    1)  The status dots indicate all the buttons are down or up, but are not.

        This is the worst possible thing (sorry). This means that for some
        reason, the controller is not responding at all. Check all of your
        connections, the directions of your diodes, and the parallel port you
        are trying to use. If you have a multi-tester set it to read up to
        10V dc, and check to make sure you are getting a potential between
        the power and ground pins. Then if that's ok, check to see if there is
        a very small (probably < 1V) potential across the data, clock, and
        reset pins (one at a time) when the common (black) probe is connected
        to the ground pin. Make sure to do all of this with SNESKey /x
        running.

    2)  The first few buttons (e.g. B, Y, Select, Start...) seem to work fine,
        but all of the others never seem to show up or are always down.

        This is the result of low power, the controller has enough internal
        capacitance to read the first few buttons, but after that all power is
        lost and the buttons don't work correctly. Check to make sure all of
        the diodes are connected correctly. Or you could just break down and
        connect external power.

    3)  SNESKey /x shows everything to be fine, but when SNESKey runs normally
        it locks/does nothing.

        This will have to do with the software end of things. Try fiddling
        with the "8042Addr =" line in the ini file (only if you are not using
        the "newest" KeySimMethod). The setting should range from 00 to 1F.
        Most modern machines use 1F just fine, but try 00 and go up if that
        doesn't work right off. Once you find this value you will use it for
        all your games, so you will probably want to change your "default"
        ini file (c:\sneskey\sneskey.ini). This also means that if your other
        games work correctly the problem is most probably (all most certainly)
        somewhere else.
                If that doesn't work change the "MainInt =" line to
        "MainInt = 0x08", "MainInt = 0x1C" or "MainInt = 0x28" and the
        "TickFreq =" line to "TickFreq = none" (that might sound strange, but
        its ok, believe me). Now, run the game (using "go" to start it) and
        see if it works. If so, and the game seems to be responding quickly
        enough, use these settings, but I would appreciate an email about 
        what game, what version of SNESKey you are using, and a copy of your
        ini files, so I can try to fix your problem appropriately.
                There is another possibility, SNESKey uses an interrupt as a
        "wakeup." Whenever this interrupt is executed, it makes sure that the
        interrupt SNESKey uses for most of it's work (usually 0x70) is doing
        fine. I have never had this cause a problem on interrupt 0x08, but I
        guess it could. If it does, try using 0x09, this is the keyboard
        interrupt, it is only called when you press a key, so if SNESKey
        seems to have stopped responding, hit a key and see if it wakes up.
        You can also disable the wakeup function by setting the line in the
        ini file that says "WakeUpInt = " to "none" (no quotes). There is
        also a variable in the ini file called "TweakType." This variable
        tells SNESKey what kind of wakeup to do. Values range form 0 to 2,
        each being a different type of wakeup. A value of 1 does a "safer"
        subset of 2, and 0 does neither.
      
    4)  The SNESKey banner doesn't pop up when I type "go".

        There is probably another batch file/program in the path, or current
        directory named "go.*" and it is being run instead. Look around in the
        directory, or move SNESKey closer to the front of your path variable
        in your autoexec.bat, or try typing "sneskey" If that works, you know
        there is something else named "go" getting in the way.

    5)  Only the "B" button seems to be working or the "B" button makes all of
        buttons activate.

        This would indicate the Clock line is not connected correctly, make
        sure it is on pin 2 of the DB-25. You might check the circuit with a
        continuity tester.

    6)  The colors in one of my games are strange when I use SNESKey with
        that game.

        I'm not sure what causes this, but I do have a work-around. When you
        start that particular game, do not hit any buttons on the controller
        until the screen that looks strange is displayed, it should be fine.
        You can now use you controller to play the game. I am looking into
        this problem and hope to solve it.

    7)  My game slows down when using a PC joystick with SNESKey.

        The crappy game port interface dreamed up by the original PC designers
        has several problems. One of the main ones is the amount of time
        required to read the status of the joystick. The SNES pads can be
        read at a much faster rate than joysticks. Thus, when using joysticks
        they have to be read at a lower rate. You should add the line
        "TickFreq = XX" to the [config] section in the ini file. Set XX to
        around 30, maybe even 20 or below.

    8)  The C and Start buttons on my Genesis pad don't work.

        Try setting the parallel port mode to standard or PS/2 ("SPP" or
        "PS2"). If that doesn't work, see question 9.

    9)  Anything else.

        Get in touch with me, and we'll see what we can do. I want to make
        this thing as bug free and universally useable as possible. Also, you
        can set the "ProgPath" variable to point to your command interpreter
        (usually command.com) and set "DrawDots" to true. This is a good way
        to debug problems.



Part 08 -- What I'd Like to Add                            SNESKey Documentation


        Here are some things I want to add when I have time/am motivated to.

         Support for multiple ports per instance of SNESKey (i.e. you can
                have one controller on each of two ports)
         Support for 3DO controllers; including "daisy-chaining" them for
                multiple controllers (8 should be possible)
         Support for SEGA Saturn controllers (almost there)
         Support for Sony PlayStation controllers (I have some good info,
                now I just need time and a controller)
         Support for Nintendo64 controllers (complete with analog joystick
                pass through to the PC joystick port)
         Support for GrIP controllers (have GrIP pad, need to do some work
                on this one)
         Support for MS Sidewinder pads (I have ASM driver, need time and
                either a pad or a beta tester)
         Sticky Shifts (what more can I say?)
         Key code cycling; key code 1, then key code 2, then key code 3, etc.
         A new circuit or adapter that acts as a "pass through" so you can
                use a printer on the same parallel port as the controller
                without hand swapping them, buying a card with another
                parallel port on it, or buying one of those A/B switches.
         A circuit that hooks up to the parallel port and the joystick port
                which would simulate joystick buttons and allow for analogue
                control with analogue controllers like the Nintendo64 (I have
                developed this, but with no support for analogue controllers
                there is no need for it, yet)
         A circuit that hooks up to the parallel port and the keyboard port
                which would allow for the direct simulation of key codes. This
                would solve any compatibility problems and make SNESKey really
                awesome. (Well, someone else has done this, I don't know if
                I'll add support to SNESKey, but it is possible)
         Support for real arcade controllers: I'm currently working with
                someone (watch the "Special Thanks" section in coming
                releases) on building custom controllers using arcade parts
                and interfacing with them through SNESKey. I am very excited
                about the posabilities.

        If you want one of these to become a reality look at the following:

         Nintendo64: please send me the technical details and I'll add
                support for them as soon as possible.
         Playstation, 3DO, Jaguar, or Neo Geo: send me a controller or enough
                money to buy one (as I have the info, but no controllers); I
                might even be able to use you as a beta tester, but if there
                are major problems getting the controller to work, I would
                really need a controller I could work with personally.
         Any other: get in touch with me, we'll see what we can do



Part 09 -- Adapter Cables No Longer Available              SNESKey Documentation


        My source of SNES extension cables has dried up, and I have grown
tired of building and supporting them, so I have stoped offering this service.
If you wish to buy one, I would recommend Console Adapters. See their web
page at http://www.bitsmart.com/console.adapters for more information. 



Part 10 -- Contacting the Author                           SNESKey Documentation


        I would REALLY appreciate any technical info on reading any console
        controller, especially Nintendo64. Please send your info or a pointer
        to it to:

                  benji@cookeville.com or jby2889@tntech.edu
                  (until sometime around the end of 1998)

        My permanent mailing address is (only use after 1998):

                  Benji York
                  214 Meadow Drive
                  Shelbyville, TN 37160

        The URL for the SNESKey Page is:

                  http://www.geocities.com/SiliconValley/Way/8843
                  or on one of my school accounts:
                  http://gemini.tntech.edu/~jby2889 or
                  http://www.csc.tntech.edu/~jbyork
                  (Gemini is down on Friday nights for maint.)



Appendix A -- Key Abbreviations                            SNESKey Documentation


      Key             Abbreviation    Comment
      

        Escape          esc             
        Enter           enter
        Space Bar       space
        Backspace       backspace
        Tab             tab

        Left Control    lctrl           It is best to use the left ones if
        Right Control   rctrl           you can, they are executed slightly
        Left Shift      lshift          faster.
        Right Shift     rshift
        Left Alt        lalt
        Right Alt       ralt

        Caps Lock       capslock
        Num Lock        numlock
        Scroll Lock     scrlock

        1 (key pad)     num1            Again, these are a little faster than
        2 (key pad)     num2            their gray counterparts.
        3 (key pad)     num3
        4 (key pad)     num4
        5 (key pad)     num5
        6 (key pad)     num6
        7 (key pad)     num7
        8 (key pad)     num8
        9 (key pad)     num9
        0 (key pad)     num0

        . (key pad)     num.
        / (key pad)     num/
        * (key pad)     num*
        - (key pad)     num-
        + (key pad)     num+
        Enter (key pad) numenter

        Insert (gray)   insert
        Delete (gray)   delete
        Home (gray)     home
        End (gray)      end
        PgUp (gray)     pgup
        PgDown (gray)   pgdn

        Up (gray)       up
        Down (gray)     down
        Right (gray)    right
        Left (gray)     left

        Print Screen    prnscrn
        Pause           pause           Really works!!!

        No Definition   none            Use this for undefined buttons.



Appendix B -- Disclaimer                                   SNESKey Documentation


        The elements of SNESKey (files, information, etc.) are not under any
express or implied waranty of any kind. If you hurt yourself, your computer,
or your pet fish, don't blame me.                  



Appendix C -- Special Thanks                               SNESKey Documentation


        Ken Cornett (StOrM3 on IRC): beta tested various versions (I'm glad
he has a machine that's hard to get things to work on, it's made SNESKey
better), has had good ideas and put SNESKey up on his web page.

        Pin Fei Sun: wrote JoyEmu 1.02, this little program does something
similar to what SNESKey does, but with the joystick. Pin Fei Sun released the
source to this small program and thus provided me with the newest (and
probably best) key fake routine.

        John Chu of Richmond, BC: sent me two Genesis controllers thus
allowing me to write and debug the Geneis support.

        Fred Stein (igboo@ptd.net): sent me an Atari 2600 Video Touch Pad,
an Atari 2600 Trak-Ball, and an Atari 2600 Driving Controller (spinner). He
is the reason I added support for the Atari 2600 stuff. I have to say, I
couldn't play Tempest without a spinner!

        People who have been kind enough to do some beta testing: Louis Roy
and Glen Cook (if I left anyone out, please let me know).

        Everyone that has sent questions, comments, information, and kudos
to me. You have made this project that much more fun.

