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 |
訊號地 |
就這樣,各位! 玩得開心!