PDP-11

PDP-11为迪吉多电脑于1970到1980年代所销售的一系列16位元迷你电脑，这个产品线总计销售约600,000部，是迪吉多最成功的产品线之一。PDP-11是迪吉多电脑的PDP-8系列的后续机种。PDP-11有着许多创新的特色，而且比起其前代机种更容易撰写程式。当32位元的后续扩充机型VAX-11推出时，PDP-11已经广受程序员的喜爱。这两个机型后续的市场，则多由IBM PC、苹果二号与太阳微系统的工作站电脑等个人电脑所取代。

## PDP-11系列的特色

### 指令集

PDP-11深受程序员喜爱的原因，主要是在于其高度正规化指令集的设计，使得程序员可以容易地分别记住所有的运算码，以及指定运算子的方法。如此一来，给定运算子的方法（或称之为定址模式）便可以很容易地预测，这样子就不用去背一堆例外条件，或是特别受限的定址方式。

PDP-11所使用的指令集结构影响了C语言的语法。例如在c语言中，有着暂存器定址模式的增值与减值语法 ++i与i--。如果i与j都是暂存器变数，那么*(--i) = *(j++)这样子的表示式就可以编译为单一机器码指令。由于对单精确与双精确浮点数没有不同的运算码，也造成C语言中缺乏单精确浮点数运算的运算模式。

就某种逻辑来看，指令集中的定址模式可以视为一种"基底"，而指令集中的运算码则为另一个基底。每个双引数指令可以分为两个6位元的引数识别（分别包含了一个3位元的暂存器号码，和一个3位元的定址模式码）与一个4位元的运算码。而单引数指令，则有一个6位元的引数识别和一个10位元的运算码。所有的运算码都可以使用任何的定址模式，双引数指令还可以分别组合使用。在八个暂存器（编号0到7）当中，有七个是一般用途的T暂存器可作为平常运算使用，不过暂存器6则是某些指令下作为硬件识别堆叠指标之用。暂存器7则是程式计数器，是处理器执行程式码的位址标记。这项创新与一些定址模式，提供了暂存器内容定址，绝对位址定址与相对位址定址。

16位元字元组是以小端序即低位元在前的方式储存的。而32位元字元组则通常是以一种不常见的混合序格式储存。由于PDP-11的风行，这种格式也被引用为pdp-资料次序（PDP-endian）。

### 无专用的输出入埠

PDP-11与其他早期电脑最大的差异点，在于没有专用的输出入总线。PDP-11只有一个称作为Unibus的内存总线。所有外部的设备，都分别对应到不同的内存位址，所以不需要特殊的I/O指令。而其中断系统的设计，也刻意的简单化，以确保没有任何的中断程序会被遗漏。外部的设备可以从单一的输入线到四条优先度线路之一，发出中断要求。而处理器可以从阶层式的接受线路来回应中断要求。（阶层式的架构，是由一系列的逻辑闸所构成，来接受一系列按照优先级的事件。就一般来说，第一个逻辑闸的要求会优先被接受。而阶层式的要求，是按照设备的优先度来处理的。）

而就PDP-11的设计来说，这代表中断要求被接受的顺序，是根据实际上硬件在总线上与处理器的接近程度来决定的。当处理器回应的时候，外部设备会将其向量位址放在总线上，这是一个4位元的内存。之后处理器会从向量位置表读取到状态寄存器与程式计数器。

而新的状态暂存器会暂时取消掉其他的中断要求，来避免中断的重复发生。而取出的程式暂存器，则是指向中断处理程序的起始位址。中断处理程序将会先处里这个硬件的要求，完成后再重新接受其他的中断要求。最后，一个特别的RTI程序（自中断回复）会将处理器回复到发生中断之前的状态。（这也可能是一个优先权较低的中断处理程序）一个值得注意的是，处理器会避免遗漏掉中断要求，假使中断没有被回应，将仍然会被保留着到之后循环。假使程序不正常的启动了，处理器会发生一个特别的逾时错误，使用者将会得知这个硬件的错误。

### 为大量生产而设计

最后，由于PDP-11的设计，只需要半专业的人员来进行生产组装。产品在尺寸精确上的要求，并不是非常要紧的。PDP-11的背版使用绕线连接的方式，也就是内部的印刷电路板插入背版上的接头。这个接头上的端子以导线缠绕于上的方式来连接，端子可以切开导线的绝缘层，与导线金属的部分形成气密连接。这种类似型式的接头也可于电信模组上见到。

