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

APR 文件标识符与读取

APR 把游戏文件解析一次,之后在后续命令缓冲区里携带一个进程本地标识符。延迟的 AMPR 读取会重新打开同一个只读的 /app0 文件,而不必永远持有主机描述符。

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

用标识符代替路径

加速器 API 不希望每条命令里都有路径。游戏解析一条路径,得到一个紧凑的文件标识符,再把这个标识符放进稍后提交的读取命令。PS5PCEM 把路径和文件大小记在标识符旁边。这张表是进程本地的。主机路径不会交还给客户机。

文件来自游戏只读的 /app0 挂载。延迟读取执行时可以重新打开已解析的条目,因此模拟器不必在整个进程生命周期里持有每一个描述符。缓存表最多容纳 64 个文件。

命令缓冲区

一次提交是客户机命令缓冲区,不是单次读取调用。PS5PCEM 最多接受 32 个活动命令缓冲区。每个缓冲区都有上限:32 次读取、32 次写入、32 次映射、32 条完成记录和 128 个操作。最多 64 个提交可以同时在途,自动池容纳八个缓冲区。一次读取指名文件标识符、客户机目的地、大小和文件偏移,也可以指名一个接收字节数的地址。

读取器会拒绝未知标识符、缺失的文件、过短或未对齐的命令缓冲区,以及会走出文件或目的地的请求。单次读取的上限是 4 GiB,这是接口限制,并不是承诺游戏会发出那么大的读取。映射命令使用客户机所期望的 16 KiB AMM 页大小。

APR 如何与 AMPR 会合

APR 拥有文件表和命令缓冲区的生命周期。AMPR 拥有计数器、等待,以及告诉游戏工作已经完成的完成事件。游戏可以排入许多文件读取,然后等待完成命令所更新的计数器。Grand Theft Auto III 的第一次启动是被观察到的大规模情形:读取走这条路径,完成事件经 AMPR 队列返回。

内核异步 I/O,也就是另一套文件 API,写在单独的页面上。APR 是加速器命令流。内核批处理 API 是 POSIX 风格的请求列表。

已经实现的部分

  • 只读 /app0 路径的进程本地文件标识符,并为后续读取保留大小。
  • 用于读取、写入、映射和完成记录的有界命令缓冲区。
  • 重新打开同一游戏文件的延迟读取。
  • 对未知文件、溢出和畸形缓冲区做经过检查的拒绝。

尚未实现的部分

  • 这条路径是命令缓冲区的软件执行,不是游戏机的 DMA 引擎。
  • 可写的包文件在 /app0 之外。存档走存档挂载。
  • 解析器没见过的文件不能凭一个裸标识符凭空造出来。

相关机制

这些页面说明什么

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

全部技术