» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


 16 12
发新话题
打印

[资源分享] YZB威武!终于明白GDEMU的虎头BUG产生的原因了

N年前在网上搜索为什么初期模拟器和GDEMU玩维罗妮卡都会有虎头BUG,得到的信息也就是关于读取速度的只言片语。

今天逛浮游城发现YZB根据问题原因又做了另一版本的解决方案,帖子还顺便解释了下bug的成因。链接:http://bbs.chinaemu.org/read.php?tid=129099&page=e&#a

没有账号的我贴个重点图吧:




[ 本帖最后由 urtoys 于 2022-3-9 09:31 编辑 ]
附件: 您所在的用户组无法下载或查看附件


TOP

posted by wap, platform: iPhone
那怎么解决呢



TOP

posted by wap, platform: iPhone
那怎么解决呢


TOP

解决方案就是加延迟读取这些数据

TOP

对光驱板固件来说,是加延迟,阻塞数据I/O速度,来使这些强依赖读取速度的游戏正常。NullDC以前也有这个问题,也是类似改法。

而在不能改动光驱板固件的条件限制下,yzb做的,是修正游戏对的"读取完毕"标志位进行初始化的逻辑时机。因为本来就是游戏的开发者错误地假设了当前帧不可能读取完数据,就把"读取完毕"标志位的初始化逻辑,放到了发起"开始读取光盘数据的请求"这个逻辑之后。

即:
1. 发起"开始读取光盘数据的请求"。
2. 初始化"读取完毕"标志位,使其状态为"尚未完成"
3. 循环检测"读取完毕"标志位,直到其变为"已完成",再跳到第4步,或者触发读取超时逻辑。
4. 后续逻辑。

这4个步骤的第1步,会因为光驱板读取速度过高而意外地在第2步还没开始前就把"读取完毕"标志位置成"已完成"状态(因为确实读完了),然后第2步中,这个标志位又被抹除,变成了"尚未完成"状态,导致之后逻辑在第3步不能在特定时间内读取完毕,使得出现死循环,或者某些依赖光驱速度的随机数生成过程产生固定值。

yzb把第1、2步顺序换了,就可以规避这种初始化逻辑滞后导致的问题。
本帖最近评分记录
  • 老五 激骚 +1 威武! 2022-3-10 10:37

TOP

posted by wap, platform: Android
这下抄板不用升级了

TOP

posted by wap, platform: Chrome
yzb也帮我解决了bio3汉化版的bug

TOP

posted by wap, platform: iPhone
普通人要怎么搞

TOP

引用:
原帖由 卡比兽 于 2022-3-10 09:22 发表
posted by wap, platform: iPhone
普通人要怎么搞
引用:
原帖由 lg19860320 于 2022-3-9 17:58 发表
posted by wap, platform: iPhone
那怎么解决呢
YZB这次修改了原版镜像,等我有时间拖下来上传。

TOP

posted by wap, platform: Android
yzb大佬又发功了,膜拜一下

TOP

posted by wap, platform: Android
排队膜拜

TOP

引用:
原帖由 SONIC3D 于 2022-3-9 18:52 发表
对光驱板固件来说,是加延迟,阻塞数据I/O速度,来使这些强依赖读取速度的游戏正常。NullDC以前也有这个问题,也是类似改法。

而在不能改动光驱板固件的条件限制下,yzb做的,是修正游戏对的"读取完毕"标志位进行 ...
我没把第1、2步顺序换了,只是把第3步加了判断,判断为触发bug的那几个物品,则强制延迟n帧以后,才让其变为"已完成"状态
本帖最近评分记录
  • SONIC3D 发贴积分 +166 感谢分享 2022-3-12 23:46
  • SONIC3D 激骚 +6 感谢分享 2022-3-12 23:46
  • 就一中年人 激骚 +2 威武! 2022-3-12 19:36
  • urtoys 激骚 +1 版务处理 2022-3-12 09:01

TOP

在大佬楼下混个面子

TOP

大神现身说法了~

TOP

引用:
原帖由 yzb 于 2022-3-11 21:20 发表


我没把第1、2步顺序换了,只是把第3步加了判断,判断为触发bug的那几个物品,则强制延迟n帧以后,才让其变为"已完成"状态
这样啊。。。那不严谨通用,去重改吧。。。

TOP

 16 12
发新话题
     
官方公众号及微博