实战

实战:用 Claude Code 从零开发 Z80/ZX Spectrum 模拟器的完整经验分享

Redis 作者 antirez 分享了用 Claude Code 在净室条件下完全自主开发 Z80/ZX Spectrum 模拟器的完整经验。Claude Code 独立工作 20 分钟,产出 1200 行高质量 C 代码,通过了最严格的 ZEXDOC/ZEXALL 测试,全程零次用户提示,揭示了正确使用 Claude Code 的关键:提供详细设计文档和规格说明。

2026/2/285分钟 阅读ClaudeEagle

这篇文章来自知名开源开发者 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 文件,以及一个频繁更新和重读的工作进展跟踪文件。

markdown
# 给 Agent 的核心规则示例

- 访问互联网是被禁止的,但你可以使用 ./specs 目录中的规格和测试向量文件
- 代码应该简洁清晰,永远不要过度复杂化
- 每次重要进展后提交到 git 仓库
- 提交前,测试你产出的内容质量高且可工作
- 在你添加功能的同时编写详细测试套件
- 代码必须有很好的注释
- 永不停下来等待提示,用户不在键盘旁
- 在文件末尾创建一个工作进展日志,注明已完成的、缺失的
- 每次上下文压缩后重读此文件

关键洞察:AI 不是在「解压记忆」

这个实验与「LLM 只是记住训练集并复现」的说法相矛盾。

我们主要要求 LLM 创建需要组合其所拥有的不同知识的工作,结果通常是使用已知技术和模式的新代码,而不是某些预先存在代码的副本。

事实上,人类程序员通常会下载同类实现的代码、仔细阅读,然后尝试避免直接复制但常常受到强烈启发。Claude 的工作方式反而在某种程度上比人类更符合净室原则

关于 MIT 许可证

Antirez 因此毫无顾虑地将这个 Z80 项目以 MIT 许可证发布。这些代码也将成为未来 LLM(包括开源模型)训练的高质量输入。

完整代码

项目地址:github.com/antirez/ZOT


原文:Implementing a clear room Z80 / ZX Spectrum emulator with Claude Code | 来源:antirez.com

相关文章推荐

实战Claude Code 命令行工具开发实战:用 AI 快速构建专业 CLI 工具Claude Code 辅助命令行工具(CLI)开发的完整实战指南:Python Click/Typer、Go Cobra、Rust Clap 技术栈选型、用 Claude Code 生成完整 CLI 项目结构(参数解析/子命令/全局选项)、交互式提示和彩色输出、配置文件管理、Shell 自动补全生成、跨平台打包(PyInstaller/goreleaser),以及发布到 PyPI/npm/Homebrew 的完整流程。2026/3/26实战Claude Code Vue 3 实战完全指南:Composition API 开发到企业级前端工程化Claude Code 辅助 Vue 3 开发的完整实战指南:Composition API 组件生成(setup/ref/computed)、Pinia 状态管理代码生成、Vue Router 4 路由配置、TypeScript 类型定义生成(Props/Emits)、Composables 抽象、Vitest 单元测试生成、性能优化(虚拟滚动/v-memo),以及 Options API 迁移和响应式丢失问题排查的 Prompt 模板。2026/3/26实战Claude Code Django 实战完全指南:从模型设计到 REST API 开发全流程Claude Code 辅助 Django 开发的完整实战指南:用 Claude Code 生成 Django 项目结构和 Models(含迁移文件)、Django REST Framework(DRF)API 开发(Serializer/ViewSet/Router)、用户认证系统(JWT/Session/第三方登录)、Django ORM 查询优化(select_related/prefetch_related/annotate)、异步任务(Celery + Redis)、测试用例生成(pytest-django)、Docker 化部署,以及在现有 Django 项目中快速定位和修复 Bug 的 Prompt 技巧。2026/3/26实战Claude Code Rust 实战完全指南:从所有权错误到高性能系统编程Claude Code 辅助 Rust 开发的完整实战指南:用 Claude Code 理解 Rust 所有权(ownership)、借用(borrow)和生命周期(lifetime)报错、生成符合 Rust 惯用法的代码(使用 Result/Option/迭代器)、借助 Claude Code 快速上手异步 Rust(Tokio/async-await)、实战案例(CLI 工具/HTTP 客户端/WebAssembly 模块/系统命令行工具)、Cargo.toml 依赖管理优化、unsafe Rust 代码的安全审查、Rust 与 Python/Go 代码互操作,以及最有价值的 Rust Prompt 模板。2026/3/26实战OpenClaw 与 Claude Code 协同使用实战:AI 聊天助手 + AI 编程助手的终极组合OpenClaw 与 Claude Code 协同使用的完整实战指南:两款工具的定位差异(OpenClaw=聊天AI助手框架,Claude Code=代码库直接操作的编程工具)、在 OpenClaw 中通过 exec 工具调用 Claude Code CLI(claude 命令)执行编程任务、把 OpenClaw 的 Telegram 消息转化为 Claude Code 任务(用自然语言描述→Claude Code执行→返回结果)、使用 OpenClaw Cron 定期触发 Claude Code 执行代码审查/依赖更新/测试/文档生成、CRS 代理在两者中的统一接入方案,以及常见的协同架构模式(主动触发/被动响应/定时执行)。2026/3/24实战Claude Code + NestJS 实战:用 AI 构建企业级 TypeScript 后端服务Claude Code 与 NestJS 框架深度协作实战:模块化架构设计(Module/Controller/Service/Provider)、让 Claude 生成符合 NestJS 惯例的 CRUD 模块、依赖注入系统的 AI 辅助使用、Guards 认证守卫(JWT/Role-based)、Interceptors 全局日志与请求变换、Pipes 数据验证(class-validator)、Exception Filters 统一异常处理、TypeORM 集成与数据库迁移、Swagger 文档自动生成,以及 NestJS 微服务(Microservices)架构入门。2026/3/21