		    Linux Joystick parport drivers v2.0
	       (c) 1998-2000 Vojtech Pavlik <vojtech@ucw.cz>
	       (c) 1998 Andree Borrmann <a.borrmann@tu-bs.de>
			     Sponsored by SuSE
	$Id: joystick-parport.txt,v 1.6 2001/09/25 09:31:32 vojtech Exp $
----------------------------------------------------------------------------

0. Disclaimer
~~~~~~~~~~~~~
  Any information in this file is provided as-is, without any guarantee that
it will be true. So, use it at your own risk. The possible damages that can
happen include burning your parallel port, and/or the sticks and joystick
and maybe even more. Like when a lightning kills you it is not our problem.

1. Intro
~~~~~~~~
  The joystick parport drivers are used for joysticks and gamepads not
originally designed for PCs and other computers Linux runs on. Because of
that, PCs usually lack the right ports to connect these devices to. Parallel
port, because of its ability to change single bits at will, and providing
both output and input bits is the most suitable port on the PC for
connecting such devices.

2. Devices supported
~~~~~~~~~~~~~~~~~~~~
  Many console and 8-bit computer gamepads and joysticks are supported. The
following subsections discuss usage of each.

2.1 NES and SNES
~~~~~~~~~~~~~~~~
  The Nintendo Entertainment System and Super Nintendo Entertainment System
gamepads are widely available, and easy to get. Also, they are quite easy to
connect to a PC, and don't need much processing speed (108 us for NES and
165 us for SNES, compared to about 1000 us for PC gamepads) to communicate
with them.

  All NES and SNES use the same synchronous serial protocol, clocked from
the computer's side (and thus timing insensitive). To allow up to 5 NES
and/or SNES gamepads and/or SNES mice connected to the parallel port at once,
the output lines of the parallel port are shared, while one of 5 available
input lines is assigned to each gamepad.

  This protocol is handled by the gamecon.c driver, so that's the one
you'll use for NES, SNES gamepads and SNES mice.

  The main problem with PC parallel ports is that they don't have +5V power
source on any of their pins. So, if you want a reliable source of power
for your pads, use either keyboard or joystick port, and make a pass-through
cable. You can also pull the power directly from the power supply (the red
wire is +5V).

  If you want to use the parallel port only, you can take the power is from
some data pin. For most gamepad and parport implementations only one pin is
needed, and I'd recommend pin 9 for that, the highest data bit. On the other
hand, if you are not planning to use anything else than NES / SNES on the
port, anything between and including pin 4 and pin 9 will work.

(pin 9) -----> Power

  Unfortunately, there are pads that need a lot more of power, and parallel
ports that can't give much current through the data pins. If this is your
case, you'll need to use diodes (as a prevention of destroying your parallel
port), and combine the currents of two or more data bits together.

	   Diodes
(pin 9) ----|>|-------+------> Power
		      |
(pin 8) ----|>|-------+
		      |
(pin 7) ----|>|-------+
		      |
 <and so on>          :
		      |
(pin 4) ----|>|-------+

  Ground is quite easy. On PC's parallel port the ground is on any of the
pins from pin 18 to pin 25. So use any pin of these you like for the ground.

(pin 18) -----> Ground

  NES and SNES pads have two input bits, Clock and Latch, which drive the
serial transfer. These are connected to pins 2 and 3 of the parallel port,
respectively.

(pin 2) -----> Clock
(pin 3) -----> Latch

  And the last thing is the NES / SNES data wire. Only that isn't shared and
each pad needs its own data pin. The parallel port pins are:

(pin 10) -----> Pad 1 data
(pin 11) -----> Pad 2 data
(pin 12) -----> Pad 3 data
(pin 13) -----> Pad 4 data
(pin 15) -----> Pad 5 data

  Note that pin 14 is not used, since it is not an input pin on the parallel
port.

  This is everything you need on the PC's side of the connection, now on to
