博主用Claude为KIM-1老机器编写程序
来源标题:Kim, Claude and Yaht-C
一位博主利用Claude为KIM-1等8位老机器编写程序,并介绍了相关编程书籍和工具。KIM-1是70年代的单板计算机,仅有56条指令,编程通常使用6502汇编语言。博主还提到了《The First Book of KIM》等参考资料,以及通过串口加载程序的方式。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
对我来说,这些老式8位机器的那种相对简单,自有一种吸引力。给它们编程通常就是写6502汇编语言——总共只有56条指令。你手里差不多就只有一个累加器,外加X和Y两个寄存器。没有浮点运算(连乘法都没有!)。
KIM-1在70年代全新出售时,附带三本手册:《KIM-1用户手册》《硬件手册》和《编程手册》。这些手册很权威,但读起来不怎么有趣。相比之下,《The First Book of KIM》大概就是那本缺失的手册。
除了实用程序,《The First Book of KIM》还收录了28个游戏(嗯,是娱乐程序——其中大多数是游戏)。每个程序都配有机器码和相应的汇编代码。许多程序还附带十六进制转储,方便你直接从KIM-1键盘上一个字节一个字节地敲进去。
不过,与其手动输入十六进制,KIM Monitor(PAL-2上也有)提供了几种“加载”程序的方式。在70年代,加载通常意味着从盒式磁带或通过Teletype®从纸带加载。幸运的是,只要把你的KIM-1或兼容机连上串口,你就可以把纸带格式的文本直接粘贴到串口/终端程序里来加载程序。为了避免一次性粘贴的文本太多把KIM-1冲垮,你得为串口传输字节指定一个较慢的速率(我在Mac上用CoolTerm,它就有相应的设置项)。
我问Claude,现代的6502汇编工作流会是什么样子,他(?)建议用ca65做汇编器、ld65做链接器。另外,srec_cat这个工具可以从二进制文件生成纸带格式。在一个Github仓库里,我详细记录了在MacOS上搭建6502工作流的步骤和所需组件。
于是我想,不妨试着从《The First Book of KIM》里挑出各个程序,看看能不能把它们汇编、链接起来。但《The First Book of KIM》里的汇编代码似乎并不完全符合现代(呵呵)6502汇编的规范。当然,我可以再次借助Claude来清理代码。
Claude就这么做了。KIM的ROM里有一些专用例程,比如点亮LED显示器的各段、读取键盘——在清理后的汇编里,这些例程在include文件中被赋予了equate,并在适当的地方用equate做了替换。注释现在都符合正确的语法。很多地方改用了小写,而不是当年流行的那种全大写……
Claude产出的汇编代码确实能汇编、能链接——最后一步是生成纸带。当我把纸带内容粘贴进CoolTerm,我的PAL-2加载后,程序运行得很好。
不出所料,Claude从我复制自《The First Book of KIM》PDF的程序文本里找出了不少OCR错误。而且他相当擅长此道——当然,他知道上下文:这是6502汇编,所以本该是数字零“0”的地方出现的字母“O”,一个都没漏过去。
不过让我意外的是,他还发现了代码里的不一致之处——十六进制里指定的是一个操作码,汇编里写的却是另一个。然后Claude会通过分析这两个操作码会如何影响程序逻辑,来判断哪一个才是对的。
这个狂野的LLM甚至找出了代码本身的bug——告诉我WUMPUS(Hunt the Wumpus)里有一个bug。
每次我把什么东西交给Claude,我还是会莫名地惊叹:这个……连接与权重的网络居然能搞定。我感觉自己一直在测试LLM。就像,“嗯,不知道它们能不能做这个”。
书里有一些相当聪明的KIM-1游戏。WUMPUS会让字母数字文本(勉强算吧——我是说,考虑到只有7段LED)滚动显示,告诉你身处哪条隧道、是否听到了Wumpus……FARMER BROWN则用7段LED显示几种动物的简笔画形象。
在移植这些程序、玩这些程序的过程中,我突然想到,经典的骰子游戏Yahtzee非常适合KIM-1。
我在网上稍微找了一下,但没找到KIM-1版的Yahtzee。于是,我自然而然地想到了Claude。
我内心有一部分想自己试着写。我确实想找个机会亲手写一个6502汇编程序。不过了解我的人都知道我手头同时忙活着多少事。也许对第一个6502程序来说,Yahtzee有点太野心勃勃了?
不过,指导Claude写代码的这段经历,确实让我产生了一些有趣的想法。我意识到,我仍然可以从零开始写这个游戏。老实说,我并没有仔细看他的代码,所以真写起来也不算作弊。
我可以把和Claude一起做这件事的时间看作一轮快速原型开发。由Claude操刀,我得以快速试验各种想法。即使我哪天野心上来、想自己动手做,我也清楚地知道目标是什么——而且知道它一定能成。
我就不拿自己和Claude之间来回拉扯的过程烦你了。我觉得有些人相信存在某种“魔法提示词”,只要一念就能让LLM施展魔法,那让我彻底打消这个念头。我明确地让Claude按照我自己写代码的方式来开发Yahtzee。我告诉他整个程序的想法,然后让他先做出一个状态机,能显示5次掷骰的结果,并且我作为用户可以在KIM-1键盘上输入骰子的序号,来切换哪些骰子要重掷。(我在给PAL-2 google-group写的一篇说明里,更详细地记录了其中一些提示词。)
每当他交付一部分代码,我就把它汇编、链接,然后在PAL-2上试。我会提出修改建议,或者我们就进入下一步。
我把一些在KIM-1上生成随机数的成熟代码提供给了Claude,于是在下一次迭代中,骰子
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。