Unix V5 Preparations

The PDP Unix Preservation Society's External link Unix archive is home to many old versions of Unix. Looking through the different distributions' requirements and supported devices, it became clear that there was only one real option for an 11/35 (essentially an 11/40) with two RK05 drives: Fifth Edition Unix, a.k.a. Unix V5. Version 6 may also work but, spanning 4 RK05 disks, would require some squeezing to fit. Version 7 can also be recompiled for the 11/40 but the kernel needs to be so severely cut down it becomes barely usable. 2.9BSD would probably run too, but would require much more disk space than the 5MB on offer.

I'd have loved to have installed Unix from a real tape using the huge TE16 tape drive I have waiting in storage. Unfortunately this is a Massbus drive and isn't supported by V5 at all (maybe if I find some big Massbus disks I'll try this approach with 2.9BSD). In any case, no tape images of V5 seem to be available. Instead, the OS is provided on a single RK05 disk image. Although the vanilla installation apparently ran on the 11/40, the version in the archives is (re)compiled for the 11/45 and therefore won't boot on the 11/35. Thankfully I discovered this before transfering the disk image to the PDP-11!

To recompile for the the 11/40, you'd need either a real 11/45 or (rather more easy to come by) a PDP-11 simulator with 11/45 emulation. I used Bob Supnik's SIMH External link. The original documentation for V5 seems to have vanished so, seeing as V6 isn't all that different, it's recommended you use the V6 docs. Unfortunately the first thing mentioned in the section about reconfiguring the kernel is a script that doesn't exist in V5... Luckily the V6 script is pretty close to what is required to build a V5 kernel and therefore forms the basis of the process explained below.

First, I fired up the simulator, set the CPU type to 11/45 and attached the disk image. This can then be booted and you can log in to Unix as root (there's no password).

 
PDP-11 simulator V3.8-0
sim> set cpu 11/45
Disabling XQ
sim> at rk0 path/to/unix5.image
sim> boot rk0
@unix
login: root
#

The kernel stuff is located in /usr/sys and we're specifically interested in the conf subdirectory, in which you'll find the files required to configure the kernel. Fortunately I didn't need to recompile any of the device drivers in the other subdirectories. Note that there is no cd command in Unix V5! You'll need to use chdir to change your current directory.

# chdir /usr/sys/conf
# ls -l
total 47
-rw-r--r--  1 bin       513 Mar 21 12:07 conf.c
-rw-r--r--  1 bin       469 Nov 26 18:13 flrc
-rw-r--r--  1 bin      1218 Mar 21 12:07 low.s
-rw-r--r--  1 bin     11406 Mar 21 12:07 mch.s
-rw-r--r--  1 bin      7271 Nov 26 18:13 mkconf.c
-rw-r--r--  1 bin       376 Nov 26 18:13 tmrc
#

To configure the kernel for the 11/35 or 11/40, only one line need be edited in mch.s, changing the value for .45 from 1 to 0. If you're unfamiliar with the ed editor, the commands below will do the job.

# ed mch.s
11406
4
.45 = 1
c
.45 = 0
.
w
11406
q
#

The mch.s file now needs to be assembled. The assembler outputs to a file named a.out, which will be overwritten by subsequent commands unless you rename it.

# as mch.s
# mv a.out mch.o

Now we also need to configure which device drivers are to be included in the new kernel. There's a tool for this, called mkconf but it needs to be compiled first. You can then run mkconf and enter the abbreviated device names, followed by Control-D to finish. Below is an example - you may have more/less/other devices. The generated c.c file must then be compiled.

# cc -s -n mkconf.c
# mv a.out mkconf
# ./mkconf
rk
tm
tc
^D
# cc -c c.c

Assuming you didn't need to recompile any device drivers (which you'd need to re-link into the approriate library), all that's left is to assemble l.s and link the whole lot together into a kernel. The output is another a.out file which can be copied to the root directory. It's a good idea to name it differently to the running kernel so you can revert to the previous version should the new one not work.

# as l.s
# mv a.out l.o
# ld -x l.o mch.o c.o ../lib1 ../lib2
# cp a.out /newunix
# sync

Now, the acid test: set the CPU type to 11/40 and see if the new kernel will boot. If so, you can replace the old kernel with the new one and save yourself some disk space and so that you only need type "unix" at the "@" prompt to boot. You can also get rid of the intermediate files under /usr/sys/conf.

sim> set cpu 11/40
sim> boot rk0
@newunix
 
login: root
# mv newunix unix
# sync
# chdir /usr/sys/conf
# rm a.out *.o c.c l.s mkconf

You can now use VTServer External link to transfer the image to a real disk pack - hopefully it will boot on a real PDP-11/40 too!