2011年9月30日金曜日

メガドライブ セーブデータ読み書きの実験

皆さんは、メガドライブのオリジナルカセットに保存してあるセーブデータはどのようにバックアップしたり、リストアしてますか?

むかしプレイした大切なデータをPCに保存したり、エミュで遊んだり・・・ってしたいですよね? or してますよね?

私は以前作った吸い出し機で読み書きできないかなぁ、と考えてたことはあったものの、放置で実現に至ってません(爆

先日メールにて、某氏さんからのコメントの中に、

・パソファミでSRAM読もうとしたらデータが消失した

・MDのSRAM読み書きできるものってある?

とありまして、少し考えておりました。

パソファミに関しては私が所持していないので、そもそもがMDのSRAM読み込みができるのかはわかりません(^-^;

が、他を考えても全然思いつかないんですよねぇ・・・

他の機種ではセーブデータ弄れるのに、メガドライブだけは確かに情報がない。

もしかしたらTototekのMD-PRO(&MEGACART)用の書き込み機+DreamWriterがSRAMの読み書き対応してるからできるかなぁ、と思って試したんだけど、MD-PRO専用らしく、オリジナルは出てこない。

RetrodeもSNESのセーブデータは読めるものの、MDは未対応のハズ。

【追記】

もうじき発売予定のRetrode2ではメガドライブのSRAM読み書きに対応しているとの事。

全てOKかどうかはやってみないとわからないところはありますがw

EEPROM等は未対応だそうです。

ホンコンも駄目だし・・・

もしかすると昔あったMD対応マジコンならできるんではないか?と思ってみたところで手元に無いのでわからない。

う~む・・・

とりあえずSRAM付きのメガドラカートリッジを分解して眺めてみた。

PICT6512

16MbitまでのSRAM搭載カートリッジと、32MbitまでのSRAM搭載カートリッジ。

載ってるSRAMは共に6264(8KByte)だけど、メガドラ(68000)から見えるSRAMの位置はそれぞれ違うので、例えばランドストーカーを32Mbitカートリッジで動かすとセーブデータ表示がバグって正常に動作しない。

参考:Future Driverさん

実際のRAMの位置はROMのヘッダに書いてあるからそこを指定すれば読めるのか?

っても、68000上で動いてないと意味ないよなぁ・・・

X680x0使えば良いのかw

ん~・・Sega CD Transferでアドレス指定して読み書きできたらいいんだけどねぇ。

とまぁ、いろいろと考えてもなかなかいい案が出てこなかったけど、昨夜寝る時にピィ~ン!と閃いた。

SRAMは6264、これはファミコンやスーファミでも使われているもので、MDが16bitマシンであろうがデバイス自体は8bit。

ということは、とりあえず直接読んだら読めるんじゃね?とw

そうと決まれば即実行、早速実験してみようと工作開始。

PICT6514

CHRが28ピンだからFlashカートには使わない(PLCC使うなら関係ないけど)つもりでいたSJROM(MMC1)のSRAMを取り外し、28ピンのソケットを取り付けて、簡易SRAMリーダ・ライタアダプター完成(笑

ファミコン側も元々6264が載ってるので、配線はただの延長ケーブルです。

本来ならIC挟む・・・洗濯バサミみたいなヤツがあればベストなんですけど、手持ちが無いので。

PICT6518

まずはジャンクで購入した時から入っていたデータが正常に吸い出せるか、メガドラではお馴染みのランドストーカーで試す。

PICT6515

ちょっとセットが難しい(外れやすい(笑)けど、テストするには十分です。

mdsave0

吸い出し環境はお分かりの通りKazzo+Anagoで、SRAM読み込みすスクリプトはmmc1_skrom用でOK。

ちゃんと接続されていれば問題なく読み込みできてるみたいだ。

mdsave1

データを見てみると、当たり前だけど8bit仕様でデータが出てくるため、このままではエミュでは動かないから変換してやる必要がある。

mdsave6

変換は自作ツールで何とかなりそうだ。

mdsave2

まずは3228mbcを使って16bit仕様にする。サイズは倍の16KByteになる。

mdsave3

次に奇数、偶数番地が逆なので、mlsbswapで反転してやる。サイズは16KByteのまま。

こうするとエミュで使えるデータになる。

さて、結果は?

mdsave5

オッケ~!\(^-^)/

無事オリジナルメガドラカートリッジからSRAMを読むことができました。

これで昔の大切なデータを半永久的に残すことができるね。

読み込みはOKだから、次は書き込みのテストだ。

PICT6520 PICT6521

XBOX(初代)のエミュを使ってクリアしたセーブデータが残っているので、それを使って書き戻しできるか、を試す。

mdsave8

XBOXにFTPで接続し、セーブデータファイルをPCへコピー。

mdsave9

データサイズ的には8KByteだが、偶数バイトを見る限りでは16bit仕様になってるので、8bit用に変換しなければいけない。

mdsavea

の前に、一応エミュで確認を、うん、問題ないね。

mdsave11

これも自作ツールで、mlsbcutを使う。

出来上がった2つのデータの内後ろのデータが8bit用のデータとなる。

サイズは半分の4KByteだけど、Kazzoで書き込む際には問題にならないのでこのままで。

*ランドストーカーのSRAM実使用サイズが4KByteです。

PICT6517

再度アダプターを挿し、書き込みしてみる。

mdsave12

メガドラカート基板上の/WE、/CE、/OEの接続がどう影響するかわからなかったのでちょっとドキドキだったけど、anago上では無事書き込み処理が終了。

さて、結果は?

PICT6524 オッケ~!

ブラボ~!

書き戻しも問題なくできた(^-^)

mdsave13 PICT6525

32Mbitカートリッジ(ゲームデータ的には24Mbitだけど)のファンタシースター ~千年紀の終わりに~も、読み込み、書き込み共に問題なかった。

そんなわけで、当たり前かもしれないけど、デバイス直読みでメガドライブのオリジナルカートリッジのセーブデータが生かすことができた。

ま、データの変換は仕方ないかな(^-^;

需要があるようなら一発変換ツール作るけども。

あとは、これをカートリッジ分解せずに読み書きできるか?ですかね。

アドレスバス、データバス、Vcc、GND、/OEは普通にPCBコネクタから取れる。

問題は/CE1、/CE2、/WEだなぁ・・・

32Mbitカートリッジは/WEもPCBコネクタまで来てるんだけど、16Mbitカートリッジには無い

【修正】↑私の見間違えです、2基板とも/WE来てました(ぉ

16Mbitカートリッジの/CEは74HC00に入ってて・・・なんとなく辿るとA22辺りに出てるのか?

・・・気が向いたらにしよう(ぉ

【追記:20111002/15.30】

アダプターのver.2を作って試してみる。

MDコネクタ付けたので、読み書きはめっちゃ安定してミスは無くなったが・・・

PICT6538

/OEと/WEはPCBコネクタでクリアできるが、やはり/CE1と/CE2がキモですね。

Read&Write時に/CE1をLow、/CE2をHiにすればいいはずなのですが、GNDとVccを使うと読み書きできない。

6264に直接入れると問題ない=分解必須となってしまう(^-^;

どこのコネクタピンかなぁ~

【追記:20111002/20.45】

違うカートリッジも一応試す。

ファンタシースターⅡは上と同じ方法で問題無し。

次に開発者さんがテストしたとされるソニック3を分解すると、

PICT6540

・・・えぇぇ~~(^-^;

なんだこれ(?

調べてみるとFRAMの512Byteチップだそうで・・・

ピン数は24ピン、アドレスバスは9本ときたもんだw

・・・アドレスバス10以降をVccかGND入れれば出てくるんかな・・・あ~メンドイ・・・これはとりあえずパスッ!

ってか、外国のソニック3はSRAMなのか?

もし日本版と同じなら・・・SRAMと同じように扱えてるのかなぁ。

トレースしたところでは/WEと/OEは同じみたいだし。

MDのセーブ関係も真剣に調べるとまだまだ出てくるのかもしれない。

20 件のコメント:

たちばなみお さんのコメント...

そういえば Retrode2 で対応予定なかったでしたっけ?
わりと楽しみにしてるんですが(笑)

ぽんRev さんのコメント...

こんにちは。

今Retrode2のFAQとコメントをザッと見ましたが特に何も書いてないですね(^-^;
ネオポケ以外関与してないし(ぇ?)2は予約も入れてないので、今から直接開発者さんに確認してみますね。

ぽんRev さんのコメント...

返事来ましたのでここに書いておきます。

Retrode2ではSRAMの読み書きに対応してるそうです!
ソニック3でテスト済みとの事。
EEPROM仕様とかはダメみたいですw

あやすけ さんのコメント...

ちわー、
メガドラのセーブ吸出し良いですね
カートリッジのまま簡単に吸い出せたら更によいですね~

蛇足ですが
retrode2 6/10の配信メール抜粋
(2) Sega SRAM support
On a different note, thanks to the invaluable help of Sega experts [Eke-Eke] and [ElBarto], I implemented read+write support for the SRAM on Sega Genesis / Mega Drive cartridges a few days ago. (This feature is exclusive to the Retrode2 since it requires some signal lines that are not present in the older hardware.) EEPROM saves, as in some EA titles, may be supported at some later point via a firmware update.

パソファミのversion.txt抜粋
■パソファミ(v1.4q)のバージョンアップ内容(2004/04/11)
●スーファミの「SFメモリカセット」の吸い出しが出来るようになりました。
 但し次の制限があり、現在調査中です。
 ・パソコンによっては吸い出し出来ない場合があります。
 ・複数のゲームが書き込まれている場合、最後のゲームは吸い出し出来ません。
●スーファミの「衛星放送対応カセット 8Mメモリーパック/ROMパック」の吸い出しが出来るようになりました。
●メガドライブの「バックアップデータ」の吸い出しが出来るようになりました。
 ・吸出し画面で「カセットからバックアップを読み取る」で吸い出しします。
 ・吸出しできるSRAMサイズは16Kです。

ぽんRev さんのコメント...

あやすけさん

こんちは~
情報ありがとうございます(^-^)

>retrode2 6/10の配信メール抜粋
・・・ホントだ、今見たら書いてありましたね(^-^;
全然読んでませんでしたw

>パソファミのversion.txt抜粋
なるほど、一応SRAMの吸い出しは対応してるんですね。
16K固定ってことは、おそらく16bit仕様でデータが出てくるのかなぁ?
コメントの文面だけで解釈すると書き戻しは出来ないのかな。

いずれにしても、Retrode2で読み書きOKってことは、/WEとかの信号線は変わるかもだけど分解せずに読み書きできるってことですね。
開発者さんはSonic3(16Mbit)で確認したそうなので、32MbitカートのSRAMがどうなるのか気になりますが、これは2が出てからのお楽しみ(?)ってことに(笑

AnalYoGirl さんのコメント...

オリジナルのカートリッジに手軽にセーブデータを書き込めたら面白いなと思って、今日ちょっとだけ実験してみました。

http://68000.web.fc2.com/sram.html

ぽんRev さんのコメント...

AnalYoGirlさん

おぉ!
コメント&実験していただきありがとうございます(^-^)

実機でカートリッジ差し変え法が実現すれば、工作も簡単で便利そうですね。
この方法で、既に書きこみは成功している、ということですかね?
流れは理解できましたが・・・MDのプログラムとか、私の技量では現状無理っぽいなぁ(^-^;

書き込みの場合もPCからRAM上へ、読み込みもRAM上に保存したものをPCに転送、って出来ればいい感じかな?
っていっても、転送+読み書きプログラムとデータ合わせて64Kに収まるのかわかりませんが(汗
・・・素人考えなのでw

実現できれば専用カートリッジ作るのも良いかもですね。

YoGirl さんのコメント...

とりあえずSRAMの読み書き実験に成功しました。
そしてこのまま読み書きソフトを完成させる事にしてみました。

最初のバージョンはSRAM読み書き専用でとりあえづ完成させて、後に各種EEPROMとROM読み出しにも対応したいな~と企んでます。

ぽんRev さんのコメント...

YoGirlさん

早々に読み書きテスト成功されたようで、素晴らしいですね!
その知識がとっても羨ましいです・・・

是非ともEEPROMなども対応してくださいm(_ _)m
・・・個人的希望丸出しですが(^-^;

とりあえず68000の17ピンにスイッチ付ける準備もしておきますw

余談ですがふと思ったこと。
もしかして、FlashROM使ってカートリッジ作ったら直書き込みなんかもできてしまったり?
と思うのはやっぱり浅はかですかね(^-^;
あ、速度的に無理があるかな~

YoGirl さんのコメント...

お茶飲んでゆっくり出来れば、FlashROMの書き換えも出来ますね。

今日はハードオフで動作テストに使うバックアップ機能付きカートリッジを何本か買ってきたのだけど、20年近くなると言うのに、どれもSRAMにセーブデータが残ってて意外でした。

1つリクエストなのだけど、真っ先に対応して欲しいEEPROM搭載ソフトって何かあります?

ぽんRev さんのコメント...

YoGirlさん

セーブデータは結構残ってますね。
容量計っても大半が2.8V以上のこってますし、ボタン電池って凄いです。

真っ先に対応してほしいタイトル・・・所有していてEEPROMを使っていると思われるのは忍者武雷伝説とモンスターワールドⅢ(どちらも分解してない)なので、この2本のどちらか・・ですが、EEPROMか確定ではないので分解して確認しないといけないですね(^-^;
他にはモンスターワールドⅣがEEPROMとの情報を頂いてますが、こちらも未確認です。

FlashROMの書き込みは時間無視すればできるんですね。
これはこれで凄いことかもしれない・・・
因みにROMライターで27C322を焼くと8~9分位掛かりますが、シリアル転送だともっと掛るのかなぁ。

あ、そういえば、また余談ですが、先日アップされたBad Apple!!PV-MDの0.07見て気に入ってしまったので、27C322に焼いてオリジナルカセットとして作っちゃいましたw
大画面(40インチだけど)で見ると最高です(笑
ありがとうございます(^-^)

YoGirl さんのコメント...

えーと、計算してみたら32MBitのROMを焼くのに2時間以上かかる事になりました。
でもPCのシリアルポートを使いつつも非同期式じゃなくて同期式で送受信する様にすればかなり早くなるハズ。

忍者武雷伝説は謎だけど、MW IIIは丁度エミュレーター開発者向けの資料にEEPROMの種類と回路の種類が載っていたのと、偶然ウチが持ってる他のソフトと同じだったから、EEPROM対応第一弾はMW III & MW IIIと同じ回路の24C01搭載ソフトにしてみます。

ぽんRev さんのコメント...

YoGirlさん

32Mbitで2時間以上ですか(^-^;
ちょ~っと掛かりすぎですねw
同期にするとなると、PICやAVR使ってって事になるのかな。
工作するだけなら問題ないんだけど、他が(悲

EEPROM対応楽しみにしてます(^-^)
で、忍者武雷伝説分解してみました。
結果はYoGirlさんの20111006の写真のEEPROM基板と同タイプ(基板No.171-6111A、24C01)でした。
EEPROM搭載タイトルってどれぐらいあるのかなぁ?

分解しないで判断するとなると、コネクタ側から覗いて、基板No.171-6111Aと同じタイプならコンデンサか、電解コンデンサかで判断できそう?
バイナリで判断するなら、RAMの使用サイズで判断・・・は確実ではないかな(^-^;

ぽんRev さんのコメント...

追記

ゴルフのデビルズコースはSRAMに256K使ってますね。
ヘッダからサイズ算出なら問題ないかと思いますが、MDで256載ってるものがあること初めて知った(^-^;

ぽんRev さんのコメント...

追記2

なるほど、EEPROM使ってるタイトルで0x0001B2がE8hで0x0001BBが01hなら128Byteってことなのかな。
24C01フルで使ってるなら0x0001BA~2Byte+0x0001B6~2Byteがまんまサイズになってるってことですか。
やっぱりダンプすればある程度予測はできるかな?

ぽんRev さんのコメント...

追記3

あ、そんなこと考えなくても0x0001BA~
0001h=128Byte(EEPROM-24C01?)
03FFh=1024Byte(EEPROM-24C01?orFRAM)
3FFFh=64KByte(SRAM)
FFFFh=256KByte(SRAM)
現状わかるだけでこんな感じですかね?

YoGirl さんのコメント...

EEPROM情報どうもです。
Devil's はなんで32KBytesもあるんだろうと思ったら、リプレイデータで容量食ってるのかな。
1つ問題なのは、EEPROM使用ソフトの場合、ヘッダー情報が狂ってるソフトがある様です。
具体的にはEEPROMにアクセスする為のI/Oがどのアドレスにあるか (0x0001B4と0x0001B8) が実際と異なってるっぽいです。 海外のおおざっぱな資料眺めて知っただけだから真相は不明です。現物で検証する必要がありますね。

ぽんRev さんのコメント...

YoGirlさん

そういえば信長シリーズでは32KBが使われてましたね。

国内でEEPROM使ってるタイトル少なそうですが、ヘッダ情報が違うというのは困りますね(^-^;
確かに現物でチェックしないとわからなそう・・・

YoGirl さんのコメント...

とりあえずSRAMだけ、ヘッダー自動認識して読み書き出来る様になったっぽいです。
一番容量のデカいDevil'sで試して成功しました。

他の手持ちのソフト(ストーカー・大戦略・シャイニング・Sonic3)でも何度かテストしてみようという所です。

ちなみにDevil'sをダンプしてる最中にバイナリー配列を眺めてて気づいたのだけど、
このソフト、無圧縮の巨大スクリーンショットらしきデータをSRAMに保存してるんですね・・・・。
16進数の中に絵が見えます・・・。

ぽんRev さんのコメント...

YoGirlさん

開発お疲れ様です&ありがとうございます(^-^)

実は昨夜寝る前更新されてるの見て速攻で試したかったのですが、残念ながら今日が仕事で手が付けられず(-_-;
今夜からありがたくお試しさせていただきますね~