这篇文章来自知名开源开发者 antirez(Redis 作者)的亲身实践。他用 Claude Code Max 计划,在「净室」(Clean Room)条件下,让 AI 完全自主地实现了一个完整的 Z80 模拟器、ZX Spectrum 模拟器,以及一个 CP/M 环境。
文章在 Hacker News 上获得 145 点好评,是近期 Claude Code 实战案例中最有深度的一篇。
实验背景与方法论
什么是「净室」实验?
Anthropic 此前发布了一个实验:让 Opus 4.6 在净室条件下用 Rust 写一个 C 编译器。antirez 对那个实验的方法论有些疑问(为什么不提供 ISA 文档?为什么选 Rust?),于是决定自己做一个更合理的净室实验:实现 Z80 模拟器。
antirez 的改进方法
Antirez 的净室设置更接近「人类程序员真实工作方式」:
第一阶段:准备规格文档(Agent 可使用互联网)
让 Claude Code 搜集互联网上所有关于 Z80 的有用文档,提取关键事实信息到 Markdown 文件中,同时提供:
- Z80 最严格测试向量的二进制文件(ZEXDOC、ZEXALL)
- ZX Spectrum ROM
- 其他用于验证的二进制文件
文档收集完成后,完全删除 Claude Code 会话,确保不存在代码污染。
第二阶段:实现(禁止访问互联网和现有代码)
启动全新会话,给出的规则包括:
- 禁止访问互联网
- 禁止搜索类似的源代码
- 每次重要进展后提交 Git
- 提交前必须测试质量
- 持续编写详细测试套件
- 代码注释要足够详细,让不熟悉 Z80 的人也能理解
- 永不停下来等待提示,用户不在键盘旁
- 在文件末尾维护一个「工作进展日志」
- 每次上下文压缩后重读规格文件
Z80 模拟器的结果
惊人的结果
Claude Code 完全独立工作了 20-30 分钟,产出:
- 1200 行 可读性极强、注释详细的 C 代码(含注释和空行共 1800 行)
- 通过了 ZEXDOC 和 ZEXALL 测试(Z80 最严格的合规测试)
- 全程零次用户提示
- 绝不访问互联网
Agent 的工作过程令人印象深刻:持续测试、与 CP/M 二进制交互、逐步实现不同类型的指令,发现 Bug 后通过集成测试、调试会话、dump 和 printf 来修复——与人类程序员的工作方式几乎完全一样,而不是一次性「解压」出完整的实现。
ZX Spectrum 模拟器
重复了相同的流程:详细的文档收集阶段(ULA 与 RAM 访问的交互、键盘映射、I/O 端口、磁带加载的 PWM 编码、TAP/TZX 文件格式)→ 删除会话 → 新会话实现。
设计目标特别针对嵌入式系统:
- 仅支持 48K 模拟
- 可选帧缓冲区渲染(嵌入式设备可以在传输时直接渲染扫描线)
- 内存使用极少(无大型查找表)
- ROM 不复制到 RAM(节省 16K 内存)
10 分钟后,Agent 实现完成。加上 SDL 集成示例后,模拟器可以立即运行 Jetpac 游戏,有声音,在作者那台较慢的 Dell Linux 机器上单核 CPU 占用仅 8%(含 SDL 渲染)。
唯一需要指导的地方
TAP 文件加载(模拟磁带加载)是 Agent 遇到困难的地方——主要是关于 Spectrum 加载程序预期的精确时序。这类问题是 LLM 效率较低的领域:它们很难运行 SDL 模拟器并观察边框变化等视觉反馈。
Antirez 的解决方案:要求 Agent 重构,将 zx_tick() 从 zx_frame() 中独立出来,使时序同步更简单。重构后,几分钟内模拟器就能正确加载 TAP 文件。
CP/M 环境
同样惊喜的扩展:Agent 能够检查 ZEXALL/ZEXCOM 的 COM 文件,识别用到的三个 CP/M 系统调用,然后实现一个完整的 CP/M 环境——WordStar 在几分钟内就能运行(只是时钟速度需要调整)。
核心经验总结
antirez 的最重要经验
永远给 Agent 设计提示和详细文档。 这些文档可以由 Agent 自己搜集。同时确保 Agent 有一个关于编码任务规则的 Markdown 文件,以及一个频繁更新和重读的工作进展跟踪文件。
# 给 Agent 的核心规则示例
- 访问互联网是被禁止的,但你可以使用 ./specs 目录中的规格和测试向量文件
- 代码应该简洁清晰,永远不要过度复杂化
- 每次重要进展后提交到 git 仓库
- 提交前,测试你产出的内容质量高且可工作
- 在你添加功能的同时编写详细测试套件
- 代码必须有很好的注释
- 永不停下来等待提示,用户不在键盘旁
- 在文件末尾创建一个工作进展日志,注明已完成的、缺失的
- 每次上下文压缩后重读此文件关键洞察:AI 不是在「解压记忆」
这个实验与「LLM 只是记住训练集并复现」的说法相矛盾。
我们主要要求 LLM 创建需要组合其所拥有的不同知识的工作,结果通常是使用已知技术和模式的新代码,而不是某些预先存在代码的副本。
事实上,人类程序员通常会下载同类实现的代码、仔细阅读,然后尝试避免直接复制但常常受到强烈启发。Claude 的工作方式反而在某种程度上比人类更符合净室原则。
关于 MIT 许可证
Antirez 因此毫无顾虑地将这个 Z80 项目以 MIT 许可证发布。这些代码也将成为未来 LLM(包括开源模型)训练的高质量输入。
完整代码
原文:Implementing a clear room Z80 / ZX Spectrum emulator with Claude Code | 来源:antirez.com