11. 并口游戏杆驱动程序¶
- 版权所有:
© 1998-2000 Vojtech Pavlik <vojtech@ucw.cz>
- 版权所有:
© 1998 Andree Borrmann <a.borrmann@tu-bs.de>
由 SuSE 赞助
11.1. 免责声明¶
此文件中的任何信息均按原样提供,不保证其真实性。 因此,使用风险自负。 可能发生的损坏包括烧毁您的并行端口和/或游戏杆和游戏杆,甚至更多。 就像闪电杀死您一样,这不是我们的问题。
11.2. 简介¶
游戏杆并口驱动程序用于最初并非为 PC 和 Linux 运行的其他计算机设计的游戏杆和游戏手柄。 因此,PC 通常缺少将这些设备连接到其上的正确端口。 并行端口由于能够随意更改单个位,并提供输出和输入位,因此是 PC 上连接此类设备的最合适的端口。
11.3. 支持的设备¶
支持许多控制台和 8 位计算机游戏手柄和游戏杆。 以下小节讨论了每种游戏手柄和游戏杆的用法。
11.3.1. NES 和 SNES¶
任天堂娱乐系统和超级任天堂娱乐系统的游戏手柄随处可见,而且很容易获得。 此外,它们很容易连接到 PC,并且不需要太多的处理速度(NES 为 108 微秒,SNES 为 165 微秒,而 PC 游戏手柄为大约 1000 微秒)即可与它们通信。
所有 NES 和 SNES 都使用相同的同步串行协议,该协议从计算机端进行时钟同步(因此对时序不敏感)。 为了允许多达 5 个 NES 和/或 SNES 游戏手柄和/或 SNES 鼠标一次连接到并行端口,并行端口的输出线是共享的,而 5 个可用的输入线之一分配给每个游戏手柄。
该协议由 gamecon.c 驱动程序处理,因此它是您将用于 NES、SNES 游戏手柄和 SNES 鼠标的驱动程序。
PC 并行端口的主要问题是它们的任何引脚上都没有 +5V 电源。 因此,如果您想要为游戏手柄提供可靠的电源,请使用键盘或游戏杆端口,并制作直通电缆。 您也可以直接从电源中获取电源(红色线为 +5V)。
如果您只想使用并行端口,则可以从某些数据引脚获取电源。 对于大多数游戏手柄和并行端口实现,只需要一个引脚,我建议使用引脚 9,即最高数据位。 另一方面,如果您不打算在端口上使用 NES/SNES 以外的任何东西,则引脚 4 到引脚 9(包括引脚 4 和引脚 9)之间的任何东西都可以工作
(pin 9) -----> Power
不幸的是,有些游戏手柄需要更多的电源,而并行端口无法通过数据引脚提供足够的电流。 如果是这种情况,您需要使用二极管(以防止损坏您的并行端口),并将两个或更多数据位的电流组合在一起
Diodes
(pin 9) ----|>|-------+------> Power
|
(pin 8) ----|>|-------+
|
(pin 7) ----|>|-------+
|
<and so on> :
|
(pin 4) ----|>|-------+
接地非常容易。 在 PC 的并行端口上,接地位于引脚 18 到引脚 25 的任何一个引脚上。 因此,使用您喜欢的这些引脚中的任何一个引脚进行接地
(pin 18) -----> Ground
NES 和 SNES 游戏手柄有两个输入位,Clock 和 Latch,它们驱动串行传输。 它们分别连接到并行端口的引脚 2 和引脚 3
(pin 2) -----> Clock
(pin 3) -----> Latch
最后一件事是 NES/SNES 数据线。 只有它不是共享的,每个游戏手柄都需要自己的数据引脚。 并行端口引脚是
(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
请注意,引脚 14 未使用,因为它不是并行端口上的输入引脚。
这就是您在连接的 PC 端需要的一切,现在转到游戏手柄端。 NES 和 SNES 有不同的连接器。 此外,还有很多 NES 克隆产品,并且由于任天堂为其机器使用专有连接器,因此克隆产品无法使用标准 D-Cannon 连接器。 无论如何,如果您有一个游戏手柄,并且它有 A、B、Turbo A、Turbo B、选择和开始按钮,并且通过 5 根线连接,那么它要么是 NES 或 NES 克隆产品,并且可以使用此连接。 SNES 游戏手柄也使用 5 根线,但有更多的按钮。 当然,它们也可以工作
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
11.3.2. 多系统游戏杆¶
在 8 位机器时代,游戏杆端口有一些事实上的标准。 它们都是数字的,并且都使用 D-Cannon 9 针连接器 (db9)。 因此,单个游戏杆可以毫无问题地在 Atari (130, 800XE, 800XL, 2600, 7200)、Amiga、Commodore C64、Amstrad CPC、Sinclair ZX Spectrum 和许多其他机器上使用。 这就是为什么这些游戏杆被称为“多系统”的原因。
现在是它们的引脚排列
+---------> Right
| +-------> Left
| | +-----> Down
| | | +---> Up
| | | |
_____________
5 \ x o o o o / 1
\ x o x o /
9 `~~~~~~~' 6
| |
| +----> Button
+--------> Ground
然而,随着时间的推移,对该标准的扩展得到了发展,并且这些扩展彼此不兼容
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.
11.3.2.1. 使用 db9.c 的多系统游戏杆¶
对于多系统游戏杆及其衍生物,编写了 db9.c 驱动程序。 它只允许每个并行端口一个游戏杆/游戏手柄,但接口易于构建并且几乎适用于任何东西。
对于基本的 1 按钮多系统游戏杆,您可以将它的线连接到并行端口,如下所示
(pin 1) -----> Power
(pin 18) -----> Ground
(pin 2) -----> Up
(pin 3) -----> Down
(pin 4) -----> Left
(pin 5) -----> Right
(pin 6) -----> Button 1
但是,如果游戏杆是基于开关的(例如,在您移动它时会发出咔哒声),那么您可能或可能不需要(取决于您的并行端口)在每个方向和按钮信号上使用 10 kOhm 上拉电阻,如下所示
(pin 2) ------------+------> Up
Resistor |
(pin 1) --[10kOhm]--+
尝试不使用,如果它不起作用,则添加它们。 对于基于 TTL 的游戏杆/游戏手柄,不需要上拉电阻。
对于带有两个按钮的游戏杆,您可以将第二个按钮连接到并行端口上的引脚 7
(pin 7) -----> Button 2
就是这样。
另一方面,如果您已经构建了一个不同的适配器用于数字游戏杆驱动程序 0.8.0.2,则 db9.c 驱动程序也支持此适配器,作为设备类型 8。(参见第 3.2 节)
11.3.2.2. 使用 gamecon.c 的多系统游戏杆¶
对于某些人来说,每个并行端口只有一个游戏杆是不够的,并且/或者希望将它们与 NES/SNES/PSX 游戏手柄一起在并行端口上使用。 使用 gamecon.c 可以实现这一点。 它支持多达 5 个上述类型的设备,包括 1 和 2 个按钮的多系统游戏杆。
但是,没有什么是免费的。 为了允许一次使用更多的游戏杆,您需要游戏杆是纯粹基于开关的(即非 TTL),并且不需要电源。 只是里面有六个简单的开关。 如果您的游戏杆可以做更多的事情(例如,快速连发),如果您想使用 gamecon.c,您需要首先完全禁用它。
此外,连接有点复杂。 您需要一堆二极管和一个上拉电阻。 首先,您将方向和按钮的连接方式与 db9 的连接方式相同,但二极管之间有连接
Diodes
(pin 2) -----|<|----> Up
(pin 3) -----|<|----> Down
(pin 4) -----|<|----> Left
(pin 5) -----|<|----> Right
(pin 6) -----|<|----> Button 1
对于两个按钮的游戏杆,您还可以连接另一个按钮
(pin 7) -----|<|----> Button 2
最后,您将游戏杆的接地线连接到并行端口上的电源和数据,如本文件的第 2.1 节中针对 NES/SNES 游戏手柄的描述 - 也就是说,每个游戏杆使用一个数据引脚。 电源是共享的
Data ------------+-----> Ground
Resistor |
Power --[10kOhm]--+
就是这样,我们开始吧!
11.3.2.3. 使用 turbografx.c 的多系统游戏杆¶
TurboGraFX 接口,由以下人员设计
Steffen Schwenke <schwenke@burg-halle.de>
允许将多达 7 个多系统游戏杆连接到并行端口。 在 Steffen 的版本中,每个游戏杆最多支持 5 个按钮。 但是,由于这并非在所有并行端口上都能可靠地工作,因此 turbografx.c 驱动程序仅支持每个游戏杆一个按钮。 有关如何构建接口的更多信息,请参见
11.3.3. 索尼 PlayStation¶
PSX 控制器由 gamecon.c 支持。 PSX 控制器的引脚排列(与 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)
该驱动程序支持以下控制器
标准 PSX 游戏手柄
NegCon PSX 游戏手柄
模拟 PSX 游戏手柄(红色模式)
模拟 PSX 游戏手柄(绿色模式)
PSX 震动游戏手柄
PSX DDR 游戏手柄
11.3.4. 世嘉¶
所有世嘉控制器或多或少都基于标准的 2 按钮多系统游戏杆。 但是,由于它们不使用开关而使用 TTL 逻辑,因此唯一可与它们一起使用的驱动程序是 db9.c 驱动程序。
11.3.4.1. 世嘉 Master System¶
SMS 游戏手柄几乎与普通的 2 按钮多系统游戏杆相同。 将驱动程序设置为 Multi2 模式,使用相应的并行端口引脚和以下原理图
+-----------> Power
| +---------> Right
| | +-------> Left
| | | +-----> Down
| | | | +---> Up
| | | | |
_____________
5 \ o o o o o / 1
\ o o x o /
9 `~~~~~~~' 6
| | |
| | +----> Button 1
| +--------> Ground
+----------> Button 2
11.3.4.2. 世嘉 Genesis,又名 MegaDrive¶
世嘉 Genesis(在欧洲作为世嘉 MegaDrive 出售)游戏手柄是世嘉 Master System 游戏手柄的扩展。 它们使用更多的按钮 (3+1, 5+1, 6+1)。 使用以下原理图
+-----------> Power
| +---------> Right
| | +-------> Left
| | | +-----> Down
| | | | +---> Up
| | | | |
_____________
5 \ o o o o o / 1
\ o o o o /
9 `~~~~~~~' 6
| | | |
| | | +----> Button 1
| | +------> Select
| +--------> Ground
+----------> Button 2
选择引脚连接到并行端口上的引脚 14
(pin 14) -----> Select
其余的与使用 db9.c 的 Multi2 游戏杆相同
11.3.4.3. 世嘉 Saturn¶
世嘉 Saturn 有八个按钮,并且为了在没有像 Genesis 6 游戏手柄使用的黑客手段的情况下传输该按钮,它需要再多一个选择引脚。 无论如何,它仍然由 db9.c 驱动程序处理。 它的引脚排列与任何其他东西都非常不同。 使用此原理图
+-----------> Select 1
| +---------> Power
| | +-------> Up
| | | +-----> Down
| | | | +---> Ground
| | | | |
_____________
5 \ o o o o o / 1
\ o o o o /
9 `~~~~~~~' 6
| | | |
| | | +----> Select 2
| | +------> Right
| +--------> Left
+----------> Power
选择 1 是并行端口上的引脚 14,选择 2 是并行端口上的引脚 16
(pin 14) -----> Select 1
(pin 16) -----> Select 2
其他引脚(上、下、右、左、电源、接地)与使用 db9.c 的 Multi 游戏杆相同
11.3.5. Amiga CD32¶
Amiga CD32 游戏手柄使用以下引脚排列
+-----------> Button 3
| +---------> Right
| | +-------> Left
| | | +-----> Down
| | | | +---> Up
| | | | |
_____________
5 \ o o o o o / 1
\ o o o o /
9 `~~~~~~~' 6
| | | |
| | | +----> Button 1
| | +------> Power
| +--------> Ground
+----------> Button 2
它可以连接到并行端口并由 db9.c 驱动程序驱动。 它需要以下接线
CD32 游戏手柄
并行端口
1 (上)
2 (D0)
2 (下)
3 (D1)
3 (左)
4 (D2)
4 (右)
5 (D3)
5 (按钮 3)
14 (AUTOFD)
6 (按钮 1)
17 (SELIN)
7 (+5V)
1 (STROBE)
8 (Gnd)
18 (Gnd)
9 (按钮 2)
7 (D5)
11.4. 驱动程序¶
并行端口接口有三个驱动程序。 如上所述,每个驱动程序都允许连接不同的游戏杆和游戏手柄组。 下面描述了它们的命令行
11.4.1. gamecon.c¶
使用 gamecon.c,您可以将多达五个设备连接到一个并行端口。 它使用以下内核/模块命令行
gamecon.map=port,pad1,pad2,pad3,pad4,pad5
其中 port
是并行端口接口的编号(例如,parport0 为 0)。
并且 pad1
到 pad5
是连接到不同数据输入引脚 (10,11,12,13,15) 的游戏手柄类型,如本文件的第 2.1 节中所述。
这些类型是
类型
游戏杆/游戏手柄
0
无
1
SNES 游戏手柄
2
NES 游戏手柄
4
多系统 1 按钮游戏杆
5
多系统 2 按钮游戏杆
6
N64 游戏手柄
7
索尼 PSX 控制器
8
索尼 PSX DDR 控制器
9
SNES 鼠标
PSX 控制器类型的确切类型在使用时会自动探测,因此热插拔应该可以工作(但不建议)。
如果您想一次使用多个并行端口,则可以使用 gamecon.map2 和 gamecon.map3 作为另外两个并行端口的附加命令行参数。
PSX 驱动程序部分有两个特定选项。 gamecon.psx_delay 设置与控制器通信时的命令延迟。 默认值 25 应该可以工作,但您可以尝试降低它以获得更好的性能。 如果您的游戏手柄没有响应,请尝试提高它直到它们工作为止。 将类型设置为 8 允许该驱动程序与 Dance Dance Revolution 或类似游戏一起使用。 方向键注册为按键而不是 X 轴和 Y 轴。
11.4.2. db9.c¶
除了制作接口外,使用 db9.c 驱动程序并没有什么困难。 它使用以下内核/模块命令行
db9.dev=port,type
其中 port
是并行端口接口的编号(例如,parport0 为 0)。
此处需要注意的是:此驱动程序仅适用于双向并行端口。 如果您的并行端口足够新,您应该不会遇到任何问题。 旧的并行端口可能没有此功能。
Type
是连接的游戏杆或游戏手柄的类型
类型
游戏杆/游戏手柄
0
无
1
多系统 1 按钮游戏杆
2
多系统 2 按钮游戏杆
3
Genesis 游戏手柄(3+1 个按钮)
5
Genesis 游戏手柄(5+1 个按钮)
6
Genesis 游戏手柄(6+2 个按钮)
7
Saturn 游戏手柄(8 个按钮)
8
多系统 1 按钮游戏杆(v0.8.0.2 引脚排列)
9
两个多系统 1 按钮游戏杆(v0.8.0.2 引脚排列)
10
Amiga CD32 游戏手柄
如果您想一次使用多个这些游戏杆/游戏手柄,则可以使用 db9.dev2 和 db9.dev3 作为另外两个游戏杆/游戏手柄的附加命令行参数。
11.4.3. turbografx.c¶
turbografx.c 驱动程序使用非常简单的内核/模块命令行
turbografx.map=port,js1,js2,js3,js4,js5,js6,js7
其中 port
是并行端口接口的编号(例如,parport0 为 0)。
jsX
是连接到接口端口 1-7 的多系统游戏杆具有的按钮数。 对于标准多系统游戏杆,此数字为 1。
如果您想一次使用多个这些接口,则可以使用 turbografx.map2 和 turbografx.map3 作为另外两个接口的附加命令行参数。
11.5. PC 并行端口引脚排列¶
.----------------------------------------.
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 /
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引脚 |
名称 |
描述 |
---|---|---|
1 |
/STROBE |
选通 |
2-9 |
D0-D7 |
数据位 0-7 |
10 |
/ACK |
确认 |
11 |
BUSY |
忙 |
12 |
PE |
纸张末端 |
13 |
SELIN |
选择输入 |
14 |
/AUTOFD |
自动进纸 |
15 |
/ERROR |
错误 |
16 |
/INIT |
初始化 |
17 |
/SEL |
选择 |
18-25 |
GND |
信号地 |
就这样,各位! 玩得开心!