Cover

*虽然不是原版的框体,但是谁能抵得住非常好pdp11的诱惑呢


0x00 - 前言

在计算机发展史上,迪吉多(DEC)于 1970 年推出的 PDP 11系列 是一座无法绕过的丰碑。它不仅开创了 16 位小巨型机(Minicomputer)的黄金时代,更直接孕育了 C 语言与 UNIX 操作系统。其优雅的、完全正交的指令集架构(ISA)和统一的统一内存映射 I/O(MMIO)设计,深深地影响了后世几乎所有现代 CPU 的诞生。

PDP11/23
*(图中为PDP11/23,依旧有钱买不到系列2333)

0x01 - 简介

pdp11 是一个非常大的系列的统称,大致可以分为使用UNIBUS总线的早期pdp11(比如pdp 11/20、pdp11/40、pdp11/45、pdp11/70)以及使用QBUS总线的后期pdp11(如pdp11/23、MicroPDP系列)。本次构建的PDP11系统基于QBUS总线的后期版本(CPU板卡型号:M8186、M8192)。

0x02 - 翻新

因为是从距今快20年机龄的PCB插件机上面拆下来的,所以超级超级的脏。

卖家秀
卖家秀,可以看到上面覆满了灰尘(串口板卡和收到的还不一样,特别不好找数据手册,差评)

快递

而且打包的方式也非常的随意,送到的时候两个侧板的被撞弯了,所幸还在接受范围,又不是不能用233

拆机
送到家以后就是拆机,可以看到里面是得有多脏

洗完
全部板卡水洗(能放进超声波清洗机的都过了一遍)洗完以后得样子上下两个镂空的固定板卡的铁板都有点锈了,本想重新除锈喷漆的,但感觉风格可能不是很搭配,所幸作罢。

0x03 - 硬件介绍

1. 总览

UNIDEC

首先是框体的介绍,在大佬的推荐下有幸在某鱼上捡到这么一个qbus总线的框体。这个框体本来是用在环球插件机上作为飞达等机构的控制板(当单片机使的)通过一个自研的并行总线板卡与执行机构进行通讯。并通过串口与一台486的上位机进行通讯。

UNIDEC框体介绍
这个是原版框体的板卡介绍,详细的介绍的数据手册我会放在文章的末尾

上位机烧写软件
这就是那个卖家写系统的程序,这个系统是存在pdp11的运行内存里面的,通过一个不知道什么类型(可能是铅酸)的电池给内存供电保持数据。然而我在快递送到收的时候就进行了大拆解,内存掉电了啥也没留下2333

后期版本

貌似还有个后期一体机的版本,使用的是KDJ11的处理器,板载了一堆内存,总线冲裁,bootLoder,串口模块。不知道有没有引出qbus总线,有时间买回来研究研究(挖坑中ing)

2. 自定义配置

自定义配置

使用的板卡从右到左依次是

插槽编号 板卡型号 注释
P/S / 原机自带的电源子板 用于生成LTC信号 与Halt控制
01 M8192 KDJ11 CPU板 MircoPDP 11/73 同款
02 NS23C QBUS内存 大小为1M
03 QProbe debug总线信号用的 还可以看跑马灯
04 Emulex UC07 SCSI硬盘控制卡
05 M7516 网卡
06 GTSC 304 仿DLV11-J的串口卡

注意:所有板卡必须紧挨着放置,不然dma和irq的菊花链无法串接到全部的板卡

背板配置

这个背板仅连接了最基础的qbus 18bit的总线,对于KDJ11所需的22bit总线还差四根(A/D 19-22)以及dma和irq,幸好背板后留足了足够长的引脚,也体验了一把古法wirewrap。

3、板卡介绍

P/S 电源分配子板

P/S电源分配子板

上面的逻辑电路主要是管LTC信号的生成与Halt的信号的处理。

红色的条线一定要连接,不然产生的LTC信号无法给到总线上

M8192 KDJ11 CPU板

M8192
M8192-1

有幸在某鱼上蹲到的了全新的库存,就是没有FPU 有点可惜。

NS23C 1M 内存

NS23C

上面的跳线帽有点氧化,大多数蓝色的跳线帽被换成了黑色的
数据手册我会放在文章末尾。

QProbe - Debug总线信号用

QProbe

中间的外接调试针脚我没焊,我应该不会想用逻辑分析仪调试这个神秘的总线的

