案例
z2rs:以模拟器对照逐步重建《塞尔达传说 II》的 Rust 项目
以 Rust 重建 NES 游戏《塞尔达传说 II:林克的冒险》,逐个替换游戏的 6502 例程,可运行于桌面、浏览器和 Android。内置解释器仍执行使用者的 ROM,并把已移植例程交给 Rust 实现;验证工具将 RAM、精灵、调色板和画面与参考模拟器逐帧比较。它是参考社区反汇编、以行为为准的类净室重建,而不是反编译,也还不是独立完整的引擎。
使用条件与局限
- 所审阅提交即 v0.5.2 版(2026-10-10),提供 Linux、macOS(Intel 与 Apple Silicon)和 Windows 压缩包以及适用于 Android 8.0+ 的 APK;z2rs.com 提供浏览器版本。PROVENANCE.md 表示它还不是独立的重新实现:已移植例程注册在陷阱表中,ROM 的其余部分由解释器执行。固定版本的 ports.toml 仍把全部 2,960 个例程标为未移植,因此无法从中得知有多少逻辑以 Rust 运行。
- 只接受 No-Intro 美版镜像,以去掉 16 字节 iNES 文件头后的 ROM 主体哈希识别(CRC32 BA322865)。图形、地图、文本和音乐在运行时从该 ROM 读取,仓库中不含任何游戏内容。合作模式、宽屏、高清素材包、随机化和其他增强功能均为可选附加内容;Android 版暂不支持在线合作、随机化和增强功能。
- 源码构建需要稳定版 Rust;浏览器版本另需 wasm32-unknown-unknown 目标和 wasm-pack,Android 版另需 SDK、NDK 和 cargo-ndk,桌面版默认启用的联网功能还需要 C 编译器。发布包未经代码签名。在线合作默认使用公共信令服务器,桌面版在未关闭时会显示 Discord 状态。
- z2-verify 在 tetanes-core 0.15 中与 z2rs 并行运行同一 ROM 并输入相同操作,每帧比较 RAM、电池 WRAM、精灵 OAM、调色板和帧缓冲,并对该模拟器的两处画面边缘差异作了说明性豁免。长时测试回放需另行下载的 TASVideos 录像,缺少输入时依赖 ROM 的测试会自动跳过。所审阅的工作流只负责打包发布;未发现公开的验证结果,本合集也未运行任何检查。
- 代码由唯一维护者以 MIT 发布;内置的 matchbox_socket 采用 MIT 或 Apache-2.0,游戏本身不在许可范围内。例程布局来自 CC0 的 FiendsOfTheElements/z2disassembly 子模块和 Data Crystal 资料;项目说明这是一名维护者依据这些材料完成的工作,并非双团队净室流程,且只公开了早期私有历史的快照。PROVENANCE.md 未说明编写代码所用工具,因此未确立 AI 或 REA 使用。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 游戏
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- PROVENANCE.md GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- LEGAL.md GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- guide/development.md GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- ports.toml GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- crates/z2-core/src/traps.rs GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- .github/workflows/release.yml GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- LICENSE GitHub · troyedwardsjr/z2rs · 修订 4fe7a35
- https://github.com/troyedwardsjr/z2rs/releases/tag/v0.5.2
- https://z2rs.com/