SS→DUALSHOCK2変換

ATmega328Pマイコンを使ってセガサターンコントローラ(特殊コントローラ除く)をDUALSHOCK2相当に変換します.
ボタン配置変更,方向キーの割り当て変更(サターン方向キーをDUALSHOCK2の左スティックになど)機能,連射機能あり.
特にボタン配置にまとまりのないWiiバーチャルコンソールなどで使うと幸せになれるかもしれません.

ファイル

こちら→Public - Google ドライブ

  • SS2PS2ATmega328P.zip⇒ソースコード一式(Atmel Studio 6.2用,GPL
  • SS2PS2ATmega328PHEX.zip⇒HEXファイルのみ

回路図

ATmega328P FUSE 設定:

BODLEVEL = DISABLED
RSTDISBL = [ ]
DWEN = [ ]
SPIEN = [X]
WDTON = [ ]
EESAVE = [X]
BOOTSZ = 2048W_3800
BOOTRST = [ ]
CKDIV8 = [ ]
CKOUT = [ ]
SUT_CKSEL = EXTXOSC_8MHZ_XX_16KCK_14CK_65MS

EXTENDED = 0xFF (valid)
HIGH = 0xD1 (valid)
LOW = 0xFF (valid)

使い方

初期設定,もしくは接続時にLかRを押しっぱなしにして離すとキー配置は以下のデフォルト配置になります.

X Y Z
L2
A B C
× R2
L R
L1 R1

Aボタンを押しながら接続した場合はL1L2,R1R2が入れ替わった復刻版セガサターンパッドモードになり,以下の配置になります.

X Y Z
L1
A B C
× R1
L R
L2 R2

Bボタンを押しながら接続した場合はWiiアーケードモードになり以下の配置になります.

X Y Z
×(連付) ○(連付) L1
A B C
×
L R
R1

Cボタンを押しながら接続した場合はPSアーケードモードになり以下の配置になります.

X Y Z
□(連付) ×(連付) L1
A B C
×
L R
R1

ボタン配置はマイコンの電源が切れても保存されます.
「連付」はPSへ送信するボタン入力を1回ごとに自動的にON,OFFする理論的には最速の連射です.しかしながら早すぎて認識しない場合もあるようです.

セガサターンコントローラのSTARTボタンはファンクションキーとして動作します.STARTボタンを押しながら各ボタンを押すとDUALSHOCK2の以下のボタンに対応します.

X Y Z
ANALOG N/A N/A
A B C
SELECT START HOME(START+SELECT+↑,PS3用)
L R
L3 R3

また,セガサターンコントローラのSTARTボタンを押しながら方向キーを押すと,以下の機能があります.

  • STARTボタンを押しながら←:セガサターンコントローラの方向キーをDUALSHOCK2の左スティック入力とする
  • STARTボタンを押しながら↑:セガサターンコントローラの方向キーをDUALSHOCK2の方向キー入力とする(デフォルト)
  • STARTボタンを押しながら→:セガサターンコントローラの方向キーをDUALSHOCK2の右スティック入力とする

動作確認

以下のコントローラ変換器ではだいたいですが動作を確認しています.本体が故障中のため肝心のPS2では動作確認していません.

ツナイデント3 PRO

ツナイデント3 PRO

(WiiU/Wii用)コントローラ変換アダプタ

(WiiU/Wii用)コントローラ変換アダプタ

その他

余ったArduino(ATmega328P搭載のもの,Unoとか)とAVRライタをお持ちの方は代用可能だと思います.たぶん.

謝辞

DUALSHOCK2の解析記事です.いろいろと参考にさせていただきました.

DUALSHOCK2の動作をAVRマイコン上でエミュレートするコードを使わせていただきました.

セガサターンコントローラの接続確認,ボタン読み取りのコード,連射機能の実装方法を参考にさせていただきました.