Show HN:将 PS2 游戏静态重编译为 WebAssembly

一个新项目将 PlayStation 2 游戏静态重编译为 WebAssembly,使其可以在浏览器中或作为原生二进制运行,并通过建模矢量单元和图形综合器等关键硬件组件来实现,而不是做逐周期精确的模拟。评论者围绕时序准确性、从老旧上网本到 Steam Deck 的性能表现,以及 WebGPU 与传统 OpenGL 等图形 API 选择展开了深入讨论。该工作也引发了关于 AI 辅助重编译如何影响游戏保存、盗版风险以及商业游戏开发长期激励的更广泛问题。

技术方案与准确性

  • 将 PS2 的“EE”代码静态 AOT 重编译为 WebAssembly / 原生代码;每个基本块都会扣减一个周期预算。
  • 时序是近似的,不是逐周期精确;中断、DMA、定时器、vblank 都在基本块边界交付。
  • 评论者指出,大多数游戏是通过中断/信号量同步,所以这种方式对许多作品都有效;时序 bug 会以特定边缘情况的形式暴露出来并需要修复。
  • VU1 微程序在首次通过 DMA 上传时被捕获,按游戏进行 AOT 编译;未见过的微程序会 JIT 编译为 WASM。
  • 还对一些 PS2 流水线怪癖做了建模:标志位延迟、PS2 风格的非 IEEE 浮点及其钳制行为,以及在独立线程上运行的 VU1。
  • GS(图形)使用 WebGPU 计算着色器进行模拟;纹理采样是主要的 GPU 瓶颈。GS 前端和 VU1 各自都占用了大量 CPU 份额。

性能与平台目标

  • 浏览器版本在性能相当不错的核显上以 1x–2x 分辨率运行良好;集显可能会受 GPU 限制。
  • 原生 Linux 版本通过 wgpu + SDL2 使用 Vulkan(窗口、音频、手柄)。在 Steam Deck 上,1x 分辨率是现实目标;多线程原生宿主仍在推进中。
  • 讨论了是针对较旧的 API(如 OpenGL 2.1 / WebGL 1)还是更新的 WebGPU/WebGL 2.0,以覆盖更广泛硬件,以及其中复杂度与“token 成本”的权衡。

手柄与输入保真度

  • 大家非常担心会丢失 PS2 按键的压力感应能力(例如《Gran Turismo》中的用法)。
  • 有人表示使用特定的 PS2-to-PS3 转接器和带正确曲线的现代手柄取得了成功;也有人觉得映射并不令人满意,或者人体工学很糟。

分发、合法性与托管

  • 作者不能合法托管已编译的游戏构建;用户必须在本地转换自己的 ISO。
  • 有人建议把重编译器本身也运行在 WASM 中,让转换在客户端完成,从而避免分发受版权保护的资产。
  • 在浏览器中托管完整游戏被拿来与其他灰色地带档案站比较;大家预计可能会遭遇下架。

AI、信任与术语

  • 对 AI 参与的重编译反应不一:一方面为技术进展感到兴奋,另一方面对其对程序员职业的影响感到沮丧。
  • 对那些声称“没有模拟”的项目持怀疑态度,因为它们仍然会解释某些核心(例如 IOP)或大量建模硬件。
  • 有人抱怨某些“原生移植”其实只是把模拟器和 ROM 打包在一起,这让真正的重编译更难被找到。
  • 安全担忧:原生反编译程序可能隐藏恶意软件;也有人认为 WASM 相对更安全,但模拟器/ROM 生态长期以来一直存在信任问题。

盗版、激励与游戏保存

  • 围绕简单重编译/重新托管是否会削弱制作大型预算游戏的激励展开了争论。
  • 反方观点:盗版几十年来一直存在;人们仍然会购买游戏,而且老游戏往往本来就不再销售或获得支持。
  • 不少人认为这些重编译是保存手段,也是跨平台、跨设备重新原生体验经典作品的一种方式,包括嵌入式设备和掌机 PC。