スーファミ純正コントローラをUSB化してピクセルリマスターをやる
概要
純正スーパーファミコン用のゲームパッドをUSB化して、PC等から標準HIDのゲームパッドとして使えるようにする。
USB化はATmega32U4 Pro micro Arduino互換ボードを使用。
経緯
ピクセルリマスターのFF1のPC版を購入。キーボードでやっていたけど、不自由は無いものの情緒が無い・・・
ということで、シンプルな十字キーのゲームパッドを検索。
Amazonとかで安いやつでもそれなりにするし、どうせ買うなら任天堂のBT接続のスーファミコントローラかなーと考えていた。
が、ふと調べると純正のファミコンのコントローラをUSB化する記事を見かけて、同様にすればスーファミでもできるのでは?と思い、久しぶりに工作することに。
参考にしたサイト
- https://kohacraft.com/archives/1072590220.html
- https://qiita.com/odanny/items/686d2e3f2061c12f156f
- http://physicom.digick.jp/?p=3712
必要なもの
- スーパーファミコンの純正ゲームパッド
- ATmega32U4 Pro micro Arduino互換ボード
- USBケーブル
- Arduino Joystick Library https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-2.0
やること
コントローラの調達
まずはスーファミコントローラの調達のためハードオフへ。
初めて行った店舗だったけど、着いてみたら結構小さい・・・
ジャンクコーナーはあるとのことだけど、コントローラはあるかと心配したが、少ないものの選べるくらいにはスーファミコントローラがあった。
コントローラの選ぶ基準は、
- シールが貼ってあるのは、掃除が面倒なのでNG
- 黄ばみは漂白できるのでOK
- ボタンがヘタっているのは交換部品のほうがコントローラよりも高いのでNG。なるべくボタンのクリック感が生きているやつを選ぶ
無事そこそこの状態のコントローラを調達できました。
事前準備
まずは分解清掃をする。
分解は、裏側のネジ穴からプラスネジを外すだけで、特に難しいところはないです。
(Swichのコントローラみたいに気をつける必要が無くて楽・・・)
その後、筐体は漂白をします。
こちらのサイトを参考に。
中段に書いてあるとおり、特に高価な漂白剤は必要なくて、過酸化水素水と界面活性剤が入っている、衣類用漂白剤であればOK。
液にひたして、日差しに当てる(正確には紫外線に当てる)と、黄ばみが取れます。
実装
基本的には参考サイトにあることをやるだけ・・・だけど、参考3サイトの部分部分を組み合わせて実現。
SNESのケーブルをぶった切って、Arduinoに接続するのはここを参考に。各ボタンの値の取得方法はこちらを参考に。
Arduinoのスケッチはこちらを参考に、ボタン数を増やしました。
ただ、記事内にあるようにArduinoの16MHzだと、digitalWriteがあまり早くないようなので、タイムチャートどおりには動かせないらしい。
調べているとこちらのサイトがヒット。
delayを入れなくても動作している・・・。
そもそもコントローラ側のICはクロックとラッチを元に、パラシリ変換した値を投げているだけと思われるので、タイミングが早すぎなければ値は取れるのだと思われる。
delayをすべてコメントアウトして無事動作。
コードはgithubに置いてあります。
ちなみに参照元にも書いてあるけど、Arduinoを筐体内に収めるのが結構大変。
ただ、赤で囲ったところを削り取って、もともとケーブルが出ていく穴を広げると、ちょうどぴったりの高さだったので、固定は簡単そう。
(実際にはまだ固定してない・・・)
LRボタンを漂白するのを忘れたので、そこだけ黄ばんだままに・・・w
ただ、ちゃんと本体の方は色が良くなっていることがわかりやすいので、記事のためということで・・・
最後に
FF1はクリアしたので、FF3をこのコントローラでやってます。
何度目のFF3かわからないけど、ピクセルリマスターはいいぞ!ということでおすすめです。
Discussion
記事とgithubのソースコードを参考にさせていただき、SFCコントローラーをXInputで使用するコンバーターを作成することができました。
丁寧な記事とソースコードの公開でとても助かりました。ありがとうございました。
(そのうちblog等にも書こうと思っていますが、取り急ぎお礼まで。)
遅ればせながら、コメントいただきありがとうございます!
Githubの方にもリンクいただき喜んでいます!
レトロゲーム工作、楽しんでいきましょう〜