2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

micro:bitでファミコン/スーパーファミコンのコントローラーを使う

Last updated at Posted at 2025-01-13

micro:bitでファミコン/スーパーファミコンのコントローラーを使うことに成功したのでここにまとめます。

やりたいこと

僕らの青春とともにあったファミコン、スーパーファミコン。
micro:bitでコントローラーを使えるようにして将来的には簡単なゲームをつくりたいと思います。
image.png

参考文献

■Blog:54byteのスーファミコントローラドライバ、IchigoJam BASICとマシン語でつなぐ極上のコントローラ

■書籍:Raspberry Piのファミコン化/スーパーファミコン化

物理的な接続方法

ファミコンもスーパーファミコンも接続ケーブルの信号線数・役割は同じため、micro:bitとの接続自体は同様となります。
image.png

ただし、ファミコンはコントローラーがファミコン基板に独自?と思われるコネクターでつながっているので別のものに付け替えるなどの方法が必要です。
(私はジャンパーピンに付け替えました)
image.png
image.png

スーパーファミコンはもともと本体とつなぐ部分がコネクターになっているのでメスのコネクターを入手すればそこから先をmicro:bitに繋げばOKです。
(私はAliexpressで購入しました。1つ300円程度。)
image.png

ピンアサインについて

ファミコンの端子

色ごとに下記のように分かれています
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が光ります。

image.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?