~はじめに~
Wii用公式エミュレータ環境『バーチャルコンソール』のソフトウェアから
NESやSNESのROMイメージを抽出する技法は各所で解説されていますが、
なぜかNEOGEOだけどこも手つかずだったので解析してみました。
~なぜ「ティンクルスタースプライツ」なのか?~
ぶっちゃけるとまだ他のゲームを検証できていないから。
※「わくわく7」も同じフォーマットでした。
さらに言うとメタルスラッグXは挑んだけどよく分からなかったから。
あと、ティンクルスタースプライツはNEOGEO史上最高のゲームだから。
~あらかじめやっておくこと~
1.Wii本体にスマブラハックなどでHomeBrewChannelをインストール。
2.Wii本体にBootMiiをインストールしてNANDをSDカードにダンプ。
3.showmiiwadsの”Tools→Extract BootMii Dump”でNAND選択&展開。
4.”Options→Change NAND Backup path”で、展開で生成された
nand-extracteda フォルダを選択。
5.”View→ShowMiiNand”を選択して一覧を表示する。
6.”Options→Language→Japanese”を選択して日本語タイトルを表示。
7.ティンクルスタースプライツのファイル名とパスを確認。
8.フォルダ \nand-extracteda\title\パス名\ファイル名(拡張子なし)\content\
をエクスプローラから開き、その中からROMっぽいものを探す。
※ティンクルスタースプライツの場合は 00000007.app (8,862KB)がアタリ。
9.ShowMiiNandの”Tools→Unpack U8 Archive”で 00000007.app を展開。
これでフォルダ 00000007_app_OUT が作られ、その中にある”game.bin.z”が
お目当てのブツです(と言ってもこれでやっと「スタートライン」なわけですが)。
~”game.bin.z”のヘッダを確認~
ティンクルスタースプライツは「出来る」ということが判明していますが、
“game.bin.z”をバイナリエディタに放り込んで先頭が”ROM0″なら、
下記の方法での解析が可能です。
ちなみに「メタルスラッグX」と「パルスター」はNG、「わくわく7」はOKでした。
~”game.bin.z”をzlibで展開~
“CR00″のヘッダでなければ純粋なzlibアーカイブなのでカンタンに展開できます。
とりあえず展開プログラムzlib_decを作ったので、コマンドプロンプトから
>zlib_dec game.bin.z game.bin
こんな感じで生データが手に入ります。
~”game.bin”を解析~
拙作のROM Masqueradeでgame.binをロードして解析およびROM分割します。
ヘッダは64バイトあり、その中で重要な内容は以下の通り。
アドレス | 型式 | 内容 |
00000000 | 文字列 | “ROM0” |
0000000C | 4バイト | 00020000 = S_ROMのサイズ |
00000010 | 4バイト | 00C00000 = C_ROMのサイズ |
00000014 | 4バイト | 00600000 = V_ROMのサイズ |
00000018 | 4バイト | 00000000 = 不明 |
0000001C | 4バイト | 00020000 = BIOS (neo-geo.rom) |
00000020 | 4バイト | 00200000 = P_ROMのサイズ |
00000024 | 4バイト | 00020000 = M_ROMのサイズ |
通常はmamedb.comのROM情報を見ながらCRCが合うように片っ端から
アタックしますが、VCのP_ROMとC_ROMは色々と手が加えられているらしく、
CRC情報が一致しないため、勘だけを頼りに切り出します。
…と以前は書いていたのですが2014/03/08に公開した下記ツールで大まかな
エリアは特定できるようになりました。
Download : wiineostat.zip
『Wii Neo Stat』にgame.binを読み込ませるとエリアレベルで各ROMの配分が判明します。
これをmamedb.com : Twinkle Star Spritesを参考に切り出し範囲を特定します。
結果、ROM Masqueradeでgame.binを開き、次の通りに切り出すことで
プレイ可能なROMを生成出来ました。
※下記リストはROM Masquerade v1.30公開時に修正しました。
開始アドレス | 終端アドレス | ファイル名 |
00000040 | 00020040 | 224-s1.bin |
00020040 | 00820040 | 224-c1.bin (Stripe Mode : Odd) |
00020040 | 00820040 | 224-c2.bin (Stripe Mode : Even) |
00820040 | 00A20040 | 224-c3.bin (Stripe Mode : Odd) |
00820040 | 00A20040 | 224-c4.bin (Stripe Mode : Even) |
00C20040 | 01020040 | 224-v1.bin |
01020040 | 01220040 | 224-v2.bin |
01220040 | 01240040 | neo-geo.rom *incomplete |
01240040 | 01440040 | 224-p1.bin (Endian Conv 16bit + Swap 1stHalf & 2ndHalf) |
01440040 | 01460040 | 224-m1.bin |
C_ROMはOdd/Even(奇数・偶数列分解)をチェックした状態で[Go Analyze!]を実行し、
P_ROMは[Go Analyze!]を実行した後で、[Endian Conv 16bit]と[Swap 1stHalf&2ndHalf]
を実行してROMレイアウトを修正してやる必要があるので注意して下さい。
これで抽出できた各ROMをまとめて twinspri.zip に圧縮すれば…
うむ、素晴らしい。
なお、VC版ティンクルスタースプライツにはLO-ROMなどPC用NEOGEOエミュレータが
必要とするBIOSイメージが含まれていないため、実機もしくはAndroid用の
NEOGEO移植シリーズから吸い出す必要があります。
詳しくは下記コンテンツをご覧下さい。
技術テキスト(text) – アーケードROMをダンプする
技術テキスト(text) – Android用NEOGEOソフト解析
あと、ティンクルスタースプライツ以外のNEOGEOソフトの変換方法などは下記をご参照下さい。
ROM Extract Wiki
(WiiVCシリーズだと「ラギ」と「わくわく7」について記載しています)