【硅谷革命】20. 苹果 II 鼠标卡

原文链接:Apple II Mouse Card
作者:安迪·赫兹菲尔德

时间:1981 年 6 月
人物:安迪·赫兹菲尔德、伯瑞尔·史密斯、丹·考奇、比尔·巴齐、史蒂夫·乔布斯、巴德·崔博、比尔·阿特金森
概要:我们给苹果 II 连上了鼠标

mouse_card.jpg
苹果 II 鼠标卡原型

伯瑞尔的麦金塔设计在许多方面颇具雅心妙思,他始终使用最少的硬件资源获得最大的价值。鼠标接口就是一个典型的例子,仅使用了伯瑞尔置入的通用型 6522 多功能转换接口芯片(VIA)的一小部分基本功能。鼠标挂在 6522 上,所以每次鼠标垂直或水平移动一分的时候,都生成一个中断信号,只用一条一位(1-bit)容量的细线来感应鼠标按钮的操作。就这么简单,其他的都由软件完成。

同时,我的好朋友比尔·巴齐,天才的苹果 II 游戏程序员,提出了一种匪夷所思的快速方法,使用七个预转换表格,就能在苹果 II 图形屏幕上绘制大小适当的文本。他还写了一个非常快的 BitBlit 程序(BitBlit 是图形用户界面中最重要的图形基元)。它会立即寻找鼠标的连接,这样苹果 II 上才算是拥有了一个完整的图形用户界面。

巴德·崔博已经为麦金塔写了驱动鼠标的初始代码,而我必须对其进行维护,所以我很清楚它是如何工作的。我头一年就已经用上了 6522 芯片,因为苹果 III 配备得有,我对它进行了编程,将比特输出到 Silentype 热敏式打印机【苹果出品的第一款打印机——编者注】。我意识到,把鼠标接到苹果 III 上,所需要做的不过是制作一个简单的连接器,将适当的信号发送到正确的针脚。

我叫丹·考奇手工做了一个连接器。做好后,只用了几个小时就写完了指针程序和驱动程序。一个完整的苹果 III 图形用户界面已初现端倪,而无需附加任何硬件。

这非常令人兴奋,足以让我立即着手帮助比尔·巴齐完善程序,但我很谨慎地确保这些事情不占用我正常的工作时间。很快,我们把下拉菜单也做好了,然后完成了一个简单的、字体比例适当的文字处理器。惟一的问题是苹果 III 卖得不是很好,因此我们必须要让它运行在苹果 II 上。

我去和伯瑞尔谈这个问题,结论很简单:为苹果 II 制造一个包含 6522 VIA 芯片的外设卡。第二天伯瑞尔拿出了一个绝妙的双芯片设计,就是一枚 VIA 芯片,加上一个用于同步的微型触发器(flip-flop)。

为了让鼠标指针移动时不闪烁,麦金塔和苹果 III 的代码都使用了一个垂直消隐中断(vertical blanking interrupt),即是在时间间隔期间没有视频加载时绘制指针。与麦金塔和苹果 III 不同,苹果 II 没有使用垂直消隐中断。伯瑞尔的设计中最精彩的部分,就是做到了(鼠标指针)既与视频同步,又不用加一根线来拾取视频信号。

6522 芯片有一个定时器,能够在特定时间间隔生成一个中断。问题是如何将其与视频同步,因为视频的生成不经过处理器。伯瑞尔解决了这个问题,通过将多余的触发器连接到数据总线的低位(low bit),捕捉视频数据信号,从而使处理器能够读取。

为了与视频同步,伯瑞尔让我填满苹果 II 的帧缓冲器,于是数据总线低位在大多数时间都处于开启状态,但是在最后一根扫描线结束时进入关闭状态。我写了一个常驻程序,它会快速循环,读取锁存。当低位改变时,我们就能够知道垂直消隐时间间隔已经刚刚开始了。

苹果 II 速度还不够快,跟不上自己的帧缓冲器。视频数据每微秒传输一个新字节,这也正是一个处理器周期。完成一次循环至少需要 10 个处理器周期,所以就有低位不出现改变的风险。但伯瑞尔找到了一个绕开这个问题的办法:如果循环时间与显示频率互为质数,那么它最终是可以被计算出来的。我写了一个 17 微秒的循环,刚刚合适,看到它能够完美地运行我们非常开心。

比尔·阿特金森已经告诉史蒂夫,因为 6502 处理器的弱点,以及沃兹繁琐的帧缓冲器,在苹果 II 上不可能实现令人满意的图形用户界面。但是,在 1981 年的夏天,通过对软件的进一步完善,我们已经为苹果 II 完成了一个很酷的小型图形用户界面程序,以及一个匀称的文本文字处理器。我们想我们手中已经有了一个有潜在价值的产品。

我们迟迟不愿拿去向史蒂夫展示,我们知道他会想将其充公。但是他从别人哪里听说了,要求看一看。我们把它展示给他看,然后,不幸地,他爱上了它。但是他也坚称苹果拥有它的所有权,即使这是我们利用私人时间研发的。

mousepaint_t.jpg
比尔·巴齐的 MousePaint

其实史蒂夫不能坚持苹果完全拥有它,因为那时比尔·巴齐不是苹果员工。但是史蒂夫却可以拥有对于界面卡的完全所有权,他说那是利用苹果的资源进行研发的。伯瑞尔和我很沮丧,因为那是我们在私人时间完成的,我们认为应该为此得到报酬,但是这与史蒂夫争辩是一件很难的事情,尤其是在钱方面。

最后我们把伯瑞尔的设计移交给苹果 II 部门,但是他们认为苹果 II 无法适当处理中断(即使我们已经证明了它可以做到),于是他们添加了大量硬件,最后以超过一打的芯片完成了工作。史蒂夫与比尔·巴齐做了一笔交易,最终促成了 MousePaint,一个捆绑了鼠标卡的用于苹果 II 的 MacPaint。伯瑞尔和我很快就淡忘了这件事情,但是总会偶尔觉得有点难过。这件事也激发了我们后来脱离苹果,为自己工作。(翻译:Qian Gang;一校:Mark Chen;二校:Jix Huang

《硅谷革命》连载之 1 - 20