the gamepads side. The NES and SNES have different connectors. Also, there
are quite a lot of NES clones, and because Nintendo used proprietary
connectors for their machines, the cloners couldn't and used standard D-Cannon
connectors. Anyway, if you've got a gamepad, and it has buttons A, B, Turbo
A, Turbo B, Select and Start, and is connected through 5 wires, then it is
either a NES or NES clone and will work with this connection. SNES gamepads
also use 5 wires, but have more buttons. They will work as well, of course.

Pinout for NES gamepads                 Pinout for SNES gamepads and mice

	   +----> Power                   +-----------------------\
	   |                            7 | o  o  o  o |  x  x  o  | 1
 5 +---------+  7                         +-----------------------/
   | x  x  o   \                            |  |  |  |          |
   | o  o  o  o |                           |  |  |  |          +-> Ground
 4 +------------+ 1                         |  |  |  +------------> Data
     |  |  |  |                             |  |  +---------------> Latch
     |  |  |  +-> Ground                    |  +------------------> Clock
     |  |  +----> Clock                     +---------------------> Power
     |  +-------> Latch
     +----------> Data

Pinout for NES clone (db9) gamepads     Pinout for NES clone (db15) gamepads

	+---------> Clock                    +-----------------> Data
	| +-------> Latch                    |             +---> Ground
	| | +-----> Data                     |             |
	| | |                              ___________________
    _____________                        8 \ o x x x x x x o / 1
  5 \ x o o o x / 1                         \ o x x o x x o /
     \ x o x o /                          15 `~~~~~~~~~~~~~' 9
    9 `~~~~~~~' 6                             |     |     |
	 |   |                                |     |     +----> Clock
	 |   +----> Power                     |     +----------> Latch
	 +--------> Ground                    +----------------> Power

2.2 Multisystem joysticks
~~~~~~~~~~~~~~~~~~~~~~~~~
  In the era of 8-bit machines, there was something like de-facto standard
for joystick ports. They were all digital, and all used D-Cannon 9 pin
connectors (db9). Because of that, a single joystick could be used without
hassle on Atari (130, 800XE, 800XL, 2600, 7200), Amiga, Commodore C64,
Amstrad CPC, Sinclair ZX Spectrum and many other machines. That's why these
joysticks are called "Multisystem".

  Now their pinout:

      +---------> Right
      | +-------> Left
      | | +-----> Down
      | | | +---> Up
      | | | |
  _____________
5 \ x o o o o / 1
   \ x o x o /
  9 `~~~~~~~' 6
       |   |
       |   +----> Button
       +--------> Ground

  However, as time passed, extensions to this standard developed, and these
were not compatible with each other:


	Atari 130, 800/XL/XE		   MSX

					 +-----------> Power
      +---------> Right                  | +---------> Right
      | +-------> Left                   | | +-------> Left
      | | +-----> Down                   | | | +-----> Down
      | | | +---> Up                     | | | | +---> Up
      | | | |                            | | | | |
  _____________                        _____________
5 \ x o o o o / 1                    5 \ o o o o o / 1
   \ x o o o /                          \ o o o o /
  9 `~~~~~~~' 6                        9 `~~~~~~~' 6
       | | |                              | | | |
       | | +----> Button                  | | | +----> Button 1
       | +------> Power                   | | +------> Button 2
       +--------> Ground                  | +--------> Output 3
					  +----------> Ground

	Amstrad CPC			   Commodore C64

					 +-----------> Analog Y
      +---------> Right                  | +---------> Right
      | +-------> Left                   | | +-------> Left
      | | +-----> Down                   | | | +-----> Down
      | | | +---> Up                     | | | | +---> Up
      | | | |                            | | | | |
  _____________                        _____________
