PDP-11是计算机历史上最为著名的计算机之一,是数字设备公司(DEC)从1960年代早期到1990年代中期制造的系列产品之一。PDP-11在1970年上市,当时售价为10800美元,是当时唯一的16位计算机。
PDP-11为迪吉多电脑于1970到1980年代所销售的一系列16位元迷你电脑。PDP-11是迪吉多电脑的PDP-8系列的后续机种。PDP-11有着许多创新的特色,而且比起其前代机种更容易撰写程式。当32位元的后续扩充机型VAX-11推出时,PDP-11已经广受程式设计师的喜爱。这两个机型后续的市场,则多由IBM PC、苹果二号与升阳电脑的工作站电脑等个人电脑所取代。
微型机元老:Digital Equipment Corp. PDP-11 (1970)
DEC的元老级微型电脑1970年推出,到1997年终结历史任务,期间经历了许多次变动。第一台PDP-11是一台16位机,取代了当时流行的PDP-8,采用了新的Macro-11汇编语言并因此在程序员中大受欢迎。在结束历史的10年后,这些早期机型仍然受到教育机构的青睐,部分原因是因为PDP-11具有对不同系统的仿真能力。
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) 为暂存器的内容)
-
暂存器 - 数值来自或存入暂存器中:OPR R ; R 含有参数
-
暂存器指定位址 - 暂存器用来指定读写的记忆体位址:OPR (R) ; R 存有位址
-
自动增值:OPR (R)+ ; R 记忆体位址上的数值增加 (R)
-
自动增值指定位址:OPR @(R)+ ; R 存有位址,其内容 (R) 加 2
-
自动减值:OPR -(R);记忆体位址 R 上的数值 (R) 减少
-
自动减值指定位址:OPR @-(R);记忆体位址 R 上的数值 (R) 减 2
-
索引:OPR X(R) ; (R)+X 为记忆体位址,在指令的第二字元
-
索引指定位址:OPR @X(R) ; (R)+X 为指令的第二字元记忆体位址的位址
程式计数器的定址模式
程式计数器(program counter,简称PC)亦可以用来作为一般暂存器使用,因此有以下的定址模式,可参照前面的通用暂存器:
-
直接定值:OPR #N;引数包含在指令中
-
绝对位址:OPR @#A;绝对位址包含在指令中
-
相对定址:OPR A ; PC+2+X 为记忆体位址。PC+2 为更新后的 PC
-
相对参考定址: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), BGE(分支 if >= 0), BLT(分支 if < 0), BGT(分支 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 的多种字串与十进位数相关指令
组合语言范例
PDP-11 使用的 打孔带以下是一个完整的”Hello, world!”巨集组合语言程式,可以在组译后于 RT-11 执行:
.TITLE HELLO WORLD .MCALL .TTYOUT,.EXIT HELLO:: MOV #MSG,R1;字串起始位址 1 :MOVB(R1)+,R0;回圈取得下一个字元BEQDONE;遇到字串结尾跳出.TTYOUT;输出至TTYBR1 ;回圈结尾 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的机种
下列机种使用 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 优良的即时回应能力。
特殊用途版本
运行‘登月小挺’游戏的 DEC GT40GT40 – 使用 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
转载地址:http://www.voidcn.com/blog/pk_20140716/article/p-4668344.html