micro:bitでファミコン/スーパーファミコンのコントローラーを使うことに成功したのでここにまとめます。
やりたいこと
僕らの青春とともにあったファミコン、スーパーファミコン。
micro:bitでコントローラーを使えるようにして将来的には簡単なゲームをつくりたいと思います。
参考文献
■Blog:54byteのスーファミコントローラドライバ、IchigoJam BASICとマシン語でつなぐ極上のコントローラ
■書籍:Raspberry Piのファミコン化/スーパーファミコン化
物理的な接続方法
ファミコンもスーパーファミコンも接続ケーブルの信号線数・役割は同じため、micro:bitとの接続自体は同様となります。
ただし、ファミコンはコントローラーがファミコン基板に独自?と思われるコネクターでつながっているので別のものに付け替えるなどの方法が必要です。
(私はジャンパーピンに付け替えました)
スーパーファミコンはもともと本体とつなぐ部分がコネクターになっているのでメスのコネクターを入手すればそこから先をmicro:bitに繋げばOKです。
(私はAliexpressで購入しました。1つ300円程度。)
ピンアサインについて
ファミコンの端子
色ごとに下記のように分かれています
GND(茶) / D:DATA(赤) / P/S(オレンジ) / CLK(黄) / VCC(白)
スーパーファミコンの端子
コネクターからは色は見えませんが、本体全面からみた場合の1コン(左側)を基準とすると下記となります
( A B C | D E F G)
A:GND(茶) / B:未接続/ C:未接続
D:DATA(赤) / E:P/S(オレンジ) / F:CLK(黄) / G:VCC(白)
コントローラーとmicro:bitの各端子の接続は下記の通り。
ファミコン・ スーファミ コントローラー |
--- | micro:bit |
---|---|---|
VCC(白) | --- | 3V |
GND(茶) | --- | GND |
DATA(赤) | --- | P0(デジタル入力) |
P/S(オレンジ) | --- | P1(デジタル出力) |
CLK(黄) | --- | P2(デジタル出力) |
※micro:bit側はプログラムの指定でポートは変わってきますが、この記事のプログラムでは上記で設定しています
コントローラーと各ポートの通信の流れについて
コントローラーとmicro:bitとの接続はSPIで行います。
MakeCode内のブロックの中にもSPIのブロックはあるのですがややこしいのでSPIのお作法を理解し、下記の手順を再現しました。
読み取りの一単位をスタート:P1(デジタル出力)に0を出力
最初のボタン読み取りをスタンバイ:P2(デジタル出力)に0を出力
最初のボタンの読み取り:P0にボタンの状況を出力
最初のボタン読み取りを終了:P2(デジタル出力)に1を出力
次のボタン読み取りをスタンバイ:P2(デジタル出力)に0を出力
※以下必要な回数繰り返し、ファミコンは8回、スーファミは16回
読み取りの一単位を終了:P1(デジタル出力)に1を出力
※以上のサイクルを繰り返し
プログラム
こちらのサンプルプログラムではスーパーファミコンの各ボタン押し下げと連動し、micro:bit上の各LEDが光ります。