OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [Documentation/] [input/] [joystick-parport.txt] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
                    Linux Joystick parport drivers v2.0
2
               (c) 1998-2000 Vojtech Pavlik 
3
               (c) 1998 Andree Borrmann 
4
                             Sponsored by SuSE
5
        $Id: joystick-parport.txt,v 1.1.1.1 2004-04-15 02:32:42 phoenix Exp $
6
----------------------------------------------------------------------------
7
 
8
0. Disclaimer
9
~~~~~~~~~~~~~
10
  Any information in this file is provided as-is, without any guarantee that
11
it will be true. So, use it at your own risk. The possible damages that can
12
happen include burning your parallel port, and/or the sticks and joystick
13
and maybe even more. Like when a lightning kills you it is not our problem.
14
 
15
1. Intro
16
~~~~~~~~
17
  The joystick parport drivers are used for joysticks and gamepads not
18
originally designed for PCs and other computers Linux runs on. Because of
19
that, PCs usually lack the right ports to connect these devices to. Parallel
20
port, because of its ability to change single bits at will, and providing
21
both output and input bits is the most suitable port on the PC for
22
connecting such devices.
23
 
24
2. Devices supported
25
~~~~~~~~~~~~~~~~~~~~
26
  Many console and 8-bit computer gamepads and joysticks are supported. The
27
following subsections discuss usage of each.
28
 
29
2.1 NES and SNES
30
~~~~~~~~~~~~~~~~
31
  The Nintendo Entertainment System and Super Nintendo Entertainment System
32
gamepads are widely available, and easy to get. Also, they are quite easy to
33
connect to a PC, and don't need much processing speed (108 us for NES and
34
165 us for SNES, compared to about 1000 us for PC gamepads) to communicate
35
with them.
36
 
37
  All NES and SNES use the same synchronous serial protocol, clocked from
38
the computer's side (and thus timing insensitive). To allow up to 5 NES
39
and/or SNES gamepads connected to the parallel port at once, the output
40
lines of the parallel port are shared, while one of 5 available input lines
41
is assigned to each gamepad.
42
 
43
  This protocol is handled by the gamecon.c driver, so that's the one
44
you'll use for NES and SNES gamepads.
45
 
46
  The main problem with PC parallel ports is that they don't have +5V power
47
source on any of their pins. So, if you want a reliable source of power
48
for your pads, use either keyboard or joystick port, and make a pass-through
49
cable. You can also pull the power directly from the power supply (the red
50
wire is +5V).
51
 
52
  If you want to use the parallel port only, you can take the power is from
53
some data pin. For most gamepad and parport implementations only one pin is
54
needed, and I'd recommend pin 9 for that, the highest data bit. On the other
55
hand, if you are not planning to use anything else than NES / SNES on the
56
port, 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
61
ports that can't give much current through the data pins. If this is your
62
case, you'll need to use diodes (as a prevention of destroying your parallel
63
port), 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
           :
73
                      |
74
(pin 4) ----|>|-------+
75
 
76
  Ground is quite easy. On PC's parallel port the ground is on any of the
77
pins 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
82
serial transfer. These are connected to pins 2 and 3 of the parallel port,
83
respectively.
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
89
each 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
98
port.
99
 
100
  This is everything you need on the PC's side of the connection, now on to
101
the gamepads side. The NES and SNES have different connectors. Also, there
102
are quite a lot of NES clones, and because Nintendo used proprietary
103
connectors for their machines, the cloners couldn't and used standard D-Cannon
104
connectors. Anyway, if you've got a gamepad, and it has buttons A, B, Turbo
105
A, Turbo B, Select and Start, and is connected through 5 wires, then it is
106
either a NES or NES clone and will work with this connection. SNES gamepads
107
also use 5 wires, but have more buttons. They will work as well, of course.
108
 
109
Pinout for NES gamepads                 Pinout for SNES gamepads
110
 
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
 
123
Pinout 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
 
137
2.2 Multisystem joysticks
138
~~~~~~~~~~~~~~~~~~~~~~~~~
139
  In the era of 8-bit machines, there was something like de-facto standard
140
for joystick ports. They were all digital, and all used D-Cannon 9 pin
141
connectors (db9). Because of that, a single joystick could be used without
142
hassle on Atari (130, 800XE, 800XL, 2600, 7200), Amiga, Commodore C64,
143
Amstrad CPC, Sinclair ZX Spectrum and many other machines. That's why these
144
joysticks are called "Multisystem".
145
 
146
  Now their pinout:
147
 
148
      +---------> Right
149
      | +-------> Left
150
      | | +-----> Down
151
      | | | +---> Up
152
      | | | |
153
  _____________
154
5 \ 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
162
were 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
  _____________                        _____________
174
5 \ 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
  _____________                        _____________
192
5 \ 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
  _____________                        _____________
210
5 \ 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
 
221
2.2.1 Multisystem joysticks using db9.c
222
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
223
  For the Multisystem joysticks, and their derivatives, the db9.c driver
