我不懂如何编写编译器并非偶然。但是我确实了解堆栈以及如何利用堆栈将表达式转换成逆波兰表达式。惠普的计算器正是使用的逆波兰表达式。在思考如何编写BASIC时,我使用了自己脑中的技巧,而非来自书本的技巧。我使用了称之为NOUN和VERB堆栈(操作数和运算符)的东西。在语法图中我使用了标签,但是在这个256-byte还是512-byte(记不清了)的表中,每个运算符都有一个与其线性位置一致的编号。譬如第41个操作数具有41号运算符的代码。 我还为所有具有两个优先级的运算符列了一份清单。其中一个是位于其他运算符前面的倾向。例如,+运算符会让*运算符先运算。但我还需要一张表来处理类似带括号的运算,防止类似的运算被误操作。我不知道前进的道路是否正确,但运行结果正确,正是按我想的那样运行的。这些技巧并不一定要从书上才能学到。 在Homebrew电脑俱乐部里向大家展示我的BASIC让我觉得很享受。从来没在什么书上看到过印着我的名字,因此我的名气也没能和比尔·盖茨比肩,但在俱乐部里我还是很有名的。这些都是在乔布斯看到我的电脑研发出来之前发生的事。随着时间流过,我要做的仅仅是逐个逐个地将每个编好号的运算符操作写成代码。每次俱乐部会议上我都会完成几个命令。 在 Apple II 上我让视频和电脑内存合为一体,这样本来每秒可以交换大概100万(夸张了)个数字的微处理器就可以每秒交换大概100万屏的字节了。Atari街机游戏机是用硬件实现的,但现在利用6502机器语言编程游戏可以作为软件实现了。BASIC是一种解释性语言。BASIC一边检查每条语句的每个字母一边执行,决定要做什么。因此,它要比机器语言慢上100或者1000倍。然后有一天我突然好奇,是否可以用BASIC编个程序,可以像动画一样移动物体。 我之前已经在硬件上实现了Atari游戏打砖块。那我是否可以用BASIC来实现这个简单的街机游戏呢?我知道可以用机器语言来实现这个游戏。因为这是我自己的BASIC,于是我就到语法图中加了一些命令,用来划分颜色以及绘画垂直线和水平线。然后我在芯片手册里选了一个带有四个计时器(555风格的计时器)的芯片。利用软件读取电位器上挡球板的位置以及移动的幅度。我把这些东西安装好以后(还要为BASIC烧录新的EPROMS),就坐下来写了一些简单的for循环语句把砖块染成不同的颜色。几分钟里我大概试了30种颜色组合。然后我又加上了挡球板、得分和一个球。通过调整程序参数来改变球的速度和角度。另外,我想是时候增加一个1-bit音频设备的扬声器,因为像球撞到砖块这样的事件发生时会需要一个音效。 我打电话让乔布斯到我那里看看我的成果。我向他展示了我可以就像改变砖块颜色一样简单迅速地做出其它修改。最重要的是,在一个半小时里,我尝试的改动要比硬件版本的游戏中花上10年可以做出的改动还要多。乔布斯和我都意识到很重要的一点,那就是现在动态游戏(街机风格的)可以用软件来实现了。更重要的是,用BASIC实现的话意味着任何年纪的任何人都可以通过编程来实现它。 我在BASIC设计中所有的努力都记录在了文件里,这些文件按年份排列在了50个文件夹里。每个文件夹的标签都是“GAME BASIC”现在你们知道我的才智是如何来的了吧。 更新 附记:高中还是大一时,我跟爸爸说有天我要拥有一个4K版的Data General NOVA.他说这抵得上一座豪宅的首付款了。我被惊到了,告诉他说我会住在公寓里。 为什么是4KB? 因为这是运行更高级语言所需要的最小要求。对我来说,电脑不仅仅只有开关和灯。它必须能够运行程序。 在 Apple I 之前我就做了台只有开关和灯的电脑。那时没办法负担得起4KB的内存,所以只能256字节的。 在Homebrew俱乐部的那些日子里,也就是1975年的夏天,有3家公司引进了4KB的DRAM的电脑。那是4KB内存第一次真正地出现。为了让BASIC成为电脑的一部分,我必须要有4KB内存。别无选择。从而苹果一代和苹果二代的最小内存就是4KB。假如我不在意BASIC的话,我也许就只是造了另外一种只有开关和灯的电脑,只有最小的静态内存,但也就仅此而已了。 编者按:如果你想了解更多斯蒂夫·沃兹尼亚克的生活,可以看看他的传记 《iWoz | 沃兹传:与苹果一起疯狂》。—JD 原文链接: Steve Wozniak 翻译: 伯乐在线 - 伯乐在线读者 |