十字キーが効かない原因調査
openMSX WIndows版でPS4パッドの十字キーがhatスイッチではなくボタン扱いになるので、困っていました。
openMSX 1.9.0現在でのデフォルト設定は
設定名:joystick1_config
設定値:LEFT {-axis0 L_hat0} RIGHT {+axis0 R_hat0} UP {-axis1 U_hat0} DOWN {+axis1 D_hat0} A {button0 button2 button4 button6 button 8 button10 button12 button14} B {button1 button3 button5 button7 button9 button11 button13 button15}
となっていますので、十字キーが通常通りハットスイッチとして認識されているなら問題なく動作するはずです。
ところが、十字キーを押すとボタンとして認識されてしまいます。
SDL2側またはopenMSXのwindows依存コード側での認識に問題があるような気がします。
かといって、その部分をどうにかするのも面倒です。
十字キーがボタンとして認識されているのであれば、もうそのボタンを方向キーとしてコンフィグ設定してしまいましょう。
十字キーが何ボタンか調べる
- openMSXでF10を押してtcl/tkコンソールをアクティブにします。
- bind "joy1 button11" "toggle fullscreen"
のように打ち込んで、button??の部分を調べます。 - ボタンの指定があっていれば、十字キーの該当の方向を押したときにフルスクリーン。離すとウインドウに戻るので分かります。
- 調べたら
unbind "joy1 button11"
のように打ち込んで機能割り当てを解除します。 - 十字キーの全方向について調べます。
自分のPS4純正パッドの場合、
上:button11、下:button12、左:button13、右:button14
でした。
setting.xmlにコンフィグを追加する
openMSXの設定ファイルは、windowsの場合
ドキュメント\openMSX\share\settings.xml
に書かれています。
自分の環境では12行
が、ジョイスティック1の機能割り当てになります。
<setting id="joystick1_config">LEFT {-axis0 L_hat0 button13} RIGHT {+axis0 R_hat0 button14} UP {-axis1 U_hat0 button11} DOWN {+axis1 D_hat0 button12} A {button0 button2
- ボタンは〇×△□だけトリガAとトリガBに割り当て
- 十字キーはそれぞれアナログ・ハットスイッチ・先ほど調べたボタンを割り当て
動作確認
コンソールで
set joystick1_config
と入力して設定値を調べると、settings.xmlで指定した値になっているのが確認できます。
実際にジョイスティックテストプログラムで調べると、ちゃんと十字キーが反応していますので、これで解決とします。
最後に
今回は力業で解決していますが、他のデバイスでも同じ要領で対応は可能かと思います。
ちゃんと十字キーをhatキーとして認識するように修正する方法が分かる方、教えて頂けると助かります。