honeylab's blog

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

SEIKENDENSETSU 2 (Secret of Mana) works with multitap 3players playing on canoe

My game skill is too poor , and I had not cought party member ,death and death...

 

 

But my wife has good skill to catch members !!!! Thanks !!!

 

This picture shows Player1 (MAN) and 2,3 are computer member.

 f:id:honeylab:20171031232052p:plain

 

with 2p,3p START Pressed ...

f:id:honeylab:20171031232028p:plain

2 and 3 indicator appeared and can control with them by pad.

 

This content explain multitap playing with RetroArch emulator.

 

honeylab.hatenablog.jp

But now, I confirmed stock canoe emulator can handle multap controller !!!!

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人も人が集められなかったので一人で動作確認です!寂しい!!

 

Hyperkin SNES TO SNES CLASSIC ADAPTER can't use SuperMultitap

Someone says Hyperkin Adapter will not recognize SuperMultitap 3rd connector.
So I bought and opened it.

f:id:honeylab:20171028125154j:plain

 

This picture is pcb and parts.

Look at connector pins in red circle.
f:id:honeylab:20171028125658j:plain

This two pins are used to communication to Multitap but not normal pad.
They has not connected to any pins.

There are enough pads for rewrite software!(RST,SCK,MISO,MOSI) and
ATMEGA8 is famous programable processor.


but, It is IMPOSSIBLE to use Multitap with this adapter only software hack.

But if you can connect them and software moddding will support Multitap (but I will not do.)

 

SuperMultitap Convet to SNESC adapter development progress (1)

I got SUPER MULTITAP 2!

 

f:id:honeylab:20171027231257p:plain

inside.

f:id:honeylab:20171027231242p:plain

analyze protocol .. but I have not arrived protocol perfectry.
Does anyone have protocol detail for SUPER MULTITAP and SNES communication?

 

Driver progress.

I have patched to clovercon.c and handle i2c device address 0x53-0x58.
(original SNES(wii) gamepad uses address 0x52)

I will make SuperMultitap/Wii i2c converter.
It will make able to using 3 more gamepad on SNESC

スーファミミニの3本目のコントローラを刺す場所 / 3rd controller connector on SNESC / NESC

ここです(どやぁ

 

f:id:honeylab:20171026001827j:plain

 

R16のi2c0がHDMIのi2c通信用に出てるので
そこを分岐してやります。

 

f:id:honeylab:20171026001935p:plain

 

ちゃんとコントローラのプロトコル出てますね

f:id:honeylab:20171026001441p:plain

 

f:id:honeylab:20171026001734j:plain

Wii controller compatible arduino test board.


とりあえずArduinoで作った互換コントローラもどきはLinuxから認識することは確認しましたが、
エミュレータからちゃんと見えるかどうか、とかは全然確認してません。

定期的にHDMI用の通信が割り込むのでそこで通信が落ちたりしないといいのですが…

その辺も確認してないです。

 

バイスとして挙がってます。

 f:id:honeylab:20171026001205p:plain

 

あと、この状態では特にclovercon.cにはパッチ当ててません。
(VERBOSITY レベルを上げてるけど)

modprobeで渡すパラメータの引数解析でi2cの番号を指定されてるので、
hakchi2のhmodで渡すスクリプトをちょっと変えてます。

f:id:honeylab:20171026002255p:plain

これだけで、3番目のコントローラをi2c0に探しに行ってくれます。

 

まだ少し不安定なので、コネクタ化してから再度調査しますかね。

 

STM8x Microprocessor in SNEC Gamepad!

I found this chip in SNESC Gamepad.

This is STM8 chip!!!

but, It is markd as STM8MHZ and such device is not published from STMicro.

It seems to be custom production chip for Nintendo but I don't know.

I will try to read Program Memory , but I thought it was proteced.. but try..

.