224
was written. It allows only one joystick / gamepad per parallel port, but
225
the 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
228
parallel 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),
240
you might or might not, depending on your parallel port, need 10 kOhm pullup
241
resistors 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 /
248
gamepads the pullups are not needed.
249
 
250
  For joysticks with two buttons you connect the second button to pin 7 on
251
the 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
258
the digital joystick driver 0.8.0.2, this is also supported by the db9.c
259
driver, as device type 8. (See section 3.2)
260
 
261
2.2.2 Multisystem joysticks using gamecon.c
262
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
263
  For some people just one joystick per parallel port is not enough, and/or
264
want to use them on one parallel port together with NES/SNES/PSX pads. This is
265
possible using the gamecon.c. It supports up to 5 devices of the above types,
266
including 1 and 2 buttons Multisystem joysticks.
267
 
268
  However, there is nothing for free. To allow more sticks to be used at
269
once, you need the sticks to be purely switch based (that is non-TTL), and
270
not to need power. Just a plain simple six switches inside. If your
271
joystick can do more (eg. turbofire) you'll need to disable it totally first
272
if you want to use gamecon.c.
273
 
274
  Also, the connection is a bit more complex. You'll need a bunch of diodes,
275
and one pullup resistor. First, you connect the Directions and the button
276
the 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
290
this little schematic to Power and Data on the parallel port, as described
291
for the NES / SNES pads in section 2.1 of this file - that is, one data pin
292
for each joystick. The power source is shared.
293
 
294
Data    ------------+-----> Ground
295
          Resistor  |
296
Power   --[10kOhm]--+
297
 
298
  And that's all, here we go!
299
 
300
2.2.3 Multisystem joysticks using turbografx.c
301
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
302
  The TurboGraFX interface, designed by
303
 
304
        Steffen Schwenke 
305
 
306
  allows up to 7 Multisystem joysticks connected to the parallel port. In
307
Steffen's version, there is support for up to 5 buttons per joystick.  However,
308
since this doesn't work reliably on all parallel ports, the turbografx.c driver
309
supports only one button per joystick. For more information on how to build the
310
interface, see
311
 
312
        http://www2.burg-halle.de/~schwenke/parport.html
313
 
314
2.3 Sony Playstation
315
~~~~~~~~~~~~~~~~~~~~
316
 
317
  The PSX controller is supported by the gamecon.c. Pinout of the PSX
318
controller (compatible with DirectPadPro):
319
 
320
  +---------+---------+---------+
321
9 | 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
 
339
2.4 Sega
340
~~~~~~~~
341
  All the Sega controllers are more or less based on the standard 2-button
342
Multisystem joystick. However, since they don't use switches and use TTL
343
logic, the only driver usable with them is the db9.c driver.
344
 
345
2.4.1 Sega Master System
346
~~~~~~~~~~~~~~~~~~~~~~~~
347
  The SMS gamepads are almost exactly the same as normal 2-button
348
Multisystem joysticks. Set the driver to Multi2 mode, use the corresponding
349
parallel port pins, and the following schematic:
350
 
351
    +-----------> Power
352
    | +---------> Right
353
    | | +-------> Left
354
    | | | +-----> Down
355
    | | | | +---> Up
356
    | | | | |
357
  _____________
358
5 \ o o o o o / 1
359
   \ o o x o /
360
  9 `~~~~~~~' 6
361
     | |   |
362
     | |   +----> Button 1
363
     | +--------> Ground
364
     +----------> Button 2
365
 
366
2.4.2 Sega Genesis aka MegaDrive
367
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
368
  The Sega Genesis (in Europe sold as Sega MegaDrive) pads are an extension
369
to the Sega Master System pads. They use more buttons (3+1, 5+1, 6+1).  Use
370
the following schematic:
371
 
372
    +-----------> Power
373
    | +---------> Right
374
    | | +-------> Left
375
    | | | +-----> Down
376
    | | | | +---> Up
377
    | | | | |
378
  _____________
379
5 \ o o o o o / 1
380
   \ o o o o /
381
  9 `~~~~~~~' 6
382
     | | | |
383
     | | | +----> Button 1
384
     | | +------> Select
385
     | +--------> Ground
386
     +----------> Button 2
387
 
388
  The Select pin goes to pin 14 on the parallel port.
389
 
390
(pin 14) -----> Select
391
 
392
  The rest is the same as for Multi2 joysticks using db9.c
393
 
394
2.4.3 Sega Saturn
395
~~~~~~~~~~~~~~~~~
396
  Sega Saturn has eight buttons, and to transfer that, without hacks like
397
Genesis 6 pads use, it needs one more select pin. Anyway, it is still
398
handled by the db9.c driver. Its pinout is very different from anything
399
else.  Use this schematic:
400
 
401
    +-----------> Select 1
402
    | +---------> Power
403
    | | +-------> Up
404
    | | | +-----> Down
405
    | | | | +---> Ground
406
    | | | | |
407
  _____________
