リソースとして格納されているのが確定します。「最もファイルサイズの小さいROM」から絞り込みます。その理由はとっても単純、ブルートフォースCRC検出には時間がかかるからです。i7-4770Sですら検出まで2分10秒。これが一発でヒットすれば良いものの、長期戦になると相当ツライ。あれば、わずか2秒程度で発見できます。探したいROMファイルに関する以下の3要素を入力してサーチします。Masqueradeは16進数表記で入力します。22j8-0.158であれば、10進数表記で1024、16進数だと400です。厳密には”CRC32′′の値を入力します。mamedb.comからコピペで良いでしょう。22j8-0.158であれば、c368440fを入力します。・ステップ幅CRCの値を何バイトごとに探すかを16進数で指定します。は”4′′でヒット、8ならその倍速なので8→4→2..の順でサーチすると良いでしょう。Attack!」を実行し、見つからなければ別のROMを...と繰り返します。Masqueradeだけでは解析できない、ということになります。(その場合もエミュレータでメモリダンプを保存してそれを解析すれば大抵OKです)。値を元にサーチすると以下の結果が得られます。一致、という意味ですが、多くのROMイメージは「実アドレスとレイアウトを一致」させる傾向にあるので、この近辺に他のROMが密集している可能性があるのです。Attack!」で即座に次のROMが見つかります。逆方向(下から上)に調べたい場合は、1つ前のROMサイズをDetectCRCから引くとOKです。普通ならとても時間がかかるはずが一瞬でヒットします。(サーチ1回目の瞬間に該当するので、まあ当然ですね)。このままサーチしていくと以下のような結果が得られます。“22j4-0.139”に関しては「CRCが一致しないため、理論上の位置」を表記しています。001F97D0)そして上記範囲を切り出して圧縮したものを”nkdodge.zip”に圧縮してMAMEに読ませても、ブラックアウトしたまま起動しません。”22j4-0.139”はそのまま範囲を切り出すだけではいけない、ということです。10000′′...要はメインCPU用プログラムで、開始アドレス10000、ということのようです。他にmaincpuで開始アドレス0のものはありません。ここで次のアプローチです。エンディアン変換などの機能があり、これらで範囲をいじるとCRCが一致する場合もあります。この判断もmamedb.comの情報で分かることが多いです。0以外の値でスタートしている場合は『そのまま切り出してもまず動かない』です。DumpFile]で”test.bin”などのファイルに書き出した後、バイナリエディタでチェックすると0000-7FFFまではちゃんとしたデータなのに、8000-FFFFが全て0000000....という状況が確認できます。64キロバイトのROMの後半32キロバイトを全部000..なんてROMが高価な当時にこんな無駄な設計なわけがないので、そもそも理論上の位置が違うと考えます。そこで、後半32キロバイトがハズレなら後ろに32キロバイトずらします。001F17D0この直上は0000000....だし、アドレス001F17D0から64キロバイトを切り出すと無駄なデータもなさそうだしバッチリ!!...なんてこともなく、ここを保存してもブラックアウトしたままです。ここで定石パターンは、次の2通りです。bottom.binを切り出して、これをさらに上下逆に連結します。&2ndHalf』ボタンを実装しました。この1ボタンでダンプ範囲のデータを前半と後半で真ん中でぶった切って上下入れ替えて連結します。先にネタバレしますが、これが正解(CRC:AA674FD8で一致)です。ちなみにAndroid版メタルスラッグもこれと同じP_ROM構造です。奇数バイトと偶数バイトに別々のROMが割り当てられている場合があります。※奇数列を取り出したい場合。「熱血高校ドッジボール部」には採用されていませんが、NEOGEOのC_ROMなどにこのデータパターンが見られます。拙作のROMCutterとバッチファイルの組み合わせでさらに簡略化できます。本来このツールは、Android版NEOGEOソフト解析に作ったものですが転用しました。内容は以下のような感じ(ファイル名は”nkdodge.bat”などで保存)。ここまで今回の作業内容をそのままコマンド化した内容ですが、これで切り出したファイル一式を“nkdodge.zip”に圧縮してMAMEなどに読ませばプレイ可能です。他にも抽出可能なタイトルがあるかもしれませんね。コメントをキャンセルメールアドレスが公開されることはありません。