メガドライブ(ミニじゃない)用の6ボタンパッドを自作してみました。
こちらで回路図とプログラムを公開しています。
メガドライブのゲームパッドは今でもサードパーティから発売されていますので、自作する必要は全くないのですが、前回作った「スーファミパッド→メガドラ変換アダプタ」が6ボタンパッドとして認識されなかったのが心残りだったので作りました。
今回はきちんと6ボタンパッドとして認識されます。
ボタンを取り外した状態の基板です。ボタンの情報をコード化してメガドラに送信しますので、エンコーダと呼んでいます。
3ボタンパッドの場合は回路がIC1個で済んでいたのですが、6ボタンパッドの場合は通信方式が複雑なのでマイコンが必要になります。
レバーとボタンを接続した様子です。SGDKのサンプルプログラムの「joytest」を実行するとこうなります。「6 button」と認識されています。成功です。
「joytest」特有の仕様なのかどうかわかりませんが、一定時間内にメガドラと通信を行わないとメガドラからSEL信号が出力されなくなってしまいます。そのため、立ち上がりに時間のかかるArduinoを使うことができません。一応、メガドラの電源をオンにして、少し待ってからメガドラのリセットを押せば解決できると思います。
この回路はエンコーダとボタン類を分離できます。ボタン側の回路を「コントロールボックス」と呼んでいます。回路は非常にシンプルで、ボタンを押すとGNDにショートするだけです。このため、容易にアタリ仕様に変換できます。
レバーは秋月で購入しました。ボタンは千石電商で購入しています。
コントロールボックスをエンコーダから切り離して、前回作ったスーファミ用パッドのデコーダを接続すると、こうなります。
「joytest」の実行結果です。
前回は3ボタンパッドだった都合上、L/R/Y/SELECTボタンは検出できませんでしたが、今回はすべてのボタンを検出できます。たとえば、SELECTボタンと押すと、MODEボタンが反応しました。
機種間の違いが悩むところです。X→Cボタン、Y→Xボタンに割り振ってしまったので、わけがわからなくなってしまいました。ボタンの配置はファームウェアを書き換えることで自由に変更することができます。