index.htm

サターン等のコントローラをパラレルポートにつなぐ

成果物

ZSNES (DOS) 1.36 を改造

スーファミのマルチタップやプレステも対応。場当たり的に作っていったので非常に汚いです。 サターンやスーファミでマルチタップを使う場合は、きむらさんの回路 http://www.psxpad.com/function/Wiring.html を使ってください。

linux 2.4.20 の gamecon.c を改造

既に db9.c で対応されてますが、回路が違っ (阿川さんによる DPP 仕様へのパッチあり。 http://www.self-core.org/tiki/?c=v&p=Linux) てたり、複数個に対応してなかったり (訂正。ドライバ仕様では 2 個までサポートしているようです。ごめんなさい) するので改造してみました。

パッドの種類は「8」で、「modprobe gamecon gc=0,8,8,8」のように指定してください。 ソースをいじれば最大 12 個 (マルチタップ×2) まで対応できるはずですが、確認はしていません。

linux 2.4.20 の db9.c を改造

db9.c に DPP 回路のサポートを追加してみました。 また、説明書の記述とソースコードに矛盾があったので、説明書を優先するかたちで修正しましたが、 私の勘違いの可能性もあります。

パッドの種類には、コネクタ 1 口なら「11」、2 口なら「12」を指定してください。 マルチタップを用いることで、最大 6 (または 12) 個のコントローラが使用可能です。


参考資料

DirectPad Pro 全般

きむらさんのマルチタップ対応回路 (スーファミ、サターン)

「PSXPAD 素晴らしい。使いたい。でも 2k/XP 持ってない」が開発動機です。マルチタップを扱った先例のおかげで安心して取り組めました。サターンの回路図は素晴らしいヒントとさせていただきました。

http://www.psxpad.com/function/Wiring.html

Philhower さんの DirectPad Pro のソースコードと回路図

ソフトウェアとして素晴らしいのはもちろんのこと、添付の資料がたいへん役立ちました。 完成までの間、常に参照させていだだきました。DirectPad Pro 関連のコンテンツを終了されているのがたいへん残念です。

http://www.ziplabel.com http://www.arcadecontrols.com/Mirrors/www.ziplabel.com/dpadpro/dpadpr50.zip

サターン

坂さんの PA (Win9x 用 IF-SEGA 等ドライバ) ソースコード (PA.ASM)

アナログデータの読み込み手順について参照させていただきました。 初期段階においては、アナログ読みこみ部分はPA.ASMの丸写しのような状態でした。

http://blue.ribbon.to/~als4kmaniac/i2/pa.lzh

村田さんの linux 用 IF-SEGA ドライバ付属文書とヘッダファイル

各コントローラとの通信内容を参照させていただきました。

http://www1.tcnet.ne.jp/fmurata/linux/ifsega/ifsega-0.17.tar.gz

Nagato さんの IF-SEGA 解析資料

両IF-SEGA情報を分析する際に参照させていただきました。

http://www.geocities.co.jp/Playtown-Dice/4434/ifsspad.htm

加島さんのサターンパッド解析資料

以上の資料を分析する際に参照させていただきました。

http://Lillith.sk.tsukuba.ac.jp/~kashima/games/saturn.html

スーファミ

寺川さんのスーファミマルチタップ解析資料

http://applause.elfmimi.jp/sfcmltp.html

プレステ

ATSUKI さんのマルチタップ対応 DirectPad Pro ソースコード

http://www.geocities.co.jp/SiliconValley/2650/ http://web.archive.org/web/20011123185146/http://www.geocities.co.jp/SiliconValley/2650/ps_multi.html

藤田さんのプレステパッド解析資料

http://lillith.sk.tsukuba.ac.jp/~kashima/games/ps_jpn.txt

パラレルポート

なひたふさんの資料

http://www.nahitech.com/nahitafu/mame/mame5/printer.html

その他サターン、DirectPad Pro 関連のおぼえがきとリンク

Team Plus さんのファイティングスティック SS 対策

ATR-USB というアダプタのサポート情報です。プルアップ処理がされていないそうです。おそらく DPP でも同様の対策が必要でしょう。また、ホリパッド SS も該当しそうな気がします。

追記: アスキー製 Fighter Stick X でこの現象を確認し、2 本の Sel を 1kΩ抵抗を用いてプルアップすることで解決できました。

http://www5d.biglobe.ne.jp/~kin/support_ss/ss_adapter.html

teccyuu さんの 74HC541 を用いて外部電源と2コネクタを両立させた回路

現在のところ未テストです。いずれ作ってみたいと考えているのですが。

http://www.geocities.co.jp/Playtown-Dice/2904/

アナログのタイミング

アナログデータ読み込み時のパラレルポート出力回数は、4 ビット (半クロック ?) ごとに、DPP ソースでは 16 (8*2) になっています。DOS上のテスト (懐石くん kaiseki.zip) でも 15 必要でした。一方、linux の場合、udelay() で 200 必要でした。 http://www.linux.or.jp/JF/JFdocs/IO-Port-Programming/high-resolution.html#AEN160 によると、パラレルポートも含めて、I/O ポートへの読み書きは 1 回ほぼ 1 マイクロ秒で一定しているそうなのですが。

Documentation/input/joystick-parport.txt からの不正確な抜き書き (ファミ通風)

2.3 プレイステーション

 プレステのコントローラは gamecon.c でサポートされているぞ。

 パッドのコネクタを正面に置いたときの配線だぞ。(DirectPad Pro互換なのだ)

  +---------+---------+---------+
9 | o  o  o | o  o  o | o  o  o | 1              パラレルポートの
  \________|_________|________/                 ピン番号
    |  |      |  |  |   |
    |  |      |  |  |   +-------->  クロック ---  (4)
    |  |      |  |  +------------>  セレクト ---  (3)
    |  |      |  +--------------->  電源     ---  (5-9)
    |  |      +------------------>  接地     ---  (18-25)
    |  +------------------------->  コマンド ---  (2)
    +---------------------------->  データ   ---  (10、11、12、13、15)
(訳注: 「DPP 互換」より、「プレステ版 SNESkey (
http://www.arcadecontrols.com/Mirrors/www.csc.tntech.edu/~jbyork/default.htm ) 互換」の方が、より正確だと思います。1P は同じですが、2P - 5P の配線が異なっているのです)

 サポートされているコントローラの一覧だぞ。

・標準コントローラ
・ネジコン
・アナログコントローラ(赤モード)
・アナログコントローラ(緑モード)
・振動パッド

2.4.3 セガサターン

 セガサターンにはボタンが 8 個あるぞ (訳注: 9 個です)。 メガドラ (6 ボタン) のようなややこしい事はせずに、 セレクト信号を追加して読み取っているぞ。 これも db9.c で使えてしまうのだ。 このピン配列は他とかなり違うぞ。 以下の配線図を見てくれ。
    +-----------> Select 1 (pin 14)
    | +---------> Power (pin 1)
    | | +-------> Up (pin 2)
    | | | +-----> Down (pin 3)
    | | | | +---> Ground (pin 18 - 25)
    | | | | |
  _____________
5\ o o o o o / 1
  \ o o o o /
  9 `~~~~~~~' 6
     | | | |
     | | | +----> Select 2 (pin 16)
     | | +------> Right (pin 5)
     | +--------> Left (pin 4)
     +----------> Power (pin 1)

 Select 1 はパラレルポートの 14ピンに、Select 2 は 16 ピンにつなぐのだ。

(pin 14) -----> Select 1
(pin 16) -----> Select 2

 その他のピン (Up, Down, Right, Left, Power, Ground) は他の (joy-db9.cを使う) ジョイスティックと一緒でいいぞ。

(訳注: 標準的な 9 ピンコネクタとして表示しているようですが、 実機のコネクタにあわせて書きなおすと以下のようになります。 U/D/L/R と方向ボタンの実際の割り当ては一致していません。

  +-------------------> Ground (pin 18 - 25)
  | +-----------------> Down (pin 3) 方向ボタン左
  | | +---------------> Up (pin 2) 方向ボタン右
  | | | +-------------> Power (pin 1)
  | | | | +-----------> Select 1 (pin 14)
  | | | | | +---------> Select 2 (pin 16)
  | | | | | | +-------> Right (pin 5) 方向ボタン上
  | | | | | | | +-----> Left (pin 4) 方向ボタン下
  | | | | | | | | +---> Power (pin 1)
  | | | | | | | | |
/ = = = = = = = = =\
| 1 2 3 4 5 6 7 8 9 |
+-------------------+
)

3.1 gamecon.c

 gamecon.c なら最大で 5 つのデバイスをパラレルポートにつなげられるぞ。 カーネル/モジュールのコマンドラインは下を参照だ。

gc=ポート,パッド1,パッド2,パッド3,パッド4,パッド5

 「ポート」にはパラレルポートの番号 (例: parport0 なら「0」) を入れる。 そして「パッド1」から「パッド5」にはコントローラの種類を指定するのだ。 異なるピン (順に10、11、12、13、15) で各パッドのデータを受信しているぞ。

種類 | 対応ジョイスティック
-------------------------
  0  | なし
  1  | スーパーファミコン
  2  | ファミコン
  4  | アタリ仕様(1ボタン)
  5  | アタリ仕様(2ボタン)
  6  | ニンテンドウ64
  7  | プレイステーション

 プレステの場合、(標準コンとかデュアルショックとかの) 判別が自動的に行われるので、 モジュール初期化の前にコントローラを繋いでおく必要があるぞ。

 複数のパラレルポートを使いたいときには、 「gc_2」や「gc_3」をコマンドラインに指定してほしい。

3.2 db9.c

アダプタを作ってしまえばあとはカンタンだ。 カーネル/モジュールのコマンドラインを下のように指定すれば OK。

db9=ポート,種類
「ポート」にはパラレルポートの I/O アドレス (例: 0x378) か、 カーネル 2.1 以降なら番号 (例: parport0 なら「0」) を入れる。

 警告: 双方向モードがサポートされていないと db9 ドライバは使えないのだ。 最近のパソコンなら大丈夫だが、古いと上手く行かないかもしれないぞ。

 「種類」にはコントローラの種類を指定するのだ。

種類 | 対応ジョイスティック
-------------------------
  0  | なし
  1  | アタリ仕様 (1ボタン)
  2  | アタリ仕様 (2ボタン)
  3  | メガドライブ (3+1ボタン)
  5  | メガドライブ (5+1ボタン)
  6  | メガドライブ (6+2ボタン)
  7  | セガサターン (8ボタン)
  8  | アタリ仕様 (1ボタン、0.8.0.2アダプタ)
  9  | アタリ仕様 (1ボタン、0.8.0.2アダプタ、2個)
 10  | アミガ CD32
複数のパラレルポートを使いたいときには、 「db9_2」や「db9_3」をコマンドラインで指定しよう。

各種ゲームパッドのボタン配列(の初期設定値)

MS-Sidewinder や IF-SEGA 等、PC 標準 (と思われる) 配列
  6        7
      8    345
 +   (9)   012
     
DPP サターンはスタートと L/R の順序が逆
  7        8
      6    345
 +         012

DPP プレステ (デジタル)
  7        5
  6        4
            0
 +   9 8   1 3
            2

gamecon.cプレステ (デジタル)
  4        5
  6        7
            0
 +   8 9   3 1
            2

タイトー発売/タカラ販売 セガサターン専用 電車でGO!コントローラ

近所で中古 100 円でした。非破壊調査 (DPP につなげて読んだだけ) なので、根本的な間違いがあるかもしれません。

概要

densha de go! (let's go by train!) controller (digital) 2 byte
  7 6 5 4   3 2 1 0
0 1 b b 1   s A C B
1 b m m m   b 1 0 0
s: start or select (0: on 1: off)
m: master controller handle (3bit)
b: brake handle (4bit)

コントローラの種別と判定

デジタルコントローラ。 他と同様、両 sel-high で ?100 を返す。 取扱説明書「必ず非常ブレーキの最大の位置にして (電源を) 入れてください」に従うなら1100。

マスコンハンドル

「X」「Y」「Z」の 3 ビット (2^3 = 8。off + ノッチ5段 + 変化中 = 7) を使用。 ハンドルを操作すると、一度111 (XYZ すべて high) を経てから次の値に変化する。

	XYZ	(low 0 high 1)

切	100
1	010
2	110
3	001
4	101
5	011

変化中	111

ブレーキハンドル

「←」「↓」「R」「L」の 4 ビット (2^4 = 16。非常6 + 通常8 + 解除 + 変化中 = 16) を使用。 「非常」の手前側には段がないが、値は変化する。奥側では変化なし。 ハンドルを操作すると、一度00 0 0 (ldRL すべて low) を経てから次の値に変化する。

	ld R L	(low 0 high 1)
非常	11 1 1	(最大〜その一つ手前の段。変化なし)
	11 1 0
	11 0 1
	11 0 0
	10 1 1
	10 1 0
通常8	10 0 1
通常7	10 0 0
通常6	01 1 1
通常5	01 1 0
通常4	01 0 1
通常3	01 0 0
通常2	00 1 1
通常1	00 1 0
解除	00 0 1

変化中	00 0 0

ボタン

「A」「B」「C」「START」は通常のコントローラ同様に (on:0(low) / off:1(high)) 処理される。 「SELECT」は「START」として扱われる。 「→」「↑」は未使用 (常に 1) のようだ。

PC 上での活用?

サポートページ ( http://www.unbalance.co.jp/support/dengo_c.html) によると、PC 用の電車でGO!コントローラは、ソフト的にはアナログ 2 軸のゲームコントローラのようです。代用品としての活用は無理そうですね。

追記。既に Nakano さんによる解析がありました。 http://www3.justnet.ne.jp/~k-nakano/computer/dengo/index.html

ティー・イー・エヌ研究所 SEGASATURN用パチンコハンドル型コントローラー SANKYO FF

500 円という巨額の予算を組んで購入しました。 ハンドルを戻すときに錆びたブランコのような音を発しますが、 個体差なのかパチンコ設備の一般的な仕様なのか不明です。 例によって非破壊調査なので、根本的な間違いがあるかもしれません。

概要

sankyo ff ( 0xd3 ) 3 byte
  7 6 5 4   3 2 1 0
0 1 1 1 1   1 1 1 1
1 1 1 1 1   1 1 1 1
2 S H(min 0-0x7f max)
S: stop switch (0: on 1: off)
H: handle ring (7bit)

コントローラの種別と判定

3バイトのアナログコントローラ(レーシングコントローラの変種?)。ID は 0xd3。ボタンは無い。

ハンドル

ねじりとデータの関係

PC 上での活用?

Windows 対応のパチンコゲームは各社から発売されているようですが、 PC 用パチンココントローラは存在しないので、 これらのゲームで活用するのは無理そうです。

HSS-0103 マルチターミナル 6

概要

multi terminal 6 ( 0x41 ) 1 byte + variable length data (6 - 60 byte)
  7 6 5 4   3 2 1 0
0 0 1 1 0   0 0 0 0  (0x60)


	example	

	#1: digital pad
	#2: none
	#3: mulcon (analog)
	#4-6: none

	0x60
	0x02 (#1 id)
	0x?? (#1 data 1)
	0x?? (#1 data 2)
	0xff (#2 id)
	0x16 (#3 id)
	0x?? (#3 data 1)
	0x?? (#3 data 2)
	0x?? (#3 data 3)
	0x?? (#3 data 4)
	0x?? (#3 data 5)
	0x?? (#3 data 6)
	0xff (#4 id)
	0xff (#5 id)
	0xff (#6 id)

	1 + 14 byte

種別と判定

アナログコントローラ。id は 0x41。 (マルチタップ自身のデータは 0x60 の 1 バイト、という事かしら)

データの形式

接続するコントローラの種類や個数に応じて、総データ長が変化する。 最短は全コネクタ未接続の 7 (1 + 6) バイト。 最長はおそらく、アナログミッションスティック 12 個を、それぞれツインスティック状にした場合で、61 (1 + 60) バイト。

まず定数 0x60、続いて各コネクタの id とデータを、アナログ形式で出力する。 未接続の場合には 0xff のみ出力。 デジタルコントローラの場合には、0x02 の id と 2 バイトのデータになる。


http://members.at.infoseek.co.jp/shirouto_yokota/ shirouto_yokota-lj@infoseek.jp