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