
スーファミのマルチタップやプレステも対応。場当たり的に作っていったので非常に汚いです。 サターンやスーファミでマルチタップを使う場合は、きむらさんの回路 http://www.psxpad.com/function/Wiring.html を使ってください。
既に db9.c で対応されてますが、回路が違っ
(阿川さんによる DPP 仕様へのパッチあり。
http://www.self-core.org/tiki/?c=v&p=Linux)
てたり
(訂正。ドライバ仕様では 2 個までサポートしているようです。ごめんなさい)
するので改造してみました。、複数個に対応してなかったり
パッドの種類は「8」で、「modprobe gamecon gc=0,8,8,8」のように指定してください。 ソースをいじれば最大 12 個 (マルチタップ×2) まで対応できるはずですが、確認はしていません。
db9.c に DPP 回路のサポートを追加してみました。 また、説明書の記述とソースコードに矛盾があったので、説明書を優先するかたちで修正しましたが、 私の勘違いの可能性もあります。
パッドの種類には、コネクタ 1 口なら「11」、2 口なら「12」を指定してください。 マルチタップを用いることで、最大 6 (または 12) 個のコントローラが使用可能です。
「PSXPAD 素晴らしい。使いたい。でも 2k/XP 持ってない」が開発動機です。マルチタップを扱った先例のおかげで安心して取り組めました。サターンの回路図は素晴らしいヒントとさせていただきました。
http://www.psxpad.com/function/Wiring.htmlソフトウェアとして素晴らしいのはもちろんのこと、添付の資料がたいへん役立ちました。 完成までの間、常に参照させていだだきました。DirectPad Pro 関連のコンテンツを終了されているのがたいへん残念です。
http://www.ziplabel.com http://www.arcadecontrols.com/Mirrors/www.ziplabel.com/dpadpro/dpadpr50.zipアナログデータの読み込み手順について参照させていただきました。 初期段階においては、アナログ読みこみ部分はPA.ASMの丸写しのような状態でした。
http://blue.ribbon.to/~als4kmaniac/i2/pa.lzh各コントローラとの通信内容を参照させていただきました。
http://www1.tcnet.ne.jp/fmurata/linux/ifsega/ifsega-0.17.tar.gz両IF-SEGA情報を分析する際に参照させていただきました。
http://www.geocities.co.jp/Playtown-Dice/4434/ifsspad.htm以上の資料を分析する際に参照させていただきました。
http://Lillith.sk.tsukuba.ac.jp/~kashima/games/saturn.htmlATR-USB というアダプタのサポート情報です。プルアップ処理がされていないそうです。おそらく DPP でも同様の対策が必要でしょう。また、ホリパッド SS も該当しそうな気がします。
追記: アスキー製 Fighter Stick X でこの現象を確認し、2 本の Sel を 1kΩ抵抗を用いてプルアップすることで解決できました。
http://www5d.biglobe.ne.jp/~kin/support_ss/ss_adapter.html現在のところ未テストです。いずれ作ってみたいと考えているのですが。
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 マイクロ秒で一定しているそうなのですが。
プレステのコントローラは 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 の配線が異なっているのです)
サポートされているコントローラの一覧だぞ。
・標準コントローラ ・ネジコン ・アナログコントローラ(赤モード) ・アナログコントローラ(緑モード) ・振動パッド
+-----------> 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 | +-------------------+)
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」をコマンドラインに指定してほしい。
アダプタを作ってしまえばあとはカンタンだ。 カーネル/モジュールのコマンドラインを下のように指定すれば 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
近所で中古 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) のようだ。
サポートページ ( http://www.unbalance.co.jp/support/dengo_c.html) によると、PC 用の電車でGO!コントローラは、ソフト的にはアナログ 2 軸のゲームコントローラのようです。代用品としての活用は無理そうですね。
追記。既に Nakano さんによる解析がありました。 http://www3.justnet.ne.jp/~k-nakano/computer/dengo/index.html
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。ボタンは無い。
Windows 対応のパチンコゲームは各社から発売されているようですが、 PC 用パチンココントローラは存在しないので、 これらのゲームで活用するのは無理そうです。
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 バイトのデータになる。