找回密码
 立即注册

微信扫码登录

使用验证码登录

QQ登录

只需一步,快速开始

查看: 124|回复: 10

[解读] 简述 FBNeo 的 ROMs 校验机制

[复制链接]

2

主题

17

回帖

195

积分

注册会员

积分
195
发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 taoenwen 于 2025-6-4 13:17 编辑

这两天听到有人在讨论 FBNeo 游戏驱动 ROMs 的校验机制,有讲到点上,也有命中边缘的,更有不着边际的 ...,为了砖家们别误人子弟,也不耽误你们自以为是地捧高踩低,我简单解析一下吧。

FBNeo 属于内置列表类的模拟器,游戏只有存在于驱动列表中,才能工作 (ips、romdata 都是基于这种模型而拓展)。

每个驱动都维护着至少一个 ROMs 信息结构,我们可以认为是这是一张明细表,这些 ROMs 信息结构体 (表) 包含:当前被选中的游戏的 ROMs 的名称、长度、crc32、type;BIOS 的 ROMs (如果需求) 的相关信息。

校验/载入 ROMs 实际上只有一个区别,有一个布尔值去控制是不是要启动回调函数载入校验筛选后的的 ROMs,核心仍是校验机制,win32 平台,可参阅 bzip.cpp。

校验机制会做以下几件事 (这里跳过子目录扫描):
1、获取选中驱动的 ROMs 信息结构表,如果需求 BIOS 也获取 BIOS 的信息结构表,分别计算出它们各自的 ROMs 数量;
2、获取选中驱动的压缩包名称,如果需求 BIOS 也获取 BIOS 的压缩包名称,是 Clone 的话向上获取父级驱动的压缩包名称,然后以此准备从目录中找到它们。(有高手称之为解析,还能诞生出其它驱动的内容,果然既砖又高);
3、从预置的 20 个 ROMs 路径逐个查找符合的压缩包名称,找到则保存到一个最大可容纳 20 条的字符串数组中备用,当找满 20 条记录或 20 个默认路径都找完,搜索结束,如果搜索结果为 0,保存错误信息备用,将跳过 [4] [5];
4、开始按 [1] 获取的 ROMs 数量逐个校验找到的压缩包内的 ROMs,以驱动的 ROMs 结构体信息分别比对每个 ROM,通过 crc32、ROM 长度为主要依据,当上述 [3] 中有路径的压缩包中任意一个压缩包中的 ROM 符合正在校验的结构体 ROM 信息时,则返回成功并检查结构体的下一条内容,以此循环,直至全部检查完毕;
5、如果运行游戏,程序优先载入符合项 ROMs,但校验结果单项全部的 crc32、ROM 长度不符,但只要 ROM 名称符合,实际上是不会影响 ROMs 载入的,真正影响载入的是基于上述不符,且 ROMs 的 type 为 BRF_ESS 的 ROM,BRF_ESS 说明为:essential rom - without it the game may not run at all;
6、缺少 ROM、crc32、ROM 长度不符都会在校验中保留错误信息,在检查结束后一次性汇总,以信息框方式弹出,告知用户问题所在,游戏会不会触发运行,上述 [5] 已阐述;
7、全部校验结束后是且无 [5] 中提到的否决项,是否运行游戏取决于程序逻辑中的布尔值,如果运行则参考 [4] [5],直接回调函数载入 ROMs 了。

以上则是 FBNeo 游戏驱动 ROMs 的校验/载入机制的简明阐述,希望能帮助真正想搞明白原理的人,真的搞明白了,也就不会胡搅蛮缠了。

1

主题

907

回帖

3211

积分

论坛元老

积分
3211
发表于 3 天前 | 显示全部楼层
进来看看
回复

使用道具 举报

44

主题

645

回帖

2936

积分

金牌会员

积分
2936
发表于 3 天前 来自手机 | 显示全部楼层
技术大佬来了,欢迎欢迎,热烈欢迎

0

主题

59

回帖

997

积分

高级会员

积分
997
发表于 3 天前 来自手机 | 显示全部楼层
不明觉厉。有啥例子。示例

点评

你先觉下不明觉厉的例子  发表于 3 天前

0

主题

34

回帖

1214

积分

金牌会员

积分
1214
发表于 3 天前 | 显示全部楼层
谢谢分享知识

38

主题

2501

回帖

8073

积分

论坛元老

积分
8073
QQ
发表于 3 天前 来自手机 | 显示全部楼层
进来学习一下
1227

152

主题

7882

回帖

1万

积分

论坛元老

独乐乐不如众乐乐,免费分享游戏光荣,贩卖游戏可耻,记住这句话

积分
17482

推广达人最佳新人

发表于 3 天前 | 显示全部楼层
进来学习一下

2

主题

17

回帖

195

积分

注册会员

积分
195
 楼主| 发表于 3 天前 | 显示全部楼层

猫猫是元老啊!牛!

点评

哈哈,一般,一般,谢谢夸奖。  发表于 3 天前

0

主题

413

回帖

2890

积分

金牌会员

积分
2890
发表于 前天 16:58 | 显示全部楼层
学习一下,长姿势
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|肖琪模拟游戏站 ( 沪ICP备2023018581号-5|沪公网安备31011702888952号 )

GMT+8, 2025-6-7 14:58 , Processed in 0.061360 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表