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)。

並且 pad1pad5 是連線到不同資料輸入引腳 (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

訊號地

就這樣,各位! 玩得開心!