cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

joystick-parport.rst (21621B)


      1.. include:: <isonum.txt>
      2
      3.. _joystick-parport:
      4
      5==============================
      6Parallel Port Joystick Drivers
      7==============================
      8
      9:Copyright: |copy| 1998-2000 Vojtech Pavlik <vojtech@ucw.cz>
     10:Copyright: |copy| 1998 Andree Borrmann <a.borrmann@tu-bs.de>
     11
     12
     13Sponsored by SuSE
     14
     15Disclaimer
     16==========
     17
     18Any information in this file is provided as-is, without any guarantee that
     19it will be true. So, use it at your own risk. The possible damages that can
     20happen include burning your parallel port, and/or the sticks and joystick
     21and maybe even more. Like when a lightning kills you it is not our problem.
     22
     23Introduction
     24============
     25
     26The joystick parport drivers are used for joysticks and gamepads not
     27originally designed for PCs and other computers Linux runs on. Because of
     28that, PCs usually lack the right ports to connect these devices to. Parallel
     29port, because of its ability to change single bits at will, and providing
     30both output and input bits is the most suitable port on the PC for
     31connecting such devices.
     32
     33Devices supported
     34=================
     35
     36Many console and 8-bit computer gamepads and joysticks are supported. The
     37following subsections discuss usage of each.
     38
     39NES and SNES
     40------------
     41
     42The Nintendo Entertainment System and Super Nintendo Entertainment System
     43gamepads are widely available, and easy to get. Also, they are quite easy to
     44connect to a PC, and don't need much processing speed (108 us for NES and
     45165 us for SNES, compared to about 1000 us for PC gamepads) to communicate
     46with them.
     47
     48All NES and SNES use the same synchronous serial protocol, clocked from
     49the computer's side (and thus timing insensitive). To allow up to 5 NES
     50and/or SNES gamepads and/or SNES mice connected to the parallel port at once,
     51the output lines of the parallel port are shared, while one of 5 available
     52input lines is assigned to each gamepad.
     53
     54This protocol is handled by the gamecon.c driver, so that's the one
     55you'll use for NES, SNES gamepads and SNES mice.
     56
     57The main problem with PC parallel ports is that they don't have +5V power
     58source on any of their pins. So, if you want a reliable source of power
     59for your pads, use either keyboard or joystick port, and make a pass-through
     60cable. You can also pull the power directly from the power supply (the red
     61wire is +5V).
     62
     63If you want to use the parallel port only, you can take the power is from
     64some data pin. For most gamepad and parport implementations only one pin is
     65needed, and I'd recommend pin 9 for that, the highest data bit. On the other
     66hand, if you are not planning to use anything else than NES / SNES on the
     67port, anything between and including pin 4 and pin 9 will work::
     68
     69    (pin 9) -----> Power
     70
     71Unfortunately, there are pads that need a lot more of power, and parallel
     72ports that can't give much current through the data pins. If this is your
     73case, you'll need to use diodes (as a prevention of destroying your parallel
     74port), and combine the currents of two or more data bits together::
     75
     76	      Diodes
     77    (pin 9) ----|>|-------+------> Power
     78			|
     79    (pin 8) ----|>|-------+
     80			|
     81    (pin 7) ----|>|-------+
     82			|
     83    <and so on>         :
     84			|
     85    (pin 4) ----|>|-------+
     86
     87Ground is quite easy. On PC's parallel port the ground is on any of the
     88pins from pin 18 to pin 25. So use any pin of these you like for the ground::
     89
     90    (pin 18) -----> Ground
     91
     92NES and SNES pads have two input bits, Clock and Latch, which drive the
     93serial transfer. These are connected to pins 2 and 3 of the parallel port,
     94respectively::
     95
     96    (pin 2) -----> Clock
     97    (pin 3) -----> Latch
     98
     99And the last thing is the NES / SNES data wire. Only that isn't shared and
    100each pad needs its own data pin. The parallel port pins are::
    101
    102    (pin 10) -----> Pad 1 data
    103    (pin 11) -----> Pad 2 data
    104    (pin 12) -----> Pad 3 data
    105    (pin 13) -----> Pad 4 data
    106    (pin 15) -----> Pad 5 data
    107
    108Note that pin 14 is not used, since it is not an input pin on the parallel
    109port.
    110
    111This is everything you need on the PC's side of the connection, now on to
    112the gamepads side. The NES and SNES have different connectors. Also, there
    113are quite a lot of NES clones, and because Nintendo used proprietary
    114connectors for their machines, the cloners couldn't and used standard D-Cannon
    115connectors. Anyway, if you've got a gamepad, and it has buttons A, B, Turbo
    116A, Turbo B, Select and Start, and is connected through 5 wires, then it is
    117either a NES or NES clone and will work with this connection. SNES gamepads
    118also use 5 wires, but have more buttons. They will work as well, of course::
    119
    120  Pinout for NES gamepads                 Pinout for SNES gamepads and mice
    121
    122             +----> Power                   +-----------------------\
    123             |                            7 | o  o  o  o |  x  x  o  | 1
    124   5 +---------+  7                         +-----------------------/
    125     | x  x  o   \                            |  |  |  |          |
    126     | o  o  o  o |                           |  |  |  |          +-> Ground
    127   4 +------------+ 1                         |  |  |  +------------> Data
    128       |  |  |  |                             |  |  +---------------> Latch
    129       |  |  |  +-> Ground                    |  +------------------> Clock
    130       |  |  +----> Clock                     +---------------------> Power
    131       |  +-------> Latch
    132       +----------> Data
    133
    134  Pinout for NES clone (db9) gamepads     Pinout for NES clone (db15) gamepads
    135
    136        +---------> Clock                    +-----------------> Data
    137        | +-------> Latch                    |             +---> Ground
    138        | | +-----> Data                     |             |
    139        | | |                              ___________________
    140    _____________                        8 \ o x x x x x x o / 1
    141  5 \ x o o o x / 1                         \ o x x o x x o /
    142     \ x o x o /                          15 `~~~~~~~~~~~~~' 9
    143    9 `~~~~~~~' 6                             |     |     |
    144         |   |                                |     |     +----> Clock
    145         |   +----> Power                     |     +----------> Latch
    146         +--------> Ground                    +----------------> Power
    147
    148Multisystem joysticks
    149---------------------
    150
    151In the era of 8-bit machines, there was something like de-facto standard
    152for joystick ports. They were all digital, and all used D-Cannon 9 pin
    153connectors (db9). Because of that, a single joystick could be used without
    154hassle on Atari (130, 800XE, 800XL, 2600, 7200), Amiga, Commodore C64,
    155Amstrad CPC, Sinclair ZX Spectrum and many other machines. That's why these
    156joysticks are called "Multisystem".
    157
    158Now their pinout::
    159
    160        +---------> Right
    161        | +-------> Left
    162        | | +-----> Down
    163        | | | +---> Up
    164        | | | |
    165    _____________
    166  5 \ x o o o o / 1
    167     \ x o x o /
    168    9 `~~~~~~~' 6
    169         |   |
    170         |   +----> Button
    171         +--------> Ground
    172
    173However, as time passed, extensions to this standard developed, and these
    174were not compatible with each other::
    175
    176
    177          Atari 130, 800/XL/XE                   MSX
    178
    179                                           +-----------> Power
    180        +---------> Right                  | +---------> Right
    181        | +-------> Left                   | | +-------> Left
    182        | | +-----> Down                   | | | +-----> Down
    183        | | | +---> Up                     | | | | +---> Up
    184        | | | |                            | | | | |
    185    _____________                        _____________
    186  5 \ x o o o o / 1                    5 \ o o o o o / 1
    187     \ x o o o /                          \ o o o o /
    188    9 `~~~~~~~' 6                        9 `~~~~~~~' 6
    189         | | |                              | | | |
    190         | | +----> Button                  | | | +----> Button 1
    191         | +------> Power                   | | +------> Button 2
    192         +--------> Ground                  | +--------> Output 3
    193                                            +----------> Ground
    194
    195          Amstrad CPC                           Commodore C64
    196
    197                                           +-----------> Analog Y
    198        +---------> Right                  | +---------> Right
    199        | +-------> Left                   | | +-------> Left
    200        | | +-----> Down                   | | | +-----> Down
    201        | | | +---> Up                     | | | | +---> Up
    202        | | | |                            | | | | |
    203    _____________                        _____________
    204  5 \ x o o o o / 1                    5 \ o o o o o / 1
    205     \ x o o o /                          \ o o o o /
    206    9 `~~~~~~~' 6                        9 `~~~~~~~' 6
    207         | | |                              | | | |
    208         | | +----> Button 1                | | | +----> Button
    209         | +------> Button 2                | | +------> Power
    210         +--------> Ground                  | +--------> Ground
    211                                            +----------> Analog X
    212
    213          Sinclair Spectrum +2A/+3           Amiga 1200
    214
    215      +-----------> Up                     +-----------> Button 3
    216      | +---------> Fire                   | +---------> Right
    217      | |                                  | | +-------> Left
    218      | |   +-----> Ground                 | | | +-----> Down
    219      | |   |                              | | | | +---> Up
    220      | |   |                              | | | | |
    221    _____________                        _____________
    222  5 \ o o x o x / 1                    5 \ o o o o o / 1
    223     \ o o o o /                          \ o o o o /
    224    9 `~~~~~~~' 6                        9 `~~~~~~~' 6
    225       | | | |                              | | | |
    226       | | | +----> Right                   | | | +----> Button 1
    227       | | +------> Left                    | | +------> Power
    228       | +--------> Ground                  | +--------> Ground
    229       +----------> Down                    +----------> Button 2
    230
    231  And there were many others.
    232
    233Multisystem joysticks using db9.c
    234~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    235
    236For the Multisystem joysticks, and their derivatives, the db9.c driver
    237was written. It allows only one joystick / gamepad per parallel port, but
    238the interface is easy to build and works with almost anything.
    239
    240For the basic 1-button Multisystem joystick you connect its wires to the
    241parallel port like this::
    242
    243    (pin  1) -----> Power
    244    (pin 18) -----> Ground
    245
    246    (pin  2) -----> Up
    247    (pin  3) -----> Down
    248    (pin  4) -----> Left
    249    (pin  5) -----> Right
    250    (pin  6) -----> Button 1
    251
    252However, if the joystick is switch based (eg. clicks when you move it),
    253you might or might not, depending on your parallel port, need 10 kOhm pullup
    254resistors on each of the direction and button signals, like this::
    255
    256    (pin 2) ------------+------> Up
    257              Resistor  |
    258    (pin 1) --[10kOhm]--+
    259
    260Try without, and if it doesn't work, add them. For TTL based joysticks /
    261gamepads the pullups are not needed.
    262
    263For joysticks with two buttons you connect the second button to pin 7 on
    264the parallel port::
    265
    266    (pin 7) -----> Button 2
    267
    268And that's it.
    269
    270On a side note, if you have already built a different adapter for use with
    271the digital joystick driver 0.8.0.2, this is also supported by the db9.c
    272driver, as device type 8. (See section 3.2)
    273
    274Multisystem joysticks using gamecon.c
    275~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    276
    277For some people just one joystick per parallel port is not enough, and/or
    278want to use them on one parallel port together with NES/SNES/PSX pads. This is
    279possible using the gamecon.c. It supports up to 5 devices of the above types,
    280including 1 and 2 buttons Multisystem joysticks.
    281
    282However, there is nothing for free. To allow more sticks to be used at
    283once, you need the sticks to be purely switch based (that is non-TTL), and
    284not to need power. Just a plain simple six switches inside. If your
    285joystick can do more (eg. turbofire) you'll need to disable it totally first
    286if you want to use gamecon.c.
    287
    288Also, the connection is a bit more complex. You'll need a bunch of diodes,
    289and one pullup resistor. First, you connect the Directions and the button
    290the same as for db9, however with the diodes between::
    291
    292                Diodes
    293    (pin 2) -----|<|----> Up
    294    (pin 3) -----|<|----> Down
    295    (pin 4) -----|<|----> Left
    296    (pin 5) -----|<|----> Right
    297    (pin 6) -----|<|----> Button 1
    298
    299For two button sticks you also connect the other button::
    300
    301    (pin 7) -----|<|----> Button 2
    302
    303And finally, you connect the Ground wire of the joystick, like done in
    304this little schematic to Power and Data on the parallel port, as described
    305for the NES / SNES pads in section 2.1 of this file - that is, one data pin
    306for each joystick. The power source is shared::
    307
    308    Data    ------------+-----> Ground
    309              Resistor  |
    310    Power   --[10kOhm]--+
    311
    312And that's all, here we go!
    313
    314Multisystem joysticks using turbografx.c
    315~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    316
    317The TurboGraFX interface, designed by
    318
    319	Steffen Schwenke <schwenke@burg-halle.de>
    320
    321allows up to 7 Multisystem joysticks connected to the parallel port. In
    322Steffen's version, there is support for up to 5 buttons per joystick.  However,
    323since this doesn't work reliably on all parallel ports, the turbografx.c driver
    324supports only one button per joystick. For more information on how to build the
    325interface, see:
    326
    327	http://www2.burg-halle.de/~schwenke/parport.html
    328
    329Sony Playstation
    330----------------
    331
    332The PSX controller is supported by the gamecon.c. Pinout of the PSX
    333controller (compatible with DirectPadPro)::
    334
    335    +---------+---------+---------+
    336  9 | o  o  o | o  o  o | o  o  o | 1               parallel
    337     \________|_________|________/                  port pins
    338      |  |      |  |  |   |
    339      |  |      |  |  |   +-------->  Clock    ---  (4)
    340      |  |      |  |  +------------>  Select   ---  (3)
    341      |  |      |  +--------------->  Power    ---  (5-9)
    342      |  |      +------------------>  Ground   ---  (18-25)
    343      |  +------------------------->  Command  ---  (2)
    344      +---------------------------->  Data     ---  (one of 10,11,12,13,15)
    345
    346The driver supports these controllers:
    347
    348 * Standard PSX Pad
    349 * NegCon PSX Pad
    350 * Analog PSX Pad (red mode)
    351 * Analog PSX Pad (green mode)
    352 * PSX Rumble Pad
    353 * PSX DDR Pad
    354
    355Sega
    356----
    357
    358All the Sega controllers are more or less based on the standard 2-button
    359Multisystem joystick. However, since they don't use switches and use TTL
    360logic, the only driver usable with them is the db9.c driver.
    361
    362Sega Master System
    363~~~~~~~~~~~~~~~~~~
    364
    365The SMS gamepads are almost exactly the same as normal 2-button
    366Multisystem joysticks. Set the driver to Multi2 mode, use the corresponding
    367parallel port pins, and the following schematic::
    368
    369      +-----------> Power
    370      | +---------> Right
    371      | | +-------> Left
    372      | | | +-----> Down
    373      | | | | +---> Up
    374      | | | | |
    375    _____________
    376  5 \ o o o o o / 1
    377     \ o o x o /
    378    9 `~~~~~~~' 6
    379       | |   |
    380       | |   +----> Button 1
    381       | +--------> Ground
    382       +----------> Button 2
    383
    384Sega Genesis aka MegaDrive
    385~~~~~~~~~~~~~~~~~~~~~~~~~~
    386
    387The Sega Genesis (in Europe sold as Sega MegaDrive) pads are an extension
    388to the Sega Master System pads. They use more buttons (3+1, 5+1, 6+1).  Use
    389the following schematic::
    390
    391        +-----------> Power
    392        | +---------> Right
    393        | | +-------> Left
    394        | | | +-----> Down
    395        | | | | +---> Up
    396        | | | | |
    397      _____________
    398    5 \ o o o o o / 1
    399       \ o o o o /
    400      9 `~~~~~~~' 6
    401        | | | |
    402        | | | +----> Button 1
    403        | | +------> Select
    404        | +--------> Ground
    405        +----------> Button 2
    406
    407The Select pin goes to pin 14 on the parallel port::
    408
    409    (pin 14) -----> Select
    410
    411The rest is the same as for Multi2 joysticks using db9.c
    412
    413Sega Saturn
    414~~~~~~~~~~~
    415
    416Sega Saturn has eight buttons, and to transfer that, without hacks like
    417Genesis 6 pads use, it needs one more select pin. Anyway, it is still
    418handled by the db9.c driver. Its pinout is very different from anything
    419else.  Use this schematic::
    420
    421      +-----------> Select 1
    422      | +---------> Power
    423      | | +-------> Up
    424      | | | +-----> Down
    425      | | | | +---> Ground
    426      | | | | |
    427    _____________
    428  5 \ o o o o o / 1
    429     \ o o o o /
    430    9 `~~~~~~~' 6
    431       | | | |
    432       | | | +----> Select 2
    433       | | +------> Right
    434       | +--------> Left
    435       +----------> Power
    436
    437Select 1 is pin 14 on the parallel port, Select 2 is pin 16 on the
    438parallel port::
    439
    440    (pin 14) -----> Select 1
    441    (pin 16) -----> Select 2
    442
    443The other pins (Up, Down, Right, Left, Power, Ground) are the same as for
    444Multi joysticks using db9.c
    445
    446Amiga CD32
    447----------
    448
    449Amiga CD32 joypad uses the following pinout::
    450
    451        +-----------> Button 3
    452        | +---------> Right
    453        | | +-------> Left
    454        | | | +-----> Down
    455        | | | | +---> Up
    456        | | | | |
    457      _____________
    458    5 \ o o o o o / 1
    459       \ o o o o /
    460      9 `~~~~~~~' 6
    461        | | | |
    462        | | | +----> Button 1
    463        | | +------> Power
    464        | +--------> Ground
    465        +----------> Button 2
    466
    467It can be connected to the parallel port and driven by db9.c driver. It needs the following wiring:
    468
    469	============    =============
    470	CD32 pad        Parallel port
    471	============    =============
    472	1 (Up)           2 (D0)
    473	2 (Down)         3 (D1)
    474	3 (Left)         4 (D2)
    475	4 (Right)        5 (D3)
    476	5 (Button 3)    14 (AUTOFD)
    477	6 (Button 1)    17 (SELIN)
    478	7 (+5V)          1 (STROBE)
    479	8 (Gnd)         18 (Gnd)
    480	9 (Button 2)     7 (D5)
    481	============    =============
    482
    483The drivers
    484===========
    485
    486There are three drivers for the parallel port interfaces. Each, as
    487described above, allows to connect a different group of joysticks and pads.
    488Here are described their command lines:
    489
    490gamecon.c
    491---------
    492
    493Using gamecon.c you can connect up to five devices to one parallel port. It
    494uses the following kernel/module command line::
    495
    496	gamecon.map=port,pad1,pad2,pad3,pad4,pad5
    497
    498Where ``port`` the number of the parport interface (eg. 0 for parport0).
    499
    500And ``pad1`` to ``pad5`` are pad types connected to different data input pins
    501(10,11,12,13,15), as described in section 2.1 of this file.
    502
    503The types are:
    504
    505	===== =============================
    506	Type  Joystick/Pad
    507	===== =============================
    508	  0   None
    509	  1   SNES pad
    510	  2   NES pad
    511	  4   Multisystem 1-button joystick
    512	  5   Multisystem 2-button joystick
    513	  6   N64 pad
    514	  7   Sony PSX controller
    515	  8   Sony PSX DDR controller
    516	  9   SNES mouse
    517	===== =============================
    518
    519The exact type of the PSX controller type is autoprobed when used, so
    520hot swapping should work (but is not recommended).
    521
    522Should you want to use more than one of parallel ports at once, you can use
    523gamecon.map2 and gamecon.map3 as additional command line parameters for two
    524more parallel ports.
    525
    526There are two options specific to PSX driver portion.  gamecon.psx_delay sets
    527the command delay when talking to the controllers. The default of 25 should
    528work but you can try lowering it for better performance. If your pads don't
    529respond try raising it until they work. Setting the type to 8 allows the
    530driver to be used with Dance Dance Revolution or similar games. Arrow keys are
    531registered as key presses instead of X and Y axes.
    532
    533db9.c
    534-----
    535
    536Apart from making an interface, there is nothing difficult on using the
    537db9.c driver. It uses the following kernel/module command line::
    538
    539	db9.dev=port,type
    540
    541Where ``port`` is the number of the parport interface (eg. 0 for parport0).
    542
    543Caveat here: This driver only works on bidirectional parallel ports. If
    544your parallel port is recent enough, you should have no trouble with this.
    545Old parallel ports may not have this feature.
    546
    547``Type`` is the type of joystick or pad attached:
    548
    549	===== ======================================================
    550	Type  Joystick/Pad
    551	===== ======================================================
    552	  0   None
    553	  1   Multisystem 1-button joystick
    554	  2   Multisystem 2-button joystick
    555	  3   Genesis pad (3+1 buttons)
    556	  5   Genesis pad (5+1 buttons)
    557	  6   Genesis pad (6+2 buttons)
    558	  7   Saturn pad (8 buttons)
    559	  8   Multisystem 1-button joystick (v0.8.0.2 pin-out)
    560	  9   Two Multisystem 1-button joysticks (v0.8.0.2 pin-out)
    561	 10   Amiga CD32 pad
    562	===== ======================================================
    563
    564Should you want to use more than one of these joysticks/pads at once, you
    565can use db9.dev2 and db9.dev3 as additional command line parameters for two
    566more joysticks/pads.
    567
    568turbografx.c
    569------------
    570
    571The turbografx.c driver uses a very simple kernel/module command line::
    572
    573	turbografx.map=port,js1,js2,js3,js4,js5,js6,js7
    574
    575Where ``port`` is the number of the parport interface (eg. 0 for parport0).
    576
    577``jsX`` is the number of buttons the Multisystem joysticks connected to the
    578interface ports 1-7 have. For a standard multisystem joystick, this is 1.
    579
    580Should you want to use more than one of these interfaces at once, you can
    581use turbografx.map2 and turbografx.map3 as additional command line parameters
    582for two more interfaces.
    583
    584PC parallel port pinout
    585=======================
    586
    587::
    588
    589		  .----------------------------------------.
    590   At the PC:     \ 13 12 11 10  9  8  7  6  5  4  3  2  1 /
    591                   \  25 24 23 22 21 20 19 18 17 16 15 14 /
    592                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    593
    594======  =======  =============
    595   Pin  Name     Description
    596======  =======  =============
    597     1  /STROBE  Strobe
    598   2-9  D0-D7    Data Bit 0-7
    599    10  /ACK     Acknowledge
    600    11  BUSY     Busy
    601    12  PE       Paper End
    602    13  SELIN    Select In
    603    14  /AUTOFD  Autofeed
    604    15  /ERROR   Error
    605    16  /INIT    Initialize
    606    17  /SEL     Select
    607 18-25  GND      Signal Ground
    608======  =======  =============
    609
    610
    611That's all, folks! Have fun!