メタスラコンプリートからのROM抽出
久々の更新です。
色々やっていることはあるのですが、どれも時間がかかるものやブログ記事にするようなネタでもないようなものばかりでした。気付いたら2か月以上更新していなかったので、さすがにそろそろ更新しようかとチャチャっとネタを作ってきました。
というわけで、今回はコレ。PS2版メタルスラッグコンプリートからのROM抽出です。PSP版やwii版もありますが、同じようにできるかどうかは未確認です。
実はコレ私が抽出方法を見つけたわけではなく既に他の方が記事にされていたのですが、ブログサービス終了による移転で古い記事はなくなっているようなので、あらためて情報を残しておこうかと。要はパクり記事って訳ですね!一応、自分で解析しなおしてスクリプト化しているので便利になっているはず、、、
実はコレ私が抽出方法を見つけたわけではなく既に他の方が記事にされていたのですが、ブログサービス終了による移転で古い記事はなくなっているようなので、あらためて情報を残しておこうかと。要はパクり記事って訳ですね!一応、自分で解析しなおしてスクリプト化しているので便利になっているはず、、、
ディスクをエクスプローラーから読んでみると、こんなディレクトリ構成になっています。
PODファイルは、Terminal Reality社独自のアーカイブ形式のようです。このうち、「SLUGROM.POD」にメタスラ1~5(X含む)のROMデータが入っています。メタスラ6については、「MS6_PS2.ELF」のようにPS2の実行ファイルが用意されているので、どうもエミュ移植じゃないっぽい感じがします。6だけNEOGEOじゃないですからね。
podextract.pyの実行が完了すると、romsディレクトリとsaveディレクトリができます。romsディレクトリ配下はこんな感じ。
各romのディレクトリとBIOSのディレクトリが出来ています。1例としてmslugのディレクトリ配下はこんな感じ。
PODファイルは、Terminal Reality社独自のアーカイブ形式のようです。このうち、「SLUGROM.POD」にメタスラ1~5(X含む)のROMデータが入っています。メタスラ6については、「MS6_PS2.ELF」のようにPS2の実行ファイルが用意されているので、どうもエミュ移植じゃないっぽい感じがします。6だけNEOGEOじゃないですからね。
PODファイルですが、すでに解凍方法が確立されています。先人たちに感謝しつつありがたく使わせて頂きます。
ここからpodextract.pyをダウンロードして実行すれば解凍することができます。(pythonの実行環境が必要です。)pythonのインストールや実行は、解説しているところは多いと思いますので割愛します。慣れていないと面倒かもしれないです。
podextract.pyの実行が完了すると、romsディレクトリとsaveディレクトリができます。romsディレクトリ配下はこんな感じ。
各romのディレクトリとBIOSのディレクトリが出来ています。1例としてmslugのディレクトリ配下はこんな感じ。
.binファイルはそのままROMデータになっています。他に、S-ROMを.ltbから、C-ROMを.ssbから抽出します。
抽出はスクリプト化しましたので、下記を実行してみてください。
MSC_extract.zip
(2021/5/8追記) MSC_extract_v2.zip
コメントでメタスラ3,4の抽出方法を教えて頂いたのでスクリプトを更新しました。
ありがとうございました!>mne_mon_ic様
使い方は、romsディレクトリに付属のbat,exe,txtを展開してMSC_extract.batを実行するだけです。
補足など。
補足3.については、追加説明を。いずれもオリジナルのROMはC-ROMが暗号化されており、メタスラコンプリートには復号済みのデータが入っているみたいです。ASPと同じですね。しかしながら、復号済みのデータを比較してみても微妙に一致しません。画像の修正などが入ったのかも。おかげでASPの時と同様に暗号化しなおしてもCRCが一致しません。
ASPキャッシュの形式で比較したものを順番に見ていくと、メタルスラッグ3は下記。0x400000のうち0x380000以降が違う感じです。変換ルールは正しいけど、最後が挿し変わっている感じでしょうか。
次はメタスラ4。
こちらも0x300000のうち0x280000以降が違っています。うーん。
最後にメタスラ5。
4か所x4byteほど違うだけです。いずれもコンプリート側は同じバイトコードの個所でした。なお、メタスラ5については、C-ROM以外も全てDBと一致しません。他も暗号化などが必要なのかも。
(2021/5/8追記) MSC_extract_v2.zip
コメントでメタスラ3,4の抽出方法を教えて頂いたのでスクリプトを更新しました。
ありがとうございました!>mne_mon_ic様
使い方は、romsディレクトリに付属のbat,exe,txtを展開してMSC_extract.batを実行するだけです。
補足など。
- ROMの名称は元から入っているファイル名と近いMAME2010を基準としました。
- メタルスラッグはASPで全て抽出しているので、いったんASPのcache形式に変換してからROMへ変換するスクリプト構成になっています。
メタスラ1,2,Xは抽出成功しましたが、3,4,5はDBとCRCが一致しませんでした。
(2021/5/8追記) メタスラ1,2,3,4,Xは抽出成功。5は中身がbad dump?らしいので抽出していません。
次はメタスラ4。
最後にメタスラ5。
他のPODファイルのゲームについて
podextractのページに書いてあるゲームや、Terminal Reality社が移植を行っているゲームをいくつか購入し試してみました。
でも、試した範囲でROM抽出できそうなのはメタスラくらいでした。
- The King of Fighters Collection: The Orochi Saga
ちゃんと調べていませんが、soundのPODファイルを解凍したところVAG形式(PS用の音声ファイル形式)が入っていましたので、少なくとも音関係はROM形式には戻せなそうです。 - SNK Arcade Classics Vol. 1
同上 - Samurai Shodown Anthology
国内版サムライスピリッツ六番勝負にはPODファイルは入っておらず。たぶん、PODファイルが入っているのは海外のPSP版かな? PS2/wii版は国内外問わずインターフェースが他のネオジオンラインコレクションと同じだったのですが、PSP版は全然違っていたので。










