← 返回信息流
AI 资讯Hacker News·2 天前

苹果Disk II控制器卡

原标题:The Apple Disk II Controller Card

速览

苹果Disk II控制器卡是1978年推出的5.25英寸软盘驱动器核心组件,采用创新的单芯片设计大幅降低成本,成为Apple II个人电脑的重要外设。该卡由沃兹尼亚克设计,通过精简电路实现了高效数据存储,推动了个人计算机存储技术的普及。如今它被视为计算机硬件史上的经典设计,对早期家用电脑发展影响深远。

AI 深度解读

背景

Apple II 是苹果公司早期最具影响力的个人计算机之一,而 Disk II 软盘驱动器控制器则是让这台机器真正走向成功的关键配件之一。在 1970 年代末期,个人计算机的存储介质大多依赖磁带机——速度慢、可靠性差、随机存取几乎不可能。苹果急需一种更好的存储方案,而当时市面上的软驱控制器方案复杂且昂贵,根本不适合 Apple II 这样的平价家用电脑。

核心内容

两种磁盘控制器的哲学分野

在 Apple II 磁盘的世界里,磁盘控制器卡主要分为两大类:原始的 Disk II 控制器(及其仿制品),以及"其他所有卡"。后者包括 Apple 3.5 磁盘控制器卡、Liron 卡、SCSI 卡、IDE 卡等。这些卡为软件提供了标准 API 来读写数据块、获取驱动器状态和格式化磁盘,软件完全不需要了解磁盘底层的工作方式——控制器内部自带"智能"来处理所有底层细节。

而原始的 Disk II 控制器卡则"蠢得像块石头"——它迫使软件亲自处理几乎所有的底层细节。然而即便如此,它仍然是一项令人惊叹的技术成就。

为什么 Disk II 如此特别

最早的 Apple II 机型没有内置软盘支持。Disk II 控制器卡以极低成本巧妙地补齐了这一缺失,它也是 Apple II 电脑大获成功的重要原因。这款磁盘控制器比当时任何竞品都更简单、更便宜、更灵活,全方位优于同期对手。它是"Woz 式技术"(Woz can-do technology)的终极典范。

软盘 101:从物理原理到高层抽象

软盘本质上就是一个涂有磁性材料的塑料圆盘。装入驱动器后,盘片以约 300 RPM 的转速旋转。步进电机驱动读写磁头从盘片中心沿直线移动到外缘。这种结构形成了几十个同心圆环,每个环上可以存储一串连续的 0 和 1。

问题在于:如何从这些物理基础上升到字节、磁道、扇区这样的高层概念?逻辑数据字节如何编码为磁盘上的比特模式?读取磁盘时,比特如何被框定为字节?如何找到零磁道或扇区之间的边界?

在 1970 年代,这些问题的常规答案是——大量额外的硬件。这使得磁盘控制器和驱动器本身变得复杂且昂贵,对于平价家用计算机系统来说大多遥不可及。

Woz 的诞生:圣诞节假期里的奇迹

1977 年底,苹果开始为 Apple II 寻找磁带存储的替代方案,着手研究软驱选项。当时苹果还是一家未经考验的小公司,Apple II 上市仅约六个月。Woz 对软盘所知甚少,但他接下了这个挑战。

Woz 的做法是——几乎移除所有控制磁盘的硬件,转而采用一种类似 bit-banging(位撞击)的软件驱动方案。苹果找到 5.25 英寸软驱的发明者 Shugart 公司,要求提供 SA400 驱动器的"精简版"——拆掉了大部分控制电子线路,只剩下一个用于旋转盘片的电机和一个用于移动读写磁头的步进电机。

据传闻,整个 Disk II 硬件设计由 Woz 和 Randy Wigginton 在 1977 年圣诞节假期的几周内完成构思和搭建,包括编写第一版 DOS 的首个版本。1978 年 1 月的 CES 展会上,可正常工作的软驱就进行了演示。苹果工程师 Cliff Huston 和 Wendell Sander 也提供了协助。四十多年后,这个小团队如此迅速地完成一切,仍然令人惊叹。

Woz 本人这样回忆那段经历:

