Dolphin 进度报告第 2603 号
Hacker News 摘要原标题:Dolphin Progress Release 2603
Dolphin 模拟器正式发布了 2603 号进度报告。自 2003 年作为 GameCube 模拟器诞生并于 2008 年加入 Wii 支持以来,Dolphin 在 2026 年迎来了重大里程碑:正式进入街机模拟领域,支持由世嘉、南梦宫和任天堂联合开发的 Triforce 街机基板。此外,本次更新还在 MMU 模拟优化和长期漏洞修复方面取得了突破性进展。
为页表地址创建 Fastmem 映射
Fastmem 是 Dolphin 的重要性能优化手段。由于 GameCube 和 Wii 的内存映射输入输出(MMIO)无法直接转译到宿主系统,Dolphin 通常利用宿主 CPU 的异常处理机制来加速内存访问。过去 Fastmem 仅支持通过块地址转换(BAT)映射的内存,而通过页表映射的内存则必须手动转译,这会造成巨大的性能开销。
Factor 5 开发的游戏(如《星球大战:侠盗中队》系列)为了压榨硬件性能,开发了自定义内存处理程序,利用页表将音频内存(ARAM)当作额外的通用内存使用。由于模拟器之前无法高效处理这种方式,这些游戏在 Dolphin 中一直运行缓慢。
开发者 JosJuice 通过追踪 tlbie 指令,实现了在 Fastmem 中映射页表的功能。这一改动由于涉及底层指令逻辑,经过了多次尝试和优化,最终通过增量更新页表映射的方式,成功降低了转译开销。
• 性能提升:在高端硬件上,几乎所有依赖全 MMU 的游戏都能全速运行。
• 兼容性改善:《侠盗中队》系列性能大幅飞跃,《赛车总动员 2》在低端设备上的表现从勉强运行变为接近全速。
• 体验优化:《蜘蛛侠 2》等游戏在加载 ARAM 数据时的卡顿情况显著减少,由于减少了寻路中的掉帧,整体游玩体验更加流畅。
针对《侠盗中队 II 与 III》的深度优化
即便有了页表 Fastmem 映射,这两款游戏依然极度消耗资源。开发者进一步实施了以下优化:
• 禁用分支跟随:针对这两款游戏禁用了 JIT 的分支跟随功能。这减少了切换视角时因大量指令失效和重新编译导致的严重卡顿。
• 优化指令失效机制:使用更高效的数据结构追踪 JIT 块,提升了 CPU 模拟速度。
• 纹理代码优化:修复了一个导致在处理地形纹理时产生冗余对象的回归错误,这在每秒处理数十万次纹理代码的场景中效果显著。
• 默认配置调整:默认开启 CPU 顶点剔除。此外,不再强制关闭“仅将 EFB 副本存储到纹理”,玩家可以自行在性能和菜单淡出效果之间权衡。
• 结果:《侠盗中队 III》的帧率几乎翻倍,史上首次在高端个人电脑上实现全速运行。
Triforce 街机支持进展
自从几周前加入 Triforce 支持以来,社区提供了大量硬件测试信息。目前的进展包括:
• 自动插入磁卡:2603 版本现已支持自动插入清洁检查磁卡。
• 区域设置:目前游戏区域为硬编码,未来将加入图形界面选项。
• 外设模拟:已解决《F-Zero AX》的存储卡支持;开始开发《马里奥赛车 街机版 GP》及其续作的摄像头集成支持。
• 破解《阿瓦隆之钥》:通过逆向工程识别了其触摸屏协议(类似于 Elo 的 SmartSet 数据协议),并正在修复 IC 卡模拟相关的问题,尝试让这款原本无法运行的游戏成功启动。
• 恢复卡片功能:正在修复《VR 射手 4》和《激斗专业棒球》的 IC 卡功能,从而解锁隐藏的角色创建和单人模式。
《马里奥激战前锋:充能》的长跑修复之旅
这是一个历时五年的项目,旨在解决模拟器与真实 Wii 硬件联网对战时的同步失败(Desync)问题。调查发现,即便在解释器模式下也会发生同步失效,这意味着模拟器的底层实现本身存在错误。
通过与该游戏社区合作,开发者利用社区制作的调试工具(辅助 AI 对战模式和固定的随机数种子)锁定了问题的根源:fmadds(融合乘加)指令的舍入误差。
• 技术细节:在处理输入为 32 位但输出也为 32 位的计算时,Dolphin 之前使用了 64 位指令再进行二次舍入。数学证明显示,这种“双重舍入”在 FMA 指令下是不安全的,会导致计算结果末位出现细微偏差。
• 解决方案:开发者实现了一种复杂的数学算法(基于 2Sum 算法),在不大幅牺牲性能的前提下,确保了舍入方向与原版硬件完全一致。这修复了已知最后一个会导致多人游戏同步失效的逻辑错误。
其他核心更新
1. Wii 菜单数据管理频率:Wii 菜单中的 NAND 管理操作在模拟器中运行过快,会导致在加载大量存档时卡死。Billiard 加入了粗略的时间间隔限制,防止模拟器因运行速度远超真实硬件而崩溃。
2. 将完整游戏载入内存:新增了将整个游戏镜像提前读取并缓存在系统内存(RAM)中的选项。这主要解决了通过网络附加存储(NAS)游玩时,因 NAS 硬盘休眠而产生的卡顿问题。
3. SDL Hints 设置:在控制器设置中新增了配置界面。这可以解决某些手柄(如八位堂 Ultimate 2)导致的退出挂起问题,并让用户能更方便地将 Switch Joy-Con 拆分为独立的 Wii 和双节棍控制器。
4. 更多性能补丁:为《极品飞车:热力追踪 2》、《007:量子危机》等游戏加入了垂直同步(VBI)强制锁定补丁。这些游戏在模拟器中原本会产生异常高的内部帧率,补丁让它们能够恢复正常的运行速度。
原文:https://dolphin-emu.org/blog/2026/03/12/dolphin-progress-report-release-2603/