## LSI-11

LSI-11是第一个使用大型积体电路技术制造的PDP-11机型。整个处理器包含了四个由威腾（Western Digital）所制造的大型积体电路芯片。而其总线是一个类似Unibus的Q-Bus，不同点在于位址与资料以多工的方式来共用资料线，而Unibus则是使用分别的线路。而且另一个不同点在于其I/O设备的定址方式，可以容纳到22位元宽的实体位址（Unibus只有18位元的宽度），并且有支援阻断式（block mode）的运作。

处理器的微码包含了一个除错器，可以经由标准的RS-232终端机来操作。这在当时是一项创举，因为微码是计算机最基本的一个部分，也是最关键的控制单元。假使无法运作，便称不上是一个计算机。除错器提供了一个检验处理器中暂存器、内存与输出入设备的方法。因此，只要处理器可以运作，便能够检验与修正计算机的内部状态。这个内建的除错器，省却了昂贵与不方便操作的一大堆在面板上的开关与灯号，那是传统上唯一能够与快挂掉的电脑沟通的方式。

其微码包含了一个通用的开机启动程序，相容于所有DEC的磁盘设备。

这两项创新使得LSI-11总是可以开始运作。当其无法从大型磁盘启动时，会尝试由其软碟启动。而当硬件开始运作后，便可以从熟悉的终端机来使用。

## PDP-11的式微

PDP-11最基本的设计是非常优良的，而且也一直有更新加入新的技术。然而，PDP-11还是必须面对其16位元的架构是有极限的，这是没有办法透过校调或是扩充来克服的。虽然有些机型可以支援更大的实体内存定址，但所有的应用程序仍然被局限在一个16位元的虚拟定址空间而只能够使用64K的内存。当1980年代超大型积体电路的技术使得内存芯片能够更便宜，但是PDP-11的软件仍然无法享受到更大的内存所带来的便利。

DEC在PDP-11的下一代处理器为VAX（是"Virtual Address Extension (to the PDP-11)"的缩写）克服了这些问题，但最初只针对高阶市场来进行推广。而英特尔的8086与8088提供了一个四位元的扩充"节"在其16位元的定址上，使得定址空间提升到1M而不需要更改为32位元的设计。这对当时逐渐扩充的IBM个人电脑相容机市场来说，已经是足够的了。虽然在能够支援更大节定址空间的80286与拥有32位元定址空间的80386推出前，就有到达1M的需求。

当工程师转移到有更大的定址空间的架构时，支援32位元的运算也开始在如摩托罗拉68000和英特尔80386等后续的微处理器芯片上提供了。最后这些芯片的经济规模大到一个程度后，PDP-11就相对而言不够划算。DEC的一个DEC Professional系列，也就因此在市场上失败了，同时两个之后的DEC个人电脑系列也面临相同的命运。

DEC最后在1997年中止了PDP-11的机型，并且把其相关的设计与操作系统授权卖给了一家爱尔兰公司Mentec。这家公司是负责生产LSI-1的Q-Bus机板与个人电脑的ISA架构机板。

到了1990年末，DEC与大部分美国东北部六州（New England）的迷你电脑商，都在UNIX与windows服务器的兴起下，逐渐衰败。

## 架构细节

以下内容可参考PDP-11处理器手册（详见Gordon Bell's 1969年版）。

### 通用暂存器的定址模式

（R为通用暂存器，有0至7号；(R)为暂存器的内容）

0.暂存器 - 数值来自或存入暂存器中：OPR R ; R含有参数

1.暂存器指定位址 - 暂存器用来指定读写的内存位址：OPR (R) ; R存有位址

2.自动增值：OPR (R)+ ; R内存位址上的数值增加（R）

3.自动增值指定位址：OPR @(R)+ ; R存有位址，其内容 (R)加2

4.自动减值：OPR -（R）；内存位址R上的数值 (R)减少

5.自动减值指定位址：OPR @-（R）；内存位址R上的数值 (R)减2

6.索引：OPR X(R) ; (R)+X为内存位址，在指令的第二字元

7.索引指定位址：OPR @X(R) ; (R)+X为指令的第二字元内存位址的位址

### 程式计数器的定址模式

程式计数器（program counter，简称PC）亦可以用来作为一般暂存器使用，因此有以下的定址模式，可参照前面的通用暂存器：

2.直接定值：OPR #N；引数包含在指令中