5 \ x o o o o / 1                    5 \ o o o o o / 1
   \ x o o o /                          \ o o o o /
  9 `~~~~~~~' 6                        9 `~~~~~~~' 6
       | | |                              | | | |
       | | +----> Button 1                | | | +----> Button
       | +------> Button 2                | | +------> Power
       +--------> Ground                  | +--------> Ground
					  +----------> Analog X

	Sinclair Spectrum +2A/+3           Amiga 1200
                                     
    +-----------> Up                     +-----------> Button 3
    | +---------> Fire                   | +---------> Right
    | |                                  | | +-------> Left
    | |   +-----> Ground                 | | | +-----> Down
    | |   |                              | | | | +---> Up
    | |   |                              | | | | |
  _____________                        _____________
5 \ o o x o x / 1                    5 \ o o o o o / 1
   \ o o o o /                          \ o o o o /
  9 `~~~~~~~' 6                        9 `~~~~~~~' 6
     | | | |                              | | | |
     | | | +----> Right                   | | | +----> Button 1
     | | +------> Left                    | | +------> Power
     | +--------> Ground                  | +--------> Ground
     +----------> Down                    +----------> Button 2

  And there were many others.

2.2.1 Multisystem joysticks using db9.c
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  For the Multisystem joysticks, and their derivatives, the db9.c driver
was written. It allows only one joystick / gamepad per parallel port, but
the interface is easy to build and works with almost anything.

  For the basic 1-button Multisystem joystick you connect its wires to the
parallel port like this:

(pin  1) -----> Power
(pin 18) -----> Ground

(pin  2) -----> Up
(pin  3) -----> Down
(pin  4) -----> Left
(pin  5) -----> Right
(pin  6) -----> Button 1

  However, if the joystick is switch based (eg. clicks when you move it),
you might or might not, depending on your parallel port, need 10 kOhm pullup
resistors on each of the direction and button signals, like this:

(pin 2) ------------+------> Up
	  Resistor  |
(pin 1) --[10kOhm]--+

  Try without, and if it doesn't work, add them. For TTL based joysticks /
gamepads the pullups are not needed.

  For joysticks with two buttons you connect the second button to pin 7 on
the parallel port.

(pin 7) -----> Button 2

  And that's it.

  On a side note, if you have already built a different adapter for use with
the digital joystick driver 0.8.0.2, this is also supported by the db9.c
driver, as device type 8. (See section 3.2)

2.2.2 Multisystem joysticks using gamecon.c
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  For some people just one joystick per parallel port is not enough, and/or
want to use them on one parallel port together with NES/SNES/PSX pads. This is
possible using the gamecon.c. It supports up to 5 devices of the above types,
including 1 and 2 buttons Multisystem joysticks.

  However, there is nothing for free. To allow more sticks to be used at
once, you need the sticks to be purely switch based (that is non-TTL), and
not to need power. Just a plain simple six switches inside. If your
joystick can do more (eg. turbofire) you'll need to disable it totally first
if you want to use gamecon.c.

  Also, the connection is a bit more complex. You'll need a bunch of diodes,
and one pullup resistor. First, you connect the Directions and the button
the same as for db9, however with the diodes inbetween.

	    Diodes
(pin 2) -----|<|----> Up
(pin 3) -----|<|----> Down
(pin 4) -----|<|----> Left
(pin 5) -----|<|----> Right
(pin 6) -----|<|----> Button 1

  For two button sticks you also connect the other button.

(pin 7) -----|<|----> Button 2

  And finally, you connect the Ground wire of the joystick, like done in
this little schematic to Power and Data on the parallel port, as described
for the NES / SNES pads in section 2.1 of this file - that is, one data pin
for each joystick. The power source is shared.

Data    ------------+-----> Ground
	  Resistor  |
Power   --[10kOhm]--+

  And that's all, here we go!

2.2.3 Multisystem joysticks using turbografx.c
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The TurboGraFX interface, designed by

	Steffen Schwenke <schwenke@burg-halle.de>

  allows up to 7 Multisystem joysticks connected to the parallel port. In
Steffen's version, there is support for up to 5 buttons per joystick.  However,
since this doesn't work reliably on all parallel ports, the turbografx.c driver
supports only one button per joystick. For more information on how to build the
interface, see

	http://www2.burg-halle.de/~schwenke/parport.html

