
ファミコン用ゲーム「トップライダー(1988年発売)」の専用コントローラーの互換品を作ってみました。
回路図とプログラムはGitHubに公開しています。
github.com

「トップライダー」はバイクのレースゲームです。専用コントローラーはバイク部分とハンドル部分で構成されています。バイク部分は風船のように空気で膨らませます。プレイヤーはそれにまたがります。
バイクを傾けて遊ぶという操作方法は「ハングオン」と一緒です。専用コントローラーは非常にレアで高額です。カセット単体は結構安く入手できますが(自分の場合は税込340円で購入)、専用コントローラーがないと遊べません。
(隠しコマンドを使うと備え付けのコントローラーで遊べるのですが、ハングオンが出来きません。速度を上げるとコーナーで引っかかります。)


Arduinoを使って専用コントローラーを再現してみました。
左から順にシフトスイッチ(ギヤの切り替え)、アナログスティック(左右の傾きとウイリー)、OLED、アクセルボタン、ブレーキボタン、セレクトボタン、スタートボタンです。OLEDはデバッグ用です。本来、アクセルはグリップ型ですが、ここではボタンにしました。
本来ならば加速度センサーでバイクの傾きを検出するべきですが、アナログスティックで済ませました。
https://problemkaputt.de/everynes.htm#controllersinflatablecontrollers
通信方法はMartin Korthさんが開発したエミュレータ「NO$NES」の技術情報を参考にさせて頂きました。

ファミコンからの出力信号を測定してみました。ラッチが2つもあって混乱したのですが、OUT0は見ないで、OUT1を見れば良いだけでした。ラッチ開始直後にクロックが8回来るので、そのタイミングでデータをファミコンに送信します。

「トップライダー」をプレイ中の様子です。
アナログスティックの左右でバイクを傾けます。バイクの傾きは水平+左3段階+右3段階=7段階あります。アナログスティックを下に入れるとウイリーするように割り当てましたが、使いどころがわかりません。
NO$NESの資料によるとアクセルは「Slow」「Fast」「Turbo」の3種類があるとのことですが、製品のパッケージにはそういう表記はないので単に「Turbo=最高の加速」という意味だと思います。ここではボタンを押したら「Turbo」に設定しました。

バイクの速度比較です。Fastだと直線で200km/h止まりですが、Turboだと240km/hオーバーになりました。
実際にゲームを遊んでみましたが、ビジュアルもサウンドもかなり頑張っていると思います。真面目にリアルを目指してます。コンセプトが奇抜すぎて、キワモノ扱いされているのがもったいないです。互換品のコントローラーが普及すれば、もっと正当に評価されるようになるかもしれません。
www.youtube.com

(おまけ) 2018年に雑誌の記事を書く時に作った「Nintendo Labo」のバイク型Toy-Conです。やっていることは「トップライダー」と全く一緒ですね。これにもウイリーする機能がありました。
nicotakuya.hatenablog.com
nicotakuya.hatenablog.com