PrimeGaming(NEOGEO)のRom抽出 Pt1
前置き
実行においては、全て自己責任で行って下さい。
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は(たぶん)復号化とかそう言う関係からすぐには対応できないかもと思います。
UPDATE!
neo-cmcの更新により再暗号化が容易になったので変換可能になりました!
スクラップAさんありがとうございました!!
上記のように、復号済で格納されると対応してるのは
解析前の古い当時物のエミュレーターになるので面倒って感じ
MAMEのソースに全て書いてあるので、プログラミングできる人なら?
けっきょくはCodeMysticさんの気分次第なのですが
同じような復号処理済かつキメラなROMセットもいい所だった
KOF2003みたいにやられるとムリかもしれません。
そこら辺の細かい事情はしげしげさんのブログを読むとよく分かります
そもそも2003はデュオロン&大門とビリーk’紅丸ゲーだったし、あっという間に客が飛んじゃったからなぁ
ちょいちょい大ポカかましたり、コピペミスで間違ってたりします。
何かありましたらコメントで遠慮なく突っ込んで下さい
ディスカッション
コメント一覧
解析、お疲れ様でした。
過去にPrimeGamingにてNeoGeoタイトルが配信されているが、いくつかは抽出できていない模様
幕末浪漫 月華の剣士 Dotemu移植 バッチファイルを自作して変換
ティンクルスタースプライツ Dotemu移植 Steam用のバッチファイルを流用して変換
餓狼伝説SPECIAL Dotemu移植 zipファイル有
THE KING OF FIGHTERS 2000 Dotemu移植 zipファイル有
THE KING OF FIGHTERS 2002 Dotemu移植 zipファイル有
真SAMURAI SPIRITS 覇王丸地獄変 Dotemu移植 zipファイル有
龍虎の拳2 Dotemu移植 zipファイル有
ブレイジングスター Dotemu移植 zipファイル有
パルスター Dotemu移植 zipファイル有
メタルスラッグ2 Dotemu移植 Android用のバッチファイルを流用して変換 or dotemu2mame.jsにて変換
戦国伝承2001 Dotemu移植 zipファイル有
キング・オブ・ザ・モンスターズ Dotemu移植 zipファイル有
超鉄ブリキンガー Dotemu移植 zipファイル有
ショックトルーパーズ・セカンドスカッド Dotemu移植 バッチファイルを自作して変換
ベースボールスターズ2 Dotemu移植 ※dotemu2mame.jsにて変換可能だが、2020年に改変されたデータである為、動作環境は限られる
幕末浪漫第二幕 月華の剣士 月に咲く華、散りゆく花 Code Mystics移植 バッチファイルを自作して変換
メタルスラッグ3 Dotemu移植 dotemu2mame.jsにて変換
サムライスピリッツ零スペシャル Code Mystics移植
ショックトルーパーズ Dotemu移植 バッチファイルを自作して変換
餓狼 MARK OF THE WOLVES Code Mystics移植
The King of Fighters 97 Global Match Code Mystics移植 バッチファイルを自作して変換
THE KING OF FIGHTERS 2003 Code Mystics移植
メタルスラッグ Dotemu移植 Android用のバッチファイルを流用して変換 or dotemu2mame.jsにて変換
メタルスラッグX Dotemu移植 Android用のバッチファイルを流用して変換 or dotemu2mame.jsにて変換
REAL BOUT 餓狼伝説 2: THE NEWCOMERS Dotemu移植 zipファイル有
NeoGeo末期のタイトルは暗号化されているので抽出は難航すると思われる
(mslug3、kof99、:garou、kof2000、kof2002、samsh5sp、mslug4、mslug5)
逆に言えば、それ以前のタイトルは頑張ればなんとかなるかも?
Jackさん、ねぎらいのコメントありがとうございます。
NEOGEO側でromの暗号化が掛かっていても
dotemuのHumbleやGOG(linux/mac)やDMMだと
Zipでぽんと入ってるのもあるようなので
けっきょくはCodeMysticさんの気分と実装次第って感じでしょうかね・・・
romが復号化されまくってると、古いエミュレーターかHBMAMEくらいになっちゃうんで;
■ベースボールスターズ2のcrom正規データ入手方法
ベースボールスターズ2はcromが改変されているのであれば、ネオジオCDから正規データを抽出できるかもしれません。
ラストリゾート、ビューポイントで検証済み。
ラストリゾートと同じcrom容量のベースボールスターズ2はいけると想定してます。
1.ベースボールスターズ2のSPRを抽出してすべて合体させる
2.ロムマスカレードで16bitのエンディアンコンバートを行う
3.2で行ったデータをバイトスワップ
0,2,1,3,4,6,5,7,8,10,9,11,12,14,13,15の順。
ロム版のcromをodd,even統合して配列を見比べるとよい。
4.3のデータをodd,evenで分離する
一番の問題点はネオジオCD版の値段がけっこうすることです。
実はpspのアーケードクラシックスにて、ベースボールスターズ2を起動中にcwccheatのメモリダンプでメモリを抽出すると、ベースボールスターズ2のssbデータがあります。
wh1_bgm_ef.at3という文字列の近くに
00 00 00 00 00 00 00 00 11 11 11 11 11 11 11 11
00 00 00 00 00 00 00 00 89 88 88 88 88 88 88 88
というのがそうです。
ここから400000分カットして、発明の友さんのメタスラ変換ツールでメタスラ1あたりのssbに置き換えて、crom切り取り処理でメタスラ1の4 4から1 1 1 1 にbatファイルの中身を書き換えてから変換するとc1からc4の正規データが手に入ります。
・mslug3、kof99、garou、kof2000
餓狼mowの変換方法がこちらのサイトで紹介されているので、その方法を流用するといける。
・mslug4
しげるさんのブログでやり方が書いてあった気がする。
mromを同じiq_132氏の別ツールで暗号化。
v,cromは発明の友さんのブログにあるMSC_extract_v2.zipに入ってるneo-cmcで暗号化する。
vromのみiq_132氏の別ツールでも可能。
・mslug5
しげるさんのブログでやり方が書いてあった気がする。こちらのサイトでも紹介されていたかな?
iq_132氏のms5pcnv.zipツールでpromを変換。
mromを同じiq_132氏の別ツールで暗号化。
v,cromは発明の友さんのブログにあるMSC_extract_v2.zipに入ってるneo-cmcで暗号化する。
vromのみiq_132氏の別ツールでも可能。
・kof2002、samsh5sp
すでに暗号化されたデータが入手できるので、特に問題なし。
この2つはpromを暗号化する方法がないはずなので、それ以外のデータを暗号化したロムセットで起動することになるでしょう。
サイフォンさんコメントありがとうございます!遅くなってすみません;
ベースボールスターズ2のCROMはNEOGEOCDからも抜けるんですねえ
ちなみにGOG版の古いインストーラーだと改変受けてないのでそのままでいけたりします
もしかするとHumbleとGOGのNEOGEO25周年のだとそのままかも?(未確認)
様々なやり方で抜けるんですなあ。個別に説明しにくいのが悩ましいところですが
貴重な手法ありがとうございます!
サイフォンさん、まとめ記載いただきありがとうございます。
その場のノリで試したらうまくいった餓狼でしたが
類似の派生がけっこういけるんですね
復号済ROMを暗号化にするのちょー面倒くさいんで
まとめてもらうと、やり方が整理できてよい感じです(感謝
サムスピも以前の解析で再暗号化できなくて困ってましたが
今思えば、あれも再暗号化すればいけそうかもしれませんね(あまり気が乗らない)