PDP-11
PDP-11为迪吉多电脑于1970到1980年代所销售的一系列16位迷你电脑,这个产品线总计销售约600,000部,是迪吉多最成功的产品线之一。PDP-11是迪吉多电脑的PDP-8系列的后续机种。PDP-11有着许多创新的特色,而且比起其前代机种更容易撰写程序。当32位的后续扩展机型VAX-11推出时,PDP-11已经广受程序员的喜爱。这两个机型后续的市场,则多由IBM PC、苹果二号与Sun微系统的工作站电脑等个人电脑所取代。
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), 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位隐藏用
汇编语言示例
编辑以下是一个完整的"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的机种
编辑下列机种使用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/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优良的即时回应能力。
特殊用途版本
编辑- 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各系列接脚兼容,而可以与原厂产品共享周边设备与软件。这些包含了:
操作系统
编辑PDP-11有数种可用的操作系统
迪吉多电脑:
协力厂商:
外部链接
编辑- 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外)