缘来是你 发表于 2024-10-12 20:10:12

[教程]FBN 编译教程

本帖最后由 缘来是你 于 2024-11-16 21:53 编辑

街机模拟器系列教程 第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          根据本机配置添加 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:27:26

本帖最后由 缘来是你 于 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) {编译完成

xyzhz 发表于 2024-10-12 20:12:18

前排顶起!

爱唱歌的汤姆猫 发表于 2024-10-12 20:15:04

进来支持一下!:lol

todobug 发表于 2024-10-12 21:46:10

頂起!!這篇教學文:lol

不可能 发表于 2024-10-12 23:24:05

对于小白来说太难了,基本看不懂,

syz2424 发表于 2024-10-13 01:19:29

感謝分享

地平线下沉 发表于 2024-10-13 06:06:56

支持一下

dadada 发表于 2024-10-13 06:43:52

感謝分享!

lucky 发表于 2024-10-13 06:52:25

看看不错

yihao111 发表于 2024-10-13 08:56:04

大佬溜北!
页: [1] 2 3 4
查看完整版本: [教程]FBN 编译教程