taoenwen 发表于 2025-6-3 13:44:11

[解读] FBNeo romdata 写法的基本介绍

本帖最后由 taoenwen 于 2025-6-5 15:34 编辑



在 fbneo,以上两者样式的 romdata 是等价的。
第一个是 nebula 样式 (名义上支持 PGM/NG/CPS123/家用机);
第二个是 fbneo 样式 (支持全部基板驱动),fbneo 现在支持直接从游戏驱动导出 RomData 模板,可在 这里 查阅。

首行标头 System (fbneo 样式时不需要):仅作为两种样式区分的标志,有这个标志,程序视为 nebula 样式,后续程序逻辑按 nebula 样式进行,没有此标头,按 fbneo 样式逻辑进行,至于标头后面写啥,程序是直接忽略的,填不填无所谓,至于硬件识别,程序有自己的逻辑。

后续三个标头:
RomName 和 ZipName (游戏压缩包名称);
Parent 和 DrvName (借用哪个游戏驱动的名称);
Game 和 FullName (想要呈现的游戏全名,不指定则显示游戏压缩包名称);
这三组,每组两个名称都是通用的,程序能自动识别,保留 nebula 的标头名称习惯,只是为了满足强迫症用户 (此处无贬义)。

进入正文部分:
nebula 样式为 5列数据,分别为:ROMs 名称、ROMs 载入地址 (在 fbneo 填 0即可,程序直接忽略)、ROMs 长度 (不可为 0)、ROMs crc32 (可填 0,0为不校验 crc32)、ROMs type (PGM/NG/CPS123/家用机 可为 0,其它基板参考 fbneo 样式);
fbneo 样式为 4列数据,分别为:ROMs 名称、ROMs 长度 (不可为 0)、ROMs crc32 (可填 0,0为不校验 crc32)、ROMs type (家用机 可为 0,其它基板必须规范填写正确的 type 值,值可以是宏或者 16进制的值,参考源码部分)。
nebula 样式的 romdata 有节点,如上图范例 Neo Geo 基板的:、、、、 ...,这些节点在 fbneo 是为了让程序通过这些节点来自动分配 type,具体怎么实现的,这里就不展开了,这里仅介绍一下这些节点及它们的扩展别名。

- Neo Geo -:
Program = PRG1,举例:可以是 ,也可以写成 ,以下均是;
Text = GRA1;
Graphics = GRA2;
Z80 = SNDA;
Samples = SND1;
SamplesAES = SND2,这条是新增的,如 nam1975 这个游戏,mvs 和 aes 载入的采样文件是不一样的,大部分的时候都用不到,只是预留功能;
BoardPLD = OPT1,Neo Geo 只有极少部分游戏是有 PLD,也仅作预留。

- PGM -
Program = PRG1;
Tile = GRA1;
SpriteData = GRA2;
SpriteMasks = GRA3;
Samples = SND1;
InternalARM7 = PRG2;
Ramdump,没有别名,我也不知道为什么会有它,no dump 的 ROMs type 程序压根不会载入该 ROM,也不会预留内存空间,留着吧,别名就省省吧;
ExternalARM7 = PRG3;
ProtectionRom = PRG4。

- CPS1 -
Program = PRG1,自动基础判断,68k ROMs 大于 0x40000,顺序载入,否则交错载入;
ProgramS = PRGS,新增,强制程序以 2个一组以交错字节的方式载入 68k ROMs (名将的第三第四个 68k ROMs 就是交错载入的);
ProgramN = PRGN,新增,强制程序以顺序方式逐个载入 68k ROMs (可以配合 PRGS,实现自定义载入);
名将为例:
...

68k1, ...; // 顺序
68k2, ...; // 顺序

68k3, ...; // 交错
68k4, ...; // 交错
[...]
...

...Z80 = SNDA;
Graphics = GRA1;
Samples = SND1;
Pic = SNDB,Pic 没模拟,预留吧,应该用不到;
Tiles = Extras = GRA2,部分街霸2有扩展的图形;
BoardPLD = OPT1。

- CPS2 -
Program = PRG1;
Graphics = GRA1;
Z80 = SNDA;
Samples = SND1;
Decryption = KEY1。

- CPS3 -
Bios,新增,无别名;
Program = PRG1,新增;
Graphics = GRA1,新增。

- 家用机 -
写 0 即可,自动判断。

- 通用部分 -
节点,注意是节点,而不是标头,这个节点标志是告诉程序,以下没有了,不用再查找内容了。

讲一下 Parent 和 DrvName:
在 fbneo 的 romdata 实现中,建议大家用 clone 做驱动,这样按 ROMs 载入逻辑,clone 缺少 ROMs 时会自动向 parent,也就是其父级驱动申请缺少的 ROMs。
当然不排除有部分用户就喜欢用 parent 做驱动,那么请你补齐该游戏全部的 ROMs,parent 是顶层驱动,没谁为它提供额外的 ROMs,所以想清楚做事,别有事就怨天怨地,更别胡搅蛮缠。

重点:
我们推荐用户优先使用 fbneo 样式的 romdata,fbneo 对 nebula 样式的支持,仅作为用户习惯的兼容与扩展,而不是 fbneo 认可或崇拜 nebula 或安卓啥啥其它的 romdata,fbneo 没有攀附、复刻它们的计划或打算,更不希望有人试图用甩脸、撂自己挑子等形式来道德绑架。

最后,如果觉得 fbneo romdata 有啥新功能需要添加或实现,你可以:
1、合理建议,在不破坏原有结构、逻辑的基础上提出扩展建议 (原设计逻辑是全基板兼容,这是底线,不容破坏);
2、自己写代码,上 pr;
3、以上都不是,闭嘴!

2025/06/04 更新,在更新子目录搜索逻辑时,顺便也完成了追加 RomData 被占用驱动 ROMs 的载入,就和一开始说的一样,要动 bzip.cpp,而不是成为安卓 2 代。
Skip the default ROMs directory when searching subdirectories · finalburnneo/FBNeo@7b70c13

2025/06/05 更新,可在选择游戏对话框界面,选中一个游戏驱动,鼠标右键弹出菜单,选择最后一项:Export to RomData template
win32 sel: RomData templates can be exported directly from the driver · finalburnneo/FBNeo@9ba6fbc

minyangyang 发表于 2025-6-3 14:20:27

满满的干货,谢谢楼主的分享!这个绝对要顶!!!

Alifu1227 发表于 2025-6-3 15:05:11

进来支持一下

wait 发表于 2025-6-3 15:13:21

进来学习一下

w553491775 发表于 2025-6-3 15:21:45

据说这玩意老好了,就差看懂这个帖子了。感谢大佬分享。

w553491775 发表于 2025-6-3 15:28:55

好吧,还是没看懂,type类型和rom长度要怎么看?

zone 发表于 2025-6-3 15:46:31

{:2_27:}厉害!

xyzhz 发表于 2025-6-3 15:56:05

感谢大佬无私奉献!

maoer 发表于 2025-6-3 16:43:17

学习学习,很好的教程:loveliness:

爱唱歌的汤姆猫 发表于 2025-6-3 17:29:08

完全看不懂;P
页: [1] 2 3 4 5 6 7 8
查看完整版本: [解读] FBNeo romdata 写法的基本介绍