从前面板到程序:像PDP-8那样思考
摘要
本文介绍了PDP-8小型计算机的架构及其在教授基本计算机概念中的应用,并包含一个复刻模型的赠品活动。
暂无内容
查看缓存全文
缓存时间: 2026/09/11 23:26
# 从前面板到程序:像PDP-8一样思考
来源:https://pikuma.com/blog/pdp-8-minicomputer
晶体管、逻辑门、触发器、全加器、寄存器、累加器、存储器以及闪烁的LED灯。PDP-8是学习传统数字电子技术与计算机架构工作原理的绝佳平台。
🎁 赠品活动
## 赢取PiDP-8复制品!
PiDP-8复制品
一位幸运的获胜者将获得由obsolescence.dev (https://obsolescence.dev/index.html) 提供的**PiDP-8复制品 (https://obsolescence.dev/pdp8.html)**
赠品活动截止于**9月20日**。获胜者将在活动结束后选出。
---
凝视着一台老旧的机器,并意识到在所有闪烁的灯光、开关、寄存器和指令之下,你仍然能够完全理解传统计算机的基本构建模块——这种体验令人深感满足。
如果您不是第一次接触我们的内容,可能已经知道,我们学校常常回溯历史以理解技术的演进。研究计算机的早期阶段,让我们能够利用一种只存在于更古老、更原始系统中的*简洁性*。尽管现代技术极其复杂,但计算机本质上仍然是一个操纵比特位的庞大微小电路集合。复古架构是深入理解数字电路和计算机基本概念的绝佳途径。
计算机是巨大的抽象机器。你可以从理解电的特性和行为开始,进而理解晶体管如何像开关一样工作,接着理解少数晶体管如何构成逻辑门,再理解逻辑门如何构成加法器、多路复用器、锁存器和寄存器。我们将这些电路连接起来构成算术逻辑单元,然后添加控制单元、一些存储器和一个时钟,突然间,我们就有了一个简单但可工作的CPU。
从硅到CPU
教科书式的CMOS 1位全加器电路示例
**注意:**本博文假设您熟悉程序计数器、栈、触发器、寄存器、全加器和ALU等术语。不过,如果您正在寻找一套全面深入的数字电子技术与计算机架构课程,请访问我们的
课程页面 (https://pikuma.com/courses)。
一个足够简单让我们能够剖析基本数字电路工作原理的绝佳计算机实例是**DEC PDP-8 (https://en.wikipedia.org/wiki/PDP-8)**。PDP-8于1965年推出,是*基于累加器*架构的经典、教科书式的范例,也是最具影响力的早期小型机之一。对我们来说更重要的是,它的架构足够小,我们可以在不陷入复杂性的泥潭的情况下,理解这台机器相当多的部分。
PDP-8是一台12位计算机,拥有小巧的指令集、一个主累加器、一种特殊的内存寻址方式、一个一位的链接寄存器、能同时执行多项任务的指令,甚至还有一些实际上并非真正寄存器的寄存器。
而或许最奇特之处在于,这些并非随意的历史怪癖。它们是在昂贵的硬件基础上构建一台实用计算机所产生的必然结果。
### 小到足以出售的计算机
要理解PDP-8,我们需要回到1960年代初期。
PDP-8小型机(来自墨尔本大学)
墨尔本大学的PDP-8计算机
计算机是昂贵的机器。一台典型的计算机属于计算机中心,而不是某人的办公桌。为实验室、工厂或工程部门购买通用计算机的想法在当时仍然不寻常。
数字设备公司 (https://en.wikipedia.org/wiki/Digital_Equipment_Corporation) 由肯·奥尔森 (Ken Olsen) 和哈兰·安德森 (Harlan Anderson) 于1957年创立,当时已经在制造更小的计算机。其于1963年推出的PDP-5是PDP-8的重要前身。
数字设备公司总部
数字设备公司总部(1957年至1992年)
PDP-8于1965年3月问世,并将这一理念推进了一大步。它是一台12位通用计算机,售价约为18,000美元,这比当时主导计算领域的机器便宜得多。
第一台PDP-8使用的是分立晶体管逻辑而非微处理器。它的CPU由称为**Flip-Chips (https://en.wikipedia.org/wiki/Flip-Chip_module)** 的小型插入式电路模块构建而成,通过绕线背板连接。
PDP-8翻转芯片模块
翻转芯片模块
上图所示的翻转芯片寄存器切片包含8位存储和2位加法器。它被用于PDP-8/I(PDP-8的后继型号),该型号采用集成电路逻辑。
因此,它在最字面的意义上是一台计算机。你可以打开机器,看到实现处理器的电路。没有隐藏在散热片下的CPU芯片。中央处理器*就是*电路板的集合。
### 为什么是12位?
今天,8位、16位、32位和64位计算机感觉很自然,而12位可能感觉奇怪。但对于PDP-8来说,12实际上是一个非常方便的数字。
一个12位的字提供了4096 (2^12) 种可能的值。更重要的是,12可以很好地分成三组四位。这使得机器的二进制表示相当紧凑,方便其设计者和程序员使用。
PDP-8最初的内存包含4K个12位的磁芯存储器字,这使得我们拥有这样一台机器:一个完整的字足够小,易于理解,又足够大,可以容纳一条有用的指令、一个面向字符的值或一个小的整数。
12位架构在整个PDP-8家族中得以保留,即使实现技术发生了巨大变化。
### PDP-8家族
在继续之前,有必要指出,当我们谈论PDP-8时,我们实际上是在谈论一整个*家族*的机器。我想现在就说清楚,因为您会在网上看到许多图片(包括本文中的图片),它们可能来自不同型号的PDP-8。
DEC保持了基本的12位架构惊人地一致,但底层电子技术在多年间发生了巨大变化。有些型号更便宜,有些更快,有些本质上是关于如何用更少硬件构建同一台计算机的实验。
##### 原始PDP-8
原始的PDP-8于1965年推出,由分立晶体管逻辑和磁芯存储器构建。就当时而言,它是一台相对紧凑的机器,但其CPU仍由大量独立电路模块组成。正是这台机器确立了PDP-8架构,并帮助小型机在商业上取得成功。
##### PDP-8/S
PDP-8/S于1966年推出,采用了一种特别有趣的方法。它没有构建一个宽的并行算术单元,而是**串行地**执行许多操作,一次一位。这节省了电路,从而降低了成本,但也使机器明显变慢。这是一个极佳的例子,说明架构理念如何在底层硬件被彻底重排后得以延续。
PDP-8/S
PDP-8/S前面板
##### PDP-8/I
PDP-8/I将设计转向集成电路(IC),使计算机更小、更便宜、更实用。DEC现在可以使用集成逻辑,将更多功能封装到更小的空间中,而不是用早期的分立晶体管模块构建处理器。
PDP-8/I
PDP-8/I前面板
##### PDP-8/E
1970年的PDP-8/E是最重要的型号之一,因为它成为了庞大PDP-8系统和外围设备生态系统的基础。它使用了更新的IC技术,拥有模块化背板,并可以通过各种内存和I/O选项进行扩展。下图中的大型机器就是可以围绕8/E架构构建的系统类型的一个例子。
PDP-8/E
PDP-8/E前面板
##### PDP-8/F
8/F本质上是8/E的低成本版本。它保留了PDP-8架构,但简化了物理实现和封装。DEC在将同一架构理念转化为更廉价的制造方式方面变得非常擅长。
PDP-8/F
PDP-8/F前面板
##### PDP-8/A
还有PDP-8/A,它将小型、廉价的PDP-8理念推向了更远。它围绕更新的技术设计,对OEM厂商和嵌入式控制应用特别有吸引力。到了这个时候,PDP-8不一定看起来像我们从早期系统照片中想象的那种大型小型机——它可能是一台相对紧凑的计算机,隐藏在另一台机器内部。
PDP-8/A
PDP-8/A前面板
需要注意的一个重要点是,这些机器并非仅仅是越来越强大的CPU的简单序列。在许多情况下,DEC保持了编程模型的稳定,同时改变了底层的实现。因此,为PDP-8架构编写的程序可以跨越几代硬件。电子技术可以从分立晶体管变为集成电路,存储器可以改变,封装可以改变,机器可以变得明显更便宜,而程序员仍然可以使用相同的12位累加器、程序计数器、LINK位、内存引用指令和I/O指令来思考。
这种稳定性是PDP-8家族从架构角度来看如此有趣的原因之一。不同的型号几乎就像是实现上的实验:*“我们可以用多低的成本、多快的速度或多紧凑的方式构建本质上相同的计算机?”*
### PDP-8/E实地指南
这是一台配置齐全的**PDP-8/E**,DEC在1970年代中期的12位小型机。可以说,正是这台机器让“小型机”这个词变得可以负担得起。看起来像一个机柜的东西实际上是三个用螺栓连接在一起的**机柜**:**右边是处理器和纸带I/O**,**中间是DECtape存储**,**左边是磁盘存储**。点击任意编号的灯查看详情。
一台三机柜DEC PDP-8/e小型机机柜的正面视图,包含操作员控制台、DECtape驱动器、RK05磁盘驱动器和纸带读写机,并标注了十个编号说明。
1
### 型号铭牌
数字设备公司的制造铭牌,将这台确切的机器标识为**PDP-8/E**。顶部的匹配橙色到金色条纹在所有三个机柜上重复出现,将它们颜色编码为一个系统,而不是三个独立的机柜。
2
### CPU和操作员控制台
处理器本身位于此面板后面,在Omnibus背板上(连同其磁芯存储器)。琥珀色的灯显示**内存地址寄存器**的实时内容,因此您正在实时观察CPU的程序计数器滴答作响。下方的拨码开关是开关寄存器,用于手动输入引导地址或存入/检查内存。
3
### 纸带读写机
一个高速纸带I/O单元(俗称“**打孔机**”)的控制部分在右下角可见。在磁盘成为标准设备之前,穿孔纸带是程序和数据进出PDP-8的日常方式。
4
### 备用磁带卷存储架
一个空的、带弹簧的磁带卷架,尺寸适合与中间(当前未加载)的DECtape驱动器使用的相同的小磁带卷。
5
### DECtape控制与状态面板
DECtape控制器内部逻辑的诊断灯(非用户数据)。可见的标识包括**WC**(字计数)和**STATE**,在控制器为下方驱动器服务时跟踪其读/写顺序。
6
### DECtape磁带卷存储
用于DECtape本身的磁带卷。这是一种容量较低但可按块寻址的格式,通常被称为“可以在其上进行计算的磁带”。与普通磁带不同,它支持随机访问和安全的边读边写。
7
### TU56 DECtape传输单元
这里堆叠了两个双传输单元(总共四个磁带单元)。每个传输单元有自己的**写入启用**和**远程/本地**开关。DECtape是DEC在磁盘驱动器足够便宜以至于每个系统都能负担得起之前的年月里,为半随机存取存储提供的可负担方案。
8
### RK05J磁盘盒驱动器
两个磁盘驱动器,每个都标记为**decpack RK05J**。每个驱动器使用一个可移动的、顶部加载的磁盘盒(就在上方架子上)。每个磁盘盒大约1.6MB,这对于运行操作系统和存储文件来说,相比磁带是一个巨大的飞跃。
9
### 磁盘盒存储
备用的RK05磁盘盒就放在其驱动器正上方的架子上,由运行这台系统的人员*手工标记*。
10
### 空白填充面板
在所有三个机柜中重复出现的大型普通面板并非无用空间。它们是覆盖在插卡笼、布线和电源上的盖板,这些部件在每个可见控制面板后面实际工作。
让我们看看PDP-8 CPU的内部,以更好地理解其电子技术和计算机架构。
### PDP-8 CPU非常小巧
如果您查看现代CPU架构图,会发现令人眼花缭乱的寄存器集合。
PDP-8几乎滑稽地不同。程序员可见的核心包括一个12位**程序计数器**、一个12位**累加器**和一个**链接位**。硬件中还有其他寄存器,但我们期望是寄存器的许多东西实际上是使用内存实现的。
内存比构建更多CPU状态便宜。
嗯,相对便宜。在1965年,增加另一个寄存器可不是随意就能做的事。一个寄存器意味着更多的电路。
因此,PDP-8没有给程序员八个通用寄存器,而是给你一个*累加器*,并要求你使用内存处理其他所有事情。
这不方便,但也非常经济。
### 必不可少的PDP-8指令
PDP-8拥有一个非常小巧的指令集。每条指令正好是**12位**宽,前三位大致标识指令组。
##### 只有八个基本操作码
这是PDP-8的另一个奇特之处。“指令字”只有12位宽,前三位决定了八个主要指令组之一:
``
000: AND // 逻辑与
001: TAD // 补码加法
010: ISZ // 加一为零则跳过
011: DCA // 存入并清累加器
100: JMS // 跳转到子程序
101: JMP // 跳转
110: IOT // 输入/输出传输
111: OPR // 位操作
``
就这些。只有八个!
乍一看,这小得离谱。但对于PDP-8来说,其中几个并非真正的单一指令;它们是**指令族**。
下表包含理解本文讨论的示例和架构理念所需的一些最重要的指令。请注意指令的前三位实际上是其所属的主要组。
操作码 含义 12位指令 功能
`AND` 逻辑与 `000 I Z AAAAAAA` `AC ← AC AND M[address]`
`TAD` 补码加法 `001 I Z AAAAAAA` `AC ← AC + M[address]`,溢出/进位影响`LINK`
`ISZ` 加一为零则跳过 `010 I Z AAAAAAA` 将内存字加一;如果结果为零则跳过下一条指令
`DCA` 存入并清累加器 `011 I Z AAAAAAA` `M[address] ← AC`,然后 `AC ← 0`
`JMS` 跳转到子程序 `100 I Z AAAAAAA` 将返回地址存入内存并跳转到子程序
`JMP` 跳转 `101 I Z AAAAAAA` `PC ← address`
`IOT` 输入/输出传输 `110 DDDDDD OOO` 与I/O设备通信;设备和操作编码在指令中
`OPR` 操作 `111 xxxxxxxxx` 指令族,其中各个位选择对`AC`和`LINK`的操作
`CLA` 清累加器 `111 1 00000000` `AC ← 0`
`CLL` 清链接位 `111 0 10000000` `LINK ← 0`
`CMA` 累加器取反 `111 0 01000000` 翻转`AC`的每一位
`IAC` 累加器加一 `111 0 00000001` `AC ← AC + 1`
`RAR` 循环右移 `111 0 0000`
相似文章
快速了解 PDP-11:有史以来最具影响力的小型计算机(2022)
PDP-11 小型计算机于1970年推出,在计算机历史中影响深远,催生了 UNIX 和 C 编程语言。本文概述其架构和影响。
探索 PDP-1 Lisp (1960年)
关于运行1960年历史性的PDP-1 Lisp实现的详细介绍,包括启动过程及其作为首个交互式编程环境的重要意义。
嘿,DECmate II!这台小巧的PDP-8可不简单
一篇详细介绍DECmate II的博文,这款桌面文字处理器源自PDP-8小型计算机,文章涵盖其历史、架构以及修复计划。
The Art of CHIP-8
A deep-dive technical article exploring the CHIP-8 programming language, its instruction set, interpreter quirks, and strategies for writing portable CHIP-8 programs.
Gigatron 编程
一篇技术文章,详细描述了作者尝试理解和编程 Gigatron TTL 彩色微型计算机的过程,涵盖其哈佛架构、CPU 指令和编程技巧。