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

*(图中为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. 总览

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

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

这就是那个卖家写系统的程序,这个系统是存在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 电源分配子板

上面的逻辑电路主要是管LTC信号的生成与Halt的信号的处理。
红色的条线一定要连接,不然产生的LTC信号无法给到总线上
M8192 KDJ11 CPU板


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

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

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

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

人肉SMT贴装这一块
Emulex UC07 - SCSI硬盘控制卡

这个板卡精密部件太多了(比如晶振)就没扔超声波水洗,看起来脏脏的。
数据手册我会放在文章末尾。
冷知识:板卡是从另一台MircoVAX上拆的,我赶到的时候已经只剩板卡了,太遗憾了。
如何这个板卡买不到的话,可以尝试RLV12模拟器
M7516 - 10M 以太网控制器

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

这个串口卡的型号很难找,板卡上仅印有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的话,可以尝试看看这个

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

无法正确进入F.R.D
本系统教程经教如何进入bsd2.11,以及串口,网络相关设置
首先初始系统镜像建议下载BSD2.11-Simh修复网络版,这个版本已经编译好了网络栈比较的方便后面的自定义修改,使用/211bsd/media/root.dsk即可。
建议在电脑上运行Simh编辑好内核后再重新放到实体机器上,实体机编译内核比较慢
然后就是DLV11-J多用户登录的适配
原配置方案可以看这里 $\rightarrow$ 讨论帖
DLV11挂载在/dev中的tty名称是ttyl*
在没有做任何设置的状态
1 | # ls -l /dev/ttyl* |
因为我们四个通道中的通道三已经被console占用,所以我们只需要额外的再增加两个串口
1 | # cd /dev |
同时我们需要修改内核中NKL的值
对于当前的系统来说cn.h文件的位置在/usr/src/sys/SYSTEM
使用vi编辑器编辑好后如下所示即可,NKL的值一定是实际物理端口的数量,不然会有bug
1 | # pwd |
然后就是编译内核 在编译之前需要清空之前的缓存,不然改动可能不会生效
1 | # make clean |
接下来就是修改dtab(自动系统配置设备表)用vi改成如下图所示就行
1 | # If you have DL11s, you must give each line an explicit unit number instead |
| 字段 | 值 | 物理与内核意义 |
|---|---|---|
| 设备名 (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 | # cat /etc/ttys |
然后reboot重启,在重启后应该会看到如下的样子
1 | 73Boot from ra(0,0,0) at 0172150 |
看到vector 300-320 attached就证明配置的没有问题
按下^D进入多用户模式
然后就能看到熟悉的登录提示符了 root密码是Hithere
1 | 2.11 BSD UNIX (2bsd) (console) |
接下来就由你自己来探索吧~
哦对了 这个系统里面内置很多的游戏,特别好玩。!
全文完~ 2026.07.23