2018年8月4日土曜日

NEOGEO mini コントローラ

NEOGEO miniが届いたので即日解析したわけだけど。当初はガッツリ遊ばれたくないからコントローラの数出してないのかなぁ……とか思ってたけど、なんか本気でプロテクトかけてるわけじゃないし、単にType C周りのバグでケチがついてコントローラと本体にマイナー修正、それ終わるまでインターナショナル版は出荷OK出せない……とかじゃないだろなー、みたいな。そんなわけで、悩むほど複雑じゃなくて誰がやってもすぐ情報は割れてしまうだろうな……調べた結果は出しちゃっても平気かな、って。まぁ、いずれにせよ良さそうなタイトルはアケアカで買うのが良いですよ。という事で、以下に情報。

コントローラ側についてはType CのCC信号を正しく処理してなさそう。内部的にはUSB 1.1フルスピードで話していて、D+/D-/GNDだけ結線されれば会話可能です。が、CC信号が処理されてないためか正規のType Cホストは信号を通しません。Type CメスからType Aオスに変換するタイプの変換器を通すと(変換器の作りに依存するかもしれませんが)Type Aのホストと話せるようになります。

正規コントローラは起動後一通りネゴして動作開始した直後、もう一度再接続をかけて、2回目のネゴでは別のVID/PID、デバイスデスクリプタ等を返します。HIDレポートのフォーマットも違うんですね。特に認証やプロテクトに関わる処理でもなさそうなので、これは良くわからない。というかHIDレポートも使ってない変な情報が多くて、正しく理解せずにどこかからのコピペで動かしてる?いずれにせよ、基本はこの2つ目のデバイスのマネをしてやれば本体は認識します。Wiresharkあたりで情報見ればあとはすぐ。

この時点ではUSBの信号をロジアナ経由でUSBプロトコルアナライザにかけてました。最初に一瞬見えるデバイスでネゴシエーションでも必要なのかと思っていたので。調査にはLinuxを内蔵させてるアケコンを使っていて、SSHでアケコン内にログインしながらUSB Gadgetドライバを試行錯誤で書き換えながら調整。USBのコントローラとしての挙動を好き勝手に書き換えて、本体側の反応を見てみるわけです。わりとどうでも良いと思ってた差異に反応して弾いてくるんだよね。

次はV-USBで変換器作れるように、最小限の構成を手探りで探す。HIDレポートのフォーマットを必要最低限にすると、なぜか左右入力が効かなくなるとか。良くわからない問題もあったりしたけど、たぶんこんな感じで。この結果を反映させたV-USBを使ったコントローラねぎ塩はロースピードできちんと動いてくれました。
という事で、あとは煮るなり焼くなり。もし本家の商売の邪魔になるようなら情報は即座に消したいと思いますので。権利者の方、こっそりご連絡ください。

0 件のコメント: