PrimeGaming(NEOGEO)のRom抽出 Pt1

ROM抽出,エミュレーターADK,FinalBurnNEO,MAME,neogeo,PrimeGame,rom抽出,SNK,エミュレーター

前置き

実行においては、全て自己責任で行って下さい。

Amazon Prime Gamingで配布されたROM抽出です
Amazon Prime Video(AD)に加入すれば利用可能。規約

13日?更新分のクロスソードとゴーストパイロットも抽出できました。
グダグダだった龍虎外伝も清書して再掲載しています。

なお、実行に必要なromcutterやtile2cromなどは

上記のAndroidアプリからRomを抽出する
記事内に全てありますので、各自ダウンロードして下さい。

抽出元のファイルは
インストール先ドライブ\Amazon Games\Library\(ゲーム名)\Data\romにあります

バッチ化やPythonへの移植、他改造はご自身で行うようにお願いいたします。

Art of Fighting 龍虎の拳 外伝(再掲)

龍虎外伝 抽出

p1.bin
address 00000115 02 => 00
romcutter.exe p1.bin 096-p1.p1 0 100000
romcutter.exe p1.bin 096-p2.sp2 100000 200000

m1.bin
rename m1.bin => 096-m1.m1

s2.bin 
rename s2.bin => 096-s1.s1

sp_j4.bin
rename japan-j3.bin(BIOS) #Japan MVS (J3, alt)

v1.bin
romcutter.exe v1.bin 096-v1.v1 0 200000
romcutter.exe v1.bin 096-v2.v2 200000 200000
romcutter.exe v1.bin 096-v3.v3 400000 200000

c1.bin
tiles2crom.exe c1.bin
096-c1.c1 StartAddr:0 Odd_or_Even:0 SplitSize:400000
096-c2.c2 StartAddr:0 Odd_or_Even:1 SplitSize:400000
096-c3.c3 StartAddr:400000 Odd_or_Even:0 SplitSize:400000
096-c4.c4 StartAddr:400000 Odd_or_Even:1 SplitSize:400000
096-c5.c5 StartAddr:800000 Odd_or_Even:0 SplitSize:400000
096-c6.c6 StartAddr:800000 Odd_or_Even:1 SplitSize:400000
096-c7.c7 StartAddr:C00000 Odd_or_Even:0 SplitSize:200000
096-c8.c8 StartAddr:C00000 Odd_or_Even:1 SplitSize:200000

Ninja Commando

ニンジャコマンドー抽出 ncommand.zip

p1.bin
address 00000115 02 => 00
rename p1.bin => 050-p1.p1

m1.bin
romcutter m1.bin 050-m1.m1 0 00020000
↓
050-m1.m1
00010000-0001F335:FF
or
CRC_MOD
0001FFFB => B4:3B:ED:01

s2.bin
rename s2.bin => 050-s1.s1

v1.bin
romcutter.exe v1.bin 050-v1.v1 0 100000
romcutter.exe v1.bin 050-v2.v2 100000 80000

c1.bin
tiles2crom.exe c1.bin
050-c1.c1 StartAddr:0 Odd_or_Even:0 SplitSize:100000
050-c2.c2 StartAddr:0 Odd_or_Even:1 SplitSize:100000
050-c3.c3 StartAddr:100000 Odd_or_Even:0 SplitSize:100000
050-c4.c4 StartAddr:100000 Odd_or_Even:1 SplitSize:100000

050-m1.m1 Fill

元ファイルを書き換えるのでバックアップを取って下さい。

Ubuntu(WSL)
dd if=/dev/zero bs=1 count=$((0x1F335 - 0x10000 + 1)) | tr '\000' '\377' | dd conv=notrunc of=050-m1.m1 bs=1 seek=$((0x10000))

ターミナルから実行。

Windows (Powershell)
$fileContent = [System.IO.File]::ReadAllBytes("050-m1.m1")

for ($i = 0x10000; $i -le 0x1F335; $i++) {
    $fileContent[$i] = 0xFF
}

[System.IO.File]::WriteAllBytes("050-m1.m1", $fileContent)

任意名.ps1で作業フォルダに保存、作業フォルダから(Powershellで)実行。

Ghost Pilots

ゴーストパイロット抽出 gpilots.zip

p1.bin
address 00000115 02 => 00

romcutter.exe p1.bin 020-p1.p1 0 80000
romcutter.exe p1.bin 020-p2.p2 80000 20000

