FinalBurn NEOのカスタムビルド

ROM抽出,エミュレーター,日常

以前の解析でぶん投げたアレ

サムライスピリッツネオジオコレクションから
抽出したROMがドマイナー環境のHBMAMEでしか動かないって話
どうするかなぁ・・・と悩んでたんですが

上記でHBMAMEのみ対応のsamsho5s29.zipサムライスピリッツ零)を
FinalBurnNEOで遊べるようROMセット追加してみました。

公式からソースコードを取得

ソースコードのダウンロードの仕方

対象ファイルはダウンロードしたソースコードを解凍したら
src\burn\drv\neogeo\d_neogeo.cpp
以下を16630行くらいから追記しました(クローン元のそば)
後はお好きな環境でビルドするだけ

// Samurai Shodown V / Samurai Spirits Zero (hbmame29)

static struct BurnRomInfo samsho5s29RomDesc[] = {
	{ "270h29.p1",  0x800000, 0xd102bd7a, 1 | BRF_ESS | BRF_PRG }, //  0 68K code

	{ "270bs.s1",   0x020000, 0x2ad6048b, 2 | BRF_GRA },           //  1 Text layer tiles

	{ "270hd.c1",  0x800000, 0x9adec562, 3 | BRF_GRA },           //  2 Sprite data
	{ "270hd.c2",  0x800000, 0xac0309e5, 3 | BRF_GRA },           //  3
	{ "270hd.c3",  0x800000, 0x82db9dae, 3 | BRF_GRA },           //  4
	{ "270hd.c4",  0x800000, 0xf8041153, 3 | BRF_GRA },           //  5
	{ "270hd.c5",  0x800000, 0xe689d62d, 3 | BRF_GRA },           //  6
	{ "270hd.c6",  0x800000, 0xa993bdcf, 3 | BRF_GRA },           //  7
	{ "270hd.c7",  0x800000, 0x707d56a0, 3 | BRF_GRA },           //  8
	{ "270hd.c8",  0x800000, 0xf5903adc, 3 | BRF_GRA },           //  9

	{ "270x.m1",  0x080000, 0x5218a10a, 4 | BRF_ESS | BRF_PRG }, // 10 Z80 code

	{ "270bs.v1",   0x800000, 0x809c7617, 5 | BRF_SND },           // 11 Sound data
	{ "270bs.v2",   0x800000, 0x42671607, 5 | BRF_SND },           // 12
};

STDROMPICKEXT(samsho5s29, samsho5s29, neogeo)
STD_ROM_FN(samsho5s29)

struct BurnDriver BurnDrvsamsho5s29 = {
	"samsho5s29", "samsho5", "neogeo", NULL, "2003",
	"Samurai Shodown V / Samurai Spirits Zero  (Unknown Hack 2017-0-16)\0", NULL, "hack", "Neo Geo MVS",
	L"Samurai Shodown V\0\u30B5\u30E0\u30E9\u30A4\u30B9\u30D4\u30EA\u30C3\u30C4\u96F6 (Unknown Hack 2017-0-16)\0", NULL, NULL, NULL,
	BDF_GAME_WORKING | BDF_CLONE | BDF_HACK, 2, HARDWARE_PREFIX_CARTRIDGE | HARDWARE_SNK_NEOGEO, GBF_VSFIGHT, FBF_SAMSHO,
	NULL, samsho5s29RomInfo, samsho5s29RomName, NULL, NULL, NULL, NULL, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	0x1000,	304, 224, 4, 3
};
// Samurai Shodown V / Samurai Spirits Zero (hbmame29)

static struct BurnRomInfo samsho5s29RomDesc[] = {
	{ "270h29.p1",  0x800000, 0xd102bd7a, 1 | BRF_ESS | BRF_PRG }, //  0 68K code

	{ "270bs.s1",   0x020000, 0x2ad6048b, 2 | BRF_GRA },           //  1 Text layer tiles

	{ "270hd.c1",  0x800000, 0x9adec562, 3 | BRF_GRA },           //  2 Sprite data
	{ "270hd.c2",  0x800000, 0xac0309e5, 3 | BRF_GRA },           //  3
	{ "270hd.c3",  0x800000, 0x82db9dae, 3 | BRF_GRA },           //  4
	{ "270hd.c4",  0x800000, 0xf8041153, 3 | BRF_GRA },           //  5
	{ "270hd.c5",  0x800000, 0xe689d62d, 3 | BRF_GRA },           //  6
	{ "270hd.c6",  0x800000, 0xa993bdcf, 3 | BRF_GRA },           //  7
	{ "270hd.c7",  0x800000, 0x707d56a0, 3 | BRF_GRA },           //  8
	{ "270hd.c8",  0x800000, 0xf5903adc, 3 | BRF_GRA },           //  9