408
5 \ o o o o o / 1
409
   \ o o o o /
410
  9 `~~~~~~~' 6
411
     | | | |
412
     | | | +----> Select 2
413
     | | +------> Right
414
     | +--------> Left
415
     +----------> Power
416
 
417
  Select 1 is pin 14 on the parallel port, Select 2 is pin 16 on the
418
parallel port.
419
 
420
(pin 14) -----> Select 1
421
(pin 16) -----> Select 2
422
 
423
  The other pins (Up, Down, Right, Left, Power, Ground) are the same as for
424
Multi joysticks using db9.c
425
 
426
3. The drivers
427
~~~~~~~~~~~~~~
428
  There are three drivers for the parallel port interfaces. Each, as
429
described above, allows to connect a different group of joysticks and pads.
430
Here are described their command lines:
431
 
432
3.1 gamecon.c
433
~~~~~~~~~~~~~
434
  Using gamecon.c you can connect up to five devices to one parallel port. It
435
uses the following kernel/module command line:
436
 
437
        gc=port,pad1,pad2,pad3,pad4,pad5
438
 
439
  Where 'port' the number of the parport interface (eg. 0 for parport0).
440
 
441
  And 'pad1' to 'pad5' are pad types connected to different data input pins
442
(10,11,12,13,15), as described in section 2.1 of this file.
443
 
444
  The types are:
445
 
446
        Type | Joystick/Pad
447
        --------------------
448
 
449
          1  | SNES pad
450
          2  | NES pad
451
          4  | Multisystem 1-button joystick
452
          5  | Multisystem 2-button joystick
453
          6  | N64 pad
454
          7  | Sony PSX controller
455
 
456
  The exact type of the PSX controller type is autoprobed, so you must have
457
your controller plugged in before initializing.
458
 
459
  Should you want to use more than one of parallel ports at once, you can use
460
gc_2 and gc_3 as additional command line parameters for two more parallel
461
ports.
462
 
463
3.2 db9.c
464
~~~~~~~~~
465
  Apart from making an interface, there is nothing difficult on using the
466
db9.c driver. It uses the following kernel/module command line:
467
 
468
        db9=port,type
469
 
470
  Where 'port' is the number of the parport interface (eg. 0 for parport0).
471
 
472
  Caveat here: This driver only works on bidirectional parallel ports. If
473
your parallel port is recent enough, you should have no trouble with this.
474
Old parallel ports may not have this feature.
475
 
476
  'Type' is the type of joystick or pad attached:
477
 
478
        Type | Joystick/Pad
479
        --------------------
480
 
481
          1  | Multisystem 1-button joystick
482
          2  | Multisystem 2-button joystick
483
          3  | Genesis pad (3+1 buttons)
484
          5  | Genesis pad (5+1 buttons)
485
          6  | Genesis pad (6+2 buttons)
486
          7  | Saturn pad (8 buttons)
487
          8  | Multisystem 1-button joystick (v0.8.0.2 pin-out)
488
          9  | Two Multisystem 1-button joysticks (v0.8.0.2 pin-out)
489
         10  | Amiga CD32 pad
490
 
491
  Should you want to use more than one of these joysticks/pads at once, you
492
can use db9_2 and db9_3 as additional command line parameters for two
493
more joysticks/pads.
494
 
495
3.3 turbografx.c
496
~~~~~~~~~~~~~~~~
497
  The turbografx.c driver uses a very simple kernel/module command line:
498
 
499
        tgfx=port,js1,js2,js3,js4,js5,js6,js7
500
 
501
  Where 'port' is the number of the parport interface (eg. 0 for parport0).
502
 
503
  'jsX' is the number of buttons the Multisystem joysticks connected to the
504
interface ports 1-7 have. For a standard multisystem joystick, this is 1.
505
 
506
  Should you want to use more than one of these interfaces at once, you can
507
use tgfx_2 and tgfx_3 as additional command line parameters for two more
508
interfaces.
509
 
510
3.4 PC parallel port pinout
511
~~~~~~~~~~~~~~~~~~~~~~~~~~~
512
                  .----------------------------------------.
513
   At the PC:     \ 13 12 11 10  9  8  7  6  5  4  3  2  1 /
514
                   \  25 24 23 22 21 20 19 18 17 16 15 14 /
515
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
516
 
517
          Pin | Name    | Description
518
        ~~~~~~|~~~~~~~~~|~~~~~~~~~~
519
            1 | /STROBE | Strobe
520
          2-9 | D0-D7   | Data Bit 0-7
521
           10 | /ACK    | Acknowledge
522
           11 | BUSY    | Busy
523
           12 | PE      | Paper End
524
           13 | SELIN   | Select In
525
           14 | /AUTOFD | Autofeed
526
           15 | /ERROR  | Error
527
           16 | /INIT   | Initialize
528
           17 | /SEL    | Select
529
        18-25 | GND     | Signal Ground
530
 
531
3.5 End
532
~~~~~~~
533
  That's all, folks! Have fun!

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.