HLE,高级固件模拟
部分可用HLE 是 PS5PCEM 应答游戏所导入固件调用的方式。每个数字 NID 都成为主机栈上的一个 Zig 函数,并在 Windows 上保留客户机的 System V 调用约定。
工作方式实现
每一页对应模拟器真正运行的一种机制:主机做什么、Zig 代码做什么,以及还有什么没有实现。
仓库笔记截至 2026年10月17日
HLE 是 PS5PCEM 应答游戏所导入固件调用的方式。每个数字 NID 都成为主机栈上的一个 Zig 函数,并在 Windows 上保留客户机的 System V 调用约定。
工作方式PS5PCEM 中的 AMPR 是游戏机计数器与完成命令的进程本地软件模型。一百二十八个计数器按提交顺序接受存储、字段的原子更新、成对读取和带掩码的等待。
工作方式APR 把游戏文件解析一次,之后在后续命令缓冲区里携带一个进程本地标识符。延迟的 AMPR 读取会重新打开同一个只读的 /app0 文件,而不必永远持有主机描述符。
工作方式客户机地址就是真实的主机地址。直接内存是映射进这块空间的稀疏共享物理池,MemoryPool 在同一后备之上增加预留、提交和批处理操作。
工作方式挂载后的存档位成为可写的 /savedata0。游戏使用普通文件 API,下次启动会在游戏所公布的产品代码下找到同一批文件。
工作方式libSceFont 用 FreeType 光栅化游戏提供的 TrueType 和 OpenType 字体面。系统字体请求使用随附的 Noto Sans 替代字体,覆盖拉丁文、希腊文和西里尔文。
工作方式PNG 编码器把带行跨距的 RGBA 或 BGRA 像素写成 8 位 RGB 或 RGBA 文件。解码器把非交错的灰度、调色板、RGB 和 RGBA 图像读进经过检查的客户机缓冲区。
工作方式RTC 检查日历字段,转换 Windows FILETIME,并对 tick 做经过检查的算术。客户机看到的是一台连贯的时钟,没有主机的夏令时换算。
工作方式在 Windows 上,每一个 libSceFiber 纤程都是真实的 Windows 纤程,因此切换会保留客户机寄存器和客户机栈。用户级线程经由同一条 pthread 路径启动。
工作方式内核 AIO API 接受一批读取并返回一个标识符。PS5PCEM 在提交时执行这批读取,接口允许这样做,游戏随后取回一个已经完成的结果。
工作方式PS5 游戏在自己的内存里构建 GPU 包并提交这块缓冲区。PS5PCEM 解码这条 PM4 流,保持寄存器状态,并按顺序执行绘制和分派。
工作方式PlayStation 5 着色器是 RDNA2 机器码。PS5PCEM 解码 GFX10 各族,建立控制流图,并把受支持的操作降为供 Vulkan 使用的 SPIR-V 1.5。
工作方式合并后的 NGG 顶点程序,包括以 S_SETPC_B64 继续的 fetch 着色器,作为一个图形阶段来翻译。导出程序保留自己的用户数据窗口。
工作方式IMAGE_LOAD 的 BY2、BY4、PCK2 和 PCK4,包括显式 mip 形式,对已测量的原生 2D 格式执行。BY 加载返回连续纹素。PCK 加载把它们的原始位打包进一个寄存器。
工作方式IMAGE_GATHER4H 和 IMAGE_GATHER4H_PCK 在一组水平纹素上采集一个通道。已测量的直接 1D 和 2D 子集由 1,242 次 GPU 分派覆盖。
工作方式S_SWAPPC_B64 和 S_CALL_B64 保存完整的返回地址,并运行一个有界的局部子程序,包括位于 ENDPGM 之后的被调用者。经过验证的 AGC fetch 着色器可以按同样的方式链接。
工作方式Vulkan 后端在运行时加载驱动,要求 Vulkan 1.2,并通过交换链呈现客户机帧。渲染目标、存储图像和管线在多次绘制之间保持常驻。
工作方式0.3.5 之后加入的实验性原生 Windows 渲染器。它与 Vulkan 共用 PM4 解码器和 RDNA2 着色器翻译,然后通过 D3D12 和 DXGI 执行并呈现。Vulkan 仍是默认选项,游戏目前还不能通过这条路径运行。
工作方式匹配的 2×、4× 和 8× 颜色与深度采样数留在主机图像上,稍后才解析。Asterix 用这条路径处理 MSAA 深度和模板,从而去掉了一次很大的意外回读。
工作方式HTILE、DCC、CMASK 和 FMASK 是游戏机的压缩深度与颜色元数据。PS5PCEM 跟踪这些指针,在它理解的情形下清除 HTILE,并拒绝一种否则会被错误解块的布局。
工作方式PS5 纹理按 GFX10 交织模式存放,而不是线性的行。PS5PCEM 在 CPU 上应用地址方程,并对符合条件的大型 4、8 和 16 字节表面在 GPU 上应用。
工作方式可选启用的页跟踪器监视 16 KiB 客户机页。第一次原生 CPU 存储会触发故障,推进一代,并使 GPU 副本失效,这样未改变的页就不会每一帧都被哈希并上传。
工作方式VideoOut 注册客户机的显示缓冲区,并且只在呈现回调接受该帧之后才完成一次翻页。主机窗口是 1080p SDR 的 Vulkan 交换链。
工作方式AudioOut 在 Windows 设备上以 48 kHz 播放客户机 PCM。旧式端口有自己的流和队列,因此音乐和音效一起播放,欠载之后仍保持采样顺序。
工作方式ACM 卷积在 CPU 上运行 FMOD 的分段混响。共享输入的批次变换一路干信号,应用浮点或半精度浮点的冲激响应分段,并把湿结果重叠相加。
工作方式AJM 解码 ATRAC9、MP3、MPEG-4 AAC 和 Opus。每个编解码器实例保持自己的状态,未知编解码器会被拒绝,而不是被报告为静默的成功。
工作方式NGS2 保持系统、rack 和 voice 句柄,解析普通的 RIFF/WAVE 数据,并把静音的 48 kHz 颗粒按节奏推进,使软件 DSP 工作线程不能空转。voice 合成本身并不完整。
工作方式SceAvPlayer 用 FFmpeg 把影片容器解码到游戏拥有的 NV12 帧和 48 kHz 立体声 PCM。即使游戏从未读取其中一条流,播放也会在源时长过去时结束。
工作方式在 Windows x86-64 上,客户机的机器码直接运行。每个客户机 pthread 由一个主机工作线程承载,每次阻塞调用之后都会恢复 FS 基址,因为 Windows 不保留它。
工作方式加载器映射已解密的 PS5 SELF 和裸 ELF64 模块,应用重定位,并对照 HLE 登记表解析导入。游戏随后收到它自己启动的模块的稳定句柄。
工作方式DualSense、DualSense Edge 和 DualShock 4 经 HID 读取,USB 和 Bluetooth 都可以。兼容 Xbox 的手柄使用 XInput。键盘通过启动器配置映射到摇杆。
工作方式pkgextractor 解包开发中观察到的调试 FPKG 布局:外层包、内层 PFS、NAPS 名称映射,以及 Kraken 压缩的载荷。加密的零售包不在范围内。
工作方式这些页面说明什么