コメント
コメント一覧 (19)
情報ありがとうございます。やはりPSP版も同じなんですね。
src/devices/bus/neogeo/prot_cmc.cpp
/* the S data comes from the end of the C data */
cmc_prot_device::sfix_decrypt
sfix_decryptについては、呼び出し元の関数名を見るに、kof99,kof2000の(今はもう使われていない)関数っぽいですね。使うにはもう少しsrcを読み解く必要がありそうです。
時間があるときにでもちゃんと見てみようと思います。ありがとうございます。
mslug4でもpcm2.cppでsfix_decryptを使っているように見えるので、
予想手段でDIYしてみたとこら、mslug3/mslug4がCRC一致しました。
具体的にいうと
(1) .ltbの0x20000-0x100000をS-ROM復元と同様に処理
(2) 上記の出力結果を、.ssbから復元したC-ROMにマージ
(sfix_decryptと逆方向に代入するとC-ROM末尾512KBが書き換わる)
です。
sfix_decryptの呼び出しについては、ちょっと焦って調べたためか、prot_cmc.cppのファイル内検索で調べてしまっていました。ご指摘の通り、pcm2.cpp含む各所から呼び出されているみたいでした。間違った情報すみません。
mslug5は、確かにbad dumpだという海外の記事が出てきますね。p1のCRCで検索してみるとkawaks等で対応しているmslug5ndというROMのCRCと一致するみたいでした。
mameでも対応していないみたいですし、ご助言通り、スクリプトからはmslug5は外すことにしました。
採用ありがとうございます。バージョンアップしたスクリプトで、メタスラ3/4も正しく作成されました。
なお、あの後mslug5について「ハッシュは合わないが理論上はデコードされる」バイナリは作成できました。lr-fbneoコアには弾かれますが、現状lr-fbalpha2012やmame系コアなら警告が出つつも受け入れてくれます。
mslug5も出来たのはすごいですね。P-ROMやM-ROM等も復号済みのデータっぽかったので暗号化すればいいのかな、と思っていましたが既にASPで抽出済みだったのでやる気が出ませんでした(^^;)
今回もバッドダンプなら頑張ってスクリプトに入れなくてもいいかな…。
SHOROM.PODと言うファイルが出てきましたのでpodextract.pyで展開してみましたけど
\extract SHOROM.POD\roms\sho1に作成されたファイルは以下でした、他のsho2からsho5も同様です
sho1.ltb 66KB
sho1.ppr 1016KB
sho1.rtb 66KB
sho1.stb 66KB
sho1.tta 1KB
[PSP] SNK Arcade Classics Volume 1 (US)と似た感じでNeoGeoROMへの変換はダメっぽいですね
残念
見た感じSNK Arcade Classics Vol. 1と同じ感じです。
以下、SNK Arcade Classics Vol. 1の場合ですが、おそらくサムスピも同じ感じですかね?
ファイルサイズが中途半端なのはPODのアーカイブオプションとしてファイルが圧縮されていることがあるためでした。podextract.pyですと解凍は対応していないです。アーカイブの展開時に、 (compressed)と入っていると圧縮されています。
後は、画像データ(C-ROM)は.ssbがromsディレクトリに無く、SSBSディレクトリのPODを展開すると大量の.ssbファイルが入っていました。おそらくオブジェクトごとにファイル化されているのかなと予想しています。これもmameなどのrom形式にするのは難しそうです。
最後に、音データ(V-ROM,M-ROM)はromsディレクトリに無く、MUSICディレクトリ内のPODにVAGファイル(PS系の音声ファイル)が入っているのでROM形式に変換するのは無理でした。
有難う御座います。
あとはメタルスラッグ5も変換出来るようになれば嬉しいです。
("NEOGEO Arcade Stick PROからのROMバックアップ"の記事に添付のファイルを流用出来ないかと考えましたが、自分には無理でした)
同じようにSteamで販売されているNeoGeoゲームも変換出来るようになりませんかね?
幕末浪漫第二幕 月華の剣士 -月に咲く華、散りゆく花-
餓狼 MARK OF THE WOLVES
ベースボールスターズ2
サムライスピリッツ零スペシャル
ティンクルスタースプライツは下記サイトを参考にして変換出来ました。
ttp://i486.mods.jp/ichild/steam%E7%89%88neogeo%E3%82%BD%E3%83%95%E3%83%88%E8%A7%A3%E6%9E%90
その他のsteamのゲームも私は所有していないのでちょっと分かりません。
ベースボールスターズ2だけは、ティンクルスタースプライツと同じDotEmu開発なので同じ方法で抽出出来る可能性がありそうですね。
steam以外からでも良いのであれば、月華2以外はHumble Bandleで購入するのをおススメします。プログラムのディレクトリにROMデータがそのまま入っています。(少なくとも3年前くらいに購入したときには入ってました)。GoGで売っているのも同じものかもしれません。
https://www.humblebundle.com/store/neogeo-classic-complete-collection
月華2はASPから抽出する他に、ネオジオミニインターナショナル版やVita版からの抽出の話をネット上で見かけたことがありますが私自身試していないので分かりません。
>ベースボールスターズ2だけは、ティンクルスタースプライツと同じDotEmu開発なので同じ方法で抽出出来る可能性がありそうですね。
ティンクルスタースプライツのバッチファイルを参考に以下内容で変換してみましたが、cロム以外ダメでした
romcutter.exe bstars2_game_m68k 041-p1.bin 0 50000
romcutter.exe bstars2_adpcm 041-v1.bin 0 100000
romcutter.exe bstars2_adpcm 041-v2.bin 100000 100000
romcutter.exe bstars2_adpcm 041-v3.bin 200000 50000
answap bstars2_game_sfix 041-s1.bin
copy bstars2_game_z80 041-m1.bin
tileswap bstars2_tiles bstars2_tiles.swp
echo 2ndStage reference..
echo 041-c1.bin : StartAddr=0 Line=0 Size=100000
echo 041-c2.bin : StartAddr=0 Line=1 Size=100000
echo 041-c3.bin : StartAddr=100000 Line=0 Size=100000
echo 041-c4.bin : StartAddr=100000 Line=1 Size=100000
tiles2crom.exe bstars2_tiles.swp
餓狼MoWと月華2は同様にm/vロムは変換出来ましたが、p/cロムはダメでした
ベースボールスターズ2もダメでしたか…。役に立たない情報ですみません。
MoWや月華2もP/Cロムがダメだったんですね。
でも、いずれもファイル自体は特定出来てそうな書き方ですので、今後誰かがやり方を見つけたら抽出できる可能性もあるのかもしれないですね。
Steamで半額セールの時にたまたまNEOGEOのゲームがあるのを知って買ったのを思い出して、変換出来ないか素人なりに調べているところです
"幕末浪漫第二幕 月華の剣士"はCロム以外は以下のバッチファイルで変換?したところCRC値が一致しました
romcutter.exe v1.bin 243-v1.v1 0 400000
romcutter.exe v1.bin 243-v2.v2 400000 400000
romcutter.exe v1.bin 243-v3.v3 800000 400000
romcutter.exe v1.bin 243-v4.v4 C00000 400000
copy m1.bin 243-m1.m1
copy s1.bin 243-s1.s1
romcutter.exe p1.bin 243-pg1.p1 0 100000
romcutter.exe p1.bin 243-pg2.sp2 100000 400000
あとは"c1.bin"と言ういかにもな名前の48MBのファイルからどうやってCロムを取り出すか?
Cロム以外は変換できたとのことで、情報ありがとうございます。
Cロムもサイズ的には同じっぽいので、並べ替えでなんとかなりそうな気もしますね。