1985年,我曾经致力于实现一种机器的计算机化,这种机器用来给瓶底贴商标。有家公司制造了这种机电控制的机器,把商标卷在滚轮上,然后贴到传送带上的产品(比如洗发露的瓶底)的表面。整个工作需要精确到毫米级,因为消费者不喜欢看到贴得歪歪扭扭商标。 不幸的是,机电控制不像计算机控制那样灵活,因此这家公司跟一家本地的技术院校签约,制造基于KIM-1的计算机控制的机器原型,而我正在此学校学习电子技术。另一名学生也被招进来搞这台机器,包括传送带,商标分贴机制,步进电机控制机制,用于检测标签和产品的红外传感器。 我的工作是用6502汇编语言编写软件。不幸的是,当时没有汇编器并且KIM-1只有一个十六进制键盘和一个小小的显示屏。所以,这意味着只能手写代码,手工汇编并把机器码键入进去。代码看起来像这个样子: 很明显计算机控制将会非常灵活。这个程序首先进行自动测量:卷轴上商标的长度,商标之间的距离,以及确保操作员快速摆好伸出距离(保证商标伸出时刚好能被产品接住)。 它能够在运行时自动检测传送带的速度,实现运动补偿,以及在商标不够用时(卷轴剥离发生故障)停止传送带。 当然,像这样编写代码是一种痛苦。首先你不得不手写代码(蓝色部分),然后把它转换成机器码(红色部分),并且计算每条指令和相对跳转的内存位置。那时我还没有能够用于计算十六进制的计算器,所以自己完成了大部分的计算(相对跳转则用了心算)。
但是,这教给我两件事情:第一次就把事情做对和在自己的大脑里运行代码。后一件直到今天仍然重要。在调试时,我不断在大脑中运行代码,在使用gdb或者其他调试器之前我就用人脑调试器工作了。KIM-1只有最基本的调试功能,我只把少数编进程序,大多数的调试工作是查看输出(十六进制显示屏),步进电机的行为,以及在大脑中运行代码。 如果感到好奇的话,这里可以查看完整的程序。 另外,有人指出就1985年当时来说,KIM-1已经相当落后,并且那时编译器也已经出现了等等事实。没错。实际上,在该工作前我就已经在CP/M上使用BASIC和ZASM(Z80汇编程序),但是你必须受限于条件的限制:这家技术学院有一台空闲的KIM-1,它有良好的I/O能力,作为一台嵌入式控制器的原型系统还是相当不错的。 |