简体中文 | 繁體中文 | English |
不靠模拟器的 PS5 移植:AnyPS5 的静态重链接路线,与 86% 背后的真相

不靠模拟器的 PS5 移植:AnyPS5 的静态重链接路线,与 86% 背后的真相

typecho
2026-10-12 / 0 评论 / 2 阅读 / 正在检测是否收录... ===> PDD优惠福利券,千万好物,不要错过 <===

AnyPS5 真正反直觉的地方,不是它能跑 PS5 游戏,而是它压根没打算在运行时翻译任何东西。据项目官方 README,它用一个重链接器把 PS5 可执行文件一次性改写成 Linux ELF 或 Windows PE 原生格式,再提供一批重实现的系统库供动态链接;整个过程没有模拟器,也没有独立的运行时进程。它把移植从运行期搬到了构建期,这既不同于保持二进制原样的 Wine,也不同于逐条指令解释的模拟器。

PS5 可执行文件被重链接为桌面原生程序的抽象示意图
图(Cloudflare Workers AI · flux-2-dev 生成,用于示意)

它不是模拟器,也不等于 Wine

据项目架构文档,转换后的程序就是一个普通进程,调用的是系统库的原生实现。绑定依赖 NID:每个系统库编译成共享库后,构建脚本把每个导出函数重命名成它的 NID(由函数名算出的标识),宿主操作系统的加载器再按 NID 把游戏的导入项接到这些库上。

把三者并排看,差异是结构性的。Wine 不碰二进制,只在运行期替换 Windows API;模拟器在运行期解释或翻译指令;AnyPS5 两头都不占,它在构建期重写二进制与模块布局,运行期只留符号绑定。据架构文档,重链接器按序做四件事:可选的 AMD 专有指令降级、按 NID 过滤未用导入并重建动态段、转换随附的 guest 模块,最后交给 Linux 或 Windows 的 patcher 写出 app.elf 或 app.exe。

路线翻译发生点是否改写二进制CPU 指令翻译运行期绑定
Wine运行期(API 层)否否Win32 API 映射到 POSIX
模拟器运行期(指令层)否是整机模拟
AnyPS5构建期(二进制层)是否(源与目标皆 x86)NID 绑定到原生库

86% 这个数字在数什么

官方进度板给出的系统库数字是 3018/3494,约 86.38%;GPU 着色器指令则是 1166/1166,100%。单看这两个数字很容易得出接近完工的印象,但它们都不是完成度,而是相对项目自设清单的覆盖率。进度板对已实现的定义写得很清楚:某函数不再调用占位桩 NotImplemented_nid_no_patch,就算已实现。

关键在分母。据进度板原文,总数只包含 core/libs/prx 中已被声明的函数,并非 PS5 固件导出的全部函数;声明得越多,分母越大。Hacker News 上的讨论据此指出,提交标题里的 87% 存在事实错误,因为 README 本身就带着这条限定。着色器的 100% 同理,它只是说解码器认得出 AMD 公开的 RDNA1 与 RDNA2 指令表里的每一条。

指标数值分母是什么已实现的定义能否当可玩性
系统库3018/3494 ≈ 86.38%项目已声明的函数不再调用占位桩不能,分母自设
着色器指令1166/1166 = 100%AMD 公开 RDNA1+RDNA2 指令表解码器能识别不能,识别不等于可执行

从 RDNA 到 SPIR-V:图形才是门槛

据架构文档,游戏通过 libSceAgcDriver 提交 DCB/ACB 命令缓冲,项目执行其中的 PM4 包来设置状态、发起绘制与派发;如果某个着色器变体已在内存或磁盘缓存里,就直接交给 Vulkan,否则进入五阶段重编译器:RDNA 解码、控制流建图并结构化、翻译为内部 IR、优化资源与绑定、最后发射 SPIR-V。启用 SPIRV-Tools 时,产物还会被校验。

识别率与可执行率不是一回事。技术债文档明确列出:多重、反向、交替与小数循环的着色器循环会抛异常;缺少某个 Vulkan 扩展时,重编译器不加载 barycentric VGPR;驱动不执行 SET_CONFIG_REG 包,一旦提交就抛错。这些正是大型 3D 游戏常用的结构,也解释了为什么最先跑通的是 2D 平台游戏而非画面密集的大作。

要么正确,要么抛异常

这个项目有一条贯穿始终的工程约定:每个函数要么做对,要么抛异常。据 README,未支持或意外的状态严格抛出 std::runtime_error,错误写到 stderr 后进程直接终止。技术债文档把这条约定补全,指出静默桩是全项目明文列出的少数例外,例如若干对话框、USB、音频与 VR 库只实现无设备路径。

把未知一律升级为显式异常,而非悄悄降级,是一种把兼容缺口集中暴露的策略。它让边界可定位、可计数,代价是任何未覆盖路径都会让进程当场结束。对使用者来说,崩溃不是随机的,而是这条边界的信号。

现在真能玩什么,会踩哪些坑

据官方兼容性表,Dreaming Sarah(PPSA02929,一款 2D 平台游戏)在 GTX 1050 Ti 与 i5-7500 上稳定 60 FPS;DOOM 的 Shareware homebrew 在 Windows 上可玩到 E1M1 及后续地图。同一张表也如实标注未验证项:当前 main 分支的 Windows,以及 Intel GPU 上的 Linux。

真正的门槛常出现在内存与驱动路径。据使用文档,Linux 下当 Vulkan 驱动经 dma-buf 导入内存时,共享直接内存走 /dev/udmabuf;如果没有权限,相关区间改为拷贝,GPU 经 FLAT/GLOBAL 的写入会失败并报 BDA access failed。Windows 侧的直接内存在分配时即全额提交,受系统 commit 上限约束,不够就报错。这些失败与函数计数无关,却比 86% 更直接地决定能不能进游戏。

山寨仓库与本地 exe 骗局

走红之后,项目也成了仿冒目标。据一份官方仓库核验页,唯一的官方仓库是 github.com/boykopovar/AnyPS5,官方产物是重链接器加 prx 库归档,并不存在单个 AnyPS5.exe、安装向导或本地 zip 的官方构建;fork 与拷贝可以沿用同样的名字和描述,但只有该组织拥有的是官方项目。

官方发布形态本身就是真伪判据:据 README,正确用法是把输入可执行文件与输出路径交给 relinker,再自行安排目录与库。任何号称一键安装、双击即玩的单个可执行文件,都与这一形态矛盾。

合规边界与它的位置

据 README 的免责声明,项目定位于互操作、研究、保存与兼容用途,不附带也不分发受版权保护的软件、固件、密钥或专有库,使用者须自行确认所用二进制合法获取与合规使用。争议点因此落在输入二进制的来源,而不在工具本身的代码分发。

回到最初:AnyPS5 的价值不在那个 86% 的封面数字,而在它把移植问题改写成构建期的二进制重链接加运行期 NID 绑定,从而把难点从指令模拟转移到系统库与图形特性覆盖。想了解进度与限制,官方进度板、兼容性表与技术债文档都能并入 README 一起看,那里的限定比任何标题都诚实。

0

评论

博主关闭了当前页面的评论