USBコントローラ→ATARI変換機

USBコントローラをATARI端子を持つPC、及びJAMMA配線、NEO-GEOに接続するための変換機です。
PCは「ATARI標準(TOWNS仕様、TWIN PLUS含む)」「CPSF-PCアダプタ」「サイバースティック」「JOYDRV独自インタフェース」のモード(プロトコル)に対応しています。


使用可能なUSBコントローラ(以下は代表的なものです。詳細はjoyuniversal.cpp内の定義部分を参照ください。
コントローラタイプ ボタン配置 備考
PS3標準コントローラ Aボタン:×、Bボタン:〇、Xボタン:□、Yボタン:△
SELECTボタン:SELECT、STARTボタン:START
PS4標準コントローラ Aボタン:×、Bボタン:〇、Xボタン:□、Yボタン:△
SELECTボタン:SHARE、STARTボタン:OPTIONS,PS
その他PS4用コントローラを含む
また、有線に加え、PS4 Wireless Adapterが使用可能
HORIPAD FPS+(PS4) PS4標準コントローラと同じ
HORI ワイヤードコントローラライト for PS4-102 PS4標準コントローラと同じ
HORI RAP V HAYABUSA Controller(PS4) PS4標準コントローラと同じ
DUALSHOCK3 PS4標準コントローラと同じ
HORI RAP V HAYABUSA Controller(PS3) PS4標準コントローラと同じ
HORI Real Arcade Pro.3 SA PS3コントローラ PS4標準コントローラと同じ
PS5標準コントローラ Aボタン:×、Bボタン:〇、Xボタン:□、Yボタン:△
SELECTボタン:前面左側の小さいボタン、STARTボタン:前面右側の小さいボタン,PS
たまにコントローラが反応しなくなるときがあります
反応しなくなった時はArduinoをリセットして下さい
メガドライブmini標準コントローラ A〜C、X〜Zはボタン表記と同じ。SELECTボタン:MODE
PlayStation Classic USB Controller PS4標準コントローラと同じ
iBUFFALO SNES CLASSIC USB GAMEPAD Aボタン:B、Bボタン:A、Xボタン:Y、Yボタン:X
RetroFreak GAME CONTROLLER Aボタン:B、Bボタン:A、Xボタン:Y、Yボタン:X S-NES、PCエンジン6ボタン、メガドライブ6ボタンは未確認
RetroFreak CONTROLLER ADAPTER 接続するコントローラによる(内側がA、Xになる)
XBOX One標準コントローラ(有線タイプ) ボタン表記通り
新XBOX ワイヤレスコントローラ ボタン表記通り 変換機の電源ON直後は正常に動作しますが、
コントローラを変えたりケーブルを抜き差しすると反応しなくなるときがあります。
反応しなくなったときは変換機のリセットを2回行うと正常に動作するようになります。
Xinput対応コントローラ ボタン表記通り 8BitDoは未対応
PCエンジンminiコントローラ Uボタン:A、Tボタン:B
NEOGEOminiコントローラ Bボタン:A、Dボタン:B、Aボタン:X、Cボタン:Y
ASTRO CITY CONTROL PAD 下段内側よりA〜C、上段内側よりX〜Z。SELECTボタン:CREDIT
マウス 上下左右移動(左アナログ上下左右)、ホイール(右アナログ上下)、ボタン(左:A、右:B、ホイール:C、戻る:X、進む:Y)

※「PS4標準コントローラ及びメガドライブmini標準コントローラ、XBOX One標準コントローラ、Xinput対応コントローラ、
PCエンジンminiコントローラ、NEOGEOminiコントローラ」「マウス」以外のコントローラは、たねけん様により追加されております。
該当部分のプログラムコードについては、たねけん様(ツイッターアカウント @taneken2000)に著作権があります。
また、コケガエル様(ツイッターアカウント @sarompus)のご協力により、PS3コントローラ等の情報が追加されております。


必要なもの
Arduino Uno Rev 3 (秋月電子等で購入可能です)
USBホストシールド 2.0 for Arduino (amazon等で購入可能です)
その他、説明文中に出てくる部品、及びArduinoを動作させるのに必要なACアダプタやUSBケーブル


USBホストシールドは下記写真の赤枠で囲ってある部分をハンダブリッジしてください。
基板
※黄色枠はモード(プロトコル)を知らせるLEDになります。



Arduino UnoにUSBホストシールドを接続し、更に下記回路図に従って結線します。
下記回路図ではD-SUB 9ピンメス(PCとはRS-232C延長ケーブル[ストレート全結線]で接続)ですが、
ATARIタイプのジョイスティックケーブルをお持ちの方は直接結線しても問題ありません
R1ですが、LED1の型番(色)により値が異なってきます。
私は赤色を使用したので680Ω(LEDには約5mA流れます)にしましたが、青色や白色の場合はもう少し小さい値になります。
抵抗値については技術系のサイトや書籍を元に算出願います。
なお、抵抗値が小さすぎる場合、変換機が正常に動作しない時があります。
回路図


専用基板
専用基板
専用基板が欲しい方はHUYE宛てにメールでお問い合わせください。



専用基板で使用する部品は以下です。
秋月電子の通販コード 数量 部品名
C-04045 2 ピンソケット 1x6 ( 6P) リード長10mm
C-04046 2 ピンソケット 1x8 ( 8P) リード長10mm
C-11214 2 Dサブコネクタ 9P メス 基板取付用 Lタイプ インチ OMRON製(ATARIケーブルでも可)
- 1 LED(ご自由にお選びください)
- 1 1/4w抵抗(お選びになったLEDに合わせて抵抗値を算出してください)



部品実装後
部品実装後2 部品実装後3 部品実装後1


Arduino Uno + USBホストシールド + 専用基板
合体後1 合体後2
モード(プロトコル)の状態はArduino基板上のLEDでも確認可能です。
なお専用基板上のLEDは型番によっては動作中に微妙に点灯(正確には高速点滅)するときがあります。
この場合、モード(プロトコル)を表すときに明るい点灯となります。


基板側の準備が終えたら、Arduino UnoとWindowsマシンをUSBケーブルで接続し、Arduino IDEをダウンロードしてインストールします。
Arduino IDEを起動後、[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理...]から[USB Host Shield Library 2.0]をインストールします。
ライブラリをインストール後、「USBJOY_to_ATARI.zip」をスケッチのフォルダに解凍します。
解凍後、「USBJOY_to_ATARI」フォルダ内の「USBJOY_to_ATARI.ino」を開いて、コンパイル・マイコンボードへの書き込みを行います。
(前バージョンではUSB Host Shield Library 2.0内にjoyuniversal.cppとjoyuniversal.hをコピーしていましたが、それは削除してください)
これで変換機が使用可能となります。

ダウンロードファイル 公開日
USBコントローラ→ATARI変換 Ver 3.40
USBコントローラ読み込み用ライブラリ Ver 2.10
USBコントローラ読み込み用ヘッダ Ver 2.10
2021年11月28日

※ マウスは種類が多いため全てのマウスを網羅するような作りにはなっていません。ご自身のマウスのVIDとPIDをソース内に追加してご使用ください。



モード(プロトコル)及びCN1・CN2の出力仕様
モード(プロトコル) 切り替え方法
(3秒以上同時押し)
設定可能ポート Arduino基板の
LED13の点滅
CN1の出力 CN2の出力 旧専用基板での制限 備考
ATARI標準:内側Aボタン
(TOWNS仕様、TWIN PLUS含む)
SELECT、START、A ポート0
ポート1
長めに1回点灯 ポート0
JOY STICK 1に接続
ポート1
JOY STICK 2に接続
CN2は配線を
引き出す必要あり
・XボタンがA、YボタンがBの連射として使用できます
・ゲームによってはTWIN PLUSが正常に動作しない場合があるため、
 その時はJOYDRVを使用する
ATARI標準:外側Aボタン
(TOWNS仕様、TWIN PLUS含む)
SELECT、START、B ポート0
ポート1
早い2回の点滅 ポート0
JOY STICK 1に接続
ポート1
JOY STICK 2に接続
CN2は配線を
引き出す必要あり
・XボタンがB、YボタンがAの連射として使用できます
・ゲームによってはTWIN PLUSが正常に動作しない場合があるため、
 その時はJOYDRVを使用する
CPSF-PC SELECT、START、X ポート0
ポート1
早い3回の点滅 ポート0
JOY STICK 1に接続
ポート1
JOY STICK 2に接続
CN2は配線を
引き出す必要あり
・ゲームによっては正常に動作しない場合があるため、
 その時はJOYDRVを使用する
JOYDRV独自インタフェース SELECT、START、Y ポート0 早い4回の点滅 ポート0〜3
JOY STICK 1に接続
出力なし(無効) なし ・モーター制御及びアナログボタンの読み込みを行う場合に選択
・JOYDRVでJOYDRVIF.JOY(version 5)を使用
サイバースティック SELECT、START、十字キー
(または左アナログレバー)の上
ポート0
ポート1
早い5回の点滅 ポート0
JOY STICK 1に接続
ポート1
JOY STICK 2に接続
CN2は配線を
引き出す必要あり
・AJOY.XはJOY STICK 1しか読み込めないため、
 JOY STICK 2で読み込む場合はJOYDRVが必要
JAMMA
(NEO-GEO)
SELECT、START、十字キー
(または左アナログレバー)の右
ポート0 早い8回の点滅 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:A
7ピン:B
9ピン:GND
1ピン:CまたはR1
2ピン:Y
3ピン:X
4ピン:SELECT
6ピン:ZまたはL1
7ピン:START
9ピン:GND
CN2は配線を
引き出す必要あり
・未記載のピンは未使用となります
・ポート0に接続したコントローラのみが出力対象となり、
 ポート1以降は無効となります

※1 ポート0〜3はHUBの接続ポートになります。HUBが無くUSBコントローラを直接接続する場合は、該当コントローラはポート0となります。

※2 切り替えたモード(プロトコル)は、ArduinoのEEPROMに保存されます。
電源ON時及びリセット時は、EEPROMに保存されているモード(プロトコル)が設定されます。
電源ON時、リセット時、及びモード切替時は、ポート0→ポート1の順に設定に従ってLEDが点滅します。
(電源ON時及びリセット時は、モード(プロトコル)を表す点滅前に不定期なLED点灯が若干あります)

※3 SELECTボタンが無いコントローラや該当のボタンが無い(2ボタン等)コントローラの場合は
モード(プロトコル)の変更が出来ないか制限があるため、ボタンが揃っているコントローラを別途用意してください。


USB HUBの対応について
HUBはゲーム機のマルチタップと同様の使い方となり、機種混在で4コントローラまで使用可能です。
なお、HUB及び機種混在対応に伴い、汎用の無線(Bluetooth)接続は非対応となりました。ご了承下さい。
ポート0がどこになるかは機器の仕様によりますので、各自で確認願います。