	{ "270x.m1",  0x080000, 0x5218a10a, 4 | BRF_ESS | BRF_PRG }, // 10 Z80 code

	{ "270bs.v1",   0x800000, 0x809c7617, 5 | BRF_SND },           // 11 Sound data
	{ "270bs.v2",   0x800000, 0x42671607, 5 | BRF_SND },           // 12
};

STDROMPICKEXT(samsho5s29, samsho5s29, neogeo)
STD_ROM_FN(samsho5s29)

struct BurnDriver BurnDrvsamsho5s29 = {
	"samsho5s29", "samsho5", "neogeo", NULL, "2003",
	"Samurai Shodown V / Samurai Spirits Zero  (Unknown Hack 2017-0-16)\0", NULL, "hack", "Neo Geo MVS",
	L"Samurai Shodown V\0\u30B5\u30E0\u30E9\u30A4\u30B9\u30D4\u30EA\u30C3\u30C4\u96F6 (Unknown Hack 2017-0-16)\0", NULL, NULL, NULL,
	BDF_GAME_WORKING | BDF_CLONE | BDF_HACK, 2, HARDWARE_PREFIX_CARTRIDGE | HARDWARE_SNK_NEOGEO, GBF_VSFIGHT, FBF_SAMSHO,
	NULL, samsho5s29RomInfo, samsho5s29RomName, NULL, NULL, NULL, NULL, neogeoInputInfo, neogeoDIPInfo,
	NeoInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
	0x1000,	304, 224, 4, 3
};

ファイル名とCRC合わせただけのお粗末なモノです。
ソースコピペするとWordPressの自動変換でエラー出るので
コピペできるコード表記に修正しました(2022年11月21日)

ね、かんたんでしょ?

ちなみに自分はぜんぜんわからない、ふんいきでROMを追加してるってヤツなので
盛大に間違えてるかもしれません。動作に問題はないように見えるのでOK

監査も問題なく通過するので、正常ROM扱いになります。

問題なくsamsho5s29.zipを読み込めるようになりました

\projectfiles内に各バージョンのプロジェクトファイルがあるので
使ってる環境に合わせて選んでビルドします

VS2017の自分はvisualstudio-2015で
開いてからプロジェクトを自動更新してそのまま行けました

WindowsでVisual StudioだとPerlがねえぞって怒られるので
Strawberry Perlをインストールしてパスが通ってるとOKかと
他にも必要とエラーが出たら入れてください。

他にも

上記で抽出したARCADE GAME SERIES 3-in-1 PackをCRC合わせてみました

通常ビルドのFBNEOでムリヤリ実行すると

galaga was found
The following ROMs are invalid:
? graphics ROM prom-2.5c has a CRC of 0D968558 (correct is 77245B66).

こういう風にエラーのCRCを教えてきて
それでも実行する?って聞いてきます。

その表示をメモ帳などに丸ごとコピペしておきます
FBNeoのソースコード解凍先のFBNeo-master\src\burn\drvで
エラーの出るROM名(galagaとか)で検索

ヒットしたファイル (FBNeo-master\src\burn\drv\pre90s\d_galaga.cpp等)を開き
ファイル内をprom-2.5cで検索、CRCを抽出したファイルにあわせて書き換えます
(0x77245B66→0x0D968558)、あとはディグダグも同様に行いビルドするだけ。
なぜかパックマンはそのままでOKでした。

Steamなどからの抽出でロゴや演出などに微妙な改変がされていて
ゲームはむりやり実行できるけど、CRCエラー出るようなROMは
自前で追加かCRCを修正してしまえば、扱いやすくなると思います。
(本来は追加なんでしょうけど、本家基板から吸い出しする機会はないので・・・)

FBNEOで動くならRetroArchのコアにも同様に適応できますし
(ただしめちゃくちゃ面倒くさいです。わざとわかりにくくしてるの?って位に)
Raspberry Piなら単体版が作れるので困る事がなくなるでしょう

ちなみに本家もハックROMが追加されまくってますね