"我不知道那个不可思议的磁盘控制器是怎么从我脑子里冒出来的。我很擅长创造任何电子类的东西,模拟的或数字的。但我此前没有任何关于磁盘硬件或软件的经验,甚至没上过相关课程。所以我必须从零开始思考。我在伯克利上过一门研究生级别的课程(虽然我是本科生,但只要涉及计算机的课程我都选研究生的),讲的是状态机,我就想如何用两颗简单的低成本芯片做一个状态机来做这件事,有点像手工搭建的极简微处理器。当时我只知道它能读写数据,但我假设自己遗漏了磁盘控制器的许多必要组件,因为我的设计用的零件太少了。但最终,我的设计在某些方面做得更好,特别是因为它装在电脑里,与可以改变其工作方式的软件绑定在一起,最终实现了更大的存储容量和更快的速度——这是用常规软驱做不到的。此外,我从驱动器本身省掉了大约 20 颗芯片,绕过了它们,因为它们只是挡在中间的多余环节。"

"我一次又一次能做到最好的工作,部分原因是没钱,必须学会如何用比任何人都少的零件,另一个原因是,我做出的所有伟大创造都是我以前从未做过的。"

Disk II 控制器巡礼

Disk II 控制器卡本质上就是一个精致的移位寄存器。它能以固定的速率读写比特——每 4 微秒 1 比特。卡上还有一颗仅 256 字节的小 ROM,包含计算机启动时运行的引导代码——一个极简的 6502 程序,仅够找到 0 磁道 0 扇区、加载到内存并执行。磁盘控制的其余所有方面都由软件处理。

整张卡仅包含八颗简单芯片:

  • 一颗 256 字节 ROM,存放引导代码
  • 另一颗 256 字节 ROM,用作状态机的一部分
  • 一颗 74LS174 六路触发器,为状态机提供输入
  • 一颗 74LS323 八位移位寄存器——整个设计的核心
  • 一颗 74LS259 可寻址锁存器,存储电机和驱动器 1/2 选择的状态
  • 一颗 556 双定时器
  • 一颗 74LS05 六反相器和一颗 74LS132 四路与非门,提供必要的粘合逻辑

仅此而已。这就是整个磁盘控制器的全部。

挑战一:字节 framing(字节定框)

从磁盘读取的数据是一个连续的 0 和 1 流,没有起始位或停止位。那么如何知道一个字节在哪里结束、下一个字节在哪里开始?

Woz 的解决方案是:要求写入磁盘的每个字节的最高有效位(MSB)必须是 1。在读取磁盘时,状态机逐个从磁盘取比特,将移位寄存器向左移动一位,将新比特追加到最右端。它持续这个过程,直到最左边的位位置上是 1,此时状态机宣布"找到了!这是一个完整的字节!"然后 CPU 存储该字节,过程重新开始。状态机在 MSB 变为 1 后清空移位寄存器,准备移入下一个字节的 8 个比特。

这个方案本身还不够。如果状态机实际上从某个字节的中间开始读取比特,它很可能会把字节中间的某个 1 误判为 MSB 位置的 1。但这个方案确保了:只要状态机哪怕只有一次——无论是靠运气还是其他方法——正确对齐了字节边界,之后就会一直保持正确。所以挑战在于找到一种方法,保证在开始读取磁盘数据之前 framing 就是正确的。

常规解决方案是在每个扇区之前写入一个特殊的 50 位同步字节模式——实际上是 10 位模式 1111111100 重复五次。这个模式的有趣之处在于:无论字节 framing 的初始状态如何,最多重复五次后,状态机就会自动落入正确的同步状态。这个方案完全由软件驱动,仅仅是一个约定——硬件本身没有任何机制来保证同步。

关键要点

  • 极简硬件设计:Disk II 控制器卡仅用 8 颗简单芯片就实现了完整的软驱控制功能,远少于同期竞品所需的芯片数量。
  • 软件驱动的哲学:与当时主流控制器将底层细节封装在硬件中不同,Disk II 将几乎所有磁盘控制逻辑交给软件处理,硬件只负责最基本的移位寄存操作。
  • Woz 从零开始:Woz 没有任何磁盘控制器设计经验,甚至没上过相关课程,完全基于状态机理论和创造性思维独立完成了设计。
  • 时间线惊人:整个硬件设计、
查看原文 →bigmessowires.com