FinalBurnNeoのビルド M72巻戻し

エミュレーター,日常FinalBurnNEO,IREM,M72,アイレム,エミュレーター,ネタ

IREMのM72 MCUを回避

今までも旧版に置換とかやってましたが、今回はきちんと書き換えています。
そのため他環境ビルドでも通ると思います。たぶん、きっと(願望)
追記)RaspberryPi Zero2WでLINUX用SDL2ビルドが無事通りました。


これにより過去のROM抽出で含まれていないMCUにより不動となった
エアデュエル、ミスターヘリの大冒険、レジェンドオブヒーロートンマ
イメージファイトなどがMCUなしに動作可能に戻ります。

7月にNEOGEOCDの動作が大幅改善されているので
(ロード時間ほぼゼロ、UniverseBIOS正式対応)
その恩恵も受けつつ、旧来のROMが使えるというメリットがあります。



M72・M82タイトルはMCUが吸いだされていない物も多いので
今後もDecapが進めば不動になるタイトルは出てくる可能性があります

最近はcaps0ffさん、あんまり動いてないっぽいですが。

人気タイトルは更新直後不動でしたが
現在は無改造でも動作可能に戻ってました(R・Typeシリーズ等)
質問が多くて開発側がoptionalにしたっぽい?

ダウンロード

遊ぶだけならここでダウンロードすれば終わりです!

改造したソースコード(d_m72.cpp)と
実行ファイル(Win32/X64)の詰め合わせになります。

ダウンロード(FinalBurnNeoM72mod.zip)

ソースコードのほかの部分はc506408686 2023年10月24日を使っています
d_m72.cppを差し替えてビルドすればWin32/x64ともにビルドが通りました
他のリビジョンでは確認していません。
配布分の実行ファイルはvirustotalで問題ないことをチェック済みです。

MCUって何?

エミュレーター界隈のMCUは通常では読み込めないICの類と思ってください(おおざっぱ)

読み込みできないプロテクトされたROM等を
化学薬品でフタ分だけを溶かし(劇薬!)電子顕微鏡で撮影して
PCからビットを読みだしてダンプしたり、紫外線にあててロックを強制解除して
読めるようにする等の作業をDecappingといいます。


エアデュエルM72の場合はロックビット解除のパターン、4kb(‼)のデータですね。

解読されれば、精度はあがる場合もありますが (地獄めぐり、CPS2 Qサラウンド等)
なくても問題ない場合も多いです(スターフォース等)
MAMEではビープ音1つなるだけでも
吸い出して適応するという厳格さを追求しています。

入手方法が事実上、正規の手段では相当に厳しいため回避しています。
(理論上は顕微鏡写真があれば画像認識で入手可能)

ビルドと解説 (Windows)

ここから先は興味のある人だけ読めばOKです
遊ぶだけならダウンロードで問題ありません。ほぼ忘備録です。

必要なもの

ビルド環境 Visual Studio Community 2022
Desktop development with C++を導入しておく

他にPerlのインストールが必要です
推奨されているのはactiveperlですが
strawberryperlでもビルドに問題はありませんでした。

NASMもインストールする必要があります


インストールだけで自動判定してくれるので楽ちんです。

インストールが終わったらソースコードをダウンロードして解凍します
あとはprojectfile→visualstudio-2022→fbneo_vs2022.slnをダブルクリック
releaseのx86かx64を選び、ソリューションのビルドを行ないます。

改造元のソースコード c506408686 2023年10月24日
改造元の旧d_m72.cpp 1ce72fb 直リンク
改造用の現行d_m72.cpp d131647 直リンク

改造ポイント

MCUを読み込まない旧版のd_m72.cpp(1ce72fb)を改造元にします
そのうえで新版のd_m72.cpp(d131647)に版間で
新規追加や変更されたドライバーをコピペ・修正してビルドすればOKです

新規追加分
rtypem82b // R-Type (Japan, bootleg M82 conversion)
imgfightjb // Image Fight (Japan, bootleg)
rtype2m82b // R-Type II (Japan, bootleg M82 conversion)
Gallop // Gallop – Armed Police Unit (Japan, M84 hardware)
lohtb3 // Legend of Hero Tonma (World, bootleg with i8751)

書き換え(動作させるなら上書き?)
gallop→gallopm72 // Gallop – Armed police Unit (Japan, M72 hardware)

注意点
Gallopなどで呼び出しが6つ宣言されてると言われエラーになる
→末尾の1つを削除すればOk

return DrvInit(common_080000_0a0000, sound_ram_map, NULL, Z80_FAKE_NMI, 0, 0);
赤字部分を除去
return DrvInit(common_080000_0a0000, sound_ram_map, NULL, Z80_FAKE_NMI, 0);
こうすればOk

新規追加分も書き換え分も
ROMは未所持なので動作確認できていません
版間に加えられた改良や修正も反映されません

RomsetがMAME0.259までの変更に追従して変わっていますが
追加分以外は、旧版基準のままになります
Windows版ならファイル名よりもCRC優先なのでそのまま遊べますが。
(libRetro版は厳格なのできっちり合わせないとNGになります)

必要な人は、既存分のROM読み込み部分を書き換えて
MCU部分(だいたい .ic1" )をBRF_PRG→BRF_OPTに書き換えましょう

つまづくポイント

ソースを無修正のままでビルドしても
なぜかVisualC++環境はビルドエラーが出ることがあります。
問題ないはずのドライバーで宣言ないよと怒られたり、ちゃんと宣言してるのに。
特に剣豪とか大工の源さんで謎のエラー吹いて困りました。

別のコミットにするとか、slnを別のバージョンに変えると通ったりします;
そのため、自分の環境下でx86/x64両方ビルド可能だったコミットを記載しています。

一番謎なのはドライバーからROM名から
ゲームリストを生成してビルドするはずなのに
ドライバー書いてないゲーム名が宣言されてないぞって怒られるんですよねぇ
(新規ROM追加時にドライバー以外への追記がないので、一覧追記してるわけでもない)

この辺、過去でやってた宣言してないのにビルド通ってたりするのでホント謎ですね。

しめ

公式が不動だった人気タイトルを動作可能に戻しているので
使う人は俺くらいなんじゃなかろうか?と思いつつ

まぁ改造なんてそんなもんですよね
他の大多数は旧版本体つかうか
海外だと海賊版落とせばいいやって感じでしょうかね。
抽出して使ってる側からするとビルドせざるを得ないわけで。





自分の意図通りに改造できた、という経験値は溜まったのでよしとします。