SSパッド->X68変換器を作ってみる(その1)
セガサターンのコントローラを、X68(ATARI)仕様に変換します*1。
X68につなぐ前にLEDで動作に問題がないかチェックしているの図。ジョイスティックポートを壊したら、X68のマシン人生はおしまいです。
変換後はSS版のグラディウスデラックスパックと同等の操作感になります。
SSパッドのABCは、X68パッドのabaに。
SSパッドのXYZは、abaの連射になります*2。
ATARIパッドにはなくて、FM-TOWNSパッドにあるRUN/SELボタンも装備しました*3。
SSパッドのSTARTをRUNに、LボタンをSELに割り当てました。
RUNボタンは十字キーの左右を、SELボタンは上下を同時に押したときに、対応したソフトで押下されたと検出されるようです。
十字キーの左右/上下は同時に押されることがないので、ここに割り当てたようです。
マイコンはPIC16F648Aを使っており、変換サイクルは56μsecです。
10Mhzで動いているゲーム機のキースキャンサイクルは、1/60secか1/30sec程度なので十分に高速で遅延の問題もないと思います。
めんどくさがらずテーブル変換を行えばさらに1/3くらいのサイクルでもできそうですが、速くすることにメリットがでる部分でもないし、サターンパッドにコマンドだしてから、いくらかウェイトいれないとコントローラのデータがきちんと取得できなさそうだしなので、この辺にしときます。
ATARI変換の方は完成できたので、明日から三日くらいでメガドライブの3ボタン/6ボタンのコードを吐くモードをつけたいと思います。餓狼伝説スペシャル*4やSuperストリートファイター2で使えます。こっちはちと難しいです。
追加、そして妄想
X68のジョイスティックポートは、Intelの8255っていうやたらと売れた有名なパラレルIFのICを使っていて、6入力/1出力の汎用GPIOポートになってます。
ジョイスティックAコネクタは8255のポートAを8bit入力で、同BコネクタはポートBを、ABコネクタの出力ピン1本x2は、8255のポートCに接続し8bit出力で使うようなハードウェアになってます。
一般的なゲームでは、十字キーに4入力、A/Bボタンで2入力しかつかってなくて、出力1ポートはまったく触ってません。
で、それに気がついて思ったことは、X68のVSYNC期間に出力1ポートをLにするようなパルスを出せば、外付け回路なしでシンクロ連射ができるし、VSYNC期間後に一定時間経過してからキースキャンを行えば、キースキャンがフレームをまたぐことも防げるな*5ってことです。
もっとも1チップマイコン全盛の今だからあっさりできることで、88年当時であればジョイパッドにTTL-ICが何個も載ることになるから実際問題として不可能だったわけですが。
ゲーム側の対応も必要だから、VSYNC割り込みで8255をL/Hするようなパッチも必要になるけど。
SRAM上にBIOSのVSYNC割り込みをフックするコードを書いておいて、SRAMから起動するようにすれば、ゲーム側のパッチは必要ないかな?もっともゲーム側に8255のポートCを弄るコードが存在すれば動作が怪しくなりますけど。