2.3 Sony Playstation
~~~~~~~~~~~~~~~~~~~~

  The PSX controller is supported by the gamecon.c. Pinout of the PSX
controller (compatible with DirectPadPro):

  +---------+---------+---------+
9 | o  o  o | o  o  o | o  o  o | 1               parallel
   \________|_________|________/                  port pins
    |  |      |  |  |   |
    |  |      |  |  |   +-------->  Clock    ---  (4)
    |  |      |  |  +------------>  Select   ---  (3)
    |  |      |  +--------------->  Power    ---  (5-9)
    |  |      +------------------>  Ground   ---  (18-25)
    |  +------------------------->  Command  ---  (2)
    +---------------------------->  Data     ---  (one of 10,11,12,13,15)

  The driver supports these controllers:

 * Standard PSX Pad
 * NegCon PSX Pad
 * Analog PSX Pad (red mode)
 * Analog PSX Pad (green mode)
 * PSX Rumble Pad
 * PSX DDR Pad

2.4 Sega
~~~~~~~~
  All the Sega controllers are more or less based on the standard 2-button
Multisystem joystick. However, since they don't use switches and use TTL
logic, the only driver usable with them is the db9.c driver.

2.4.1 Sega Master System
~~~~~~~~~~~~~~~~~~~~~~~~
  The SMS gamepads are almost exactly the same as normal 2-button
Multisystem joysticks. Set the driver to Multi2 mode, use the corresponding
parallel port pins, and the following schematic:

    +-----------> Power
    | +---------> Right
    | | +-------> Left
    | | | +-----> Down
    | | | | +---> Up
    | | | | |
  _____________
5 \ o o o o o / 1
   \ o o x o /
  9 `~~~~~~~' 6
     | |   |
     | |   +----> Button 1
     | +--------> Ground
     +----------> Button 2

2.4.2 Sega Genesis aka MegaDrive
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The Sega Genesis (in Europe sold as Sega MegaDrive) pads are an extension
to the Sega Master System pads. They use more buttons (3+1, 5+1, 6+1).  Use
the following schematic:

    +-----------> Power
    | +---------> Right
    | | +-------> Left
    | | | +-----> Down
    | | | | +---> Up
    | | | | |
  _____________
5 \ o o o o o / 1
   \ o o o o /
  9 `~~~~~~~' 6
     | | | |
     | | | +----> Button 1
     | | +------> Select
     | +--------> Ground
     +----------> Button 2

  The Select pin goes to pin 14 on the parallel port.

(pin 14) -----> Select

  The rest is the same as for Multi2 joysticks using db9.c

2.4.3 Sega Saturn
~~~~~~~~~~~~~~~~~
  Sega Saturn has eight buttons, and to transfer that, without hacks like
Genesis 6 pads use, it needs one more select pin. Anyway, it is still
handled by the db9.c driver. Its pinout is very different from anything
else.  Use this schematic:

    +-----------> Select 1
    | +---------> Power
    | | +-------> Up
    | | | +-----> Down
    | | | | +---> Ground
    | | | | |
  _____________
