Lr-fbneoをカスタムビルド
CRCチェックを無効にします
注意点として雑にCRCチェックを無効化しているので
動作しないROMの場合、帰ってこれない可能性があります。
ほめられたやり方ではないですが、MAME2000や2003extremeみたいに
エラーを無視するオプションを付けてくれない上に
オリジナルよりもCRCに厳格なのは、やめて欲しいところ。
ビルド済みバイナリとソース
ダウンロード
下記CRC無視の修正済みlibretro.cppと他ソース
Raspberry Pi4 x64用ビルド済libretroコアが同梱
ビルド環境はbullseye x64、同環境なら(たぶん)そのまま利用できます
Buster x64でも動作するかもしれませんが未検証です。
別環境や動作がおかしい場合は
src/burner/libretoro/fbneo_libretro.so を削除しご自身でビルドして下さい
オリジナルのlibretro.cppはlibretro.cpp.bakとして保存してあります。
配布のライセンスはこちら(英文)になります。
下準備
いつもやっている最新ソースにm72を巻き戻しをすると
Burn.oでエラーが出てビルドできませんでした(そこら辺も戻せば行けそうですが)
(めんどうなので)m72変更前のソースをCRCチェック無効にしてビルドします。
ソースのダウンロードと解凍
m72update前かつ /src/burner/Libretro があるコミットを選びました
$ wget https://github.com/libretro/FBNeo/archive/0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a.zip
$ unzip 0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a.zip
解凍するとFBNeo-0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4aと言うフォルダーができます
libRetroフォークのコミットでもburnerフォルダに
Libretroがある物(派生)とない物(本家)が混在しているので注意です。
libretro.cppを書き換え
FBNeo-0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a\src\burner\libretro 内にある
libretro.cpp内のCRCチェックを全て潰します。
$ cd FBNeo-0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a\src\burner\libretro\
$ nano libretro.cpp
X11なら好きなテキストエディタでOK、ファイルをWindowsで編集するのもよし。(notepad以外)
書き換え前
// Search rom dir
snprintf_nowarn(path, sizeof(path), "%s%c%s", g_rom_dir, PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = false;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
// Search system fbneo subdirectory (where samples/hiscore are stored)
snprintf_nowarn(path, sizeof(path), "%s%cfbneo%c%s", g_system_dir, PATH_DEFAULT_SLASH_C(), PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = false;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
// Search system directory
snprintf_nowarn(path, sizeof(path), "%s%c%s", g_system_dir, PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = false;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
}
書き換え後
ignoreCrcで検索し814行目と827行目と840行目の
located->ignoreCrc = false;をlocated->ignoreCrc = true;に書き換えます
// Search rom dir
snprintf_nowarn(path, sizeof(path), "%s%c%s", g_rom_dir, PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = true;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
// Search system fbneo subdirectory (where samples/hiscore are stored)
snprintf_nowarn(path, sizeof(path), "%s%cfbneo%c%s", g_system_dir, PATH_DEFAULT_SLASH_C(), PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = true;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
// Search system directory
snprintf_nowarn(path, sizeof(path), "%s%c%s", g_system_dir, PATH_DEFAULT_SLASH_C(), romName);
if (ZipOpen(path) == 0)
{
g_find_list_path.push_back(located_archive());
located_archive *located = &g_find_list_path.back();
located->path = path;
located->ignoreCrc = true;
ZipClose();
HandleMessage(RETRO_LOG_INFO, "[FBNeo] Romset found at %s\n", path);
}
else
HandleMessage(RETRO_LOG_INFO, "[FBNeo] No romset found at %s\n", path);
}
ビルド
CRC処理を無視させる変更が終わったらビルドします
ここではRaspberry Pi用のビルドを解説していますが
WindowsやOSXやLinux他のコアビルドも可能です(完走するかは未確認)。
ユーザーはpiを想定していますが
最近のOSではpiユーザーがない場合もあるので、その場合は適宜書き換えをお願いします
自分の場合はRaspberry Pi4で64bitなので下記になりました
$ cd /home/pi/FBNeo-0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a/src/burner/libretro
$ make platform=rpi4_64
platform= はrpi1,rpi2,rpi3,rpi3_64,rpi4_64 とあるようなので(makefile参照)
機種およびOS環境に合わせて変更した上で実行して下さい、時間は長時間かかります
コアファイルの差し替え
RetroPieのlr-fbneoコアを差し替える場合は以下になります
元々のコアをfbneo_libretro.soからfbneo_libretro.so.bakにリネーム
その後、コピーして入れ替えます。
$ cd /opt/retropie/libretrocores/lr-fbneo
$ sudo mv fbneo_libretro.so fbneo_libretro.so.bak
$ cd /home/pi/FBNeo-0d8c00b9f18aa4f83cbaf8cbf5e4f46889d35c4a/src/burner/libretro
$ sudo cp fbneo_libretro.so /opt/retropie/libretrocores/lr-fbneo
X11で動くretroarchをインストールしている場合は(PIKissだかPiAppで出来たはず)
コアの追加でビルドしたfbneo_libretro.soを指定すれば読み込んで動作可能でした。
動作確認
前回はCRCエラーでロードできなかったdigdugがプレイ可能になりました。
m72修正前なので、RTypeも動作OKです。
※NEOGEOで一つエラーで起動不能がありましたが
NEOGEOの場合、CRCエラーがある物はレアなのでそのままにしています
〆
ネックとしてはm72巻き戻しがエラー出るので対応が面倒くさいなぁと
RetoroPieではコア更新する必要もないでしょうから、コレでいいかなと
新しい物がよいなら、Raspberry Piなら本家SDL2版をビルドして動かせば事足りますね
公式ビルドがなくCRCエラーの回避方法がない
AndroidやMiyoo miniなんかは役立ちそうですが
そっちのクロスビルドは面倒くさいので追々ということで
ディスカッション
コメント一覧
まだ、コメントがありません