snuri00/psp-web-recomp 仓库展示了 PSP 游戏如何在不使用传统模拟器的情况下直接在网页浏览器中运行。该项目不是在运行时解释 MIPS 机器码,而是进行静态重新编译:它将游戏的可执行文件提前翻译为 C++,将该 C++ 编译为 WebAssembly,并链接到一个通过 WebGL2 渲染的 PSP 操作系统和图形芯片的重新实现。这种方法使得诸如《战神:奥林匹斯之链》之类的标题能够从启动引导开始运行,穿过菜单、过场动画和战斗,并可通过屏幕触摸输入进行控制。
此图展示了文章中所述的静态重新编译方法,其中游戏代码被编译为 WebAssembly,并链接到重新实现的 PSP 操作系统和图形层。

此图显示了游戏的标题菜单,确认该项目能够启动游戏并到达文章中提到的初始画面。
性能的提升来自 README 中记录的一系列优化。项目指出,《战神》原本每显示一帧大约会绘制八帧,因为它在未等待垂直同步的情况下交换帧缓冲区;通过在一个垂直同步内将交换线程保持两次直至下一个同步,使得每帧显示的工作量降至原来的八分之一。Firefox 特定的修复为每次绘制提供了一个小的索引缓冲区,以避免重新验证开销;并通过跟踪哪些矩形和常量值实际发生变化来优化模板缓冲区操作,使得每帧在 4× 分辨率下的额外像素处理从六千万降至约七百万。图形芯片及其 WebGL 上下文在带有 OffscreenCanvas 的工作线程中运行,因此帧时间由较忙的线程决定,而不是两者之和的总和。因此,《战神:奥林匹斯之链》在笔记本电脑上的 Chrome 和 Firefox 中可以达到 60 fps,而《斯巴达的鬼魂》则在三倍原生分辨率下运行时可达 55–60 fps。

此截图展示了文章中所述的游戏运行情况,说明了重新编译的 PSP 标题在浏览器中的成功执行。
该仓库强调,该技术目前仅展示了两个使用相同引擎的 Ready at Dawn 作品,其他游戏可能会因未实现的系统调用或不受支持的图形特性而停止,日志中会出现 '[hle] 未实现 …' 的提示。用户需要自行提供他们所拥有游戏的光盘映像,因为出于版权限制,项目未包含任何游戏数据,且生成的 WebAssembly 二进制文件属于游戏权利人的所有。虽然有些评论者认为对 PSP OS 函数的高层仿真仍然算是一种带有额外步骤的模拟器,但该项目定位为一种保存路径,使得老旧 PSP 作品能够在不需要原始硬件的情况下得以访问。