5 \ o o o o o / 1
   \ o o o o /
  9 `~~~~~~~' 6
     | | | |
     | | | +----> Select 2
     | | +------> Right
     | +--------> Left
     +----------> Power

  Select 1 is pin 14 on the parallel port, Select 2 is pin 16 on the
parallel port.

(pin 14) -----> Select 1
(pin 16) -----> Select 2

  The other pins (Up, Down, Right, Left, Power, Ground) are the same as for
Multi joysticks using db9.c

3. The drivers
~~~~~~~~~~~~~~
  There are three drivers for the parallel port interfaces. Each, as
described above, allows to connect a different group of joysticks and pads.
Here are described their command lines:

3.1 gamecon.c
~~~~~~~~~~~~~
  Using gamecon.c you can connect up to five devices to one parallel port. It
uses the following kernel/module command line:

	gamecon.map=port,pad1,pad2,pad3,pad4,pad5

  Where 'port' the number of the parport interface (eg. 0 for parport0).

  And 'pad1' to 'pad5' are pad types connected to different data input pins
(10,11,12,13,15), as described in section 2.1 of this file.

  The types are:

	Type | Joystick/Pad
	--------------------
	  0  | None
	  1  | SNES pad
	  2  | NES pad
	  4  | Multisystem 1-button joystick
	  5  | Multisystem 2-button joystick
	  6  | N64 pad
	  7  | Sony PSX controller
	  8  | Sony PSX DDR controller
	  9  | SNES mouse

  The exact type of the PSX controller type is autoprobed when used so
hot swapping should work (but is not recomended).

  Should you want to use more than one of parallel ports at once, you can use
gamecon.map2 and gamecon.map3 as additional command line parameters for two
more parallel ports.

  There are two options specific to PSX driver portion.  gamecon.psx_delay sets
the command delay when talking to the controllers. The default of 25 should
work but you can try lowering it for better performace. If your pads don't
respond try raising it untill they work. Setting the type to 8 allows the
driver to be used with Dance Dance Revolution or similar games. Arrow keys are
registered as key presses instead of X and Y axes.

3.2 db9.c
~~~~~~~~~
  Apart from making an interface, there is nothing difficult on using the
db9.c driver. It uses the following kernel/module command line:

	db9.dev=port,type

  Where 'port' is the number of the parport interface (eg. 0 for parport0).

  Caveat here: This driver only works on bidirectional parallel ports. If
your parallel port is recent enough, you should have no trouble with this.
Old parallel ports may not have this feature.

  'Type' is the type of joystick or pad attached:

	Type | Joystick/Pad
	--------------------
	  0  | None
	  1  | Multisystem 1-button joystick
	  2  | Multisystem 2-button joystick
	  3  | Genesis pad (3+1 buttons)
	  5  | Genesis pad (5+1 buttons)
	  6  | Genesis pad (6+2 buttons)
	  7  | Saturn pad (8 buttons)
	  8  | Multisystem 1-button joystick (v0.8.0.2 pin-out)
	  9  | Two Multisystem 1-button joysticks (v0.8.0.2 pin-out) 
	 10  | Amiga CD32 pad

  Should you want to use more than one of these joysticks/pads at once, you
can use db9.dev2 and db9.dev3 as additional command line parameters for two
more joysticks/pads.

3.3 turbografx.c
~~~~~~~~~~~~~~~~
  The turbografx.c driver uses a very simple kernel/module command line:

	turbografx.map=port,js1,js2,js3,js4,js5,js6,js7

  Where 'port' is the number of the parport interface (eg. 0 for parport0).

  'jsX' is the number of buttons the Multisystem joysticks connected to the
interface ports 1-7 have. For a standard multisystem joystick, this is 1.

  Should you want to use more than one of these interfaces at once, you can
use turbografx.map2 and turbografx.map3 as additional command line parameters
for two more interfaces.

3.4 PC parallel port pinout
~~~~~~~~~~~~~~~~~~~~~~~~~~~
		  .----------------------------------------.
   At the PC:     \ 13 12 11 10  9  8  7  6  5  4  3  2  1 /
                   \  25 24 23 22 21 20 19 18 17 16 15 14 /
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	  Pin | Name    | Description
	~~~~~~|~~~~~~~~~|~~~~~~~~~~
	    1 | /STROBE | Strobe
	  2-9 | D0-D7   | Data Bit 0-7
	   10 | /ACK    | Acknowledge
	   11 | BUSY    | Busy
	   12 | PE      | Paper End
	   13 | SELIN   | Select In
	   14 | /AUTOFD | Autofeed
	   15 | /ERROR  | Error
	   16 | /INIT   | Initialize
	   17 | /SEL    | Select
	18-25 | GND     | Signal Ground

3.5 End
~~~~~~~
  That's all, folks! Have fun!
