【硅谷革命】10. 半字节

《硅谷革命》一书的翻译可谓命运多舛,去年我们发起这个项目的时候,很多读者积极地参与了翻译这本记叙麦金塔诞生和苹果公司早期发展的回忆录。后来,由于校对人手不足,这本书的翻译工作暂停了下来。但这事如同幽灵一般缠着我们,每每想到这个翻译项目会成为 Apple4.us 的一个烂尾工程,想到曾经参与过以及将来还会参与翻译工作的了不起的你们会觉得浪费了脑力和时间,我们便自责难抑。有心的你们也许已经发现,「《硅谷革命》翻译进行时」的按钮在悄悄消失了一段时间之后,重又出现在本站右栏。是的,我们决定恢复此书的翻译和校对工作,并且从今天起,以每两天一篇的发布速度推进。我们要感谢很多热诚的读者,他们主动提出帮助我们继续此书的翻译和校对,而「最后一根稻草」则来自 Mark Chen 同学。好啦,闲话少说,让我们一起沿着当年苹果天才工程师安迪·赫兹菲尔德的记忆之路,继续行进吧。

9. 半字节
原文链接:Nybbles

作者:安迪.赫兹菲尔德
时间:1981 年 2 月
人物:安迪·赫兹菲尔德、史蒂夫·沃兹尼亚克、伯瑞尔·史密斯、布莱恩·霍华德
概要:我在麦金塔项目上的第一份工作

Apple II Disk Drive
苹果 II 的磁盘驱动器

我在麦金塔项目上的第一份工作是帮助伯瑞尔·史密斯和布莱恩·霍华德来验证磁盘控制器是否正常工作。他俩把沃兹型磁盘控制器和麦金塔原型机连了起来,但还得写一个相当复杂的程序,方能测试其效果。

我刚去那里的时候,他们正在调试两人共同编写的一个 68000 上的程序。他们用一个简单的循环语句来访问磁盘控制器,然后用逻辑分析器来观察代码行情况。但是他俩都算不上真正的程序员,于是我立即就派上了用场,尽管之前我也从未给 68000 写过程序。 

苹果 II 完成 6 个月后,其磁盘控制器才设计出来,这是史蒂夫·沃兹尼亚克的一个伟大成就。他用五块芯片做出来的磁盘控制器,性能却胜过四倍于同价格的同类产品,原理是他把大部分硬件负担的任务交给软件处理。沃兹所用的方法是,由软件负责所有的编码、解码、头步进等等工作,从而使得整机性能的提升超越了当时的常规技术手段。

那段日子,大多数软盘使用了一种「FM 编码」存储技术,即在每个数据位前面放置一个时钟位,以提高可靠性。但使用这种手段有点没必要,如果某些时钟位能替换成数据位,磁盘就能存储更多数据。于是沃兹用了一项叫做「组编码」(group encoding)的技术(沃兹把它叫做「半字节化」),每 8 次跳变可以获得 5 个数据位而不是 4 个。后来他又研究出了从 8 次跳变中获得 6 个数据位的方法(从原来的 13 扇区变成了 16 扇区,而普通的磁盘是 10 扇区),磁盘的数据容量也因此而增加。

软件每次能在磁盘控制器的移位寄存器里存储 8 个跳变。由于每个跳变的时长是 4 微秒,每半字节(即 4 位——译者注)数据就需要 32 微秒。沃兹设法在每半字节的读取间歇进行隔行数据解码,使得机器性能实现了终极提升。但因为苹果  II 的微处理器不够快,并且进行写操作对时间精确度要求更高,所以他一直没能做到在读取过程中进行编码。

而麦金塔的微处理器速度至少是苹果 II 的四倍,在 32 位运算时差不多快了 10 倍,因此在麦金塔上让程序执行隔行写操作就易如反掌了。这一点颇让我开心,我可以很轻松地突破提升磁盘性能这个难关。但是,在此之前我必须解决另一个棘手的问题。

沃兹所使用的磁盘技术要求软件能精确地每 32 微秒就写入新数据。如有一微秒误差,都会导致数据受损乃至被毁。为了编写这个程序,我需要知道麦金塔执行每条指令的效率。手册上已经给出了每条指令的时钟数,但我不知道从内存中读取数据需要多久。所以自然而然地,我向伯瑞尔询问时长的问题,但是他的回答却让我大吃一惊。

「我哪知道。麦金塔是同步工作的,跟苹果 II 一样,每个指令执行时都有相同时长,这样你写的磁盘程序才能做到时长精确。我不知道从内存中读取数据需要多久,我们测一下吧。不如你先把程序写出来,然后我们用逻辑分析器来测量。」

于是我花了几天时间编写基本程序,然后与伯瑞尔和布莱恩坐在逻辑分析器前,观察每条指令的执行,记录每条指令的耗时。大部分程序的执行都和我们预想一样,但偶尔也有出乎意料的状况,我不得不调整代码。做了一些修正后,我这个原始磁盘程序实现了读写操作,并在执行过程中完成编码解码,实现了沃兹长久以来的目标。

我以为在最终实现磁盘读写的时候我会欣喜若狂,但实际上我仍不满意,因为这还不是真实的操作环境。就在那之前一年,沃兹写出隔行数据读取的磁盘程序后不久,我为苹果  II  制作了一些快速幻灯片盘,能在屏幕上不到一秒就换一幅新图像,比之前的最快记录还快两倍。我想,用新的磁盘程序在麦金塔上显示那些幻灯片集,应该会相当好玩。

当时已近晚上 7 点,其他人都出去吃晚饭了。他们叫我同去,但当时我的幻灯片马上就可以实现了,在完成之前实在没什么心思吃饭。最后我成功的时候,办公室就我一个人,麦金塔原型机以最快的速度从苹果 II 的软盘上读取和显示图像。这是目前为止麦金塔机所能做到的最酷事情。大家晚餐回来后,我兴高采烈地给他们做了演示。(翻译:FengDun;一校:Mark Chen;二校:Jix Huang)

连载 1:我会是你最好的朋友

连载 2:我们试试看吧

连载 3:唐老舅

连载 4:关键的是胡须

连载 5:好地方

连载 6:我发明了伯瑞尔

连载 7:德士古塔楼

连载 8:「乔氏力场」

连载 9:黑色星期三

连载 10:半字节