honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

SuperMultitap Convet to SNESC adapter development progress - work fine!

スーファミミニにマルチタップをつないで動作させることが出来ました!

f:id:honeylab:20171101215835j:plain

f:id:honeylab:20171101215847j:plain


とはいえ当然そのまま動作させることはできません。
何種類か発売されているWii(スーファミミニ)と旧来スーファミコントローラを変換するアダプタでは、マルチタップを動作させるために必要な配線が足りていません。

 

Hyperkinアダプタの分解と解析

Hyperkin SNES TO SNES CLASSIC ADAPTER can't use SuperMultitap - honeylab's blog

 

マルチタップの読み込み方

Mechanism of SFC MultiTap

普通のゲームパッドの端子はコネクタに全部接続されてるわけではないんですね。

HyperkinアダプタがATMEGA8なのでこれに追加配線をすることで改造できそうな気もしますが、まずは専用コンバータを作ることにします。

その前に、ドライバが動かなければどうにもならないので、こちらを作ることから始めます。
スーファミミニのほうがどうやってコントローラを認識しているかですが、

honeylab.hatenablog.jp

 上記の記事のようになっています。
具体的には、clovercon というi2c-joypad ドライバがその役割を果たしているため
そこを改造することになります。

もともと、Wiiタイプのコントローラは0x52をi2cアドレスとして固定しているため、
同じi2cバス上には二つ以上接続することはできません。
そのため、アドレスを変更しただけのWiiコントローラプロトコルを実装し、
複数のi2cアドレス要求に対して応答できるように改造します。


具体的な改造箇所は以下の通りです。

https://bitbucket.org/bakueikozo/clovercon-mod/diff/clovercon.c?diff2=0f4327db5c33&at=default

また、何らかの理由でi2cアドレスを変更できるよう、
もともとのcloverconのパラメータを流用して値を設定できるようにしてあります。
本当は別のパラメータを準備するべきなんでしょうが…

パラメータは以下のように設定します。

module_params=1,-1,2,-1,83,-1,84,-1,85,-1

(1,-1 ) :1st pad on i2c1 , with no GPIO 

(2,-1) : 2nd pad on i2c2 with no GPIO

It is my extention :

(84,-1) : 3rd pad on i2c2 (fixed) with no GPIO with I2C ID is 83 = 0x53
(85,-1) : 4th pad on i2c2 (fixed) with no GPIO with I2C ID is 84 = 0x54
(86,-1) : 4th pad on i2c2 (fixed) with no GPIO with I2C ID is 85 = 0x55

ソースコードを見るとわかりますが、最大8個のコントローラを認識できるようにしてあります。
しかし、同じi2cバス上でこのような頻度でコントローラに問い合わせをしたときに
何らかの弊害が起きる可能性があります。
但し、ボンバーマンを4pでプレイしている限り、普通に動いているように見えました。

 

上記のパラメータでドライバをロードすると、以下のように認識されます。

あ、言い忘れてましたが、この改造のためには上記で改造したcloverconをミニスーファミにインストールする必要があります。

 そのためにもまず、hakchi2のインストールは必須になります。
その中で、hakchi2に含まれるclovercon.hmodを入れ替えることになります。

 

f:id:honeylab:20171030225831p:plain

 

きちんと認識されたようです。

 

さて、コンバータのほうはArduinoを使います。
配線はこのようになります。

f:id:honeylab:20171031174745p:plain

Hyperkinのアダプタは、Select と 4 or 5 の配線がありません。

この辺の詳細な配線はそのうちきれいに作ったらまとめますが、
スケッチの肝としてはこの辺を参考にしています。

nuneno.cocolog-nifty.com

 

i2c応答部分はこの時のスケッチを流用しました。

honeylab.hatenablog.jp

f:id:honeylab:20171031090758j:plain f:id:honeylab:20171031091455j:plain

このように作ることで、複数のi2c機器のようにふるまうことができます。

 

さて、実際に使用するにあたって、トラブル特定のしやすいRetroArchを使用します。
hakchi2のモジュールとしてインストールします。
インストール方法はこちら

Releases · ClusterM/retroarch-clover · GitHub

 

インストール出来たら --retroarch オプションを付加し、マルチタップ対応のROMを転送します。

retroarchでゲームを起動出来たら、1pコンのSelect+StartでINPUTメニューを開き、バインドを設定します。

ここでの肝は、USER2のDeviceTypeをMultitapにすることです。
たぶんなんですが、この設定によりエミュレータ(およびソフト)のほうに
Multitapから信号を読むような切り替えがされるんだと思います。

f:id:honeylab:20171031091453j:plain

Input3以降、Controller3 以降を使ってボタンを設定していきます。 

f:id:honeylab:20171031091450j:plain

 

すると…

 

 

ボンバーマンが4人でプレイ可能になりました!!!

が、残念ながら4人も人が集められなかったので一人で動作確認です!寂しい!!