昔のマイクロソフトのゲームポートジョイスティックを復活させるためのメモ
ハードオフでマイクロソフトのサイドワインダー・プレシジョン・プロのジャンク品を500円でゲットした。
箱にはゲームポートおよびUSBポート対応と書いてあったが、残念ながらUSBアダプタは欠品。
Arduinoでゲームポートを読みだして何とかできないか調べてみると、Teensyやダビンチといったマイコン(Atmega32U4)による作例はあるがArduinoの例が見あたらない。
http://www003.upp.so-net.ne.jp/BackyWorks/SWFFBP.html
だが、さらに調べてみるとマイコンを使うまでもないことがわかった。
http://www.descentbb.net/viewtopic.php?t=14791
プレシジョンプロは、USBの1〜4番ピンをゲームポートの1, 14, 10, 4につなぎ、ゲームポートの2番と7番をショートさせると、USBジョイスティックとして動作するのだ。
デバイスドライバはWindows 7に内蔵されていて、接続即認識である。
USB | ゲームポート |
---|---|
1(赤) Vcc | 1 |
2(白) D- | 14 |
3(緑) D+ | 10 |
4(黒) GND | 4 |
2-7 |
で、これをプレイステーション3に接続したら、PS2アーカイブのギャラクシーフォースが動いた! これはすばらしい!
……と思ったのもつかの間、STARTボタンが効かない。
ゲームスタートのたびに純正コントローラに切り替えるのが癪だ。
シフトボタン(9番ボタン)がセレクトボタンとして使えたので、10番ボタンがあればスタートボタンとして働くはずだ。ボタンなんか余ってるんだ!
そこで、Arduinoを使って余ってるボタンにスタートボタンを割り当てることはできないかと考えた。
ArduinoにUSBホストシールド2.0をつないでジョイスティックサンプルプログラムを動かしてみると、プレシジョンプロの出す信号がなかなか風変わりなのがわかった。
プレシジョン | USBジョイスティック | 備考 |
---|---|---|
X軸 | y1軸 | 0〜255 |
Y軸 | x2軸 | 0〜255 |
Z軸(ラダー) | y2軸 | 0〜255 |
レバー上ボタン | x1軸 | トリガー(10H), 左ボタン(20H) 右上(40H) 右下(80H) |
台座上ボタン | Rz軸 | A(04H), B(08H), C(10H), D(20H), シフト(40H) |
ハットスイッチ | x1軸 | 上から時計回りで0〜7, ニュートラル時8 |
スロットル | ハットスイッチ | 0〜15 |
Windowsはともかく、こんな信号をPS3がしっかり認識するのにびっくりした。ギャラクシーフォースが偉いのか?
変換プログラムはこれから作る。