セガサターンのマルチコントローラー(マルコン)をUSB化するための拡張ユニットを作りました。
マルコンの標準ユニットと付け替えることで、マルコンがUSBゲームパッド化するっていうイカしたやつです。
セガが「拡張ユニット発売予定」と言ってから20年以上の時を経て、やっと現実のものとなりました。
出典: https://segaretro.org/images/9/9e/MultiControllerSaturnJPManual.pdf
作ったもの
短いデモ映像にまとめてみました。
別ページに頒布委託先とか機能とかまとめました。
geekyfab.com
なんで作ったか
昔遊んだけど今は遊ばなくなったゲーム機って持ってますか?
押し入れの奥にしまったままだったり、棚に置いたままホコリがかぶってたりしてもったいないなって感じることないですか?
使えるのに使う機会がなくてかわいそうというか、ちょっとした罪悪感を感じるというか、そういう気分になることありますよね。
だから、もう一回彼らで遊んであげるためにこういうものを作ろうと思いました。
あと、マルコンのアナログスティックってホールセンサーを使った非接触タイプなんで、摩耗による劣化がなくて現在でも全然使えるんです。
しかも、スイッチで起こるようなドリフト現象も起こらないんですよ。
もう一回遊んであげないと損ですよね。
じゃあ作りましょう。
こんな感じの仕様にします
まずはマルコンをUSB化するにあたってどういった作戦で行こうか考えました。
まず、思いついたのはマルコンの中の基板ごと入れ替えちゃう作戦でした。
サターンパッドとかをこの作戦でUSB化した実績があったので。
でも分解してみると基板ごと入れ替えるのは難しいなという印象でした。
ホールセンサーが使われているのが特徴的ですね。
物理的な接触がなくなるので、スティックやLRトリガーが劣化しにくくなり、ドリフトや故障に悩まされにくい構造です。
難易度が高そうだったので基板ごと入れ替える作戦はいったんあきらめ、他の作戦を考えてみることにしました。
次に考えたのが、標準ユニットのとこの基板を入れ替える作戦です。
ユニットのとこにマルコンからの信号をUSBに変換する基板を入れて、USB化するって方法です。
これの懸念点は変換回路とプログラムが組めるかってとこと、ちっちゃいユニットの中に変換基板が収まるかってとこですね。
これはちょっとやってみないとわからなかったんで、とりあえずはこれで作ってみることにしました。
マルコンの信号仕様調査
回路書くにしてもプログラム書くにしても信号の仕様がわかんないと始まりません。
幸運なことに、セガサターンは発売から時間が経っているハードなので、ネットを探せばあちこちに仕様が転がっています。
コントローラーのピンアサインはこちらとか。
あとは実機でテスターとか使いながら見た感じです。
信号の仕様とか細かい仕様はここが大変参考になります。なんだこのページ…
マルコンの仕様はこの資料のp97あたりでしょうか。
雑に言うとホスト側(セガサターン本体)からTHとTRをパタパタさせると順番に各ボタンのステートを返してくれるので、それらをホスト側で読むって感じですね。
ということで、ここら辺の情報からまずは回路を書いていきましょう。
ハードウェア編
回路図を書いてみる
早速全体見せるとこんな感じです。
基本的にはマルコンからの入力をPICマイコンに直で入れる感じで、できる限り部品が少なくなるように書いてます。
小型化が必要ですからね。
マルコン側のコネクタJ2のpin10をDET端子として使ってるのは一つのポイントかな。
マルコン側ではGNDにつながってるピンなんですが、これをマイコンにつないでマルコンの接続有無を監視できるようにする目論見です。
基板図を書いてみる
ユニットのシェルに合うように基板図を書いていきます。
で、書いたのがこれ
ユニットに入る大きさまで小型化できるかがポイントでしたが、どうにか部品を置くことができました。
お次は製造です
基板を製造します
基板のガーバーデータをメーカーに出図して基板を製造してもらいます。
今回はJLCPCBに出しました。
発注時のオプションで気を付けたいのは表面処理です。
カードエッジなのでほんとは金メッキを選択するところですが、試作なのでいったん半田リベラで注文しました。
部品を実装してみる
今回はお試しなので、部品一つずつ手ではんだ付けしていきました。
こんな感じ
ケーブルつけるとこんな感じ。
ユニットにもぴったり入る。
シェルも作ることにする
いい感じにできたのでこれで進めようと思ったんですが、ここでひらめきました。
「3Dプリンター使ったら拡張ユニットのシェルも作れるんじゃないか?」と。
ということで拡張ユニットのシェルも設計してみました。
3Dプリンターを使いながら結構エラーアンドトライしてなんとかいい感じにできたと思います。
意外とできるもんですね。
最終的な製造は精度が必要なので、JLCPCBの3Dプリントサービスで光造形タイプを使って作りました。
いろいろ試したけど、黒レジンがいい感じでした。
回路と基板を設計しなおす
新シェルに合わせて回路と基板も設計しなおしました。
コネクタをUSB Type-Cにして、基板外形を調整した感じ。
シェルと基板を組み合わせる
新しくできた基板とシェルを組み合わせるとこんな感じになりました。
マルコンにもピッタリです
これでハードウェアの方は設計完了です。
やったね。
ソフトウェア編
プログラムを書く
問題はマルコンから来る信号をどうやって受けて、USBに変換するかですね。
とはいえ、前述のとおり仕様はここに書いてますので、実装するだけといえばそれだけ。
ソースコードはgithubで公開してるので、そちらを参考にしてください。
あと今回もUSB Bootloader入れときました。
これを入れとくと、USB経由でファームウェアが書き換えられて便利です。
起動時にアダプターがマルコンに接続されているか確認し、接続されていなければBootloaderが立ち上がるというようなことをしてます。
あ、追加ファームウェアとしてXinputモード版も作りました。
動かしてみる
できたアダプターにプログラムを書き込んで動かしてみました。
ちゃんとアナログモードとデジタルモードの切り替えで動作が変わっていい感じです。
いろいろゲームをプレイしてみたのは冒頭のデモ映像の通りです。
見た目がごついんですが、手によくフィットしてくれます。
最後に
今回はセガサターンのマルチコントローラー 通称マルコンをUSB化する拡張ユニットを作ってみました。
20年以上前のコントローラーですが、アナログスティックもすごく感度よく動きました。
アナログスティックとLRトリガーが非接触なので、他のコントローラーでは味わえない感触でとってもいい感じです。
近日中に頒布もするんで、よろしくお願いします。
今回はここまで。
読んでくれてありがとうございました。