QProbe-1

板子是从JLC定的,质量还行

QProbe-2

人肉SMT贴装这一块

Emulex UC07 - SCSI硬盘控制卡

UC07

这个板卡精密部件太多了(比如晶振)就没扔超声波水洗,看起来脏脏的。

数据手册我会放在文章末尾。

冷知识:板卡是从另一台MircoVAX上拆的,我赶到的时候已经只剩板卡了,太遗憾了。

如何这个板卡买不到的话,可以尝试RLV12模拟器

M7516 - 10M 以太网控制器

M7516

冷知识: 这个板卡上带了一颗6800作为控制器,主频还比cpu高。

GTSC 304 - 串口卡

GTSC304

这个串口卡的型号很难找,板卡上仅印有GT304,也是偶然间得知板卡型号的全称。相关的数据手册会放到文章的末尾。

这个串口卡有一个功能就是console模式,对于像M8186,M8192这种仅有cpu的dual port卡,不像M8189这种自带了最小系统的卡,这个模式可以很方便的进入ODT而无需过多操心地址相关的问题。

0x04 - 硬件设置

*配合上文的实物图观看更加。一些较为特殊的我单独讲一下,其他的可以参考实物图片配置

串口卡配置

串口配置

我开启了console enable,通道三的基地址会强行变为177560, 中断向量固定为60
然后将其余通道一到三的基地址设置为了176500, 中断向量设置为默认的300。具体的设置方法详见数据手册。

内存配置

详见 NS23C wiki

板卡的数据手册我也会放在文章末尾

唯一需要注意的是内存CSR地址的设置:

  • 第一块内存板:设置到 772100 $\rightarrow$ W9=I, W8=I, W7=I
  • 第二块内存板:设置到 772102 $\rightarrow$ W9=R, W8=I, W7=I
  • 第三块内存板:设置到 772104 $\rightarrow$ W9=I, W8=R, W7=I
  • 第四块内存板:设置到 772106 $\rightarrow$ W9=R, W8=R, W7=I

0x05 - 系统设置

理论上按照上述设置硬件后,硬件不会有问题。可以开始接下来的系统设置。

UC07 相关

如果你也像我一样,进不去FRD的话,可以尝试看看这个

FRD进入方式

  • 检查一下板载ROM是否有问题 讨论帖 我的G143P的固件也会在文章末尾放出
  • 首先需要确定硬件连接是否有问题,背板的dma,irq,地址线是否连接到位。LTC信号是否正常产生。
  • 在输入对应的地址并通过串口输入200G 是需要关闭cpu的Halt,不然就会像下图所示情况

UC07FRD异常情况

无法正确进入F.R.D

本系统教程经教如何进入bsd2.11,以及串口,网络相关设置

首先初始系统镜像建议下载BSD2.11-Simh修复网络版,这个版本已经编译好了网络栈比较的方便后面的自定义修改,使用/211bsd/media/root.dsk即可。

建议在电脑上运行Simh编辑好内核后再重新放到实体机器上,实体机编译内核比较慢

然后就是DLV11-J多用户登录的适配

原配置方案可以看这里 $\rightarrow$ 讨论帖

DLV11挂载在/dev中的tty名称是ttyl*

在没有做任何设置的状态

1
2
# ls -l /dev/ttyl*
crw--w---- 1 root 0, 1 Jun 9 16:05 ttyl1

因为我们四个通道中的通道三已经被console占用,所以我们只需要额外的再增加两个串口

1
2
3
4
5
6
7
8
# cd /dev
# /dev/MAKEDEV dl2
# /dev/MAKEDEV dl3

# ls -l ttyl*
crw--w---- 1 root 0, 1 Jun 9 16:05 ttyl1
crw--w---- 1 root 0, 2 Jun 9 16:05 ttyl2
crw------- 1 root 0, 3 Jun 9 14:13 ttyl3

同时我们需要修改内核中NKL的值

对于当前的系统来说cn.h文件的位置在/usr/src/sys/SYSTEM

使用vi编辑器编辑好后如下所示即可,NKL的值一定是实际物理端口的数量,不然会有bug

1
2
3
4
# pwd 
/usr/src/sys/SYSTEM
# cat cn.hh
#define NKL 4

然后就是编译内核 在编译之前需要清空之前的缓存,不然改动可能不会生效

1
2
3
# make clean
# make
# make install

