メガドライブ用6ボタンパッドの自作

メガドライブ(ミニじゃない)用の6ボタンパッドを自作してみました。

メガドライブゲームパッドは今でもサードパーティから発売されていますので、自作する必要は全くないのですが、前回作った「スーファミパッド→メガドラ変換アダプタ」が6ボタンパッドとして認識されなかったのが心残りだったので作りました。

今回はきちんと6ボタンパッドとして認識されます。

f:id:nicotakuya:20191127233529j:plain

6ボタンパッドのエンコーダ

ボタンを取り外した状態の基板です。ボタンの情報をコード化してメガドラに送信しますので、エンコーダと呼んでいます。

3ボタンパッドの場合は回路がIC1個で済んでいたのですが、6ボタンパッドの場合は通信方式が複雑なのでマイコンが必要になります。

 

f:id:nicotakuya:20191127233230j:plain

メガドライブの6ボタンパッド(ジョイスティック)を自作

レバーとボタンを接続した様子です。SGDKのサンプルプログラムの「joytest」を実行するとこうなります。「6 button」と認識されています。成功です。

「joytest」特有の仕様なのかどうかわかりませんが、一定時間内にメガドラと通信を行わないとメガドラからSEL信号が出力されなくなってしまいます。そのため、立ち上がりに時間のかかるArduinoを使うことができません。今回はAtmel Studioを使っています。

 

f:id:nicotakuya:20191127233915j:plain

コントロールボックスの中身

この回路はエンコーダとボタン類を分離できます。ボタン側の回路を「コントロールボックス」と呼んでいます。回路は非常にシンプルで、ボタンを押すとGNDにショートするだけです。このため、容易にアタリ仕様に変換できます。

レバーは秋月で購入しました。ボタンは千石電商で購入しています。

 

f:id:nicotakuya:20191128010328j:plain

スーファミパッドのデコーダと合体

コントロールボックスをエンコーダから切り離して、前回作ったスーファミ用パッドのデコーダを接続すると、こうなります。

 

f:id:nicotakuya:20191127232639j:plain

SELECTボタンに反応します

「joytest」の実行結果です。

前回は3ボタンパッドだった都合上、L/R/Y/SELECTボタンは検出できませんでしたが、今回はすべてのボタンを検出できます。たとえば、SELECTボタンと押すと、MODEボタンが反応しました。

機種間の違いが悩むところです。X→Cボタン、Y→Xボタンに割り振ってしまったので、わけがわからなくなってしまいました。ボタンの配置はファームウェアを書き換えることで自由に変更することができます。

こちらに回路図とプログラムを公開しています。

https://sites.google.com/site/yugenkaisyanico/diy-megadrive-gamepad