跳到正文
PS5PCEM
部分可用固件与 HLE

AMPR 计数器

PS5PCEM 中的 AMPR 是游戏机计数器与完成命令的进程本地软件模型。一百二十八个计数器按提交顺序接受存储、字段的原子更新、成对读取和带掩码的等待。

仓库笔记截至 2026年10月10日

游戏用 AMPR 做什么

在游戏机上,AMPR 是异步引擎,负责搬运文件数据,并更新 CPU 和 GPU 可以等待的计数器。游戏用它得知一次读取已经落地,或者后面的通道可以开始,而不必在共享变量上空转。PS5PCEM 并不模拟 AMPR 硬件块。它在进程内部执行游戏建好的命令流,并通过游戏注册的 AMPR 事件队列报告完成。

计数器组有 128 个 32 位字。一对是偶数计数器加上下一个字,作为同一个 64 位值读写。一把锁同时覆盖两半以及每一次读改写,因此读取者不会观察到被撕裂的一对。访问可以指名整对、32 位字、两个 16 位半字中的任意一个,或四个字节中的一个。

存储、等待与时间戳

写入可以是存储、按位 OR、与补码相与、XOR,或回绕加法,作用在被选中的字段上。等待在掩码下把该字段与一个参考值比较。比较有相等、大于、小于、不等、到达某个序列值,以及大于和小于的有符号形式。序列比较把字段的符号位移到第 63 位,因此同一条规则在 8、16、32 和 64 位上都成立。

已经满足的等待就地完成。尚未满足的等待保留提交时的快照,并在该流上更晚的写入和事件之前恢复,包括同一客户机线程上更晚的一次提交提供了这个值的情况。普通 API 与 _04_00 API 的参数列表彼此分开。时间戳随计数器命令一起记录。游戏正在导入的完成大小查询已经注册,因此这些调用能够解析。

这条路径被观察到做了什么

ReleaseSafe 中有二十二个针对性 AMPR 测试通过,其中包括经由真实导出表面的调用。Grand Theft Auto III 的启动执行了超过 10,000 次 APR 文件读取提交,并写下超过 350 个 AMPR 完成事件,该路径上没有匹配到的 AMPR 错误。那次启动本身并不调用计数器 API。计数器的工作由测试,以及确实会等待这些值的游戏来覆盖。

这是模拟器所执行命令的 API 覆盖。它不是游戏机内存控制器的周期级模型,也不声称具备硬件的时序。

已经实现的部分

  • 一百二十八个计数器,带一致的 64 位对,以及字节、半字和字字段。
  • 存储、OR、与补码相与、XOR 和回绕加法,以及带掩码的等待和有符号等待。
  • 阻塞的等待保持自己在命令流中的位置,并在值到达时恢复。
  • 有序完成经由已注册的 AMPR 事件队列交付。

尚未实现的部分

  • WaitOnAddress 仍是占位实现。
  • 真实 AMPR 块的硬件时序没有被复现。
  • 解码器无法识别的计数器命令不会被静默当作成功。

相关机制

这些页面说明什么

文字依据 PS5PCEM 仓库中的架构说明和 2026 年 10 月的报告。单项测试通过并不等于新的帧率,也不等于新的通关。

全部技术