3.绝对位址：OPR @#A；绝对位址包含在指令中

6.相对定址：OPR A ; PC+2+X为内存位址。PC+2为更新后的PC

7.相对参考定址：OPR @A ; PC+2+X为内存位址。PC+2为更新后的PC

### PDP-11指令

- 单引数指令 - 指令的长度为双字元组，一部分用来指定动作，称之为"运算码"（OP-Code）或"算子"。而第二部分则用来指定引数（运算子）的位址。

15｜6｜5｜3｜2｜0

运算码｜模式｜暂存器

- CLR（清除）, COM（取一的补数）, INC（增值）, DEC（减值）, NEG（取二的补数之负数）, TST（测试）, ASR（数学位元右移）, ASL（数学位元左移）, ROR（向右位元转动）, ROL（向左位元转动）, SWAB（字元置换）, ADC（加法进位）, SBC（减法进位）, SXT（扩张正负号）。
- 双引数指令 - 指令双字元组的一部分用来指定动作，而其余的部分则用来指定两个引数的位址。

15｜12｜11｜9｜8｜6｜5｜3｜2｜0

运算码｜模式｜暂存器｜模式｜暂存器

- MOV（资料搬移）, ADD, SUB（加减法）, BIT（位元测试）, BIC（位元清除）, BIS（改动位元）, XOR（互斥或运算）。
- 程控指令 - 指令双字元组的第一部分用来指定动作，而第二部分则用来指定要执行的程式码位址。

15｜8｜7｜0

运算码｜位移值

- BR（无条件分支）, BNE（非零值时分支）, BEQ（数值为零时分支）, BPL（正数时分支）, BMI（负数值时分支）, BVC（溢位清除时分支）, BVS（发生溢位时分支）, BCC（进位清除时分支）, BCS（发生进位时分支）。
- BLE（分支if = 0）, BLT（分支if 0，正负号比较）
- BLO（小于时分支）, BHI（大于时分支）, BLOS（小于或等于时分支）, BHIS（大于或等于时分支，无正负号比较）
- SOB（暂存器减一后为零时分支）。
- 跳跃与子程序指令
- JMP（跳跃）, JSR（跳入副程式）, RTS（自副程式跳回主程式）
- EMT（模拟器错误时触发）, TRAP, BPT（中断点触发）, IOT（输出入错误时触发）, RTI & RTT（自副程式跳回时触发）
- 其他指令
- HALT, WAIT（等候中断触发）, RESET（重置UNIBUS）, MTPD（移至前一个资料空间）, MTPI（移至前一个指令空间）, MFPD（移自前一个资料空间）, MFPI（移自前一个指令空间）, MTPS（移至处理器状态字元组）, MFPS（移自处理器状态字元组）
- 条件码操作
- CLC, CLV, CLZ, CLN, CCC（清除相关的条件码）, SEC, SEV, SEZ, SEN, SCC（设定相关的条件码）
- 处理器状态字元组（processor status word - 简称PSW）的状态码共有四种：
- N负数
- Z零值
- V溢位
- C进位
- "扩充指令集"（EIS），在11/35/40和11/03为选购，在更新的处理器则为内建功能
- MUL, DIV暂存器组的整数相乘与相除
- ASH, ASHC算数位元位移暂存器或暂存器组，正数位移向左，负数向右
- "浮点数指令集"（FIS），在11/35/40和11/03为选购
- FADD, FSUB, FMUL, FDIV堆叠位址上的单精数运算，由暂存器定址
- "浮点数处理器"（FPP），在11/45和大部分该系列的机种为选购
- 完整的浮点数运算，包含单精数与倍精数运算子，以浮点状态暂存器指定精确度
- 单精浮点数运算的资料格式为IEEE 754格式的基础：正负位元，8位元指数，23位元底数与第24位隐藏用
- 商用指令集 (CIS), 11/23/24为选购微码，11/44为附加模组与11/74的其中一版
- 支援COBOL与Dibol的多种字串与十进制数相关指令

## 组合语言范例

<image>

以下是一个完整的"Hello, world!"宏组合语言程式，可以在组译后于RT-11执行：

.TITLE HELLO WORLD .MCALL .TTYOUT,.EXIT HELLO:: MOV #MSG,R1；字串起始位址1$: MOVB (R1)+,R0；循环取得下一个字元BEQ DONE；遇到字串结尾跳出.TTYOUT；输出至TTY BR 1$；循环结尾DONE: .EXIT

