筐体へXBOX360をつなぐ サターンコントローラを変換 

  • 2010/09/06(月) 23:10:33

MAME筐体として稼動しているアトミス筐体ですが、当然ながらXBOX360も簡単に接続出来ます。
縦画面、XBOX360とくれば、シューティングですよ。

と、ここでシューティングの操作はやっぱり筐体でってことになりますが、この筐体のコンパネはセガサターンのバーチゃスティックプロ。

XBOX360は一時期ジョイスティックが手に入りにくくなり、かなりの人々がコントローラ乗っ取りで対応していたようです。ネットを辿ると多くのサイトで情報が簡単に手に入ります。

しかし!
それはすべてコントローラのボタンなどスイッチ部をXBOX360のコントローラへ直づけし乗っ取る方法です。
それではせっかくのバーチゃスティックプロをもう一回分解、半田しなければならいないという煩わしいことに。
その上、この筐体ではMAME側はDPPで接続しているので、コンパネ変えなきゃならなくなるなど、さらにさらに面倒です。

そんなわけでサターンコントローラの変換が販売されてないか探しました。

まったくないorz
PS2のはあるのにどうして?っていうか、あんなPS2のxxコントローラを変換してどうすんだ!?

というわけで、無いので作りました。

まあ、完全に自分で設計なんてしてません。そんな技術ないです。
海外のXBOX360に関してhackerたちはすごいですね。
案の定、xbox-sceneのforumにとっくの昔に作った人がいました。Xbox-SceneのConverting A Sega Saturn Controller To Xbox 360です。
簡単に言うと、PICでサターンコントローラのパラレルに信号変換をして、アナログスイッチでOn、Offしてるだけという、
「結局乗っ取り」です。すいません。

まあ、サクッと作りましょう。
コンパネは2プレイ出来るのでせっかくなので2つ作ります。
16F690の20pinを2つと74HC4066を6つです。(一つ分なら半分でOKです)
上のサイトにPICのコードだけでなく、HEXも置いてあるので拝借して焼きましょう。
とここで注意!

PICライターとして以前にも書きましたが、TOP2049を使っていますが、こいつがまたクセモノでした。
PIC16F690-20Pinを選択し、データとしてHEXを指定しますが、デフォルトのオフセットアドレスが4200からになってます。
なんで?
ああ、そうかデータアドレスなんだと気づいたのですが、HEXを指定しているのに、なんで?って感じです。
当然アドレス0から書き込まなければ動作するわけないので、設定して書き込みましょう。
TOP2049は罠が多いですねw

あと、一番手に入らないのがサターンのコントローラを差し込むソケットでしょうか?
結局ジャンクのサターンから外しました。これで同時に2個手に入ります。

また紹介されている回路図はXBOX360のコントローラがワイヤレスのものなためか、回路用に電池を使った回路図になっていますが、ワイヤレスコントローラなんて高価なものは持ってないので、コントローラのUSBからの5Vを拝借すればOKなはず。

また、最初は通常のコントローラとしても使えるように、乗っ取りはソケットかなんか使おうかと思いましたが、他にもコントローラ持ってるので、直接半田付けすることに。コントローラを変換器にしてしまう感じですかね。

あとこの変換に使用するPICですが、I/Oポートが18本と多いのですが、サターンの出力側が13個のため、後1つ足りないです。
ソースを見ると分かりますが、サターン側のスタートボタンを切り捨てているようです。
まあもともとXBOX360のコントローラと比較した場合はボタンの数が足らないので、よしとして作成。

早速持っているXBOX360のコントローラを分解。

旧型だったorz
とここで何でアナログスイッチの74HC4066でOn、Offしてるのか分かりました。
旧型はボタンごとにGNDが違うという面倒くさい設計のため、それぞれでショートしてやらないと、PICで信号変換してGNDへ接続してもメインのGNDと違うためOn、Offできないのでした。

ちなみにそれぞれの配線箇所は家庭用アーケードスティックスレまとめWikiを参考にしました。
旧型の説明があまり記載されてなくて分かりにくかったですが、

それぞれのボタン(A、Bなど)は1、2をショートでOnになる。A1、A2となっているA2がAボタンのGND。A2、X2、RS2となっているのは、A、X、RSの3つのボタンのGNDが一まとめになっているところ。
STはスタート、BAはバック、XBは真ん中のしいたけ。
十字キー(デジタル)の上下右左は、DU、DD、DR、DL。
LS、RS、U、D、R、Lはなんのことか不明(アナログ?)w

でした。

んで、サターンからは上下左右のコントローラー以外に8ボタン分ありますので、どのように割り振るか?
結局XBOX360側でどのボタンが欲しいか?によりますが、基本シューティングしかやらないための改造なので、LB、RBは欲しいがLT、RTはいらない。しいたけは欲しい。もう一つはスタートにしてみる(バックはあんまり使わないでしょ?)とこんな感じにしました。

サターン側  XBOX360側
A      A 
B      B
C      RB
X      X
Y      Y
Z      LB
R      スタート
L      しいたけ

ボタン配置でいうとこんな感じ。

んでは早速作成します。

Xbox-Sceneの回路図はボタンを全部配置しないとか、配置が違うとかありますので、あんまり参考にしなくていいと思います。
PICのコードを見るとどのピンにパラレルに変換して出力しているか分かります。
また、74HC4066は単純に、スイッチが4個入っているだけなので、同一のGNDを近くに配置するなどして、適当に配線しましょう。
回路へのVcc、GNDの取り回しはUSBのライン接続から直接です。
#ちなみに赤と黒で5VとGNDですよ、念のため。
XBOXのコントローラへの配線は正直かなり楽勝です。
ただ、しいたけだけ乗っ取りwikiに、「ここから取って成功した試しがない」と書かれてましたのでパターンを辿って、

こんな感じで別な場所でちょっと表面を削って半田しました。
心配なようならPCで認識させて、それぞれ半田したラインをショートさせて、onになることを試してもいいかもしれません。

#あとで読み直してみるとわかりにくいので、いつか回路図を書いて見ます。なにかいい回路図の作成ソフトってありますか?

出来上がりです。

#もうぐしゃぐしゃw
早速試してみました。

うごかねーorz


というか、すべてのボタンが最初から押された状態で認識されています。
どうもおかしいといろいろ探してみました。
するとセガサターンのコントロールパッドを解析したページを発見。
そこのに「押下でLo」という記載が。
等価回路を見てみると、なるほどサターンパッドからはボタンを押した場合は74HC153のGがLoなので、負論理で帰ってきているようでした。
んで、PICのコードを見てみると、単純にパッドからの入力を1でANDして、それをそのまま出力しています。
なので、ボタンを押してないとH、押すとLが出力されるコードでした。
PICのコードを書き換えます。簡単に出力時にビット反転させてみました。

#ここで結局pickit2購入ですよorz

これです。pickitなどで書き込む方はファイル名を.asmなどに変更してください。
一応Hexも置いておきます。これです。ファイル名の.txtを消してください。
っていうか、もともとのXBOX-Sceneのやつで動いている動画がありますが、どうやってるんでしょう?動くはずないんですが。
まあこれでなんとかまともに動作してくれました!
#この間2週間ほどw

早速コンパネでプレイしてみました。

って、写真だと何だか分からないorz
まあ、無事に動きます。
では

この記事に対するトラックバック

この記事のトラックバックURL

この記事に対するコメント

この記事にコメントする

管理者にだけ表示を許可する