1、昨天的电脑
有些人记忆时间的方法是通过他们曾经驾驶过什么样的车子,干过什么样的工作,或在什么地方住过,以及追求过什么样的情人。而我的生涯却是由电脑来划分的。 我成长期间只有过三台电脑。上面提到过的 VIC-20,是我外祖父留给我的遗产。它是“家用”电脑中的一种,是当今 PC 机的前身。般长 64 电脑后来成了 VIC-20 的老大哥,接踵而至的是 Amiga,这种机器在欧洲特别受欢迎。这些电脑从来未像 PC 机甚至苹果 II 那样流行过,我在玩 VIC 的时候,还?I 已经很流行了。 在那个年代,PC 机普及之前,家用电脑的多数程序使用的都是汇编语言。它们都有自身的操作系统,等同于 PC 机里的 DOS。由于机器不同,操作系统很可能是一种简单的格式,或是增强的格式。那时没有什么技术标准,许多公司都想控制市场。最有名的公司之一就是Amiga。我现在句子的开头都要用上“在那个年代……”,真是不可思议。 等我对 VIC-20 玩得已经很精通后,我便开始攒钱想买一台下一代的电脑。这在我生活中是一件大事。前面我已经提到过,我对我的家人在某个特定的时间住在什么地方,以及其他许多事情都记不清了,但我购买第二台电脑的过程却很难忘记。 我攒了一些圣诞节和生日的压岁钱(我生于 12 月 28 日,那两个节日基本上凑在了一起)。
有一年夏天我还参加了赫尔辛基公司清洁队,挣了一些钱。赫尔辛基的许多花园没有美化,保养得不太好,更像是一些娱乐场所和绿地,长着高高的树林。我们所做的就是锯掉长高的灌木丛并把死掉的残枝拾走--这种活儿还挺有意思。我一贯喜欢室外运动。曾经一度,我还当过邮差,但送的不是报纸而是垃圾邮件。细想起来,我在夏天基本不怎么打工。但在那些日子里还是干了一些活。总体来讲,我的钱基本都是学校发给的奖学金。 在芬兰,给学校捐款是很普遍的事情,连公立小学也有人赞助。所以从小学四年级开始学生就能得钱,发放的方式完全由建立基金的人决定。我记得有一种捐款是奖给班里最受人爱戴的学生的。当时我们六年级,全班还真的举手投票表决,看谁能得到那笔钱。顺便说一下,我当时未被选中。奖金仅有两百芬兰马克,当时只值四十美元,但对一个最受欢迎的六年级学生来说似乎已不是个小数目了。 通常情况下,在某一个学科或体育项目中有突出表现的学生都能得到奖学金。许多奖项都是由具体的学校发放或由州政府赞助的。有些奖学金随着时间的推移数目越来越少。我记得有一种奖项最后只值一毛钱。发生这种情况时,学校也会出些钱补进去,但是尽管如此数目仍然不多。这样做的目的仅仅是在每年当中把发放奖学金的传统继续下去。芬兰对学术传统非常认真,这当然不失为一件好事。 于是我作为优秀的数学学生,每年都能得到奖学金。上高中后,奖金的数目越来越大,最多的时候可以达到五百美元左右。因此我买第二台电脑的钱基本上是这么来的,我每月的生活费肯定付不起电脑钱。此外我还从我爸爸那里借了一些钱。 当时是 1986 或 1987 年。我十六或十七岁。那个时候我已不再打蓝球。决定买何种电脑之前,我花了大量时间进行了一番调查。当时的 PC 质量还不太好,我便决定不买 PC 机。 我选择的是 Sinclair QL,你们当中的许多人大概太年轻,对这种机子没有记忆。 下面是 QL 的简单历史:当时,Sinclair 是市场上 32 比特的机器之一,主要用于家庭。那家公司的创始人克里夫?辛克莱尔(Clive Sinclair)在英国等同于史蒂夫?沃斯尼亚克(SteveWosniak)。他制作出这些电脑的配套元件,然后以 Timex 的品牌在美国销售。没错,一家制造钟表的公司进口 Sinclair 的元件,然后再打着 Times 品牌在这里卖出。早期销售的也是配套元件,他后来开始销售组装好的机器。 Sinclair 的操作系统叫做 Q-DOS。这种操作系统是专门为那种电脑写的。按照当时的情况,它的 BASIC 语言非常先进,而且有着不错的图形显示。那种操作系统最令我兴奋的一个特点是它能进行多重任务处理。你可以同时操作多个程序。然而其 BASIC 部分却不是多重任务处理,所以同一时间之内你不能操作超过一个以上的 BASIC 程序。但如果你用汇编语言编写自己的程序,就能让操作系统列出时间表,把时间分隔开来,这样你就可以在同一时间操作多个程序。
这种电脑有一个 8 兆赫的 68008 芯片,它是摩托罗拉 68000 芯片的第二代,是个更加便宜的版本。在内部,第一代 68000 芯片是 32 比特,但在外部,却以 16 比特与 CPU 之外的设备进行连接,例如存储器和硬件附加装置。由于它只能在一个时间内从存储器上载 16 比特,因此 16 比特的操作常常比 32 比特的操作要快。这种结构非常受欢迎,今天在许多嵌入装置和轿车里仍然有人使用。虽然芯片已经不同,但却是基于相同的结构生产的。 我的电脑中的 68000 芯片在与 CPU 之外的设备连接时使用的是 8 比特,而不是 16 比特。但虽然它与外部设备互动的是 8 比特,其内部却是 32 比特的。这就使它在编程方面非常不错。
它的内存是 128 千字节,不是兆字节,这在当时对家用电脑来说已经非常大了,而被它所取代的 VIC-20 仅仅有 3.5 千字节的内存。因为它是一台 32 比特的机器,所以能毫无困难地读取所有的内存,这在当时是前所未闻的。我之所以要买这种电脑便是出于这个原因。它的技术非常有意思,我喜欢它的 CPU。 我的一位朋友认识一家商店的老板,我希望能在他那里打折买这种电脑。但等货的时间太长,于是我便前往赫尔辛基一家最大的书店,因为那里有一个电脑柜台。我就是在那里购买的。 那台电脑花费了我差不多两千美元。当时的情况是,低档电脑的价格总是在两千美元上下。
只是在最近两年这种情况才有所变化,现在你只需花五百美元就能买一台 PC 机。这种情况和造汽车一样,没有人愿意生产低于一万美元的汽车。在某一段时间,低于一万美元就不值得制造。不错,公司完全可以造出销售价格为七千美元的汽车,但汽车制造商们认为,凡是能出得起七千美元的人,如果能买到附加的标准设备,比如空调,花上一万美元他们也高兴。假如你把今年出产的低档轿车同十五年前的同类轿车相比较,就会发现,它们的价格大体一致。其实,将通货膨胀的因素去除,它们的价格或许稍微便宜一点,然而质量却好得多。
过去的电脑就是这样。当电脑还不是人人都买的商品时,你就只能忍受两千美元的昂贵价格。
假如一台成本很低的电脑价格非常昂贵,公司就无法大量地进行销售。但生产商制造电脑的成本并非很低,所以公司若是卖得很便宜就不合算。人们总是希望多花二百美元买台更好的机器。
最近两年,制造电脑的成本已经大幅度降价。甚至低档的电脑质量也非常好。公司已经失去了许多愿意多付二百美元买一台稍好一点机器的客户,它们就只好依赖价格进行推销了。 我得承认,QL 的卖点之一就是它的样子非常酷。整个机身是无光泽的黑色,带着一个黑色键盘。整个样子有棱有角,而不是那种圆圆的漂亮的机型。它的造型有点走极端。键盘有一英尺厚,因为它与电脑联为一个整体。当时许多家用电脑就是那样设计的。在键盘的右端,即应该是小键盘的地方,有两个具有革新意义的 Sinclair 微型驱动器,它用的是只能在Sinclair 上使用的无限循环磁带。它们的作用就等于软驱。因为它是一个长长的圆圈,你可以进行旋转,直到点到你需要的东西为止。实践证明这个创意并不是理想,因为它不像软驱那样可靠。
于是我花两千美元买了一台 Sinclair QL。我用它所做的就是不断地编写程序。我总是在寻找有意思的事情做。我有一个 Forth 语言解释程序和编译程序,纯粹是为了用着玩。Forth 是一种很怪的语言,现在已经没有人使用。它是一种挺好玩而且在市场上有利可图的语言,因为可以做许多事情而在八十年代被广泛运用,但从来没有特别普及过。它对不懂技术的人来说非常难于掌握。其实这种语言也没有什么太大用处。 我开始自己编写工具性程序。我最初为这台机器买的东西之一是一个携带 EEPROM(电子可读及可编程序只读存储)卡的扩展底座。这是利用特殊模件自己编写的内存,关机后它仍存在。这样一来,需要时我就能随时获得那些工具,没必要将它们写入内存,于是就能占用珍贵的内存进行编程了。
使我对系统感兴趣的是,我买了一个软盘控制器,因为已不必再使用微型驱动器了。但软盘驱动器上的驱动程序不好使,于是我自己又写了一个。在编写过程中,我在操作系统里发现了一些病毒。我之所以能发现病毒,是因为我编写的一些东西无法操作。我的编码总是很完美的,所以我知道肯定是别的地方出了差错。于是我把整个操作系统都卸掉了。 你可以列出一推关于操作系统的书籍,这些书能帮上忙。你还需要一个反汇编程序,这种工具能把机器语言变成汇编语言。这一点非常重要,因为你要是只有机器语言的版本,执行指令时就非常困难。你会发现一个指令跳到一个数字的地址,读起来非常困难。一个好的反汇编程序可以为数字起名字,也可以让你起名字。你还可以使用它帮助你寻找特殊的相关指令。
我自己有一个反汇编程序,可以用它创立相当不错的目录。一旦出现差错,我就可以进入反汇编程序,让它从特殊的地点找出目录,而且我还能看到操作系统将要执行的任何任务。 有时我使用反汇编程序并非是因为出了故障,而是想弄明白它到底能做些什么。 QL 令我讨厌的一个地方是,它只有一个只读操作系统,对于一切都无法改变。它在某些地方的确有 HOOKS(是一种消息处理机制,它使程序员可以使用子过程来监视系统消息,并在消息达到目标过程前得到处理--译注)。HOOKS 就是你能切入你自己的编码接管某些功能的地方。但 HOOKS 只出现在某些特定的地方。要是能完全替换你的操作系统就会好得多。在只读存储器中运行一个操作系统是一种非常糟糕的想法。 虽然我说过,芬兰是一个非常乐于接受新技术的国家,但 Sinclair QL 在这个欧洲第七大国却没有站住脚跟。由于 QL 在芬兰的市场非常之小,每当你想为反传统的尖端机器购买升级设备时,只能通过邮寄的方式从英国购买。你必须翻阅许多产品目录,直到找到一家销售你所需要的设备的厂家为止。然后你还得准备好保付支票,再等上几个星期的送货时间。那个时候还没有网上购物和在网上使用信用卡。在我很希望把我的内存从 128 千字节扩展到 640千字节时,我只能通过邮购的方式获得。我买了一个新的汇编程序,将汇编语言转换成机器码(数字 1 和 0),又买了一个编辑器,后者主要是为编程使用的文字处理程序。 新的汇编程序和编辑器都不错,但是它们是在微型驱动器上,无法放入 EEPROM。于是我自己编写了汇编程序和编辑器,应用于我所有的编程之中。编辑器和汇编程序都是用汇编语言写的,按照今天的标准看上去非常愚笨。这种语言又复杂又费时,我想用汇编语言解决一个问题要比用 C 语言解决一个问题多出一百倍的时间,而当时 C 语言已经存在了。 我给我的机器带着的基本处理程序增加了好几个指令,所以只要我想编辑任何东西,机器就会自动操作我的编辑器,它立刻就会显现出来。我的编辑器比机器本身带的编辑器速度要快。我可以在显示器上以极快的速度书写文字,我为此而感到骄傲。通常用这样的机器,在显示器上写满字需要很长的时间,你可以看到屏幕在慢慢地滚动。但是用我的编辑器在书写时速度非常之快,屏幕滚动能给人造成一种模糊的感觉,这让我很得意。这一点对我非常重要。它使我的机器显得性能惊人,而且我知道为了让我的操作更迅速,自己已做了大量的工作。
那时,在我所认识的人当中,像我那样沉迷于计算机的人微乎其微。学校里有一个电脑俱乐部,但我几乎不怎么去。那个俱乐部主要是为那些想了解电脑的孩子们创立的。我们的高中只有二进五十名学生,但我想他们在十岁以后就再没有一个人玩电脑了。 通常我用我的 Sinclair QL 电脑做的事情是复制游戏。我曾用 VIC-20 电脑为我喜欢的游戏作过翻版。有时我还让游戏升级。但多数情况下它们都得不到改进。机器更高级了,但概念并无改进。我最喜欢的游戏大概是“小行星”,但我怎么也不能很好地将其复制下来。原因是那个时期所有游戏机中心的“小行星”游戏都是用真正的矢量图形显示进行的。那些游戏的图形不是靠小粒(即像素)显示的,而实际与阴极射线管的原理相同:电子是从阴极射线管的后面通过电子枪发射出来,然后用磁铁进行转向,这样便可以高清晰度地显示图像,但如想复制过来就不那么容易了。你当然可以复制,但假如你的电脑没有特殊的图形显示能力,复制出来的东西便与原本的“小行星”相去甚远。 我记得曾经采用汇编语言对“穿靴人”做过翻版。第一个步骤是,你必须记住穿靴人里的人物是什么样子。然后你把它们画在一张 16*16 平方厘米的坐标纸上,再涂上颜色。你若有艺术细胞,就可以画得很逼真。然而若像我似的完全不懂艺术,画出来的人物就会像是穿靴人的生了病的小表弟。
所以这个复制做得并不理想。然而我却为此感到自豪。做出来的那个游戏是可以玩的,于是我把它寄给了一家发表电脑编码的杂志。我曾经把其他的程序寄给一些杂志,所以我以为我这次被他们接纳应是理所当然的事。 事实却恰恰相反。
其中的一个问题是,无论你在什么地方出现一个极为微小的错误,它就会运转不灵。我自己也写过一些游戏。然而创作需要某种心态。由于游戏需要大量的表演,就需要你对电脑的硬件十分精通。这我做得到。但我却不具备玩游戏的感觉。一个出色的游戏通常并不是它的速度有多快,也不是它的图形显示得多么漂亮。它必须能让你感到玩得起来--能吸引人。游戏和电影颇为相似。特殊效果是一回事,然而你还是需要情节。我所有的游戏从来都没有情节。游戏还需要有发展,有想法。发展常常就是让游戏速度越来越快。穿靴人就是这种模式。进展时也产生变化,或是让你能够更紧密地跟踪里面的怪物。 我对“穿靴人”感兴趣的另一个原因是,它能够解决图形显示闪烁不定的问题。这在老式的电脑游戏中是一个比较普遍的问题,因为没有特殊的硬件,你的人物就会闪烁不定。你采用的办法就是去掉老拷贝,重写一个新拷贝。假如你的时间恰巧处理得不好,人们就能看到没有拷贝时的状况,于是就更会出现闪烁的情况。解决这一难题有许多种方式。你可以先画一个新人物,然后再把以前的人物去掉来避免这一问题。但你必须小心谨慎,不要把老人物被新人物覆盖住的那部分也给去掉。这样你就能获得一个良好的效果,不会再看到烦人的闪烁现象。这一解决方案的问题是创作时相对昂贵,而且特别费时间。 游戏为何总是处于技术领先的地位,而且编制人员为什么总是先制作游戏程序,其中是有原因的。一方面是关在房间里玩电脑的聪明的程序编制人员都是十五岁左右的孩子(我十五年前就这么认为,至今对此仍深信不疑)。游戏之所以总处于领先地位还有另一个原因:它总能推动硬件的发展。
你若是看一下今天的电脑,就会发现它们速度快得可以做任何事情。但考验硬件极限的往往是动作感过强的游戏,如现在很流行的一些三维游戏。从根本上说,通过电脑上的游戏,你可以看出硬件是不是过关。进行文字处理时,速度慢上一二秒钟也不会在意,但玩游戏时,出现十分之一秒的误差也非常明显,游戏过去都比较简单,时至今日,编程只是任何游戏的一小部分,此外还有音乐和情节。假如你把制作游戏比做拍电影,编程者在一定程度上就等同于摄影师。
就这样,我使用了 Sinclair QL 电脑三年:从高中到赫尔辛基大学,再到芬兰部队服役。这个电脑不错,但我们肯定会分手。在最后的一两年里,我发现了它的短处。68008 是个不错的 CPU,但我在书上了解到了下一代的 68020,得知了诸如内存管理和分页等种种功能,在使用低档电脑进行工作时,这种新的电脑可以完成非常重要的任务。 Sinclair QL 令我讨厌的地方是,它的操作系统虽说能进行多重任务处理,但在任何时候都会出现死机,因为它没有保存措施。只要一个任务出现差错,就能让整个机子死机。SinclairQL 是克里夫?辛克莱尔爵士最后一次设计和制造的电脑,原因之一是这种电脑在商业上并不成功。它的技术非常有意思,但公司却存在着生产问题和质量保证问题,而且最终宣传上也很失败。此外,市场竞争也开始变得越来越激烈。 到了八十年代末期,你便开始想象,或许有那么一天,大街上的每一个人都可能拥有一台电脑,哪怕只是进行简单的文字处理。而且种种迹象表明,发展方向是 PC 机。不错,IBM最早制造的 PC 机尽管有许许多多的技术问题,但却开始摆满了商店的货架,销售得极为成功。PC 机的另一个吸引人的地方是:外围设备非常标准,而且很容易就能搞到。 所有关于这种较新的 CPU 的文章我都阅读,它可以完成我想完成的任何任务。显而易见,看上去非常有意思的 68020 发展前景不佳。我完全可以为 QL 买一个升级的 CPU。在那个年代,这便意味着重新组装一台机器。尽管如此,操作系统还是没有内内存管理,所以我不得不自己编写。于是我想:这将是很费力的一步,而且获得一个 CPU 过于昂贵。 此外,令我越发感到头疼的是:为电脑购买设备的问题依旧存在。Sinclair QL 电脑的产品目录似乎根本就没有过,所以你不可能简单地抄起电话,像定购西尔斯百货商店的邮购商品那样定购内存设备。再说,通过邮局从英国订货的做法已经过时了。当时还没有用收缩封套包装的软件盘,这我倒不在乎,因为我都能自己编写。 这个头疼的问题却给我带来了一个好处。在我琢磨着把我的机器处理掉时,也决定把我的附加设备卖掉。我指的是我买的硬盘驱动器,因为要扩展内存,我一分钟也不能忍受了。当时没有人在大街上到处找这种东西,所以我只能在电脑杂志上登广告,然后就祈祷等待着。就这样,我认识了我的好朋友乔科?维亚鲁马奇(Jouko Vierumaki)。在整个芬兰,他大概是第二个拥有 Sinclair QL 电脑的人。他对我的广告做出了回应,骑着自行车来到我家,买走了我的一些外围设备。后来,他也让我学着打斯诺克台球。
本书评论