MSG: .ASCIZ /Hello, world!/ .END HELLO

假设档名为HELLO.MAC，RT-11的组译，连结与执行的指令为：

.MACRO HELLO ERRORS DETECTED: 0

.LINK HELLO

.R HELLO Hello, world!

.

（RT-11的命令提示字元为"."）而更复杂的MACRO-11程式，以下是两个随意选自Kevin Murrell's KPUN.MAC与Farba Research's JULIAN程式。更进阶的PDP-11函式库程式码可免费从Metalab和Trailing Edge来查阅。

这些程式也可以在PDP-11模拟器上运行。Bob Supnik所写的名为SIMH模拟器，可以优秀地模拟PDP-11与许多其他的架构，同时包含了软件套件与原生操作系统（包含RT-11）。

## PDP-11的机种

PDP-11处理器依据其原始设计，以及I/O总线的种类，可以归类为以下几种系列。在这些类别当中，大部分都有两种以上的版本，其中一种为OEM代工的机型，另一种则是提供给最终使用者。

### Unibus的机种

<image>

下列机种使用Unibus作为其扩充总线：

- PDP-11（后称为PDP-11/20）和PDP-11/15 -- 原始，无微程式的处理器，由Jim O'Loughlin所设计。
- PDP-11/35和11/40 -- 微程式化的／20后续机型，由Jim O'Loughlin所带领的团队设计的。
- PDP-11/45，11/50，和11/55 -- 更快的微程式化的处理器，并且可以使用半导体内存或是核心内存。
- PDP-11/70 -- 11/45的扩充机型，经由独立内存总线支援4 MB实体内存与2 KB快取内存，并借由Massbus提供更快的I/O设备连结。
- PDP-11/05和11/10 -- 11/20的精减版。
- PDP-11/34和11/04 -- 11/35和11/05的后续精减版。PDP-11/09和11/39机型只有DEC内部文件记载，并没有生产销售。PDP-11/34的概念是由Bob Armstrong提出的。
- PDP-11/44 -- 11/34的扩充型，增加了快取内存和 浮点运算单元为标准功能。这一型并有一个特别的序列埠终端且支援4 MB实体内存。设计团队由John Sofio所带领。
- PDP-11/60 -- 有使用者可程式化微控制码的PDP-11，这是由Jim O'Loughlin所带领的另一组团队所设计的。
- PDP-11/24 - 最早使用超大形积体电路PDP-11和Unibus，使用"Fonz-11" (F11)芯片组
- PDP-11/84 - 使用超大形积体电路"Jaws-11" (J11)芯片组
- PDP-11/94 - J11为基础，比11/84更快

### Q-Bus的机种

下列机种使用Q-Bus作为其扩充总线：

- PDP-11/03（也称为LSI-11/03）-- 第一个大型积体电路（LSI）技术的PDP-11，使用威腾（Western Digital）生产的芯片组。
- PDP-11/23 -- 第二代大型积体电路（F-11），早期只支援248KB内存，但可以修改支援到4MB内存。
- PDP-11/23+／MicroPDP-11/23 -- 11/23改良版，在处理器卡上提供更多功能（实际上为四倍大小）
- MicroPDP-11/73 -- 第二代大型积体电路PDP，这个系统使用"Jaws-11" (J-11)芯片组。
- MicroPDP-11/53 -- 较慢的11/73有内建内存
- MicroPDP-11/83 -- 更快的11/73有内部内存连结（PMI）
- MicroPDP-11/93 -- 更快的11/83，最终DEC Q-Bus PDP-11机型。
- Mentec M100 -- Mentec重新设计的11/93，使用J-11芯片组时脉为19.66MHz，含4个内建序列埠，1-4MB内建内存，FPU为选购。
- Mentec M11 -- 处理器升级子板，最后的微码PDP-11架构，指令集是由Mentec设计的。使用TI 8832 ALU和德州仪器Texas Instruments制造的TI 8818微序列器。
- Quickware QED-993 -- 高性能PDP-11/93处理器升级子板

### 无总线的机种

- PDT-11/110
- PDT-11/130
- PDT-11/150

PDT为桌上型系统，以"智能终端机"来销售。其中／110与／130使用VT100终端机模式。

- PRO-325
- PRO-350
- PRO-380

