MSX/FM TOWNS STM32F4でUSBゲームパッドとUSBマウスを使う


STM32のUSB OTG HOST機能を使って MSX/FM TOWNS でメガドラミニのUSBゲームパッドが使えたので、今度は手持ちのUSBゲームパッドも使えるようにしてみます。
その前に、Wiresharkで手持ちのUSBゲームパッドのレポートデスクリプタを収集します。

実はSTM32のライブラリにはレポートデスクリプタの処理があるにもかかわらず、使用していません。
仕方がないので、デバイスデスクリプタにレポートデスクリプタが入っていたのでこれを使います。
但し、厳密にレポートデスクリプタを解析するのは面倒なので、SizeとCount、Usageだけでバイト位置とビット位置を特定する解析機能を作りました。



動作確認は、起動してすぐ使えるMSXのカセットで行います。

まずはメガドライブミニです。
入力はX-Y、ボタンだけです。
それほど複雑なデスクリプタではないので、対応できました。





次はPCエンジンminiです。
入力はHATSW、ボタンです。
HATSWのニュートラル状態の検出で苦労しましたが、対応できました。





レトロビットジェネレーションズです。
これもHATSW、ボタンです。
対応できました。





次はBUFFALOのスーファミ風USBゲームパッドです。
途中でCollection Endが入っておりうまく認識できません。
おかげで解析コードをほとんど作り直す羽目になりました。
横着してUsageが出た時点で設定したのですが、きちんとUsageをPUSHしておいてInputで設定する必要があるようです。
工数がかかってしまいましたが、対応できました。





次はElecomのスーファミ風USBゲームパッドです。
なななんと、メガドライブミニとレポートデスクリプタが全く同じでした。
使いまわししているのか、標準化しているのでしょうか。
メガドライブミニで動いているので、当然対応できました。





LogicoolのUSBゲームパッドは専用ドライバを使うのか、複雑なHID記述になっていたため、対応できませんでした。
NEOGEO miniもWindows/Linuxでレポートデスクリプタが異なる(NEOGEO mini本体はLinux側)変わった仕様のため、対応できませんでした。





ゲームパッドの確認は以上です。
シンプルなレポートデスクリプタのUSBゲームパッドであれば、差すだけでMSX/FM TOWNS/X68000などでジョイスティックとして使えます。
基本機能は秒間15連射とABボタンのスワップ、TOWNSのSELECT/RUN対応です。
特に、ボタン位置はコントローラーによって異なるのでスワップ機能は重要です。

また、USBマウスを接続すれば当然マウスとして機能します。

以上です。
手間暇掛けたところで、STM32側がゲームパッドに正式対応すれば全くの無駄で無意味な作業なので、これ以上の工数は使いません。




戻る