ファミコン版ジョイボールの回路
- 公開日: 2021/07/23(金) 20:13[JST]
- 更新日: 2022/07/20(水) 08:01[JST]
Youtube動画『メーカーの公称値に全く届かない連射機能付きコントローラーたちの真相「ホリ電機の嘘つき!1秒間に40発なんて出来ないぞ!」』にて、ジョイボール[1]が秒間250射という超高速な連射速度を出していることが報告されている。この計測はファミコンのコントローラをUSB変換アダプタを介してPCにつなぎ、Shwatch++というソフトで測定した結果で、同作者の他のYoutube動画によればファミコン本体での計測ではぴったり秒間15射とのこと。
通常、連射機能は発振回路によって行うが、誤作動のリスクが大きいため秒間30射の数倍のオーダーで発振させているとは考えにくい[2]。ファミコンの場合、コントローラからのデータはシリアル送信で行われる。このため、コントローラ入力の読み取りを行う度に本体側からパルスを出力している 。このパルスをカウントして、2回パルスを受信する度にボタンのオンオフを切り替えるような仕組みになっていれば、ファミコン本体では秒間15射、PC接続においてはサンプリングレートに応じた連射速度になる。この推測が正しいかどうかを確認するため、実際にジョイボールを入手して確認した次第。
なお、ジョイボールには色違いのMSX版もあるが、こちらは(コントローラ側で本体がいつ読み取りを行っているかを判別できないため)おそらく発振回路で連射させているものと思われる。
多くのゲームではコントローラ操作で自機を移動させたり、メニュー操作を行う。つまりコントローラ操作に応じて画面を書き換えるものであり、画面書き換えのタイミングよりも速い間隔でコントローラの読み取りを行う動機がない。日本のテレビのアナログビデオ信号は1/60秒で1画面の描画を行うものであり、一画面ごとにスイッチのオン・オフを切り替えたとしても連射速度は秒間30射であり、これ以上の速度となることはない。したがってコントローラ側でそれ以上の速度で連射させることは無意味であるばかりか、連射しなかったりボタン入力そのものを検出しないおそれがある。
回路は上図のとおり。コントローラの各キーは30kΩの抵抗でプルアップされているがプルアップ回路については省略している。使用されているICは三菱電機のM60001-0103Pというもの。NesDevによれば、M60001シリーズはカスタムICとのことで、仕様などは不明。
各端子の拡張コネクタ上でのピン配置は以下の通り。Out0というのは、読み取りを開始する際に発せられるパルスを送るための端子。/OEは、シリアル信号を読み取る際に、次のデータを要求するためのパルスを送るための端子。つまり、ファミコン実機であれば1/60秒毎にOut0にパルスが送られ、その後8回/OEからパルスが送られるという仕組みである。J1-D1及びJ2-D1はそれぞれ(拡張コネクタに接続した)コントローラ1とコントローラ2の信号線[3]。J2-D2は通常のコントローラでは使用しない(NesDevによればファミリーベーシックのキーボードで使われているとのこと)。
pin# |
Name |
---|---|
1 |
GND |
6 |
J2-D2 |
7 |
J2-D1 |
12 |
Out0 |
13 |
J1-D1 |
14 |
/OE |
15 |
Vcc |
内蔵コントローラとは別の信号線である。I/Oアドレスは同じ(1コンが$4016、2コンが$4017)だが内蔵コントローラはBit0、拡張コネクタ経由のコントローラはBit1。ソフト側でBit0、Bit1のORをとることで、内蔵・外付けどちらのコントローラにも反応できるようになっている。逆に、ソフト側で内蔵、外付けを別のコントローラとして認識させることも可能である。なお、アドレス$4016で3入力(D0〜D2、但しD0は内蔵1コンのデータ専用、D2は内蔵2コンのマイク入力専用)、$4017で5入力(D0〜D4、D0は2コンのデータ専用)となっており、本記事では$4016をJ1、$4017をJ2と称している。また、海外版のNESでは$4016も5入力ある。
ジョイボールには連射の有無を切り替えるためのスライドスイッチがついており、スイッチを奥側に上げた時に連射あり、手前側に下げた時に連射なしとなっている。スイッチを下げた時に上図中のSwDがオンになり、ICの右側、下から2番めのピンがGNDに落ちる。
このスイッチ、どうやら上下のみでなく中位も検出するようになっており、中位ではSwMがオンになる(SwDはオフ。スイッチを上げた状態ではSwD、SwM共にオフになると思われる)。SwMがオンになると、ICの右側、下から3番めのピンがJ2-D1につながる。また、Bボタンの出力をJ2-D2から送るようになっている。
このスイッチ中位、同時期に発売されたハイパーオリンピックで使えるとのことだ。ハイパーオリンピックは公式には同梱の専用コントローラであるハイパーショット専用となっているが、NesDevによれば、ハイパーショットの1コンはRunがJ2-D1、JumpがJ2-D2にアサインされており、ジョイボールでスライドスイッチを中位に設定すればハイパーショットの1コン相当となるようだ。つまり、ICの右側、下から3番めのピンはボタンAの入力に応じて連射信号を出力しているのではないかと予想される。
ファミコン版のハイパーオリンピックは1985年6月21日発売、一方ジョイボールは1985年8月10日発売。もしこのスイッチ中位がハイパーオリンピックを狙ったものだとすると、相当早い時期(ICの設計変更・量産指定が間に合うように)にハイパーショットの仕様を入手し、それにあわせてジョイボールに隠し機能をつけたということになるが、どうだろうか。あるいは、(シリアル変換で多重化されていない)連射信号そのものを出力する機能はデバッグ用としてハイパーオリンピック発売前にICに実装されており、ハイパーオリンピック発売後にやっつけでハイパーショット互換となるよう実装したのかもしれない。
さて、肝心の連射機能の原理だが、カスタムチップを使っているため発振回路方式なのか、Out0(又は/OE)同期なのかは分からなかった。これを確認するためにはOut0(又は/OE0)のパルス間隔を変更させるような回路を組んで、オシロスコープでピン13の入力を取得する、ということをする必要がある。
(2021/7/26追記: なお、ハイパーオリンピックはハイパーショット専用だが、ゲーム開始メニューの操作とゲーム中のポーズ操作(スタートボタン)に限り標準コントローラの入力を受け付けている。従ってハイパーオリンピックにおいてもOut0は定期的に出力されている)
(2021/7/24追記)
今回の調査では裏付けは取れなかったが、ジョイボールの連射機構がOut0又は/OE同期である可能性は高い。一方で、上述の動画を見る限り他のメーカーの連射コントローラはこの方式を採用せず通常の発振回路を用いているようだ。なぜ他社は追従しなかったのだろうか?もしかして特許で保護されていたのだろうか?ということで独立行政法人工業所有権情報・研修館の検索サービス、J-PlatPatでハル研究所の国内特許出願を検索してみた。
ジョイボールに関する特許(特願昭60−123510/特開昭61−292734)はあったものの、これは方向入力のためのスイッチ部分に関する特許出願であり連射に関しては言及されていない。なお、この特許出願は審査請求(特許が成立するかを特許庁に審査してもらうための手続)を行わないまま7年(現在の特許だと3年以内だがこの当時は7年)が経過したため自動的に特許不成立となっている。ちなみにドイツでこの特許の権利化が行われている。
ということで、同期式連射回路についてはハル研究所の特許があったわけではなく、他社も利用可能だったものと思われるが採用されなかったのは、ABボタン別々に連射のオンオフができるようにしたり連射速度を切り替えられるようにしようとする際に汎用ロジックICでやると部品点数が多くなりコスト上難がある、といっか事情なのだろうか?