1980年Spacelab计算机电路逆向工程
摘要
对Spacelab使用的Mitra 125 MS小型计算机的ALU板进行详细的逆向工程分析,探讨其电路设计和历史背景。
暂无内容
查看缓存全文
缓存时间: 2026/05/23 18:32
# 逆向工程:1980年Spacelab计算机电路揭秘
来源:https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html
Spacelab 是一种可重复使用的实验室,可装载于航天飞机的货舱内,为宇航员及科学实验提供实验空间。Spacelab 由一台法国制造的小型计算机控制,名为 \*Mitra 125 MS\*。与现代计算机不同,这台计算机并未采用微处理器芯片。相反,其 16 位处理器由数块电路板上的芯片构成。在本文中,我将对其中一块处理器板进行逆向工程(如下图所示),该板是计算机算术/逻辑单元(ALU)的一部分。
由 CIMSA 制造的 Mitra 125 MS 计算机,图中显示了一块 ALU/寄存器卡。(https://static.righto.com/images/cimsa/cimsa-diagram2.jpg)
由 CIMSA 制造的 Mitra 125 MS 计算机,图中显示了一块 ALU/寄存器卡。
Spacelab 由一个加压圆柱形实验室构成,内部容纳实验设备、计算机以及研究人员的工作区域。一条通道将实验室与航天飞机连接起来,方便研究者在航天飞机与 Spacelab 之间移动。Spacelab 最多可支持五个暴露在太空中的非加压“货盘”,用于安装望远镜和传感器等实验设备。下图展示了通道、Spacelab 实验室以及安装在航天飞机货舱内的一个货盘。¹(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:spacelab)
Spacelab-3 任务示意图。来源:NASA。(https://static.righto.com/images/cimsa/spacelab-3.jpg)
由于 Spacelab 是欧洲项目,因此使用了欧洲计算机——Mitra 125 MS。Mitra 系列始于 1971 年,当时法国公司 CII 推出了 Mitra 15 小型计算机,这是一台 16 位计算机,采用磁芯存储器。Mitra 是一个法语缩写²(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:acronyms),意为“用于实时和自动计算的小型机器”。顾名思义,Mitra 既小巧又专为实时计算设计,非常适合控制实验。Mitra 15 是一款流行的计算机,销量近 8000 台。
1975 年,CII 推出了其后续型号 Mitra 125。Mitra 125 在 Mitra 15 的基础上增加了内存管理、I/O 处理器,性能更高,指令集也更丰富。Spacelab 使用的是 Mitra 125 MS 小型计算机³(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:ground),这是 Mitra 125 的军用级变体,由 CIMSA 公司生产。一次 Spacelab 任务配备了三台此类计算机:子系统计算机负责控制和管理 Spacelab 本身,实验计算机则处理实验任务。备份计算机可在任一计算机发生故障时接管工作。¹(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:spacelab)这些计算机是 Spacelab 指令与数据管理子系统的一部分,负责控制实验并收集数据。⁴(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:cdms)
这三台计算机通常安装在 Spacelab 实验室工作台架下方的机柜内(详情见(https://ntrs.nasa.gov/api/citations/19900066918/downloads/19900066918.pdf#page=44))。计算机通过键盘和彩色 CRT 显示器(https://catalog.archives.gov/id/22556994)进行控制,该显示器称为数据显示系统(DDS)。下图中的照片展示了计算机安装情况和一台 DDS。
这张照片显示宇航员在 Spacelab 内部(但并非在太空中)。Spacelab 计算机安装在工作台下方(右箭头)。数据显示系统(左箭头)提供了与计算机的接口。照片为 1984 年的 STS-51B 乘组肖像。(https://static.righto.com/images/cimsa/computers-in-spacelab.jpg)
这张照片显示宇航员在 Spacelab 内部(但并非在太空中)。Spacelab 计算机安装在工作台下方(右箭头)。数据显示系统(左箭头)提供了与计算机的接口。照片为 1984 年的 STS-51B 乘组肖像(https://www.nasa.gov/image-detail/amf-s84-43852/)。
在某些 Spacelab 任务中,实验室被完全省略,以便为实验货盘腾出更多空间。在这种情况下,计算机会安装在一个称为“igloo”(https://airandspace.si.edu/collection-objects/spacelab-subsystems-igloo/nasm_A19990001003)的小型加压圆筒内。研究人员留在航天飞机内,通过安装在航天飞机后部飞行甲板上的两个数据显示系统(照片见 https://catalog.archives.gov/id/355203887)来控制实验。
## 74181 ALU 芯片
Spacelab 计算机没有使用微处理器芯片。相反,与当时大多数小型计算机一样,它由简单的集成电路组合构建而成,以实现计算机的电路。与现代 CMOS 集成电路不同,这些芯片采用双极型晶体管,速度快但体积大且功耗高,这种技术称为 TTL(晶体管-晶体管逻辑)。一定年龄的电子爱好者会记得流行的 7400 系列 TTL 芯片。Spacelab 计算机使用的是这些芯片的军用级版本——5400 系列。
计算机中最复杂的芯片可能是 '181 算术/逻辑单元(ALU)芯片,包含约 170 个晶体管。算术/逻辑单元是计算机的核心,负责执行算术运算和布尔逻辑运算。1970 年,德州仪器将完整的 4 位算术/逻辑单元集成到单芯片上,命名为 74181。由于该芯片速度快、体积小、价格低廉,因此被广泛使用,从流行的 PDP-11 和 Xerox Alto 到强大的 VAX-11/780“超级小型计算机”,其 ALU 均采用了该芯片。
74181 提供全套二进制逻辑运算,包括 AND、OR、XOR 和补码。在算术方面,它支持加法、减法、递增和递减。⁵(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:74181)不便之处在于,74181 不支持右移。此外,乘法和除法过于复杂,无法集成到 74181 中。因此,处理器通过重复的加法或减法并结合移位来实现乘法和除法。同样,浮点运算远远超出 74181 的能力范围,但处理器在执行浮点运算的步骤时可以使用 74181。
尽管 74181 仅处理四位,但多个 74181 芯片可以组合起来处理更大的字长,例如 16 位或 32 位。为了处理进位,可以将芯片串联,前一个芯片的进位输出馈入后一个芯片的进位输入。这种方法简单但速度慢,因为进位必须“行波”通过所有芯片才能得到结果。通过使用名为 74182 的进位超前进位芯片可以加速进位过程,该芯片并行计算四个 74181 芯片(即 16 位)的进位,从而加快加法运算。
## Mitra 的 ALU/寄存器板
Spacelab 计算机使用八个 '181 ALU 芯片来实现 32 位加法器。⁶(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:hmsg)(具体来说,这些芯片是 54S181,是 74181 的一种变体:“54”表示芯片适用于军用温度范围,“S”表示芯片采用高速肖特基逻辑制造。)然而,ALU 板还需要大量额外的芯片。根据指令的不同,可以为 ALU 选择八种不同的输入。称为多路复用器的芯片负责选择所需的值,这需要 32 个多路复用器芯片。三个 32 位寄存器为 ALU 的输入和输出提供存储,需要 24 个芯片。两个 54S182 进位超前进位芯片提供快速进位计算。最后,一些简单的逻辑芯片(反相器和与非门)将各部分连接在一起。
由于所需的芯片数量较多,ALU/寄存器电路分布在三块板上,如下图所示。(我对右侧的板进行了逆向工程。)'181 芯片立即可见,因为它们比其他芯片大得多;它们有 24 个引脚,而其他芯片只有 14 或 16 个引脚。第一块板有两个 '181 芯片,而后两块板各有三个 '181 芯片。后两块板相似但不完全相同。
Spacelab 计算机的三块 ALU/寄存器板。点击此图片(或任何其他图片)可查看大图。(https://static.righto.com/images/cimsa/three-boards.jpg)
Spacelab 计算机的三块 ALU/寄存器板。点击此图片(或任何其他图片)可查看大图。
发现一个 32 位 ALU 让我颇感意外,因为这台计算机是 16 位计算机。扩展 ALU 很可能是为了提高性能。两个 16 位数相乘会产生 32 位结果,因此 32 位 ALU 能使乘法更快。此外,计算机支持 32 位浮点数,因此 32 位 ALU 大概也能加速浮点运算。
下图展示了计算机 32 位 ALU 系统的架构。中间是 ALU 本身,对两个 32 位操作数 `A` 和 `B` 进行操作。左侧是用于为 `A` 和 `B` 各选择一个值的多路复用器(“mux”)。右侧,ALU 的输出可以存储在三个 32 位寄存器中,或者通过总线发送到计算机的其他部分。前两个寄存器是移位寄存器,允许值左移或右移,而第三个寄存器仅通过触发器保持值。前两个寄存器通过总线与计算机的其他部分相连,而第三个寄存器的值只能通过将其用于另一个算术运算来访问。⁸(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:schematic)我怀疑移位寄存器用于乘法和除法,以便在每一步中移位参数。
ALU/寄存器板的框图。(https://static.righto.com/images/cimsa/block-diagram.jpg)
ALU/寄存器板的框图。
多路复用器的输入提供了灵活性。例如,您可以将寄存器 1 与总线上的一个数相加,或者将右移后的寄存器 2 与寄存器 3 相加。(注意,这种移位是通过将多路复用器的输入接线左移或右移来实现的,与移位寄存器的移位完全独立。)“全 1”输入大概在二进制补码中充当 -1,提供递减功能。`B` 输入可以取自总线,从而允许值来自内存或通用寄存器。`mix` 输入是信号线、寄存器位、移位寄存器输入和一个上拉的混合体,无明显规律。我在脚注中描述了一些其他谜题;⁹(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:mysteries)大概如果我逆向整个计算机,这些谜题就能解开。
多路复用器、ALU 芯片和寄存器的功能取决于正在执行的指令。具体来说,计算机的微码引擎为计算机生成控制信号,包括 ALU/寄存器板的控制信号。其中一些控制信号选择使用哪个多路复用器输入。其他控制信号选择 ALU 的功能。最后,控制信号选择哪个寄存器接收 ALU 的输出。
我逆向的这块板实现了 ALU 和寄存器的 32 位中的 12 位。下图显示了板上每个芯片的作用。三个 4 位 ALU 芯片标为 2、1 和 0。每个 ALU 芯片有两个多路复用器芯片来选择四个 `A` 输入位,以及两个多路复用器芯片来选择四个 `B` 输入位。¹⁰(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:mux)因此,板上有 12 个多路复用器芯片。三个 12 位寄存器 `A`、`B` 和 `C` 各自由三个 4 位芯片实现。三个六反相器芯片和一个 4 输入与非门芯片完成了该板。¹¹(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:chips)
带有芯片标注的 ALU/寄存器板。(https://static.righto.com/images/cimsa/board-labeled.jpg)
带有芯片标注的 ALU/寄存器板。
这些印刷电路板(PCB)具有一些有趣的特征。在大多数电子产品中,电路板只在需要的位置开孔,但 Spacelab 板在固定网格图案上布满孔洞。(IBM 在 1960 年代的 System/360 计算机中使用了类似的板。¹²(https://www.righto.com/2026/05/reverse-engineering-spacelab-computer.html#fn:ibm-board))孔洞可以容纳 IC 引脚或其他元件。或者,孔洞可用作过孔,连接不同层的 PCB 走线。这些板的另一个有趣特征是集成电路下方的垂直金属条。这些金属条用于带走集成电路产生的热量。
板的背面(下图)可以看到更清晰的 PCB 走线。走线足够细,以至于在一对孔之间可以通过两条走线。注意黄色的“修补”线,用于纠正电路板上的错误。我认为这些错误在用于飞行的计算机中得到了修复。
ALU/寄存器板的背面。这是一块与我逆向的板不同的板,因为我想展示黄色导线。(https://static.righto.com/images/cimsa/board-back.jpg)
ALU/寄存器板的背面。这是一块与我逆向的板不同的板,因为我想展示黄色导线。
每块板底部都有一个 96 引脚连接器,用于插入计算机的主板。注意连接器上伸出的三个圆柱形引脚。这些引脚带有键,以确保板只能插入正确的插槽。也就是说,每个引脚有一个金属卡舌,方向有六种之一。在主板上,连接器有相应的凹槽。如果卡舌与凹槽不匹配,则无法插入板。
连接器特写,显示了键控方式。另请注意,左侧的锯齿形引脚编号在右侧变为不规则编号。例如,引脚 52 意外地位于引脚 49 和 51 之间。(https://static.righto.com/images/cimsa/connector.jpg)
连接器特写,显示了键控方式。另请注意,左侧的锯齿形引脚编号在右侧变为不规则编号。例如,引脚 52 意外地位于引脚 49 和 51 之间。
Spacelab 计算机中的板密度很高,集成电路紧密排列以最小化计算机的体积。然而,这些板的密度远低于美国航空航天计算机。特别是,Spacelab 计算机使用了与消费电子产品相同的集成电路封装:通孔 DIP(双列直插式封装,有两排引脚)。相比之下,IBM 的 4 Pi 系列航空航天计算机使用了“扁平封装”集成电路,体积更小、更薄(详情见(https://www.righto.com/2026/03/ibm-4-pi-computer-history.html))。因此,IBM 的双面电路板可容纳 156 个集成电路,而尺寸大致相当的 Mitra 单面板仅容纳 30 个。
## 法国计算机工业在此计算机之前的一段简史
Bull 是法国最早的计算机公司之一,成立于 1931 年。Bull 最初销售穿孔卡设备,与 IBM 竞争。到 20 世纪 60 年代,Bull 已成为一家主要的计算机公司,其产品包括晶体管化的 Gamma 60(https://en.wikipedia.org/wiki/Bull_Gamma_60)计算机,这是一款大型主机,据说……
相似文章
逆向工程386处理器的预取队列电路
详细介绍386处理器预取队列电路的逆向工程,解释所用的增量器、对齐网络和动态逻辑。
386处理器寄存器的异常复杂电路
对英特尔386处理器寄存器电路的详细逆向工程分析,揭示了六种不同的定制电路和交织位存储。
Intel 8087浮点芯片的指令解码
对Intel 8087浮点协处理器指令解码的详细逆向工程分析,解释主CPU与协处理器之间的交互、微码ROM的使用以及总线接口单元。
Intel 8087浮点芯片的堆栈电路逆向工程
本文详细介绍了对Intel 8087浮点协处理器堆栈电路的逆向工程,解释了该芯片基于堆栈的寄存器架构和微码ROM如何实现快速浮点运算。
Intel 386标准单元逻辑中的异常电路
探索Intel 386标准单元逻辑中的异常电路,包括大型多路复用器和非标准反相器,突出芯片的设计历史和自动布局布线技术。