[教程]FBN 编译教程
本帖最后由 缘来是你 于 2024-10-12 20:23 编辑街机模拟器系列教程 第2篇
1. 下载 MinGW64 (http://tdm-gcc.tdragon.net/)并安装
此处使用版本为 tdm64-gcc-9.2.0.exe(实测使用10.3.0编译,模拟器版本号出错)
1) 下载 GNU Utils,并解压至 ..\TDM-GCC-64\bin 目录
https://www.fbalpha.com/files/gnu_utils.zip
2) 下载 NASM,解压后将其中 nasm.exe 移至编译器..\TDM-GCC-64\bin 目录
https://www.nasm.us/pub/nasm/releasebuilds/
此处使用版本为 nasm-2.15rc12-win64.zip
3) 下载 Perl并安装
https://www.activestate.com/products/perl/
此处使用版本为 ActivePerl - 5.28.1.2801
2. 下载 FBN 源码,并解压
https://github.com/finalburnneo/FBNeo
3. 打开命令行,cd 进入源码目录
1) 配置编译环境和路径
path=C:\TDM-GCC-64\bin;%PATH% 2) 开始编译
64位编译命令
mingw32-make mingw510 -j5 BUILD_X64_EXE=1 RELEASEBUILD=1 32位编译命令
mingw32-make mingw510 -j5 BUILD_X86_EXE=1 RELEASEBUILD=1 3) 编译 RetroArch 核心,使用命令:C:\msys64\mingw64\bin\make -j5 -C src/burner/libretro generate-files
C:\msys64\mingw64\bin\make -j5 -C src/burner/libretro</div> 根据本机配置添加 make 路径。通常位于 C:\msys64\mingw64\bin\,也有版本位于 C:\msys64\usr\bin
若需添加其他参数,则必须添加至两个命令中
4. 精简与其它
1) 在..\fbasrc\src\burn\drv 目录下相关驱动中找到不需要的游戏信息,可删除相关游戏
2) 若需要删除整个驱动,需要根据需求修改 makefile.burn_rules 不需要的驱动相关代码,具体需要根据编译器报错信息不断调式
3)汉化和修改,只要找到相应源码修改,保存编译即可,如:
..\fbasrc\src\burner\win32\drv.cpp 可修改 ROM 路径配置对话框 ,app.rc 可以修改对话框,UI 菜单的布局等
模拟器非标资源位于 string.rc
修改 burner\title.h 可以更改模拟器标题名称
原版创建的文件夹太多,修改 src\burner\win32\main.cpp可以去掉那些没用的文件夹
具体问题具体分析,本文只作教学,其他需要你自己去探索
4) 添加游戏在,如添加 powerins 游戏,那么在..\src\burn\drv\pt90s\d_powerins.cpp 添加相应 Rom 的信息和列表即可(参见示例)
5) 如果想编译出来的是DEBUG版,命令行删除 RELEASEBUILD=1 即可
编译脚本
将脚本解压至源码根目录,用记事本打开,修改path为实际路径后运行。
如你的GCC安装在E:\GCC,就修改为path=D:\GCC\bin;%PATH%
**** Hidden Message *****
本帖最后由 缘来是你 于 2024-10-14 22:35 编辑
附录I
// ------------------------示例代码--------------------------------// 仅供参考,不一定适用于其它版本
// 豪血寺一族(中国版)
static struct BurnRomInfo powerinscnRomDesc[] = {
{ "93095-3br.u108", 0x080000, 0x565e776a, BRF_ESS | BRF_PRG }, // 68000 code
{ "93095-4.u109", 0x080000, 0xd3d7a782, BRF_ESS | BRF_PRG },
{ "93095-2.u90", 0x020000, 0x4b123cc6, BRF_ESS | BRF_PRG }, // Z80 code
{ "93095-5.u16", 0x100000, 0xb1371808, BRF_GRA }, // layer 0
{ "93095-6br.u17", 0x100000, 0x456a6bd8, BRF_GRA },
{ "93095-7.u18", 0x080000, 0x2dd76149, BRF_GRA },
{ "93095-1br.u15", 0x020000, 0x7e73e1d8, BRF_GRA }, // layer 1
{ "93095-12.u116", 0x100000, 0x35f3c2a3, BRF_GRA },
{ "93095-13.u117", 0x100000, 0x1ebd45da, BRF_GRA },
{ "93095-14.u118", 0x100000, 0x760d871b, BRF_GRA },
{ "93095-15.u119", 0x100000, 0xd45be388, BRF_GRA },
{ "93095-16.u120", 0x100000, 0xa9c16c9c, BRF_GRA },
{ "93095-17.u121", 0x100000, 0x51b57288, BRF_GRA },
{ "93095-18.u122", 0x100000, 0xb135e3f2, BRF_GRA },
{ "93095-19.u123", 0x100000, 0x67695537, BRF_GRA },
{ "93095-10.u48", 0x100000, 0x329ac6c5, BRF_SND }, // sound 1
{ "93095-11.u49", 0x100000, 0x7566097c, BRF_SND },
{ "93095-8.u46", 0x100000, 0xf019bedb, BRF_SND }, // sound 2
{ "93095-9.u47", 0x100000, 052c83d765, BRF_SND },
{ "22.u81", 0x000020, 0x67d5ec4b, BRF_OPT }, // unknown
{ "21.u71", 0x000100, 0x182cd81f, BRF_OPT },
{ "20.u54", 0x000100, 0x38bd0e2f, BRF_OPT },
};
STD_ROM_PICK(powerinscn)
STD_ROM_FN(powerinscn)
// ----------------------------------------------------------------------------
/* 省略若干行代码
************************************
省略若干行代码*/
// ----------------------------------------------------------------------------
struct BurnDriver BurnDrvPowernbr = {
"powerinscn", "powerins", NULL, NULL, "2020",
"豪血寺一族(中国版)\0", NULL, "hack", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HACK, 2, HARDWARE_MISC_POST90S, GBF_VSFIGHT, FBF_PWRINST,
NULL, powerinscnRomInfo, powerinscnRomName, NULL, NULL, NULL, NULL, powerinsInputInfo, powerinsjDIPInfo,
powerinsInit, powerinsExit, powerinsFrame, DrvDraw, powerinsScan, &bRecalcPalette, 0x800,
320, 224, 4, 3
};编译报错if ( strcmp(BurnDrvGetTextA(DRV_NAME), "powerins") == 0 || strcmp(BurnDrvGetTextA(DRV_NAME), "powerinsj") == 0) {
替换为
if ( strcmp(BurnDrvGetTextA(DRV_NAME), "powerins") == 0 || strcmp(BurnDrvGetTextA(DRV_NAME), "powerinsj") == 0 || strcmp(BurnDrvGetTextA(DRV_NAME), "powerinscn") == 0) {编译完成
前排顶起! 进来支持一下!:lol 頂起!!這篇教學文:lol 对于小白来说太难了,基本看不懂, 感謝分享 支持一下 感謝分享! 看看不错 大佬溜北!