2012年8月14日火曜日

メガドライブでファミコン(or etc.)のROMを焼く

今日現在で既にver.0.12が公開されてますが、先月10日(11日にFix版)に公開されたSweet Rammyのバージョン0.11で以下の更新がありました。

・FRAMの認識(判別)

・v0.10で搭載された直結したFlashROMの書き込み廃止(一時見送り?)

・FlashROM書き込みパラメータ変更

・・・もたもたしてて書く順番が逆になっちゃいましたが(ぉ

8bitFlashROMが1個づつでも書き込めるようになったことで、ROMライタとして使用する場合にとても便利になりました(^-^)

メガドライブ+Sweet Rammy+RammyAVR(低速ケーブルも可w)、それとFlashROMカセットを用意する事により、例えば以下のハードウェアのROM等を書き込めるようになります。

(カッコ内は使えるデバイスのビット幅を表してます)

・メガドライブ(16bit)

・マスターシステム(8bit)

・ゲームギア(8bit)

・ファミコン(8bit)

・スーパーファミコン(8bit、16bit)

・ゲームボーイ(8bit)

・PCエンジン(8bit)

・NEOGEO(16bit)

・PC用BIOS(8bit)

・XBOX用BIOS(8bit)

・アーケード基板用ROM(8bit、16bit)

・その他、諸々のFlash(5V)を使用できるハード

などなど、とにかく8bit&16bit幅の32Mbitまでのデータを書き込むことができてしまいますw

(8bit-32Mbit容量の場合は前後16Mbitづつ分ける必要がありますが

使えるFlashROMのタイプは29F系(AM29F040Bなど)と49F系(AT49F040Bなど)に限られますが、5VのFlashROMを使用するタイプのハードであれば大抵のものは動かせるんじゃないかな。

注!:同系でも使用できないものがあるかもしれません

一応、3VのFlashROMも書けなくはないと思いますが、レギュレータ咬ませたり全てのバスに対して抵抗入れたりしなければいけなくて面倒なので、今回は対象外、ということに。

で、今回の目玉である8bitデバイス一つに対して書き込む例として、Wiiのカービィ20thから吸い出したファミコンの「星のカービィ 夢の泉の物語」をメガドライブで作ってみます。

(例なので、Kazzoで・・・というのはとりあえず置いといてw)

あ、ベースとなるファミコンのMMC3カセット加工部分はここでは端折りますので。

では順番に。

【以下の書き込み方法はSweet Rammy ver.0.12で確認済み】

PICT7442

まず先入知識として、Sweet RammyでROM領域に書き込めるカートリッジは主に上のタイプ。

左から、SRAM(8bit×2)カートリッジ、FlashROM(16bit×1)カートリッジ、残り2個がFlashROM(8bit×2)カートリッジのDIP版とPLCC版。

今回は違うハードの8bitのデータを書き込むので、取り外しても内容の消えないFlashROM(8bit×2)カートリッジを使う。

データを書き込むのはデバイス1個で良いのですが、メガドライブ自体が16bitマシンなので、FlashROMは2個、できれば同じ型番のROMを載せておく事。

1個だとデータバスが切れてMDが暴走しますw

(できなくは無いけどもね)

・書き込み用のベースカセットを作る

製作が簡単な、8bitデバイスが取り付けられるカセットを用意する。

PICT7524

上写真以外にもスーパーサンダーブレードと北斗の拳があるけど、16bitデバイス1個仕様と混在してるので、購入する際に確認しなければいけないかな。

上のスーパーリーグと尾崎直道のスーパーマスターズは今のところ100%の確立で8bitデバイス2個仕様基板です。

md_evenodd0 md_evenodd1

写真見てもらえば作り方はわかると思います。

上のROMがodd、下がevenになります。

A19への配線は、8Mbitカセット対応の為なので、4Mbit(2Mbit×2個)までしか使わないのであれば配線は不要です。

基板裏の2箇所をパターンカット→32pinソケット付ける→配線、の順でやれば出来上がり。

今回はFlashROMはAMDのAM29F040B(4Mbit=512KByte)を2個使う事にする。

向きを間違えないようにソケットに挿しておきます。

・データをバイナリ形式からテキスト形式へ変換

通常ゲームのデータというのはバイナリ形式で保存されてます。

Sweet Rammy(ver.0.12)ではテキストで送受信するので、何らかの方法で変換しなければいけません。

ver.0.12のアーカイブにはコマンドライン用変換ツールが入っているので今回はこのツールを使います。

kirbyprgchr

ROMの分割はわいわいさんとこここの下のほうにあるNESplitを使うと楽ですかね。

今回はバイナリからテキストなので、使うのはBinToHex.exeのみ。

分割したprgとchrファイルをそれぞれ変換したらデータの準備は完了です。

・メガドライブと通信

RammyAVRとSweet Rammyカセットの作り方、メガドライブ本体の改造は端折ります。

YoGirlさんとこや配布されてるSweet Rammyのアーカイブ内のReadme見るか、過去のBlog記事を参照してください(^-^;

RammyAVRをメガドライブとPCに繋げ、Sweet Rammyを起動する。

通信ソフトはWin付属のハイパーターミナルでも良いですが、私はTera Termを使ってます。

Tera Termはマクロが使えるから自分なりに環境作れて便利かと。

kirby0

Tera Term立ち上げてRammyと通信できてる事を確認。

(上ではHD.000000コマンド打ってヘッダ情報表示してます)

PICT7530

HALTスイッチをONしてMPU68000を一時停止させ、先ほど作った8bit×2個仕様Flashカートリッジと交換する。

(因みに、Rammyはリージョン制限無いのでUSAモードでも動きます)

そこまでできたら、HALTスイッチをOFFにして、初期設定をするのでターミナルからコマンドを打ちます。

各コマンド入力後にEnterキー押す必要は無いです。

PT.00029F

PB.000008

P+.000002

上の3つの意味を書くと、まずFlashROM指定にして、書き込み幅は8bitで、読み書きは1Byteおきにアクセスする、となります。

なんで1Byteおきにアクセスするかっていうと、8bitデバイス2個仕様基板の場合、odd、even、odd、even・・・とデータが交互に読み書きされるから。

oddだけ使う時は偶数のみ、evenだけ使う時は奇数のみ、ってことね。

で、先ほど作ったkirbyprg.txtをoddへ書き込むので、まずodd側のFlashROMをフォーマットします。

EL.000000

このコマンドで、odd側FlashROMがフォーマットされました。

AM29F040Bの場合は5秒程度でフォーマットが終わり、OKが表示されます。

もしOKが出なかったりしたらカセットの製作がおかしかったりするかもなので見直しましょう。

次に書き込みする先頭アドレスを指定します。

PW.000000

このコマンドで、アドレス0x000000hから書き込めるようになりました。

フォーマットが終わったら、カービィのPRGROMデータを実際に書き込みます。

カービィのPRGサイズは512KByteなので、16進数で512KByte分を送信します。

WD.080000(この後に送信ファイルを指定)

kirby1 kirby2

初期化コマンドからの画面状況は上のような感じになります。

ファイルの選択はWD.080000入力した後で、ファイルタブからファイル送信を選びます。

512KByte送信するのに掛かる時間は5分程度で、右は転送が完了したところです。

あ、転送サイズの指定はバイナリ時のサイズを指定するように。

これで、カービィのPRGROMの書き込みが終わりました。

次にeven側のFlashROMへCHRROMのデータを書き込みします。

初期設定はできているので、フォーマットからのコマンドを送るだけです。

EL.000001

このコマンドを送ると、even側のFlashROMがフォーマットされます。

フォーマット後、書き込む先頭アドレスを指定する。

PW.000001

書き込み先頭アドレスを0x000001hからに指定します。

後はPRGROMと同じように、kirbychr.txtを送るだけ。

kirby3 kirby4

以上でFlashROMの書き込みは完了です。

今回の例ではフォーマット分けて行っていますが、初期設定からFlashROM2個纏めてフォーマットしても全然構いませんし、even側だけ書き込む、といった事でも問題はありません。

書き込むアドレスも初期化時にPW.000000としても構いませんし、書き込むアドレス&容量さえ間違わなければ、どこにでも書き込み可能。

要はFlashROMに書き込む設定ができるなら、コマンドの順番はさほど気にしなくても良いってことです(笑

・ファミコン実機で動作確認

それでは、メガドライブで書き込んだカービィのROMが正常に動くかファミコン実機で確認してみましょう。

PICT7532

ファミコンのカービィはMMC3-CHRROMタイプ、実験用で昔作っていたソケット版カセットで動作させました。

うん、何の問題も無く動きました(^-^)

.

といった感じで、メガドライブ+Sweet Rammyを使ったFlashROM書き込みの一連の流れを書いてみました。

ファミコンだけでなく、上の方で書いたさまざまなROMデータも同じように書き込むことができてしまいます。

ま、製作するハードの知識はある程度必要ですが・・・

今回のカービィは実際にはKazzoで書き込めるわけですが、Kazzoが扱えない大容量のROMや16bitデバイスを書き込むのには大変便利なのではないかと思います。

・書き込めるデバイスが限られる

・速度面でROMライタより劣る

・(現状は)テキスト送受信である

といった事を苦にされる人もいるかもしれませんが、そこはそれ、前にも書いたけどゲーム機でココまでできるということを考えたら得るものの方が大きいでしょう。

メガドライブは今なら安く手に入るし、書き込むための環境作りもさほど難しくないと思いますので、興味のある人は是非トライしてみましょう~(^-^)

・・・そもそもROM焼く時点で何らかの工作は必須なわけだから、Rammyハード作るのはワケナイハズなのだ~(笑

2 件のコメント:

YoGirl さんのコメント...

どうもです。 そういや触れてなかったけど、JP/EU/USのいずれにも対応してます。
EUはPALだけど、何もしなくてもPALドライブだと勝手にPAL出力になるみたいです。
(Pringles Gameを公開した時にどっかの外国人が確認済み)

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

あ、PALも普通に出力されるのですね。
てっきりNTSCだけかと思ってました(笑