本文由来自 GeekLogic(极客逻辑)的老朋友 Wells 授权转载。原文地址:http://geek-logic.com/apple-ii/,未做删改。
前言
本来计划中 Apple II 这款机型是要排在后面介绍的,原因是我还没有收集到一台合适的苹果原装 Apple II 电脑。但是看着我收集的各种版本 Apple II 仿制机、原装的 Apple IIe 和 Apple IIc,还是决定要先讲一下 Apple II。
虽然 Apple II 并不是苹果公司生产的第一种计算机设备,但是它的出现是划时代的,Apple II 和它的竞争对手们让计算机真正的像家电一样第一次走进了家庭,而不仅仅是一台放在实验室、科研单位的披着灰黑色外衣的冰冷的机器。Apple II 在设计之初就对其使用成本进行了细致的考虑,用软件方式实现彩色显示、软件和控制卡外设结合来提供磁盘存储,这些沃兹尼亚克智慧的结晶使得使用者可以在当时以极低的使用成本来获得和竞争对手需要花费昂贵的金钱才能实现的一样的功能。除此以外,Apple II 的 8 个扩展插槽提供了超强扩展能力。再加上以电子表格 Visicalc 为代表的众多的软件生态的支持,这些因素都使得 Apple II 系列成为了 80 年代销量最好的个人电脑之一,在其销量最高的 1984 年,销售了 100 万台,市占率达到 15.82%(数据来源:Total Share: Personal Computer Market Share 1975-2010)。而整个系列的生命周期也在后续的 Apple IIe / IIc /II GS 等机型的更新下延续到了 1993 年才停产,整整生产销售了 16 年。
事实上 Apple II 的影响比看到的数字要广泛得多。除了苹果销售的 Apple II 电脑之外,据不完全统计,全球市场上有着超过 190 多种的 Apple II 仿制机。在国内的情况也一样,各大高校中的 Apple II,大多是仿制机和兼容机(山寨机?),部分来自华南、香港以及日本。到了 80 年代后期,中华学习机 CEC-I 成为了国内最有名的 Apple II 仿制机。那个年代学计算机的少年们,基本都知道使用 PR#6 命令来读取软盘进入游戏。可以说 Apple II 对我国的计算机普及教育事业也做出了巨大的贡献。
规格
诞生和发售
提到 Apple II,很多人的第一反应是史蒂夫·乔布斯(Steve Jobs),但事实上,Apple II 电脑的真正创造者是和乔布斯一同创立了苹果公司的天才工程师史蒂芬·沃兹尼亚克(Stephen Wozniak)。正是沃兹尼亚克的天才发明加上乔布斯的商业鬼才,这样的黄金组合,才使得 Apple II 能够走向成功。
Apple II 诞生的过程就是苹果公司的创立史。而说到 Apple II 的诞生,那一定要从 Apple I 开始说起。
沃兹尼亚克从小就是一个对电子工程着迷的孩子。1970 年,在大二那年暑假,他在 Tenet 公司兼职打工的时候,就梦想着要 DIY 一台便宜实用的电脑。后来他搞到了一些逻辑芯片,于是和他的邻居比尔·费尔南德斯(Bill Fernandez)(后来成为了苹果公司第四号正式职员,负责过 Apple I、Apple II、Macintosh 等系统的开发)一起在车库里一边喝着奶油苏打汽水一边设计组装电脑,最终成功的组装了一台廉价的可以运行的电脑,他们把它命名为“奶油苏打电脑(Cream Soda Computer)”。这应该就是 Apple I 的萌芽。也就是在这个期间,费尔南德斯把自己的朋友乔布斯介绍给了沃兹尼亚克,两位天才一见如故。
费尔南德斯和他的奶油苏打电脑,图源:apple.fandom.com
1972 年,经好友艾伦·鲍姆(Allen Baum)介绍沃兹尼亚克加入了有硅谷发源地之称的惠普公司(Hewlett-Packard),负责计算器产品的研发。1975 年,鲍姆又介绍他加入了后来著名的家庭自制电脑俱乐部(Homebrew Computer Club)。在俱乐部聚会时,沃兹尼亚克看到的 Intel 8008 芯片的技术规格文件激发了他再次做一台电脑的想法,而且这次他想要做的不再是像以前那样用指示灯而是要用屏幕来显示结果的方便个人使用的电脑。
于是,沃兹尼亚克便在下班时间在惠普办公室开始了他的设计和创造。一开始他想用摩托罗拉 6800 芯片来制作电脑,但后来发现 MOS 科技的 6502 芯片功能不差且价格只有一半时,就决定使用 6502 作为主控芯片。(6502 芯片有着广泛的应用,大家熟知的任天堂红白机 Nintedo FC 也使用 6502 兼容芯片作为 CPU,MOS 科技后被 Commodore 收购,使用这一芯片架构的 Commodore 的 C64 后来成为了 80 年代中前期的传奇,世界上销量最高的单一型号电脑,这些后面我会一一写文来介绍。)在经过 3 个月的研发、组装、调试之后,在 1975 年 6 月 29 日,Apple I 终于成功启动并运行了第一段代码。
这时候乔布斯的商业基因开始发挥作用,他说服了沃兹尼亚克不只是要自己玩儿,而是要把这玩意做成印刷电路板套件卖给其他发烧友。两人决定要开一家公司干这件大事,乔布斯把公司取名叫苹果,还找来了他在雅达利(Atari)公司的同事罗纳德·韦恩(Ronald Wayne)来负责公司的行政运作。韦恩成为了苹果公司的第三位员工,并设计了苹果公司的 Logo。这时,沃兹尼亚克在家庭自制电脑俱乐部的朋友保罗·特里(Paul Terrell)正好在 1975 年 12 月在加州山景城(Mountain View)开设了他的第一家电脑商店 Byte Shop,于是 Byte Shop 就成了 Apple I 的第一个销售通路。苹果公司负责提供做好的电路板,以 666.66 美元的价格(成本每台 500 美元)卖给特里的 Byte Shop。特里还做了木头箱子,配上电源和键盘,把 Apple I 装进去,卖给最终用户。
乔布斯和沃兹尼亚克拿着 Apple I 的电路板,
背后桌上有 Aplle II 的机箱,摄于 1976 年。
图源/版权:Courtesy of Apple Computer, Inc.
特里向苹果下的第一笔订单是 50 台,但是乔布斯他们只借到了 5000 美元来买元件,资金缺口很大。但乔布斯凭借他的商业头脑,最终说服了供应商经理找了特里来确认 Byte Shop 给苹果的订单是真实的,从而获得了 30 天的账期。这也意味着苹果必须在 30 天内制造出这批电脑并完成交货。于是乔布斯和沃兹尼亚克找来了自己的亲戚朋友,一同在乔布斯的车库里组装电脑,终于顺利交货。
1976 年 4 月到 1977 年 9 月,苹果公司一共生产了 200 台 Apple I 电脑,这也让他们获得了企业发展的第一笔资金。存世到现在并能正常使用的 Apple I 电脑已经非常稀少,Apple-1 Registry 这个网站记录了已知的各台 Apple I 电脑的现状。一台能够开机的 Apple I 在二手市场的行情现在也都是天价,就连现代复制品电路板的价格也在上千 RMB。
eBay 上目前唯一在售的真品,不含税将近 1000 万 RMB,是在 Apple-1 Registry 上注册的第 79 号 Apple I
Apple I 的成功使得乔布斯和沃兹尼亚克决定进一步完善产品,使其更商业化,要做成一台有着漂亮外壳能接显示器能够被更广泛人群接受的电脑整机,而不是原来面向极客发烧友的电路板原型机。1976 年 8 月,沃兹尼亚克终于完成了 Apple II 的电路设计,他坚持在 Apple I 的基础上加上了 8 个扩展插槽,赋予了电脑更强的扩展能力,同时也实现了彩色显示和声音输出,在 ROM 中集成了 BASIC 解释器。正是这些特性,使得 Apple II 日后能在众多的竞争对手中突围,并将整个系列的生命周期延长到了惊人的 16 年。
乔布斯也没闲着,他找来了设计师杰瑞·马诺克(Jerry Manock)为 Apple II 设计了一个既简洁又非常前卫的与众不同的米白色机箱(后来马诺克在 1979 年也加入了苹果担任设计师)。这在当时一下子就把 Apple II 和其他灰黑色的冷冰冰的计算机设备区别开了。一台 Apple II,放在使用者的办公桌、家里也不会显得格格不入,大家都很容易接受。同时,乔布斯还找来了他在雅达利(Atari)公司的同事罗德·贺特(Rod Hlot)为 Apple II 设计了一个开关电源,取代线性电源,以使电脑更加轻量化和解决发热严重的问题。后来贺特也加入了苹果公司,成为了第五号员工。
在设计 Apple II 的期间,1976 年的夏天,乔布斯和沃兹尼亚克为了使 Apple II 能够顺利诞生,扩大公司的规模,不停寻找外部投资。这时他们找到了天使投资人迈克·马库拉(Mike Markkula)。他非常看好苹果公司,投资了现金 9 万 1 千美元以及个人担保信贷 25 万美元,成为当时苹果最大的股东,使得苹果公司在 1977 年 1 月 3 日成为了正式法人组织,并出任了苹果第二任 CEO。马库拉在之后也一直非常支持乔布斯,为苹果公司的初期发展提供了很多建设性的意见。
这时,沃兹尼亚克也决定从惠普公司离职,正式成为了苹果公司的全职员工。
惠普非常鼓励工程师创新,它起家于比尔·休利特(Bill Hewlett)和戴维·帕卡德(David Packard)租下的爱迪生大街 367 号的车库,这也被认定为是硅谷的发源地。美国很多科技企业,包括苹果公司的创立都与惠普相关,都受益于惠普的车库文化。我很荣幸能在这家伟大的公司供职八年,在我就职期间,公司仍有鼓励员工每周花费半天时间来创新学习的习惯。
硅谷的发源地,惠普公司的诞生地,爱迪生大街 367 号的车库,我旅美期间摄于 2018 年 10 月。很难想象一个伟大的企业从这里诞生并影响了许多行业巨头,惠普的车库文化就是那一时代硅谷精神的缩影。
在 1977 年 4 月 16 日到 17 日由家庭自制电脑俱乐部的吉姆·沃伦(Jim Warren)创办举办的第一届西海岸电脑展上,22 岁的乔布斯和 26 岁的沃兹尼亚克带着他们的 Apple II 电脑参展了。同时参展的还有 Commodore 的 PET,它将成为 Apple II 的强劲对手,在后来 Commodore、Apple 以及 RadioShack 的 TRS-80 系列被称为 80 年代 8 位机三雄(欧洲的 Sinclair 在美国市场商业化并不是很成功)。在这次展会上,乔布斯还认识了一位日本人——水岛敏雄(Mizushima Satoshi),日后他成为了 Apple II 在日本的第一位代理商。正是在这次展会上,乔布斯开始树立起他独特的发布会的风格,这也是马库拉给他的建议:通过给人们留下深刻的印象从而把你和产品的卓越品质“灌输”给他们。通过这次展会,苹果公司获得了 300 台电脑的订单,从这以后,销量一路攀升,到 1984 年,Apple II 系列的 Apple IIe 的销售达到顶峰,一年卖出了 100 万台 Apple II(数据来源参考前文)。
1977 年 6 月 5 日,Apple II 正式上市。它的最初零售价是 1298 美元(4KB 存储器)或 2638 美元(存储器上限可达 48KB)。为了反映其彩色图像显示能力,机箱上的苹果图案着上了彩虹条纹,而这个图案随后成为苹果公司的代表图案,直到 1998 年初为止。最早的 Apple II 在硅谷组装,后来移到德州,印刷电路板则在爱尔兰与新加坡生产。
由于市场反应出乎意料的好,使得兼容 Apple II 的应用软件如雨后春笋的冒出,原来设计的磁带机存储系统难以满足用户快速妥善使用软件和存储数据的需求,而没有磁盘驱动器也成为了 Apple II 和其他竞争对手相比的一大软肋。
苹果公司开始着手开发磁盘驱动器和 DOS 系统来满足这一需求。磁盘驱动器项目于 1977 年底开始后不久,乔布斯多次前往驱动器硬件厂商舒加特(Shugart Associates)的办公室,和他们沟通驱动器的需求。在沃兹尼亚克完成对 IBM 磁盘控制器设计的研究并完善了自己的设计思路后,乔布斯要求舒加特为他们提供一个减配版(青春版?)的只需 100 美元的低成本磁盘驱动器。该磁盘驱动器没有控制器板、索引传感器、负载螺线管或磁道零传感器。尽管对这个要求感到困惑,舒加特还是遵守并向苹果提供了 25 种驱动器方案,他们可以将其用作为 Apple II 开发磁盘系统的原型。原型机获得了 SA-390 的名称。
沃兹尼亚克同时还研究了 North Star Computers 和其他更复杂的软盘控制器。他认为他的简单设计虽然会缺少一些功能,但这并不重要,因为有些复杂的功能并不需要,并可以用软件来实现。例如,在其他控制器需要大量芯片以在磁盘旋转时同步数据输入、输出、使读写头能正确寻轨及将数据编码转换成磁力信号时,沃兹尼亚克可以使用软件来执行这些操作。他设计的控制器使用的 Group Code Recording 比更常使用的 MFM 方式使得以软件实现上述功能更加容易,Group Code Recording 可以容纳每个轨道 13 个扇区。沃兹尼亚克把这套磁盘控制器称为 Disk II 系统,他自称 Disk II 系统是“我在 Apple 最令人难以置信的经历和我所做的最好的工作”,并将 Apple II 的成功归功于它和 VisiCalc。
最终沃兹尼亚克在 1977 年的圣诞节假期完成了他的磁盘控制器设计,与当时其他竞争对手的控制器相比,使用的芯片数量减少了 10 倍。但是 Apple II 仍然缺少 DOS 系统,而且沃兹尼亚克在操作系统设计方面缺乏经验,乔布斯就该项目与 Shepardson Microsystems 公司接洽。1978 年 4 月 10 日,苹果与 Shepardson 签署了一份价值 13,000 美元的合同,以开发 DOS。仅用了 35 天,Shepardson 就完成了开发,苹果获得了包括一个文件管理器、一个用于 Integer BASIC 和 Applesoft BASIC 的接口,以及磁盘备份、磁盘恢复和文件复制的实用工具在内的操作系统。
我收藏的一块 DISK II 控制卡,这是沃兹尼亚克的得意之作
在 1979 年 6 月,Apple II 的更新版本 Apple II Plus 上市了。它在 ROM 中包含了 Applesoft BASIC 编程语言。这个由微软编写的 BASIC 语言也被做成升级卡的形式作为一个升级包提供给 Apple II 的老用户。它支持浮点运算(但它明显比沃兹尼亚克的 Integer BASIC 要慢)并成为了后续 Apple II 系列的标准 BASIC 语言。Apple II Plus 有 48KB 内存,可借由安装在第 0 槽的语言卡扩充至 64KB。但是,除了 48K 内存以外,由于 Apple II Plus 还有 12K ROM 和 4K 的其他插槽占用的内存地址(内存映射见后文硬件章节),而 Apple II 所采用的 MOS 6502 CPU 支持最大的寻址空间只有 64KB 内存,因此 Apple 用地址选择器的方式使语言卡中的扩充内存可暂时“盖过”内置的 ROM,并将代码读入该段内存,以使用 ROM 相同的方式使用它。借此,用户可将 Integer BASIC 从磁盘读入语言卡内存中,并使用 DOS 3.3 的 INT 和 FP 指令切换使用 Integer BASIC 或 Applesoft BASIC“方言”,如同切换 ROM 扩充卡一般。
Apple II Plus 上市的价格是 1195 美元,是的,虽然内存大了,但是价格比 Apple II 首发价格还低了 100 多美元。
在第一款 Apple II 于美国市场获取胜利后,苹果公司于 1978 年开始将市场拓展到欧洲,发布了 Apple II Europlus,并在 Apple II Europlus 上做了必要的软件、硬件与固件更改以符合美国以外地区的标准。电源供应器被修改过以支持 240V 电源输入,视频输出信号从 NTSC 改成 PAL 制式,键盘格式也作了更改以符合不同语言的需求。Apple II Europlus 的生产持续到 1983 年才停止。
除了进军欧洲,苹果同样也尝试开始拓展远东市场。还记得在西海岸电脑展上的那位日本人水岛敏雄吗?他是日本 ESD 会社(イーエスディラボラトリ社)的社长,在展会现场他就对乔布斯正在讲解演示的 Apple II 产生了浓厚的兴趣。1977 年 8 月,他带着以前在东丽的同事曾田敦彦一同来到苹果总部,并以经销商的名义购买了一台 Apple II 带回了日本,这是出现在日本的第一台 Apple II,最后这台电脑被卖给了日本工业大学的一位教授。通过 ESD 会社,Apple II 在日本打开了销路,但 ESD 的规模过小,他并不是苹果最佳的选择。
1980 年 7 月 2 日 ,苹果与东丽举办了新闻发布会,正式宣告了两家公司的合作开始,当时签署的是有效期为一年的代理合同。东丽成为了苹果在日本的正式销售渠道。与此同时,为了更好地适应日本市场,苹果开发了 Apple II J-plus 这一型号,以支持片假名的输入与显示。但是由于与现有应用软件的兼容性造成的种种问题,以及市场上例如 NEC、IBM 等等竞争对手的强力挑战,同时还有来自香港、台湾的仿制机以不到三分之一的价格造成的冲击,Apple II J-plus 在日本的销量并不出色。
在续签了一年合约后, 1982 年 6 月,由于无法盈利,东丽结束了两年的 Apple II 总代理合同,根据合同条款,苹果买下了所有库存(这居然使得东丽扭亏为盈)。后来,ESD 会社又成为了 Apple II 在日本的独家总代,但好景不长,1983 年苹果日本公司成立,1983 年年底,ESD 被单方面告知取消独家代理资格。
苹果公司为了拓展市场,将 Apple II 销售到教育市场,很早就与 教育设备供应商 Bell & Howell 达成了一项营销协议,让他们销售带有 Bell & Howell 铭牌的 Apple II 和 II Plus,供学校使用。Bell & Howell 长期以来一直通过其强大的电影放映机产品和其他视听设备与教育机构和美国各地的学校建立了良好的合作关系。通过 Bell & Howell 销售的 Apple II 电脑是黑色的,而不是标准的米白色,在电脑爱好者中它们被称为“达斯·维达(Darth Vader)”Apple II(因为颜色与当年上映的影片星球大战中的帝国反派黑武士相似)。
Bell & Howell 贴牌的“达斯·维达”Apple II,图源:www.macgeek.org
Apple II 以及 Apple II Plus 机型在 1983 年被后续的 Apple IIe 机型取代。Apple II 是苹果公司首款取得市场明星地位的产品,也是苹果王朝的起点。
硬件
事实上,到我写这篇文章的时候,我都还没有一台原装的 Apple II 或 Apple II Plus,我收藏的是几台不同版本的 Apple II 仿制机以及 Apple IIe 和 IIc。虽然 Apple II 的仿制机的主板和原装的几乎一致,但我还是从网络找了一张 Apple II 的主板的照片和仿制机的一起对比来给大家介绍。
Apple II Rev 3 主板
Apple II 或 II Plus 的硬件有多个版本,常见的有 Rev 0、3、4、7 这几个版本,它们之间的差别大同小异。可以从上图看到,Apple II 的主板规划非常整齐,在主板左侧和下方,纵向用英文 A-K(原装的主板没有 G 和 I),横向用数字 1-14 标明了网格,方便用户很快的找到手册上标识的相应位置的芯片。例如键盘接口在 A-7。
Apple II 主板和其他同时代的 8 位电脑相比最大的差别在于上方的八个 IO 扩展插槽。从左到右依次是 0 到 7 号插槽。这一排整齐的八个扩展槽是 Apple II 的一个强大卖点。与 TRS-80 或 PET 不同,用户只需将卡插入其中一个插槽即可轻松扩展 Apple II。然而,这也使得 Apple II 的制造成本更高。最初乔布斯不认为有人会需要两个以上的插槽(他设想两个插槽一个用于打印机,一个可能用于调制解调器),而沃兹尼亚克从他在惠普的工作经验中知道,计算机用户总是会找到一些额外的需求。于是他坚持一定要有八个插槽并和乔布斯发生了争吵,最终 Apple II 还是成功的拥有了八个扩展插槽。
插槽的左边是一个 6Pin 的电源插口,电源给主板供应了±12V 和 ±5V 的电压。如同前文所讲,Apple II 使用的电源是贺特专门设计的开关电源,取代了那个时代常见的线性电源。虽然很多文章中声称是 Apple II 引领了计算机电源的变革,发明了开关电源。但事实上,在 Apple II 之前的几年,已经有多种计算机使用了开关电源,包括 1969 年的 PDP-11/20 小型计算机,1970 年的 Datapoint 2200,1975 年的 IBM 5100 便携式计算机,以及 1976 年的 decsystem 20。当然不可否认的是,Apple II 的市场占有率加速了开关电源推广的进程。
在扩展插槽的右侧主板顶端,则是音频输入输出以及视频输出端口。音频输入输出用来接磁带机,这也是 Apple II 刚上市时唯一存取数据的方式。视频输出使用的格式标准的 RCA 复合端口,可以连接监视器输出 NTSC 或 PAL 制式的图像。提到视频输出,即使按照 1970 年代末和 80 年代初的标准,Apple II 系列的图形模式也很奇特,这是沃兹尼亚克的节省芯片设计的直接结果。和同时代的其他大部分计算机不同,Apple II 并没有专用的图形芯片,天才的沃兹尼亚克在 ROM 里用软件实现了图像和彩色处理,和后来的 DISK II 磁盘控制卡一样,这种做法大大降低了制造成本。Apple II 的视频输出实际上是基于视频内存(或像素)中的位模式的单色显示,而 这些像素与彩色突发信号正交组合,最终由复合视频监示器解释为彩色(这也是为什么我们看到图形边缘经常会有奇怪色彩条纹的原因)。沃兹尼亚克的巧妙设计为 Apple II 带来的彩色显示的能力,在当时的竞争对手中脱颖而出,苹果公司为了标榜自己产品的彩色显示,特地将苹果 Logo 穿上了彩色条纹,这个商标一直沿用到了 1998 年。
彩虹色的 Apple Logo
视频输出接口下方有一个 5Pin 的排针,这排针中有电源输出和视频输出,以供额外扩展使用。排针下方则是一个 DIP16 接口的游戏操纵杆接口。这个接口也是沃兹尼亚克在完成 Apple II 初步设计后添加进去的。当时他针对 Atari 的游戏机做了一些硬件扩展,于是很自然的,他就想着为自己的 Apple II 也加上这些功能,然后,这个接口就诞生了。
在八个扩展插槽的正下方就是大名鼎鼎的 6502 CPU。这颗 CPU 是 1975 年由 MOS 科技所研发的 8 位微处理器。在 6502 刚问世时是当时性能最强的 8 位 CPU,且价格只有大型业者(如 Motorola、Intel)相近产品的六分之一甚至更低。低价也是苹果选择它的重要原因。6502 和另一个 8 位 CPU Z80 一起在上世纪 80 年代几乎垄断了整个 8 位机市场,它们推动了整个计算机业的普及。Apple II 的采用使得 6502 成了广为人知的 CPU,而 MOS 科技后来的母公司 Commodore 发售的 Commodore 系列 8 位电脑也大量使用了 6502 系列 CPU。家用游戏机任天堂红白机(使用 6502 兼容指令集的 Ricoh 2A03)也采用它作为 CPU。
CPU 下方是 6 颗 2KB 的 ROM 芯片(仿制机大多用的 EPROM)。ROM 起始地址从右到左分别是 , , , , , 。根据资料,、 和 的三颗 ROM 芯片中,装的是 Integer BASIC; 那颗 ROM 芯片中则是 Apple Monitor 程序。关于 BASIC 和 Apple Monitor 将在后面详细展开。那么 和 两颗 ROM 中装的是什么呢?其实这两颗 ROM 在所有早期的 Apple II 计算机上都是空的, 主板上有两个空插槽,可供用户插入自己的 ROM 芯片。后来 芯片最常用于 Apple 销售的“程序员助手 #1”。它包含适用于 Integer BASIC 程序员的各种实用工具,包括执行以下操作的机器语言例程:
为 BASIC 程序重编行号
将一个 BASIC 程序附加到另一个程序的末尾
验证已保存在磁带上的 BASIC 程序(以确认它是准确保存的)
验证已保存在磁带上的非程序数据
将汇编语言例程重定位到内存中的不同位置(大多数只会在内存中的一个位置运行)
Apple II 自检程序,用于测试 Apple II RAM
通过内置扬声器产生音乐音调
处理来自 BASIC 的高分辨率图形,包括清除高分辨率屏幕、设置颜色、绘图点和线条、绘制形状和从磁带加载形状的代码
所有这些功能除了音乐例程是由 Gary Shannon 编写之外,都是沃兹尼亚克在 1977 年 6 月(自检程序,RAM 测试例程)到 1978 年 4 月(程序重新编号和追加)之间编写的。
程序员助手 #1
另一个空的 ROM 插槽(涵盖从 到 的内存)从未被 Apple 填满。各种第三方供应商都为该插槽出售 ROM。
在 ROM 下方,一共有 24 颗芯片组成的 RAM 系统。这 24 颗芯片分成三排,每排八颗。由于 6502 处理器可以处理总共 64KB 的内存,因此除掉前文所讲的 12KB 的 ROM 空间以及给 8 个扩展插槽所插的板卡预留的 4KB 内存空间,剩余可用的空间为 48KB。因此这些 RAM 芯片的插槽被设计为可以使用 4K x 1bit 的 RAM 芯片或更新且更昂贵的 16K x 1bit 的 RAM 芯片(常见的 4116 芯片)。第一批出货的 Apple II 计算机标配 4K 内存,最大为 12K(如果都使用 4K x 1bit 芯片,每排八颗正好是 4KB,三排就是 12KB)或 48K(如果都使用 16K x 1bit 芯片,一排八颗就是 16KB,三排 48KB)。在上图主板上左侧标着 16K 的三个特殊跳线模块是用来告诉 Apple II 安装了什么型号的内存的(仿制机上貌似少了这个东西)。根据 1981 年版的 Apple II 参考手册,Apple II 可以通过不同的内存芯片搭配拥有以下大小的内存:4KB、8KB、12KB、16KB、20KB、24KB、32KB、36KB 或完整的 48KB。
RAM 芯片下方右侧是一个 2Pin 的排针,用来接内置的扬声器。最下面一排横着的是一颗存储显示字形的 ROM 芯片,Apple II 和 Apple II Plus 都只有大写字符,大部分仿制机却都有小写字符。苹果直到 Apple IIe 才引入了小写字符的输入和显示支持。此外,主板最下方还有一个 DIP16 的键盘接口,用来连接键盘 PCB。
Apple II 的键盘是由一家注册在加州的公司 Datanetics 制造的,Apple II 键盘键帽的形状和印刷几乎与 Apple-1 上使用的早期 Datanetics 键盘相同。相比之前的键盘,添加了RESET键,在右Shift键上方添加了左右方向键,并加宽了RETURN键。除G键上的 BELL 外,所有设计键盘时参考的 Teletype 控制代码名称都已删除。一个未标记的特殊字符是右方括号“”,可通过按SHIFT-M输入。奇怪的是,虽然苹果官方常常用“Apple ][ ”来表示 Apple II,但在 Apple II 的系统中却无法输入”[“以及”\”和”_”这三个字符。
我收藏的一台仿制机的主板,是否和原装的很像?主板上写着制造商是 MCA,来自日本
内存映射
Apple II 的这些硬件是如何组合在一起工作的呢?首先,扩展插槽、ROM、RAM、扬声器、音频输出(串口)等所有的硬件都在内存中映射有一个唯一的地址,就像门牌号那样,处理器要访问这些硬件就需要知道他们的地址。Apple II 的内存映射表如下:
总线架构
有了内存地址映射后,处理器就可以和这些硬件进行数据交换了。在 Apple II 的硬件设计中,处理器是通过地址总线和数据总线来和内存、ROM、扬声器、扩展插槽中的板卡等等硬件来协同工作的。通过 Apple II 的总线架构图就能一眼看明白这之间的关系和工作流了。下图是我从《Understanding the Apple II》这本书中摘取的 Apple II 总线架构图。
图片版权:《Understanding the Apple II》, Jim Sather, 1983 Quality Sofware
在图中红色的是地址总线,绿色的是数据总线。6502 处理器(图中称为 MPU)通过地址总线访问某一内存地址,通过指令控制读取或写入的动作,数据则通过数据总线读取或写入。值得注意的是图片的下方有一个地址解码器,它负责解析内部硬件和软开关所分配到的地址(上文中内存映射表中 开头的地址),并指向相应的硬件。以图中的例子为例,当我们把沃兹尼亚克的得意之作 DISK II 控制卡插在 Slot 6 插槽中时,这块卡的通信地址是 ,其中输入端口为 、输出端口为 ,除此以外还能通过 的其他地址来实现控制电机、选择驱动器、磁头定位、读写配置等等动作。DISK II 控制卡上还有 PROM 芯片,里面存了 256 字节的固件程序数据,处理器也可以通过 的地址来访问这个 ROM 空间。DOS 操作系统正是通过这种方式来读取卡中的固件程序从而使用驱动器的。
图中还有一个例子是音频输入输出。当我们通过磁带机来读取程序和数据时,系统实际上是通过接收串口来读取数据的。串口输入的地址是 ,事实上指向磁带机音频输入的串口地址是 。读取磁带机音频输入的工作状态就和读取 ROM 类似,只不过由于是串口输入,读取进来的八位数据只有 D7(八位数据,D0-D7,最高位 D7)是有效的,因此 6502 处理器只要通过数据总线读取并处理 D7 位的数据就可以了。
磁带机的音频输出却是有点特别,地址是 ,但输出数据并不是我们想象那样是通过数据总线来输出(图上没有绿色的数据总线到 ),而是通过访问 地址(通常是 )来告诉输出端切换电平状态,因此串口信号的输出方式是通过定期访问地址来改变电平状态实现的。
我再举一个图上没写的例子。主板上的扬声器的内存映射地址是 (十进制 ),因此可以在 BASIC 程序中,通过 的方法来使扬声器发出短促的声音。
我的仿制机一样可以 扬声器的内存地址
BASIC
Apple II 最初的 BASIC 是由沃兹尼亚克编写的,被称为 Integer BASIC,储存在 ROM 中,开机即可使用。这个版本的 BASIC 提供了彩色支持。神奇的是,苹果公司从未拥有过这个版本的 BASIC 的汇编语言源代码,沃兹尼亚克是直接用机器语言开发的。根据沃兹尼亚克的自述,他不用汇编写的原因是没钱……因为汇编的编译器在当时要花几千美金,于是他从一个朋友(他的朋友个个都很厉害)那学了一招:拿出一张白纸,在纸的右侧写下指令,左侧写下地址,然后查找每条指令的十六进制数据,手动排序这些指令,进行手工汇编。就这样沃兹尼亚克的这个 Integer BASIC 就有了一个手抄本,机器语言的代码全部是手工写出来的。
虽然是纯手工用机器语言编写的,但这个 Integer BASIC 解释器 Bug 非常少。已知的少数错误之一是涉及单字节的处理错误。如果输入的一行括号过多,则会显示“TOO LONG”错误消息而不是“TOO MANY PARENS”消息。另一个错误涉及 – 循环嵌套太深(即在一个 – 循环内有另一个 – 循环)。如果程序反复进入循环的开头而没有碰到 语句,最终会导致程序崩溃。
在 Apple II Plus 推出后,沃兹尼亚克手工编写的 Integer BASIC 已经一去不复返了,取而代之的是更新的由微软(Microsoft)提供的 Applesoft BASIC(作者是 Marc McDonald 和 Ric Weiland,这两位也是微软的传奇人物)。由于两个版本的 BASIC 使用相同的内存映射位置,因此它们不能同时使用。随着 Apple II Plus 的推出,Apple 还发布了 Applesoft 固件卡。这张卡插入插槽 0,使以前的 Apple II 用户无需购买全新的计算机即可享受 Apple II Plus 的一些好处。但是,即使使用那张卡,也无法在另一个 BASIC 处于活动状态时使用其中一个 BASIC 的功能,并且从一个 BASIC 切换到另一个会删除当时正在编写或使用的任何程序。用户可以通过它们使用的提示符来区分当前在使用哪个版本的 BASIC:Integer BASIC 使用“”字符,而 Applesoft BASIC 使用“”字符。
Apple Monitor 程序
Apple II 的 Monitor 程序是基于沃兹尼亚克的 Apple I 中的 Monitor 程序改进而来的。沃兹尼亚克想增加一些功能,以便能够提供额外的命令来管理特定内存位置的数据。
事实上,Apple II 中的 Monitor 程序是沃兹尼亚克的朋友 艾伦·鲍姆(Allen Baum)帮忙改进的。还记得这位哥们么?正是他介绍沃兹尼亚克去惠普工作,又是他介绍沃兹尼亚克加入了家庭自制电脑俱乐部(我查了下鲍姆的 Linkedin 简历,发现他俩应该是在沃兹尼亚克大二暑假在 Tenet 公司实习时认识的)。鲍姆帮助编写了处理屏幕文本显示的代码,以及创建和处理不同大小文本窗口的能力(即,在标准的 24 x 40 文本屏幕内创建一个或多个用户定义的文本空间,仅在该文本屏幕内滚动文本)。Monitor 还集成了磁带输入/输出的例程,因为 Apple II 中包含了对这些硬件的支持。
鲍姆和沃兹尼亚克曾在 1976 年 9 月的 Interface Age 杂志上发表过 6502 反汇编程序的代码。这使得检查和调试代码变得更加容易,而且它本身也是家庭自制电脑俱乐部哲学的产物,即让所有人都可以使用所有的计算机知识。发表的文章是苹果“免费或以最低收费”提供软件文化的一部分。Apple II Monitor 中包含此反汇编程序的改进版本。它成为 Apple II 最重要、最独特的功能之一,也是其开放式设计的重要组成部分。它允许任何人查看任何程序使用的 6502 代码。最终由于功能的增加,Apple Monitor 程序的大小从 256 字节(在 Apple I 中)增加到 2,048 字节(2K, - , ROM F8)。
在开发 Apple II Plus 时,1978 年 11 月,苹果公司的约翰·阿克利(John Arkley)编写了对原始 Monitor ROM 的更改并创建了 Autostart ROM(他是 1981 年版 Apple II 参考手册中的源代码列表中提到的“John A”,苹果第 88 号员工)。在阿克利完成工作并创建 ROM 之后,Apple 开始着手编写新版本的参考手册以涵盖 Apple II Plus。较早的参考手册(被亲切地称为“红皮书”)包含了 Monitor ROM 的汇编语言源代码列表。他们想包含两个版本的 Monitor 的源代码,但出现了问题。在开发 Monitor 时,Apple 使用了一种称为“Call Computer”的本地大型计算机拨号服务(感觉类似现在的云计算啊)。他们在该计算机上使用交叉汇编器汇编代码,然后使用生成的目标代码创建 ROM。(交叉汇编程序是为处理器创建目标代码的程序,而不是运行交叉汇编程序的处理器。例如,如果使用在基于 6502 的计算机上运行的汇编程序编写 8080 机器代码,这就是在使用一个交叉汇编器)。不幸的是,Call Computer 意外地在源磁盘和目标磁盘颠倒的情况下进行了系统备份,擦除了包含 Apple II Monitor 源代码的所有文件。Apple 没有提供 Autostart ROM 源代码的磁盘或磁带副本。根据红皮书中的源代码列表,阿克利为原始 Monitor 程序重新创建了源文件,然后为 II Plus 反汇编了他自己的修改并重新创建了他的 Autostart ROM 源文件。这些重建的列表出现在 1981 年版的 Apple II 参考手册中。
Apple DOS
当 Apple Computer 在 1977 年 4 月推出 Apple II 时,没有磁盘驱动器或磁盘操作系统 (DOS)。尽管苹果联合创始人沃兹尼亚克在那年晚些时候设计了 Disk II 控制器,但还缺少一个操作系统来支持。乔布斯决定外包这项任务。最开始苹果考虑使用 Digital Research 的 CP/M,但沃兹尼亚克想寻求一种更易于使用的操作系统。1978 年 4 月 10 日,苹果与 Shepardson Microsystems 签署了一份价值 13,000 美元的合同。Apple 提供了详细的规格,苹果员工 兰迪·惠金顿(Randy Wigginton) (他是苹果第六号正式员工)与 Shepardson 的 Paul Laughton 密切合作,最终在 35 天内成功交付了 Apple DOS。
Apple DOS 没有版本 1 或版本 2。版本 0.1 到 2.8 在开发过程中被连续修订。Apple DOS 3.0 其实就是原来的 2.8 版,仅仅是把版本号重新定义了而已,由于 Bug 较多也从未公开发布过。苹果在 3.2 版之前没有发布过任何官方文档。
Apple DOS 3.1 于 1978 年 6 月公开发布,比 Apple II 推出晚一年多一点,成为了 Apple 计算机的第一个基于磁盘的操作系统。后来发布过一个 Bug 修复版本,通过其 MASTER CREATE 实用工具解决了一个问题,该工具用于创建 Apple DOS 的可引导磁盘。内置的 INIT 命令创建的磁盘只能在至少具有与创建它时有相同数量内存的机器上启动,而 MASTER CREATE 创建的磁盘能在任何内存配置的 Apple II 上启动。
Apple DOS 3.2 于 1979 年发布,以适应 Apple II 的后继产品 Apple II Plus 启动方法的变化。Apple II Plus 的固件包括了一个 Autostart ROM,它会在系统启动时自动找到磁盘控制器并从它启动。1979 年 7 月发布了 DOS 3.2.1, 修复了一些 Bug。
Apple DOS 3.3 于 1980 年发布。它改进了 3.2 版的各种功能,同时也增加了软盘存储的空间。配套的 DISK II 磁盘控制器中较新的 P5A/P6A PROM (前文所提到的控制卡上的 ROM)能够以更高的密度读取和写入数据,因此每个磁盘磁道可以存储 16 个扇区(4 KB)而不是 13 个扇区(3.25 KB)的数据,从而增加了每个磁盘的容量,从 113.75 KB 增加到了 140 KB。其中 16 KB 用于文件系统开销和 DOS 副本,剩下的 124 KB 用于用户程序和数据。然而,DOS 3.3 不向下兼容,它无法读取或写入 DOS 3.2 磁盘。为了解决这个问题,苹果发布了一个名为“MUFFIN”的实用工具,用于将 Apple DOS 3.2 文件和程序迁移到 3.3 版磁盘。而为了将 Apple DOS 3.3 文件迁移回 3.2 版磁盘,有人编写了一个“NIFFUM”实用程序(这并非是苹果官方提供的)。还有一些商业工具(例如 Copy II Plus)可以从任何一种格式复制文件。如果计算机有语言卡(RAM 扩展)或固件卡,3.3 版还改进了在 Integer BASIC 和 Applesoft BASIC 之间切换的能力。
我的 Apple II
前文也提到过,事实上,到我写这篇文章的时候为止,我还没有一台原装的 Apple II 或者 Apple II Plus。我一直在 eBay 蹲点,期望能找到一台价格合适的购买后收藏。
我的 Apple II 系列收藏是从一台仿制机开始的。今年 4 月的时候我从闲鱼收到了一台仿制机。可是到货后却无法点亮。经过诊断,首先是发现开关电源电压输出不正常,于是我尝试更换了开关电源里的电容。但是电压是正常了,开机还是显示不正常。于是怀疑芯片和 IC 座接触不良导致问题,把所有芯片都插拔了一遍,但还是无法解决问题。最后只能耐心的用万用表测试每个芯片的每个引脚接触是否良好。最后发现 BASIC ROM 不管怎么插拔接触都有问题。仔细观察后发现由于存放时间久远芯片引脚已经氧化,于是用砂纸稍微打磨一下,终于成功点亮。
测量 IC 插座接触
机壳喷漆
电源故障电压低
更换电容
电源维修后电压正常
这台仿制机的机壳无论怎么洗也洗不干净,为了让它焕发新生,一不做二不休,我买来了喷漆罐,直接上喷漆。结果效果真的不错,就像台新的一样,太帅了。Apple II 的 Logo 部分,我从网上下载了一个图片修改后用彩色打印机打印先凑合用着,后来群友@老谢 趁着天晴给我做了个金属版本的 Logo,像真的一样,再次感谢 @老谢 的手艺!
刚收来的状态
修复重新喷漆后,图中可以看到,仿制机基于 Apple II Plus 仿制,且加入了小写字符支持。开机时显示的”APPLE ][“被替换成了”READY GO”
Logo 是假的
焕然一新
后来机缘巧合我又收了一批 Apple II 仿制机,主板有多个版本,后面我会专门写一篇来介绍。
总有一天我会拥有自己的苹果原装 Apple II 的。
后记
写这篇文章断断续续花了我两个周末,期间查阅了很多资料,也了解学习了很多 Apple II 硬件相关的知识。感触最深的莫过于沃兹尼亚克和乔布斯的牛人朋友们(折腾来折腾去,就那么几个哥们一起快乐地干活),为了要做到一个共同的目标,在各自擅长的领域付出了万分努力。他们的成功固然有天赋、有机缘巧合的因素存在,但更重要的是,他们坚持自己的想法,并为之付出一切。真的,那个时代,硅谷的创新精神无出其右。相比现在,互联网时代的人们也许更多了一丝浮躁。让我们静下心,思考自己真正想要做什么,并坚持努力为之付出,一定会有好的结果。
参考
http://oldcomputers.net/appleii.html
https://apple2history.org/
https://zh.wikipedia.org/wiki/Apple_II
https://zh.wikipedia.org/wiki/ 斯蒂夫·沃兹尼亚克
《Understanding the Apple II》, Jim Sather, Quality Sofware 1983 年出版
链接
http://wiki.apple2.org/
https://apple2history.org/
https://www.callapple.org/
https://mirrors.apple2.org.za/
https://apple2online.com/
https://github.com/cbmeeks/Apple-II-Resources
http://6502.org/