s2.bin
rename s2.bin => 020-s1.s1

m1.bin
romcutter m1.bin 020-m1.m1 0 20000

v1.bin
romcutter v1.bin 020-v11.v11 0 100000
romcutter v1.bin 020-v12.v12 100000 80000
romcutter v1.bin 020-v21.v21 180000 80000

c1.bin
tiles2crom.exe c1.bin
020-c1.c1 StartAddr:0 Odd_or_Even:0 SplitSize:100000
020-c2.c2 StartAddr:0 Odd_or_Even:1 SplitSize:100000
020-c3.c3 StartAddr:100000 Odd_or_Even:0 SplitSize:100000
020-c4.c4 StartAddr:100000 Odd_or_Even:1 SplitSize:100000

Crossed Swords

クロスソード抽出 crsword.zip

p1.bin
address 00000115 02 => 00
romcutter.exe p1.bin 037-p1.p1 0 80000

s2.bin
rename s2.bin => 037-s1.s1

m1.bin
romcutter m1.bin 037-m1.m1 0 20000
↓
037-m1.m1
00010000-0001E170:FF
or
CRC_MOD
0001FFFB => 16:FF:98:1C

v1.bin
rename 037-v1.v1

c1.bin
tiles2crom.exe c1.bin
037-c1.c1 StartAddr:0 Odd_or_Even:0 SplitSize:100000
037-c2.c2 StartAddr:0 Odd_or_Even:1 SplitSize:100000
037-c3.c3 StartAddr:100000 Odd_or_Even:0 SplitSize:100000
037-c4.c4 StartAddr:100000 Odd_or_Even:1 SplitSize:100000

037-m1.m1 Fill

元ファイルを書き換えるのでバックアップを取って下さい。

Ubuntu(WSL)
dd if=/dev/zero bs=1 count=$((0x1E170 - 0x10000 + 1)) | tr '\000' '\377' | dd conv=notrunc of=037-m1.m1 bs=1 seek=$((0x10000))

ターミナルから実行。

Windows (Powershell)
$fileContent = [System.IO.File]::ReadAllBytes("037-m1.m1")

for ($i = 0x10000; $i -le 0x1E170; $i++) {
    $fileContent[$i] = 0xFF
}

[System.IO.File]::WriteAllBytes("037-m1.m1", $fileContent)

任意名.ps1で作業フォルダに保存、作業フォルダから(Powershellで)実行。

動作確認

ADKのM1について

ADKのm1は、同一データが2重になっているので
後半部分をFFで埋めてあげる必要があるようです。

WSLのDDやPowershellで行えるようにしています
タイトル個別に書いてるけど、0x10000から0X1FFFFまで
全部ffで埋めちゃえば、(おそらく)汎用できるので楽かも。

最悪、バイナリエディタを手動でFキー連打とか
敷き詰めとか範囲選択からのコピペでも可能です。

顔文字で遊んでて面白いなあ・・・と思ったら
ヘッダが2回出てきて、あれ?ダブってる!と気づきました・・・
FFで埋めるかCRCを書き換えるかのどっちかですね。

M1 (sound driver) rom information:
. Many 'M1’ roms contain mirrored data (64k mirrored or 128k mirrored).
. Found on several early sets (ID 0001 ~ 0045) and on the last sets (ID 0267 ~ 0272).
. This caused some confusion and incorrect rom sizes.
. Minimum 'M1’ size is 1mbit, maximum size 4mbit.
. The remaining 64k 'M1’ are marked BAD_DUMP

MAMEのソースコード眺めてたら
M1のダブりデータについて言及がありました
でも45までって書いてあるのでよくわからんですね。

次回更新の話

メタルスラッグ4は(たぶん)復号化とかそう言う関係から
すぐには対応できないかもと思います。



上記のように、復号済で格納されると対応してるのは
解析前の古い当時物のエミュレーターになるので面倒って感じ
MAMEのソースに全て書いてあるので、プログラミングできる人なら?

けっきょくはCodeMysticさんの気分次第なのですが
同じような復号処理済かつキメラなROMセットもいい所だった
KOF2003みたいにやられるとムリかもしれません。
そこら辺の細かい事情はしげしげさんのブログを読むとよく分かります
そもそも2003はデュオロン&大門とビリーk’紅丸ゲーだったし、あっという間に客が飛んじゃったからなぁ

ちょいちょい大ポカかましたり、コピペミスで間違ってたりします。
何かありましたらコメントで遠慮なく突っ込んで下さい