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 游戏手柄有两个输入位:时钟和锁存,它们驱动串行传输。它们分别连接到并口的引脚 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、Select 和 Start 按钮,并通过 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(接地)
18(接地)
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 允许驱动程序用于舞动革命或类似游戏。方向键被注册为按键而不是 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
土星游戏手柄(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 |
信号地 |
就这些了,伙计们!玩得开心!