4年前にJoyMegaを自作した時の話

 

■ JOYMEGAアダプタとは

MSXでメガドライブ6ボタンパッドを使えるようにするアダプタをJOYMEGAアダプタと呼び

通常は2ボタンのATARIパッドとして使用でき、専用の手続き処理をすると6ボタン+STARTボタンを検出できるようになっています。

 

例えば、SofaRunでゲームを起動するときにJOYMEGAアダプタサポートを有効にできたりします。

 

■ FRSさんのジョイメガ回路図&利用法ページ

FRSさんのサイトで回路図が公開されているので誰でも自作可能です。

http://frs.badcoffee.info/hardware/joymega-en.html

昔からある各バージョンや、MSXからの6ボタン利用法、テストツールなどもあります。

 

JOYMEGAアダプタ自体はかなり昔からあったそうで、昔はトランジスタを利用した簡易的な回路だったのですが、それだとR800高速モードついていけなくなります。

データも微妙に化けやすいとの話なので、最新のRevision-3をお勧めします。

NC7ST04というチップを利用した回路になっているようです。

ダイオード 1N6711 または BAT85
インバータ NC7ST04
コンデンサ100nF

NC7ST04はDigiKeyとかで1個15円とかですから、延長ケーブルが800円で2本のとかあるので、1個当たり500円ぐらいで出来そうです。

 

■ 超簡易版(非推奨)

私が普段使っているのは、2020年にダイオードと抵抗で作った超簡易版です。

当然ながら高速モードではまともに動きません🤤

コネクタの中に無理やり組み込んでますが、最新回路の方が組み込みやすいかもしれませんンね。

 

HID-Testでの動作確認動画

 

https://video.twimg.com/ext_tw_video/1255686979183755265/pu/vid/960x720/gxaTAekGYPtJFftP.mp4

 

参考:

HRA!さんのJOYMEGAアダプタ実装記録(非推奨版)

https://hra1129.github.io/hardware/joymega/body.html

HRA!さんのトランジスタ版回線図
https://hra1129.github.io/hardware/joymega/files/JoyMega.pdf

FRSさんのJOYMEGAアダプタ解説ページ

http://frs.badcoffee.info/hardware/joymega-en.html

 

■ USB JOYMEGAアダプタ

Raspberry Pi Pico一個で出来る、USB JOYMEGAアダプタもあります。

こちらも基本は自作です。

(左のもう一個のラズパイピコはデバッガとして使用しているPicoprobeです)

今回は開発用にゲジアシ配線なので、常用には向きませんが、常用向けにもっと工夫することもできるのではないかと思います。

Raspberry Pi Picoは2個で1000円でした。

 

元はHRA!さんが作られたのですが、私の使用してるパッドに対応していなかったので、ちょっと改造して対応させたものを使っています。

 

github.com

 

ゲームパッド
 BUFFALO BSGP815GY : スーファミタイプ。連射機能付き。利用できました。
 ELECOM JC-U1608TBK: スーファミタイプ。連射機能付き。利用できました。


 マウス
 HP USB光学マウス (型番不明, HP製パソコンの付属品)
 ELECOM M-BL27UB


 ゲームパッド(MOD版追加)
 SEGA メガドラミニ用コントローラー: 対応しました。
 SONY PS4純正コントローラー       : 対応しました。
 HORI HORIPAD mini4               : 対応しました。
 HORI FIGHTING COMMANDER for PS4  : PS3/PS4モードのみ対応しました。

XINPUTデバイスにも対応させたかったのですが、PICOのTinyUSBがあまりにもあれで、面倒くさくなってしまい、放置してます。

 

改造してた頃の日記:

■ 参考:JOYMEGA用6ボタンモード手続き

メガドライブでの仕様

https://web.archive.org/web/20240913005100/https://applause.elfmimi.jp/md6bpad.html

メガドライブピン配列の場合

MSXでは

① STARTがMD9番→MSX7番
② SELSEL信号がMD7番→MSX8番
③ SEL信号がHigh/Low逆

という点に注意が必要です。

hraさんのJoyMega資料も参考にするとよいかもしれません

https://hra1129.github.io/hardware/joymega/files/JoyMega.pdf

https://hra1129.github.io/hardware/joymega/files/JoyMega.pdf

ちなみにこうなっている理由ですが、

MSXではPSGの汎用I/Oポート通信機能を利用してパッドにアクセスしていて

① 読み取りできるのが1番~7番
② 出力が6~8番で、1~7は読み取りに使うので出力専用は8番
③ GNDが9番
④ MSXは未接続時の電圧がMDと逆

という仕様になっているからのようです。

FRSさんのJOYMEGAアダプタページにもこれらの情報が書かれています。
https://frs.badcoffee.info/hardware/joymega-en.html

■ 6ボタンモードをMSXから扱う場合


① SEL出力を反転すると次の内部状態に進む
② SEL出力を切り替えて一定時間内に読む
③ 次にSEL出力を切り替える前に一定時間待つ
(SEL出力を切り替えてから一定時間以上経過すると初期状態に戻る)

というのを繰り返す感じです。

https://segaretro.org/Six_Button_Control_Pad_(Mega_Drive)#Technical_information

※ MSX側ではSEL(TH)のHi/Loは逆になります。

 

具体的な処理はFRSさんの「HIDtest and HIDlib v0.4 sources」を見てください。

https://frs.badcoffee.info/tools.html にあります。