ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2017年2月22日水曜日

ファミコンのコントローラーをPCで利用してみる


前回書いたけど、ファミコンを分解した。
これはファミコンのガワを使ったおもちゃを作るつもりだからなのだけど、コントローラーを制御することがごく簡単そうだったので、先にやってみた。ファミコンのコントローラーは基盤にソケットで刺さっていて用意に抜くことが出来る。ブーツ(線の出て来るところのカバーみたいなやつ)もスライドするだけで簡単に取り出せて、2つに別れる。本当にバラしやすくて組み立てしやすく可愛い機械だと思う。

うちには子供のころファミコンは無くて(代わりにパソコンがいっぱいあった)、憧れていたバイアスもあるのかもしれないけど、赤と白、赤と金という色の組み合わせも洗練されているし、デザイン的にはスーパーファミコンよりファミコンのほうが断然好きだと小さいときから思っている。

さて、コントローラーの制御の話。

ファミコンのコントローラーのボタンはHEF4021BPというシフトレジスタに接続されていて、シフトレジスタの一部のピンがケーブルから出ている。出ているケーブルのピンアサインは以下のサイトに詳細に書かれてあり非常に助かった。

新貴之の趣味のサイト 最終形態

これさえわかれば、あとはマイコンなどでシフトレジスタからボタンの状態を読んで、PC側に伝えてやればよいので、簡単である。



シフトレジスタというのは、いくつかの種類といくつかの用途があるようだが、ここでは複数のボタンの並列(パラレル)の入力を、一本の線からの直列(シリアル)なデータとして受け取るための変換ICとして使われている。ちなみにこの逆に直列のデータを並列として出力するというものもある。それらはマイコンのGPIO(入出力)を増やすために使われたりする。つまりシリアルをパラレルにする場合、一本の出力線で複数のLEDを制御したりできるし、パラレルをシリアルにする場合、複数のボタン入力を一本の線から受け取ったりできる。

どちらの場合も制御は簡単で、ICの機能ごとに微妙な差異はあるっぽいが、信号線からデータを読むか書くかして、次のデータに映るためにクロックピンをL→Hとすれば良い。

このチップの場合は最初にP/Sと表記してあるピンをH→Lとしなくてはならない。これで入力値がシフトレジスタ内に取り込まれる。注意すべきなのは、最初のビットはその時点で既に出力されるので、クロックを送る前に読まなくてはならない。そしたらあとは上記のとおりのこり7bit分を順次読み込めば良い。

どのボタンがどのビットに対応しているかわかれば、そこから先は好きに使えば良い。私はキーボードやマウス制御が利用できるpro micro互換機を使って、微妙にボタンが足りないDOOM用コントローラーを作った。それが冒頭の映像である。基本的には十字キーをWASDに割り振っているが、Bボタンを押している間だけ十字キーがマウスの移動になるようにしてある。

武器の切り替え等のキーが足りておらず、単体でゲームを楽しむにはやや非力だが、ちょっとだけ楽しい。




ニンテンドークラシックミニ ファミリーコンピュータ
任天堂 (2016-11-10)
売り上げランキング: 48