DEC Professional系列为桌上型个人电脑，作为对抗IBM早期基于8088与80286个人电脑的竞争机种。这些机型配备有5 1/4"软驱与硬盘机，而325则是没有配备硬盘的机型。中央处理器为LSI-11产品线，以P/OS为操作系统，这是以RSX-11M+为基础的选单式系统。由于设计上刻意避免与PDP-11机种的软件相容性，其市场上最后失败的命运并不令人意外。

### 计划中但未上市机种

- PDP-11/27 -- Jaws-11机型的实作，计划采用VAXBI Bus作为I/O总线。
- PDP-11/68 -- PDP-11/60的后续机型，支援4 MB的实体内存。
- PDP-11/74 -- PDP-11/70扩充为多处理器的机型。最多可以使用四颗处理器，但是电缆线也会因此多到难以管理。另一个11/74的变形则是可以支援多处理器与内建商用指令集。有相当数量的11/74原型机（包含数种不同的子机型）生产出来以及至少二路的多处理器系统提供给客户作为外部测试（beta test）使用。但是实际上自始至终这个机型都没有正式的进行销售过。一套四路的多处理器系统由RSX-11操作系统的开发团队所维护，作为测试使用。而一套单处理器的版本则作为PDP-11工程一般时程分割之用。11/74之所以没有上市，主要是由于刚好与新的32位元产品与VAX 11/780这个第一个VAX机型的上市撞期。谣言流传与 阴谋论者认为11/74被取消的原因，是由于其效能相较于11/780系列要来得更佳：鉴于行销的考量，推出效能更好的的PDP-11机型将会影响并减缓客户转移到新的VAX机型的速度。然而，在该领域中维护产品的能力才是主要的原因。要说是阴谋论也好，DEC始终无法成功地将其所有的客户从PDP-11转移到VAX系列，这个主要的原因不是在于效能好坏，而是在于PDP-11优良的即时回应能力。

### 特殊用途版本

<image>

- GT40 -- 使用PDP-11/05的向量图形终端机
- GT44 -- 使用PDP-11/40的向量图形终端机
- H-11 -- Heathkit代制版的LSI-11/03
- VT103 -- VT100使用LSI-11背版
- VT173 -- 使用PDP-11/03的顶级终端机系列
- MINC-11 -- 使用PDP-11/03或11/23的实验室系统
- C.mmp -- 来自卡内基美隆大学的多处理器系统

### 海盗版相容机

由于PDP-11相当风行的缘故，在当时遭受禁运的东欧社会主义国家有许多未经授权的相容机被生产出来。有些甚至与DEC的PDP-11各系列接脚相容，而可以与原厂产品共用周边设备与软件。这些包含了：

- SM-4，SM-1420，SM-1600，Electronics BK-0010，DVK，UKNC（苏联）
- SM-4，SM-1420，IZOT-1016与周边设备（保加利亚）。
- SM-1420（东德）
- Mera（波兰）
- SM-4（匈牙利）
- 独立设备（罗马尼亚）

## 操作系统

PDP-11有数种可用的操作系统

迪吉多电脑：

- DOS/BATCH
- IAS
- P/OS
- RSX-11
- CAPS-11
- RT-11
- RSTS/E
- Ultrix-11

协力厂商：

- ANDOS
- MKDOS
- MONECS
- CSIDOS
- TRIPOS
- MUMPS
- Unix（有许多版本，包含Version 7 Unix与2BSD）
- DEMOS（苏联）
- TSX-Plus

## 外部链接

- PDP-11的FAQ
- 保留PDP-11系列的16位元迷你电脑
- 另一个PDP-11爱好者网站
- 俄国PDP-11相容机（俄语网站）。
- 苏联计算机历史博物馆
- Gordon Bell与Bill Strecker于1975年发表的论文：我们从PDP-11学到了什么
- Gordon Bell的网站可以找到更多的论文与连结。
- PDP-11后端程式（程式范本产生器）支持可重定位ANSI Little C编译器
- Mentec，PDP-11系统软件目前的所有者（除IAS外）

## 基本资料

- 开发者：Digital Equipment Corporation
- 产品系列：编程数据处理机
- 类型：小型机
- 发布日期：1970年
- 生命周期：1970–1997
- 停产日期：1997年
- 销售台数：大约600,000
- 操作系统：DEC BATCH-11/DOS-11, DSM-11, IAS, P/OS, RSTS/E, RSX-11, RT-11, Ultrix-11, Seventh Edition Unix, SVR1, 伯克利软件发行版历史#2BSD (PDP-11)
- 平台：PDP 16-位
- 继任：VAX-11