接下来就是修改dtab(自动系统配置设备表)用vi改成如下图所示就行

1
2
3
4
5
6
7
8
# If you have DL11s, you must give each line an explicit unit number instead
# of using a '?' as above. If you use a '?', autoconfig(8) will start
# assigning unit numbers starting at 0 which will effectively move your
# console to that first line. Start your unit numbers with '1'.
#
cn 1 176500 300 5 cnrint cnxint # kl/dl-11 (on mvx11-aa)
cn 2 176510 310 5 cnrint cnxint
cn 3 176520 320 5 cnrint cnxint
字段 物理与内核意义
设备名 (Name) cn 映射的驱动程序名称,对应内核中的 cn(Console / DL11 / DLV11 系列控制台与多串口驱动)。
次设备号/线路号 (Unit) 1-3 Line Number(通道号)。代表这是该 cn 驱动下的第 3 号扩展通道(通常对应 /dev/ttyl3
CSR 物理地址 (CSR Address) 176500-176520 Control and Status Register(控制与状态寄存器) 的八进制物理总线地址。内核向这个内存映射地址(MMIO)读写数据即可控制硬件
中断向量 (Vector Address) 300-320 Interrupt Vector 的八进制内存地址。当这个通道产生硬件中断时,PDP-11 硬件会自动跳到内存 0300 位置读取 PC 和 PS(程序计数器与处理器状态),进而跳转到内核的中断服务程序。
中断优先级 (BR Level) 5 Bus Request Level(总线请求优先级)。PDP-11 硬件中断分为 BR4 ~ BR7 四个等级。这里填 5 代表 BR5,意味着串口中断的优先级高于普通磁盘(通常为 BR4),能保证字符及时被 CPU 接收而不丢包。
接收中断处理函数 (RX Routine) cnrint Console/DL Receive Interrupt。当硬件串口接收到一个字节的数据并触发 300 中断时,内核会直接跳转调用的接收中断服务程序(定义在 cons.c / cn.c 中)。
发送中断处理函数 (TX Routine) cnxint Console/DL Transmit Interrupt。当硬件发送缓冲区变空、可以发送下一个字节并触发 304(Vector+4)中断时,内核跳转调用的发送中断服务程序

然后在/etc/ttys中绑定登录的串口就好了

注意:我的ttyl2 是给slient 707电传打字机 所以不需要更多控制字符 使用std标准

9600,300 是串口的目标波特率 需要跟串口板上的配置一致,不然会乱码

1
2
3
4
5
6
7
# cat /etc/ttys
#
# name getty type status comments
#
console "/usr/libexec/getty std.9600" vt100 on secure #special
ttyl1 "/usr/libexec/getty std.9600" vt100 on secure #VT100
ttyl2 "/usr/libexec/getty std.300" std on secure #ti-term

然后reboot重启,在重启后应该会看到如下的样子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
73Boot from ra(0,0,0) at 0172150
: ra(0,0,0)unix
Boot: bootdev=02400 bootcsr=0172150

2.11 BSD UNIX #3: Fri Jun 9 12:15:17 PDT 1995
root@:/usr/src/sys/SYSTEM

ram: nospace
ra0: Ver 3 mod 3
ra0: RD54 size=311200
attaching qe0 csr 174440
qe0: DEC DELQA addr 08:00:2b:aa:bb:cc
attaching lo0

phys mem = 1048576
avail mem = 688896
user mem = 307200

June 9 16:28:07 init: configure system

cn 1 csr 176500 vector 300 attached
cn 2 csr 176510 vector 310 attached
cn 3 csr 176520 vector 320 attached
Automatic reboot in progress...
Fri Jun 9 16:28:12 PDT 1995
Automatic reboot failed... help!
erase, kill ^U, intr ^C
#

看到vector 300-320 attached就证明配置的没有问题

按下^D进入多用户模式
然后就能看到熟悉的登录提示符了 root密码是Hithere

1
2
3
2.11 BSD UNIX (2bsd) (console)

login:

接下来就由你自己来探索吧~

哦对了 这个系统里面内置很多的游戏,特别好玩。!

全文完~ 2026.07.23

文件区

  1. UNIDEC 框体介绍
  2. Emulex UC07 SCSI控制卡手册
  3. NS23C 1M 内存
  4. GTSC304 串口卡
  5. Emulex UC07 G143P 固件