回到 1985 年,我还在给一个设计成给瓶子贴标签的机器计算机化。制造这个机器的公司用机电控制,将标签从卷轴上撕下帖到传送带传来的产品(例如洗发液瓶子)上。整个过程需要工作在毫米级精度上,因为消费者不喜欢没有完全对齐的标签。
不幸的是,机电控制不像电脑控制那样灵活,因此该公司与当地一所工学院(我正在该校学习电子学)签订了合同,用 KIM-1来设计电脑控制原型。另一个学生整合机器,他把传送带,标签发放机制,步进电机控制,还有探测标签和产品的红外感应器进行组装。
我的工作是用 6502 汇编语言写软件。不幸的是,没有编译器,而且 KIM-1 只有一个十六进制的小键盘和一个小的显示屏。因此这意味着要手工写代码,手动编译和打字。代码是这样子的:
很快电脑控制需要变得更加灵活。程序首先自动校验:测量卷轴上的标签自身的长度,测量标签之间的距离,并且它启用了一个运算器快速设立”悬挂”距离(标签要伸出去多少才能让产品抓到)。
在运行中,它要能自动检测传送带移动的速度,还有当供应卷轴上的标签缺失时(当一个卷轴意外掉落时就会发生)进行补偿和标记。
当然像这样写代码是一种痛苦。你首先必须写完代码(蓝色),然后转化成机器码(红色),并计算每个指令的内存地址和相对跳转地址。那时候我没有能够计算十六进制的计算器,所以我自己完成大部分所需的计算(如在大脑里计算相对跳转地址)。
然而它教会了我两件事:在第一时间写对代码 和 学会在大脑中运行代码。后者至今仍然重要。我调试时还是会先在大脑里跑一遍。通常情况下我会先于 gdb 或类似的工具,使用我的大脑调试器。KIM-1 里只有最基本的调试功能,我在程序里也写了点,但是大部分调试都是盯着输出(十六进制显示屏上),(步进器的)行为看,还有在脑子里运行代码。
如果你好奇,这里是整个程序。
PS:一些读者指出在 1985 年 KIM-1 离先进水平还很远,而且我们有很多好东西例如编译器等等。是的。事实上比这还早的时候我用 BASIC 和 ZASM(Z80 编译器)在 CP/M下编程,但是你是用你已有的条件来干活的,工学院有空闲的 KIM-1,它有不错的I/O,因此它是制作嵌入式控制器的很好的原型系统。