USBコントローラ→ATARI変換機(R4 Type2)

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


使用可能な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対応コントローラ ボタン表記通り
PCエンジンminiコントローラ Ⅱボタン:A、Ⅰボタン:B
NEOGEOminiコントローラ Bボタン:A、Dボタン:B、Aボタン:X、Cボタン:Y
ASTRO CITY CONTROL PAD 下段内側よりA~C、上段内側よりX~Z。SELECTボタン:CREDIT
Taito EGRET II Mini Control Pad ボタン表記通り。HOMEはSELECT
Taito EGRET II Mini パドル&トラックボール 左大ボタン:A、右大ボタン:B、中央左(ピンク):X、中央真ん中(白):Y、中央右(青):Z
トラックボール:左アナログレバー、パドル:右アナログレバー上下
PC用コントローラ ELECOM JC-U4013SBK(DirectInput、XInput ボタン表記通り。BACKはSELECT
MAYFLASH ARCADE STICK F300 ボタン表記通り。HOMEはSTART
8BitDo ボタン表記通り DirectInputモード、PSCモード(アナログ入力不可)。
8BitDoのモードを切り替えた時は、変換機から一度切断する必要があります。
新サイバースティック(マイコンソフト製) 表記通り Aボタン:R1、Bボタン:R2、Cボタン:L1、Dボタン:L2、E1ボタン:X、E2ボタン:Y
X68000Zコントローラ bボタン:A、aボタン:B、Lボタン:L1、Rボタン:R1、SELECTボタン:SELECT、STARTボタン:START 他コントローラとボタン配置を合わせるため、内側をAとしています。
マウス 上下左右移動(左アナログ上下左右)、ホイール(右アナログ上下)、ボタン(左:A、右:B、ホイール:C、戻る:X、進む:Y)

※1 一部コントローラは、たねけん様により追加されております。(詳細はソース内のコメントを確認願います)
   該当部分のプログラムコードについては、たねけん様(ツイッターアカウント @taneken2000)に著作権があります。
   また、コケガエル様(ツイッターアカウント @sarompus)のご協力により、PS3コントローラ等の情報が追加されております。
※2 マウスは種類が多いため全てのマウスを網羅するような作りにはなっていません。ご自身のマウスのVIDとPIDをソース内に追加してご使用ください。



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



USBホストシールドは下記写真の赤枠で囲ってある部分をハンダブリッジしてください。
物によっては青枠のハンダメッキ間が導通しているものがあります。(本来は導通なし)
ここが導通していると正常に動作しなくなるため、ハンダメッキ間をカッター等で切断してください。
写真にコネクタはついていませんが、GPOUTに下記部品表の「103785 : ピンソケット(メス) 1×8(8P)」を付けてください。
基板1


Arduino UnoにUSBホストシールドを接続し、更に下記回路図に従って結線します。
下記回路図ではD-SUB 9ピンメス(PCとはRS-232C延長ケーブル[ストレート全結線]で接続)ですが、
9線全結線のATARIタイプのジョイスティックケーブルをお持ちの方は直接結線しても問題ありません
回路図


表← 専用基板 →裏
専用基板(表) 専用基板(裏)
専用基板が欲しい方はHUYE宛てにメールでお問い合わせください。(プログラム書き込み済みPICのセットもあります)



専用基板で使用する部品は以下です。
秋月電子の販売コード 数量 部品名
103785 1 ピンソケット(メス) 1×8(8P)
USBホストシールドのGPOUTにつけます
104045 2 ピンソケット 1x6 ( 6P) リード長10mm
104046 3 ピンソケット 1x8 ( 8P) リード長10mm
110099 2 ピンソケット(メス) 1×4(4P)
100167 1 ピンヘッダー 1×40 (40P) (ニッパーで切って6Pのみ使用)
100028 1 丸ピンICソケット (14P)
110890 1 PICマイコン PIC16F18325-I/P
100645 2 Dサブコネクタ 9P メス 基板取付用 Lタイプ インチ(9線全結線のATARIケーブルでも可)
基板への固定用にM3×10ネジとナットが必要です。
112031 1 0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色(青色の物も可)
100004 2(1コンしか使用しない場合は1本で問題ありません) RS232Cケーブル(Dサブ9Pオス)-(9Pメス)ストレート結線(1.8m)
(9線全結線のATARI延長ケーブルでも可)
- 1 積層セラミックコンデンサ(0.1uF)
- 1 タクトスイッチ(端子間ピッチ 4.5mm)
部品一式1 部品一式2
※ピンソケット(メス) 1×8(8P)はUSBホストシールドに取り付け済みのため、写真にありません。すいません・・・



部品実装後
部品実装後1
部品実装後2 部品実装後3
OLEDの挿し込み場所を変えることで表示を90度回転させることが可能です。(180度回転はモード設定の中で行います)

部品実装後4
D-SUBコネクタを固定するネジは、下に設置のUSBホストシールドのUSBコネクタに干渉する可能性があるため、ネジ頭が基板裏側になるように取り付けて下さい。



ハンダブリッジによるジャンパについて
上記型番のOLEDを使用の場合、JP1、JP3、JP5をハンダでブリッジします。
OLEDコントローラにSSD1306を使用しているもので、電源電圧が3.3VのみのものはJP1ではなくJP2をハンダブリッジします。
また、上記型番と異なりVCCとGNDの位置が逆になっているもの(amazon等にあります)の場合は、JP3、JP5ではなく、JP4、JP6をハンダブリッジします。



基板側の準備が終えたら、基板上にあるPICにプログラムを書き込みます。
下記、PIC用プログラムをPIC用IDEに取り込んでコンパイルを行ってください。
私は「MPLAB X IDE」を使用しましたが、同じことができるものであれば特に問いません。
「MPLAB X IDE」の使い方に関してはネット上で検索願います。
PIC16F18325の書き込み電圧(Voltage Level)は、4.75にしてください。
ご使用のPICkitを下記写真(写真はPICkit3になります)のように挿して書き込みを行ってください。
なお、書き込みの際は専用基板をArduino及びUSBホストシールドから取り外し、OLEDも外してください。
挿したまま書き込みを行うと、他の機器(部品)が壊れます。気を付けてください。
PICkit1 PICkit2


Arduino Uno + USBホストシールド + 専用基板
合体後


PICへのプログラム書き込みを終えたら、Arduino UnoとWindowsマシンをUSBケーブルで接続し、Arduino IDEをダウンロードしてインストールします。
Arduino IDEを起動後、[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理...]から[USB Host Shield Library 2.0]をインストールします。
ライブラリをインストール後、「USBJOY_to_ATARI_R4_Type2_v101_Arduino.zip」をスケッチのフォルダに解凍します。
ファイルのダウンロード先から「avrpins.h」と「usbhost.h」をダウンロードして、「USB Host Shield Library 2.0」のフォルダに上書きで格納してください。
Arduino IDEの「ツール」-「ボード」で「UNO R4 Minima」を選択してください。
「USBJOY_to_ATARI」フォルダ内の「USBJOY_to_ATARI_R4_Type2.ino」を開いて、コンパイル・マイコンボードへの書き込みを行います。
これで変換機が使用可能となります。

ダウンロードファイル 公開日
USBコントローラ→ATARI変換 R4 Type2 Ver 1.03(Arduino)
USBコントローラ読み込み用ライブラリ Ver 3.00 (UNO R4用)
USBコントローラ読み込み用ヘッダ Ver 2.40
2025年 1月17日
USBコントローラ→ATARI変換 R4 Type2 Ver 1.00(PIC) 2025年 1月12日



モード一覧
モード名(OLED表示) モード内容/詳細 ATARI-P1の
モード表示
ATARI-P1の
コントローラ
ATARI-P1の出力 ATARI-P2の
モード表示
ATARI-P2の
コントローラ
ATARI-P2の出力 ボタン割り当て 備考
ATARI_AB ATARI標準
:内側Aボタン
:TOWNS仕様含む
ポート0 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:A
7ピン:B
9ピン:GND
ポート1 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:A
7ピン:B
9ピン:GND
上下左右:十字キー、左右アナログレバー
Xボタン:Aの連射
Yボタン:Bの連射
Cボタン:AとBの同時押し
R1ボタン、L1ボタン:A
R2ボタン、L2ボタン:B
SELECTボタン:上下
STARTボタン:左右
ATARI_BA ATARI標準
:内側Bボタン
:TOWNS仕様含む
ポート0 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:B
7ピン:A
9ピン:GND
ポート1 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:B
7ピン:A
9ピン:GND
上下左右:十字キー、左右アナログレバー
Xボタン:Bの連射
Yボタン:Aの連射
Cボタン:AとBの同時押し
R1ボタン、L1ボタン:B
R2ボタン、L2ボタン:A
SELECTボタン:上下
STARTボタン:左右
TWINPLUS_AB 1CON TWIN PLUS
:1コントローラモード
:内側Aボタン
:TOWNS仕様含む
ポート0 8ピン=0の時
 1ピン:L上
 2ピン:L下
 3ピン:L左
 4ピン:L右
 6ピン:LA
 7ピン:LB
 9ピン:GND
8ピン=1の時
 1ピン:R上
 2ピン:R下
 3ピン:R左
 4ピン:R右
 6ピン:RA
 7ピン:RB
 9ピン:GND
ポート1 8ピン=0の時
 1ピン:L上
 2ピン:L下
 3ピン:L左
 4ピン:L右
 6ピン:LA
 7ピン:LB
 9ピン:GND
8ピン=1の時
 1ピン:R上
 2ピン:R下
 3ピン:R左
 4ピン:R右
 6ピン:RA
 7ピン:RB
 9ピン:GND
L上下左右:十字キー、左アナログレバー
R上下左右:右アナログレバー
Xボタン:LAの連射
Yボタン:LBの連射
Cボタン:LAとLBの同時押し
L1ボタン:LA
R1ボタン:RA
L2ボタン:LB
R2ボタン:RB
SELECTボタン:L上下
STARTボタン:L左右
クレイジークライマー2及びリブルラブルで、
X68030またはATARI-P2の場合、正常に動作しません。
※1
TWINPLUS_BA 1CON TWIN PLUS
:1コントローラモード
:内側Bボタン
:TOWNS仕様含む
ポート0 8ピン=0の時
 1ピン:L上
 2ピン:L下
 3ピン:L左
 4ピン:L右
 6ピン:LB
 7ピン:LA
 9ピン:GND
8ピン=1の時
 1ピン:R上
 2ピン:R下
 3ピン:R左
 4ピン:R右
 6ピン:RB
 7ピン:RA
 9ピン:GND
ポート1 8ピン=0の時
 1ピン:L上
 2ピン:L下
 3ピン:L左
 4ピン:L右
 6ピン:LB
 7ピン:LA
 9ピン:GND
8ピン=1の時
 1ピン:R上
 2ピン:R下
 3ピン:R左
 4ピン:R右
 6ピン:RB
 7ピン:RA
 9ピン:GND
L上下左右:十字キー、左アナログレバー
R上下左右:右アナログレバー
Xボタン:LBの連射
Yボタン:LAの連射
Cボタン:LAとLBの同時押し
L1ボタン:LB
R1ボタン:RB
L2ボタン:LA
R2ボタン:RA
SELECTボタン:L上下
STARTボタン:L左右
クレイジークライマー2及びリブルラブルで、
X68030またはATARI-P2の場合、正常に動作しません。
※1
CPSF CPSF-PC ポート0 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:A
 7ピン:B
 9ピン:GND
8ピン=1の時
 1ピン:R1
 2ピン:Y
 3ピン:X
 4ピン:SELECT
 6ピン:L1
 7ピン:START
 9ピン:GND
ポート1 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:A
 7ピン:B
 9ピン:GND
8ピン=1の時
 1ピン:R1
 2ピン:Y
 3ピン:X
 4ピン:SELECT
 6ピン:L1
 7ピン:START
 9ピン:GND
上下左右:十字キー、左右アナログレバー
Cボタン、L2ボタン:R1
Zボタン、R2ボタン:L1
※1
MAGICAL PAD MAGICALパッド ポート0 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:B
 7ピン:A
 9ピン:GND
8ピン=1の時
 1ピン:0
 2ピン:0
 3ピン:L1
 4ピン:R1
 6ピン:Y
 7ピン:X
 9ピン:GND
ポート1 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:B
 7ピン:A
 9ピン:GND
8ピン=1の時
 1ピン:0
 2ピン:0
 3ピン:L1
 4ピン:R1
 6ピン:Y
 7ピン:X
 9ピン:GND
上下左右:十字キー、左右アナログレバー
Cボタン、L2ボタン:R1
Zボタン、R2ボタン:L1
※1
MEGADRIVE 3B メガドライブ3ボタン ポート0 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:0
 4ピン:0
 6ピン:A
 7ピン:START
 9ピン:GND
8ピン=1の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:B
 7ピン:C
 9ピン:GND
ポート1 8ピン=0の時
 1ピン:上
 2ピン:下
 3ピン:0
 4ピン:0
 6ピン:A
 7ピン:START
 9ピン:GND
8ピン=1の時
 1ピン:上
 2ピン:下
 3ピン:左
 4ピン:右
 6ピン:B
 7ピン:C
 9ピン:GND
上下左右:十字キー、左右アナログレバー
Xボタン:Aの連射
Yボタン:Bの連射
Zボタン、L1ボタン、R2ボタン:Cの連射
R1ボタン、L2ボタン:C
チェルノブで、
X68030またはATARI-P2の場合、正常に動作しません。
※1、※2
MEGADRIVE 6B メガドライブ6ボタン ポート0 メガドライブ6ボタン
プロトコル
ポート1 メガドライブ6ボタン
プロトコル
上下左右:十字キー、左右アナログレバー
L1ボタン、R2ボタン:Z
R1ボタン、L2ボタン:C
※1、※2
CYBER STICK サイバースティック ポート0 サイバースティックプロトコル ポート1 サイバースティックプロトコル Bボタン:A'
Aボタン:B'
R1ボタン:A
R2ボタン:B
L1ボタン:C
L2ボタン:D
Xボタン:E1
Yボタン:E2
・AJOY.XはJOY STICK 1しか読み込めないため、
 JOY STICK 2で読み込む場合はJOYDRVが必要です。
 速度モードの変更に対応しています。
XE-1AP XE-1AP(カブトガニ) ポート0 XE-1APプロトコル ポート1 XE-1APプロトコル Bボタン:A'
Aボタン:B'
R1ボタン:A
R2ボタン:B
L1ボタン:C
L2ボタン:D
Xボタン:E1
Yボタン:E2
・メガドライブへの接続を考慮したモードです。
 チェルノブアダプタの逆版を作成してMDに接続します
 速度モードの変更に対応しています。
JOYDRV INTERFACE JOYDRV独自インタフェース ポート0~3
JOYDRVプロトコル × - - ボタン表記通り(内側Aボタン) ・JOYDRV version 3.61 Rel3以降に添付の
 JOYDRVIF.JOY(version 7)を使用して下さい。
TWINPLUS_AB 2CON TWIN PLUS
:2コントローラモード
:内側Aボタン
:TOWNS仕様含む
ポート0 1ピン:L上
2ピン:L下
3ピン:L左
4ピン:L右
6ピン:LA
7ピン:LB
9ピン:GND
× ポート0 1ピン:R上
2ピン:R下
3ピン:R左
4ピン:R右
6ピン:RA
7ピン:RB
9ピン:GND
L上下左右:十字キー、左アナログレバー
R上下左右:右アナログレバー
Xボタン:LAの連射
Yボタン:LBの連射
Cボタン:LAとLBの同時押し
L1ボタン:LA
R1ボタン:RA
L2ボタン:LB
R2ボタン:RB
SELECTボタン:L上下
STARTボタン:L左右
TWINPLUS_BA 2CON TWIN PLUS
:2コントローラモード
:内側Bボタン
:TOWNS仕様含む
ポート0 1ピン:L上
2ピン:L下
3ピン:L左
4ピン:L右
6ピン:LB
7ピン:LA
9ピン:GND
× ポート0 1ピン:R上
2ピン:R下
3ピン:R左
4ピン:R右
6ピン:RB
7ピン:RA
9ピン:GND
L上下左右:十字キー、左アナログレバー
R上下左右:右アナログレバー
Xボタン:LBの連射
Yボタン:LAの連射
Cボタン:LAとLBの同時押し
L1ボタン:LB
R1ボタン:RB
L2ボタン:LA
R2ボタン:RA
SELECTボタン:L上下
STARTボタン:L左右
JAMMA_CPSF JAMMA
:CPSF配置
ポート0 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:A
7ピン:B
9ピン:GND
× ポート0 1ピン:R1
2ピン:Y
3ピン:X
4ピン:SELECT
6ピン:L1
7ピン:START
9ピン:GND
上下左右:十字キー、左右アナログレバー
Cボタン、L2ボタン:R1
Zボタン、R2ボタン:L1
JAMMA_MAGICAL JAMMA
:MAGICALパッド配置
ポート0 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:B
7ピン:A
9ピン:GND
× ポート0 1ピン:0
2ピン:0
3ピン:L1
4ピン:R1
6ピン:Y
7ピン:X
9ピン:GND
上下左右:十字キー、左右アナログレバー
Cボタン、L2ボタン:R1
Zボタン、R2ボタン:L1
JAMMA_MD_3B JAMMA
:メガドライブ3ボタン配置
ポート0 1ピン:上
2ピン:下
3ピン:0
4ピン:0
6ピン:A
7ピン:START
9ピン:GND
× ポート0 1ピン:上
2ピン:下
3ピン:左
4ピン:右
6ピン:B
7ピン:C
9ピン:GND
上下左右:十字キー、左右アナログレバー
Xボタン:Aの連射
Yボタン:Bの連射
Zボタン、L1ボタン、R2ボタン:Cの連射
R1ボタン、L2ボタン:C

※1 ゲームまたは本体の性能(速度)によっては正常に動作しない場合があります。その時はJOYDRVを使用してください。
※2 メガドライブでは正常に動作しません。(R4 Type2では未確認)
※3 ポート0~3はHUBの接続ポートになります。HUBが無くUSBコントローラを直接接続する場合は、該当コントローラはポート0となります。




モード設定について
電源投入直後は以下のような表示になります。(表示内容はEEPROMに保存されている設定値によって異なります)
1行目はポート0のモード、2行目はポート1のモード、3行目は空白で4行目はファームのバージョンが表示されます。
この状態で、ポート0のコントローラのSTARTボタンとSELECTボタン(コントローラによってボタン名称は異なります)を
同時に約3秒間押し続けると、モード設定状態になります。
モード設定1


モード設定状態では、上下ボタンでカーソルの移動、左右ボタンで設定値の変更となります。
コントローラのA、B、C、X、Y、Zボタンを押すと表示している設定値をEEPROMに保存します。
ただし、DEBUGの設定はEEPROMに保存しないため、次回電源投入時にOFFに初期化されます。
モード設定2
モード設定3 モード設定4


DEBUGをPORT0~PORT3にしてA、B、C、X、Y、Zボタンを押すと、設定したポートのコントローラから受信した1~8バイト目のデータを3行目に、
9~16バイト目のデータを4行目に表示します。(ポート1~3を表示するにはHUBが必要です)
プログラムを変更してコントローラを追加したい場合に参考にできます。
また、デバックデータを格納する部分を変更することで好きなデータを表示できます。
モード設定5 モード設定6


DISPLAYはROTATEにすることで180度回転して表示します。この設定は変更するとすぐに表示の仕方に反映されます。
モード設定7 モード設定8



USB HUBの対応について
HUBはゲーム機のマルチタップと同様の使い方となり、機種混在で4コントローラまで使用可能です。
HUB及び機種混在対応に伴い、汎用の無線(Bluetooth)接続は非対応となりました。ご了承下さい。
また、HUBのカスケード接続には対応しておりません。
PCエンジンミニ用等の内部でカスケード接続されている5ポート以上のHUBには対応していませんのでご注意ください
なお、ポート0がどこになるかは機器の仕様によりますので、各自で確認願います。




スーパーストリートファイターⅡでのコントローラ設定について
アケコンなどではボタンの配置に合わせて設定を変更する必要があります。
以下は一例になりますので、参考にしてください。(情報及び画像提供:たねけん様)

モード CON CONFIG.での設定
CPSFモード
HORI RAP(PS4)の場合
HORI RAP(PS4)
CPSFモード
HORI VX(XBOX360)の場合
HORI VX(XBOX360)
CPSF-MDモード
ASTRO PAD(メガドラ6B)の場合
ASTRO PAD(メガドラ6B)