AI News HubLIVE
站内改写2 分钟阅读

使用AI编码代理与基于oracle的测试构建游戏模拟器

在这篇客座文章中,Patrick Nadeau讲述了他利用AI编码代理从头构建Intellivision模拟器的历程。他使用现有模拟器jzintv的测试oracle验证CPU核心,AI加速了开发进程——从第5小时显示第一个像素到第36小时完成可玩的系统。他还添加了调试端口,让AI能实时控制游戏。尽管成功,Nadeau反思了AI利用他人代码的伦理问题以及与人机协作的复杂感受。

来源Hacker News AI作者: throwaway_2494

这是Patrick Nadeau客座系列的第一部分。作为加拿大研究工程团队的成员,他以个人而细致的视角,探索了使用AI编码工具解决一个极具趣味的编程挑战的经历。

童年时,家中只有两台计算设备:Intellivision游戏机和Apple II电脑。数十年后,当他第一次使用编码代理时,他不由自主地回到了这些机器上。记得妹妹将手镯掉进Intellivision的通风孔,父亲打开外壳修理;他也曾拆开Apple II,追踪CPU到RAM和ROM的线路。从BASIC到汇编,他沉浸在编程手册中。

父亲的一位朋友经营电子商店,曾请他设计Apple II的希腊字符集。他用方格纸描绘字母,编码成二进制文件,带到市中心商店。他们将字符集烧录到ROM,插入芯片,看着每个字符出现在屏幕上——那份喜悦至今难忘。

如今,他依然喜欢在节假日玩Intellivision老游戏。但使用的模拟器每次系统更新都会崩溃,需要丑陋的hack才能工作。于是,他决定自己从头编写一个模拟器,目标是在下个圣诞节前完成。

他先从CPU入手,手工编写指令解码器和核心。为了验证代码,他从旧模拟器jzintv中提取了CPU实现,通过测试oracle比较每条指令对寄存器、标志、RAM和周期数的影响。构建oracle花费了大量精力,却成为项目最关键的设计决策。

到三月中旬,他独自完成了一个基本可用的CP-1610 CPU核心,但缺少总线、视频和声音,离真正运行游戏还有距离。与此同时,公司开始鼓励使用编码代理。他最初持怀疑态度,让AI写一个解析器,但结果有两大缺陷。当他展示自己的代码时,AI承认他的版本“在所有重要方面都更好”。但他需要工作模拟器,加上已有可靠的测试oracle,于是再次尝试,这次引导AI工作。

第5小时,屏幕上出现了第一个像素,熟悉的彩色测试条。第10小时,渲染管线就绪。第21小时,首个卡带ROM启动。第28小时,他收藏的所有204个ROM都成功启动。第32小时,屏幕上有了移动。第36小时,完整的Intellivision系统运行起来,他通过手柄玩游戏并听到声音。

接下来几天,他们添加了旧模拟器几乎不可能实现的功能。他灵机一动:能否给模拟器添加调试端口,让AI窥视运行中的机器,检查内部状态,甚至实时控制?他欣喜地看着AI从内部控制游戏,甚至叫来妻子,输入“向左移动飞船”,飞船就动了。他还让AI找到飞船被击中的代码位置,添加了玩家被击中时手柄震动功能——这太疯狂了。

但兴奋过后,不适感涌上心头。编码代理之所以能如此高效,是因为它们捕获(有人说是窃取)了数百万程序员的辛勤工作——他们通过艰苦学习,自由分享代码。然而,他的模拟器离不开Joe Zbciak多年开发jzintv的成果。测试oracle不也正是自动化提取他知识的方式吗?

令他惊讶的是,整个过程仍如此熟悉。AI写了大部分代码,但当他们迷失方向时,答案仍需从他心中涌现,他仍需足够渴望得到它。他最终真正进入了童年那些芯片内部——当父亲打开主机外壳时他第一次看到的那些芯片。他感到自己得到了一些东西,同时也失去了一些。

希望读者喜欢这篇分享。后续文章将深入探讨Patrick的旅程。