DAOコン用のINFINITAS基板を作った話
まえがき
2台目のDAOコンを安く入手した。FP7の2012年モデル。
GAMO2のINFINITASコンバージョン基板を買ってきて付けようと思っていたが、売り切れてたから自作した。
「せ」だけ平仮名なのがミソ。

DAOコンの話
基板を自作し搭載する前に、DAOコン(FP7 2012)の作りを確認した。消費電流、使用しているコネクタ、皿のセンサーについて。
ボタンを光らせるLEDは、T10サイズで、1個あたり20mA程度の消費電流。T10サイズではあるが、LED上に電流制限ダイオードが付いており、特注品かもしれない。(2024/3/31追記: LEDサイズに誤記がありました。T8→T10に修正しています。Lay様ご指摘ありがとうございます。)
全部のボタンのLEDを点灯させて、皿のLEDも点灯させた場合、300mA程度の消費電流となった(ガバ中華USBチェッカー調べ)。USB規格は500mA Maxのため、許容範囲内である。
FP7 2012で使用しているのはXH 2.54mm 4pinコネクタと、2pinコネクタ。ざっくり、ボタン入力部分が4pinで、皿周りが2pin。
参考までに、2008年頃に購入したDAOコンのボタン配線は3pinだった。3pinあれば原理上ボタン入力と発光とGNDで成り立つが、ボタン入力とLEDはそれぞれでプラス/マイナスを設けるほうが自由度は高いはず。
皿センサーの基板も、2.54mmの4pin XHコネクタ。フォトインタラプタを2個搭載。
基板設計の話
手持ちのPro Microを使用することにした。INFINITASコンバーターからこっち、何だかんだ3桁個くらい買ってる気がする。
Pro MicroのRAWピンはUSB電源と直結されてるから、そこからLED用の電源を供給すれば問題なさそう。VCCピンから取るとレギュレータの容量オーバーするかも。でもRAWピンって電源を直接取る使い方は想定してないよね多分…。
DAOコンには、皿のセンサーを読み取ってボタン入力に変換する子基板みたいなのが付いてたけど、それを使用せず皿センサーの信号を直接マイコンで読み取るようにした。ハードウェアで工夫していた時代から、プログラミングで処理できる時代になったんだなぁ。
フォトインタラプタの話

フォトインタラプタの入力を、自作ハーネスでマイコンに入力。写真上からA相、B相、5V電源、GNDの4ピン。上下逆だったらすまん。
Arduino上でフォトインタラプタの状態を監視し、2入力あるうちのいずれかが変化したら、ピン状態遷移から、ジョイパッドのX軸入力をインクリメント/デクリメントするようにした。Arduino側はピンモードをプルアップにしておくことで、外付け抵抗が不要となる。便利。
先人によると、本家では立ち上がりエッジだけを使用しているらしい。自分で設計したものは立ち上がり/立ち下がりどちらも使用し、0.25だけ値を変化させるようにした。INFINITASで使用した感じだと、フィーリングには変化なし。割り込みピンが1個しか使えない場合には活かせるアイディアなのかも(ボルテコンのツマミをロータリーエンコーダで実装する場合の話)
このあたり、画像とか回路図を残しておきたいなぁ。
タイマ割り込みの話
INFINITASコンバーターでも触れた動作周期の話。
今回の基板では、プレステのコントローラーボタン読み込みが不要になったぶん高速で動作可能になったから、1000Hzで送信するようにタイマーを設定した。
DAOコンのホームページの説明文にも「1000Hzで動いてるから問題ないアル(意訳)」って書いてたからそれに倣った形。実際使ってみて問題なかったのでヨシ。
下記リンクはPHOENIXWANのページ。アフィじゃないよ。
皿センサのピン割り込みが発生している間にタイマ割り込みが発生すると割り込み待ち状態になる…と思うけど、皿センサの処理はせいぜい100クロックとかで終わるはずなので、皿のせいでラグが発生するなど、使ってて問題はなさそうだった。
INFINITAS専用コントローラの話
INFINITASなど(ここではソフトウェアを指し、おうちボルテなど他のコナステ製品群含む)では、USB接続されたゲームコントローラーのProduct IDおよびVender IDをチェックしており、純正コントローラーの場合のみ、特定の入力を受け付けるようになっている。
INFINITASでは、スクラッチの位相が「特定の入力」に該当する。スクラッチの位相は、JOYPAD上では、X軸アナログ入力の値として扱われる。値の範囲は-128から+127まで。皿を回すと、回転方向に応じて値が増減する。これによって、細かい選曲が可能となる。この仕組みを最初に思いついた人は天才だと思う。nagureoさんだろうか。
余談:
コンバーターを使用した場合、INFINITASの選曲画面で皿を回すと常に最高速度で動く(かつ、旧専コンは皿を止めても0.275sだけ信号を出し続ける)ので選曲が非常にやりにくい。
自作コンバーターでは、物理ボタンにキーボードの「↑」「↓」をアサインし対処した。キーボードの↑↓を入力した場合、最初ちょっとだけ速度が遅い。
VIDとPIDの話
※本節は、私の解釈を記載していますが、認識違いがありましたらコメントにて指摘いただけると幸いです。
自作基板にてINFINITASの機能をフルで使用するためには、Pro MicroのPID/VID偽装が必要。
PIDやVIDの発行には、USB Implementers Forum(USB-IF)へライセンス費用の支払が必要であり、Pro MicroのPID/VIDをINFINITAS純正コンに偽装することは、K社が自社で費用を払って取得したVIDを横取りすることになる(PID/VIDを任意に設定できることは、Pro Micro/Arduino LeonardoがBad USBと呼ばれる所以でもある)。自分で使う分にはまだグレーかもしれないが、PID/VID偽装マイコンで商売をするのはクロと考える。
DAOコン始めとした各種中華コントローラーも同じ問題を抱えているはずで、現状はコナミから怒られていないだけと理解するのがよい。INFINITASのソフトウェア上でVID/PID以外にコントローラーを見分ける方法があるのかは不明。
動画配信などで堂々とPID/VIDを偽装したコントローラーを使用していることを宣言するとKONAMIからBANされる可能性はある。
あと過去にDAOコンが税関で止められた問題があったけど、あれはどっちかというとKONAMIやBEMANIのロゴが堂々と入っていたから止められたっていう理解。当時はコナステはなかったはず。税関問題以降、DAOコンからそれらのロゴは消えてる。
で、動かした話。
諸々リスクを理解した上で動かした結果、動いた。ちゃんと皿のスクロールスピードの調整が効く。
DAOコンはスタート/セレクトしか無いからE1/E2に割り当てるしかないけど、セレクト長押しでE3が入力されるようにしたから、楽曲の中断も可能になった。(E2+E3で強制終了)
元々持っていた1台目のDAO(INFINITAS換装済み)と比較して、判定のフィーリングにほとんど違いなし。
BMSプレイヤーで動かすときに皿の入力が(X軸アナログ値だけだと)受け付けられない可能性を考慮し、皿の入力があった場合は、ボタン13または14が一定時間押下されるようにした。INFINITAS純正コンは1-7鍵 + E1-E4でボタン12まで使っているので、未使用の13と14を使うようにしている。
上で書いた通り動画配信などで堂々と宣言するとBANされる可能性があるので、動画は割愛。XとかYouTube探したら出てきちゃうけど。
さいごに
VID/PIDの話が必要以上に長くなってしまった…
技術的な話について何か思い出したら追記します。