用 Claude 读 68000 汇编把 30 年前的 Amiga

内卷王脚本小子 高级 2天前 673 浏览 13 点赞 约 2 分钟

直接看结论:用大模型读老旧的汇编代码做逻辑迁移,效率比人工翻笔记快得多。我试着把 1993 年在巴格达写的 Amiga 游戏移植到 Godot 引擎,整个核心逻辑的迁移过程在 Claude 的帮助下只花了一个晚上。当然,要把手感调对并最终发布,后面又花了几个周末的打磨时间,但最难的“翻译”工作被 AI 瞬间解决了。

这次移植最硬核的地方在于,我直接把 MC68000 汇编代码喂给了模型。对于大多数开发者来说,汇编代码的可读性极差,但 LLM 在处理这种确定性极强的底层语言时表现出奇地稳定。为了验证模型理解得对不对,我让它在 Mac 上使用 vasm 尝试重新组装代码。

这里有个非常细节的坑,值得记录下来:模型在尝试还原二进制文件时,发现结果与我 30 年前的原始二进制文件有 108 个字节的偏差。这其实揭露了一个当年的技术细节——我当年使用的是 AsmOne,它是直接组装到内存里的,而最终保存到磁盘的文件实际上是游戏运行后的内存快照,而不是纯粹的组装输出。这种 108 字节的差异,如果靠人工对比,可能得查好几天,但模型通过对比二进制流很快就锁定了这个差异点。

在具体的迁移步骤上,我采取的是一种“记忆+代码+文档”的综合喂养法:

一、 建立上下文基准
我没有直接扔代码,而是先给了它三样东西:我这 33 年来对游戏机制的记忆描述、当年的开发笔记,以及现在的 Git 仓库。这样模型在读汇编指令时,知道这个寄存器操作是在处理地图坐标还是在算碰撞体积。

二、 汇编逻辑到 GDScript 的映射
由于 MC68000 是基于寄存器的架构,而 Godot 使用的是 GDScript(类似 Python),最关键的是把汇编里的跳转指令和标志位状态转换为现代的高级语言逻辑。比如一个简单的 CMP (Compare) 和 BEQ (Branch if Equal) 组合,在模型看来就是一个简单的 if 判断。

三、 验证与迭代
我把 1993 年的地图编辑器截图发给它,让它对照截图中的布局和汇编代码里的偏移量进行核对。在这个过程中,我发现模型对老旧硬件的内存映射(Memory Mapping)理解得相当到位,能够迅速定位到哪些代码是在操作 Amiga 的自定义芯片。

这次经历给我最大的启发是,LLM 现在已经可以充当一个极其高效的“数字化考古学家”。如果你手里有那种没有文档、只有二进制或汇编的古董项目,不要试图自己一行行翻译,直接把代码块扔给模型,然后问它这个循环在处理什么逻辑,速度会快得惊人。

至于移植后的表现,虽然逻辑迁移只要一个晚上,但“手感”这种东西是无法通过代码直接翻译的。在 Godot 里还原 30 年前那种特定的输入延迟和像素移动感,依然需要开发者手动在 _physics_process(delta) 里一遍遍调试坐标增量,这部分工作目前 AI 还替代不了。

ClaudeAI编程GodotMC68000Amiga

全部回复 (10)

老陈 专家 2天前
要是能把中间生成的那个映射表给导出来就绝了,最想看它怎么处理那些非线性跳转的,这块儿最容易翻车。
0 回复
完美主义技术宅 专家 2天前
现在的AI文风太统一了,一眼就能看出来,读起来特别累。建议作者起码用Prompt调一下语气,或者手动改改关键段落,不然真的没阅读欲望。
0 回复
阿福在路上 高级 2天前
这种极致的优化真的太迷人了,感觉这就是编程的浪漫吧!博主太强了,期待看到更多这种硬核作品。
0 回复
程序员老陈 初级 2天前
早出的话估计能吊打好几个竞品,现在才发感觉时机有点晚了。
0 回复
极客Ray 高级 2天前
直接给Claude喂代码库确实效率最高,不过AI有时候会一本正经地胡说八道,最后还是得有个懂行的人把关,不然坑太多了。
0 回复
夜猫子创业者 专家 2天前
这对比也太残酷了,我写个React组件还得对着文档查半天,人家直接让AI读汇编,这波操作真的绝。
0 回复
老阿凯 中级 2天前
其实用 Godot 这种现代引擎做复刻,最大的意义应该是为了触达更多新玩家,而不是死磕原汁原味的仿真。至于 68k 汇编,虽然可读性好,但现在谁还愿意花时间去手写啊,效率实在太低。
0 回复
数据分析师Neo 专家 2天前
Amiga的硬件手册简直是神作,当时对着那本书啃了好久才搞明白中断机制。这种古早的底层文档现在看来反而更有韵味,有没有人还留着纸质版?
0 回复
大Jerry 高级 2天前
是不是可以用二进制对比工具跑一遍?我也好奇那108字节到底差在哪,感觉这里面可能藏了什么编译器优化或者平台适配的坑。
0 回复
小阿伟的日常 初级 2天前
能不能给个具体的 Benchmark 数据?特别是内存泄漏这块,2010那个版本在长时运行下内存占用波动很大,不知道新版优化没优化掉。
0 回复

发表回复

支持 Markdown 格式