UNIX Fourth Edition on SIMH v3.12-5

UNIX v4 was officially released for the DEC PDP-11/45 computers on November 1973, when those computers were the only computers eligible for this version of UNIX. Since then, it was thought to be lost until November 7th when the tape has been rediscovered. Apparently, this tape was sitting somewhere in one of the storage rooms in the University of Utah.

The Computer History Museum has further handled this by letting bitsavers.org conduct the recovery process, where the tape has been successfully recovered to a raw tape, which has then been uploaded publicly to the Internet Archive for publication, and the installation instructions were then laid out for simh.

So, we have followed the instructions on how to set up a minimal UNIX v4 system on an Arch Linux host using simh version v3.12-5. First, we have downloaded the system tape files.

[aptivi@archapt ~]$ mkdir uv4 [aptivi@archapt ~]$ cd uv4 [aptivi@archapt uv4]$ wget http://squoze.net/UNIX/v4/disk.rk --2026-04-01 13:56:49-- http://squoze.net/UNIX/v4/disk.rk Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2494464 (2.4M) [application/octet-stream] Saving to: ‘disk.rk’ disk.rk 100%[================================================>] 2.38M 511KB/s in 5.8s 2026-04-01 13:56:55 (423 KB/s) - ‘disk.rk’ saved [2494464/2494464] [aptivi@archapt uv4]$ wget http://squoze.net/UNIX/v4/unix_v4.tap --2026-04-01 13:57:47-- http://squoze.net/UNIX/v4/unix_v4.tap Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2572452 (2.5M) [application/octet-stream] Saving to: ‘unix_v4.tap’ unix_v4.tap 100%[================================================>] 2.45M 332KB/s in 6.9s 2026-04-01 13:57:54 (365 KB/s) - ‘unix_v4.tap’ saved [2572452/2572452] [aptivi@archapt uv4]$ wget http://squoze.net/UNIX/v4/install.ini --2026-04-01 13:58:00-- http://squoze.net/UNIX/v4/install.ini Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 68 [text/plain] Saving to: ‘install.ini’ install.ini 100%[================================================>] 68 --.-KB/s in 0s 2026-04-01 13:58:00 (10.9 MB/s) - ‘install.ini’ saved [68/68]

Afterwards, we have installed UNIX v4 files from the installation tape. The install.ini file contained the following contents:

set cpu 11/45 att rk0 disk.rk att tm0 unix_v4.tap d sr 2 boot -o tm

We had to use the mcopy command to install the system to the rk disk, then use uboot, with writing k and unix to boot to the installed kernel. Depending on your host distribution, the executable file for running the PDP11 simulator is either simh-pdp11 or pdp11.

[aptivi@archapt uv4]$ simh-pdp11 install.ini PDP-11 simulator V3.12-5 Disabling XQ =mcopy 'p' for rp; 'k' for rk k disk offset 0 tape offset 75 count 4000 =uboot k unix mem = 64530 login: root # ls bin dev etc lib mnt tmp unix usr # sync # Simulation stopped, PC: 002040 (MOV (SP)+,177776) sim> exit Goodbye

The Unix files have been successfully written to the rk disk, so we need to boot to Unix from it with boot.ini as the configuration file for simh.

Hint: CTRL + D to log out from your user account. CTRL + E to stop the simulation.

set cpu 11/45 set tc en att rk0 disk.rk d sr 2 boot rk

Again, we have to write both k and unix to boot to the kernel.

[aptivi@archapt uv4]$ wget http://squoze.net/UNIX/v4/boot.ini --2026-04-01 13:59:55-- http://squoze.net/UNIX/v4/boot.ini Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 76 [text/plain] Saving to: ‘boot.ini’ boot.ini 100%[================================================>] 76 --.-KB/s in 0s 2026-04-01 13:59:55 (13.3 MB/s) - ‘boot.ini’ saved [76/76] [aptivi@archapt uv4]$ simh-pdp11 boot.ini PDP-11 simulator V3.12-5 Disabling XQ k unix mem = 64530 login: root #

Now, we need to make device files for tape disk controllers using /etc/mknod and create them on /dev. This is needed to be able to read tapes on the installed system. They will be persistent across reboots.

# chdir /dev # /etc/mknod mt0 b 2 0 # /etc/mknod tap0 b 1 0 # /etc/mknod tap1 b 1 1 # /etc/mknod tap2 b 1 2 # /etc/mknod tap3 b 1 3 # sync # Simulation stopped, PC: 002040 (MOV (SP)+,177776)

Now that we have the tape device files, we can now read from tapes. We will recompile the kernel to integrate the enhanced rk driver. After the recompilation, we’ll reboot the system to the new kernel and create device files for rk.

[aptivi@archapt uv4]$ wget http://squoze.net/UNIX/v4/sys.tp --2026-04-01 14:02:21-- http://squoze.net/UNIX/v4/sys.tp Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 17408 (17K) [application/octet-stream] Saving to: ‘sys.tp’ sys.tp 100%[================================================>] 17.00K 8.45KB/s in 2.0s 2026-04-01 14:02:25 (8.45 KB/s) - ‘sys.tp’ saved [17408/17408] [aptivi@archapt uv4]$ simh-pdp11 boot.ini PDP-11 simulator V3.12-5 Disabling XQ k unix mem = 64530 login: root # Simulation stopped, PC: 002040 (MOV (SP)+,177776) boot.ini> # type k Unknown command boot.ini> # type unix Unknown command sim> att tc1 sys.tp TC1: 16b format, buffering file in memory sim> c # chdir /usr/sys # tp 1t run dmr/run dmr/rk.c ken/run conf/conf.c 5 entries 9 used 544 free 33 last END # chdir /usr/sys/dmr # mv rk.c rk.c.orig # chdir ../ # rm -f conf/conf.c # tp 1x END # sh run alloc.c: clock.c: fio.c: iget.c: main.c: nami.c: prf.c: rdwri.c: sig.c: 60: Warning: assignment understood 61: Warning: assignment understood slp.c: subr.c: sys1.c: sys2.c: sys3.c: sys4.c: sysent.c: text.c: trap.c: bio.c: cat.c: dc.c: dh.c: dhdm.c: dhfdm.c: dn.c: dp.c: dv.c: kl.c: lp.c: malloc.c: mem.c: partab.c: pc.c: pipe.c: rf.c: rk.c: rp.c: tc.c: tm.c: tty.c: vs.c: vt.c: # mv a.out /unix /unix: 0644 mode y # sync # Simulation stopped, PC: 002040 (MOV (SP)+,177776) sim> exit Goodbye TC1: writing buffer to file [aptivi@archapt uv4]$ simh-pdp11 boot.ini PDP-11 simulator V3.12-5 Disabling XQ k unix mem = 64529 login: root # chdir /dev # rm -f null # /etc/mknod mem c 1 0 # /etc/mknod kmem c 1 1 # /etc/mknod null c 1 2 # /etc/mknod rk0 b 0 0 # /etc/mknod rk1 b 0 1 # /etc/mknod rk2 b 0 2 # /etc/mknod rk3 b 0 3 # ls -l total 0 crw-rw-rw- 1 root 1, 1 Jun 12 19:54 kmem crw-rw-rw- 1 root 1, 0 Jun 12 19:54 mem brw-rw-rw- 1 root 2, 0 Jun 12 19:52 mt0 crw-rw-rw- 1 root 1, 2 Jun 12 19:54 null brw-rw-rw- 1 root 0, 0 Jun 12 19:54 rk0 brw-rw-rw- 1 root 0, 1 Jun 12 19:54 rk1 brw-rw-rw- 1 root 0, 2 Jun 12 19:54 rk2 brw-rw-rw- 1 root 0, 3 Jun 12 19:54 rk3 brw-rw-rw- 1 root 1, 0 Jun 12 19:52 tap0 brw-rw-rw- 1 root 1, 1 Jun 12 19:52 tap1 brw-rw-rw- 1 root 1, 2 Jun 12 19:52 tap2 brw-rw-rw- 1 root 1, 3 Jun 12 19:52 tap3 crw--w--w- 1 root 0, 0 Jun 12 19:55 tty8 # ps a 0 0 ???d??H??`?? ak??Z? ????? k? ? 0 1 /etc/init 8 7 - 8 17 ps a 0 6 /etc/update #

To verify that the new driver works properly, we’ll copy the UNIX source code to the second rk disk. We’ll then make it as a mount point as /usr/source for the source code files that will be located there.

sim> att tm0 src.tap TM: creating new file sim> att rk1 src.rk RK: creating new file sim> c # /etc/mkfs /dev/rk1 4872 isize = 103 # /etc/mount /dev/rk1 /mnt # chdir /usr/source # tp mr * 256 entries 1194 used 1256 last END # tp mt s1/ac.c s1/ar.s s1/as11.s s1/as12.s s1/as13.s s1/as14.s s1/as15.s s1/as16.s s1/as17.s s1/as18.s s1/as19.s s1/as21.s s1/as22.s s1/as23.s s1/as24.s s1/as25.s s1/as26.s s1/as27.s s1/as28.s s1/as29.s s1/bas0.s s1/bas1.s s1/bas2.s s1/bas3.s s1/bas4.s s1/bas5.s s1/basx.s s1/cal.c s1/cat.s s1/cc.c s1/cdb.c s1/check.c s1/chmod.c s1/chown.s s1/clri.s s1/cmp.s s1/comm.c s1/cp.c s1/date.c s1/db1.s s1/db2.s s1/db3.s s1/db4.s s1/dc1.s s1/dc2.s s1/dc3.s s1/dc4.s s1/dc5.s s1/dd.c s1/df.c s1/diff1.c s1/diff2.s s1/dsw.s s1/du.s s1/dump.c s1/echo.c s1/ed1.s s1/ed2.s s1/ed3.s s1/exit.c s1/fc.c s1/fed1.s s1/fed2.s s1/fed3.s s1/find.c s1/form1.s s1/form2.s s1/form3.s s1/form4.s s1/form5.s s1/form6.s s1/getty.s s1/glob.c s1/goto.c s1/grep.s s1/if.c s1/init.c s1/kill.s s1/ld1.s s1/ld2.s s1/ldx.s s1/ln.c s1/login.c s1/lpd.s s1/lpr.c s1/ls.c s2/mail.c s2/mesg.s s2/mkdir.s s2/mkfs.c s2/mknod.c s2/mount.c s2/msh.s s2/mv.c s2/nice.c s2/nm.c s2/nohup.c s2/od.c s2/passwd.s s2/pfe.s s2/pr.c s2/prof.c s2/ps.c s2/pwd.c s2/restor.c s2/rew.s s2/rm.c s2/rmdir.s s2/sa.c s2/sh.c s2/size.c s2/sleep.c s2/sort.c s2/split.c s2/strip.s s2/stty.c s2/su.c s2/sum.s s2/sync.c s2/tee.c s2/time.s s2/tp1.s s2/tp2.s s2/tp3.s s2/tp4.s s2/tr.c s2/tty.s s2/typo.c s2/umount.c s2/uniq.c s2/update.s s2/wc.c s2/who.c s2/write.s s3/atan.s s3/atof.s s3/atoi.s s3/compar.s s3/crypt.s s3/ctime.c s3/dpadd.s s3/ecvt.s s3/exp.s s3/fakfp.s s3/fp1.s s3/fp2.s s3/fp3.s s3/fpx.s s3/gamma.s s3/get.s s3/hypot.s s3/ldiv.s s3/log.s s3/mesg.s s3/mon.s s3/nlist.s s3/pow.s s3/put.s s3/qsort.s s3/rand.s s3/sin.s s3/sqrt.s s3/switch.s s3/ttyn.s s4/abort.s s4/atan.s s4/atan2.s s4/atof.s s4/chdir.s s4/chmod.s s4/chown.s s4/close.s s4/cos.s s4/crand.s s4/creat.s s4/crt0.s s4/crypt.s s4/dup.s s4/ecvt.s s4/errlst.c s4/execl.s s4/execv.s s4/exit.s s4/exp.s s4/ffltpr.s s4/floor.s s4/fltpr.s s4/fmod.s s4/fork.s s4/fstat.s s4/gamma.s s4/getc.s s4/getchr.s s4/getcsw.s s4/getgid.s s4/getpw.c s4/getuid.s s4/gtty.s s4/hmul.s s4/hsw.s s4/kill.s s4/link.s s4/locv.s s4/log.s s4/ltod.s s4/makdir.s s4/mcrt0.s s4/mdate.s s4/mknod.s s4/mon.c s4/mount.s s4/nargs.s s4/nice.s s4/nlist.s s4/open.s s4/perror.c s4/pipe.s s4/pow.s s4/printf.s s4/prof.s s4/putc.s s4/putchr.s s4/qsort.c s4/read.s s4/reset.s s4/retrn.s s4/rin.c s4/rsave.s s4/sbrk.s s4/seek.s s4/setgid.s s4/setuid.s s4/signal.s s4/sin.s s4/sleep.s s4/sqrt.s s4/ssw.s s4/stat.s s4/stime.s s4/stty.s s4/switch.s s4/sync.s s4/time.s s4/times.s s4/umount.s s4/unlink.s s4/wait.s s4/write.s s7/roff1.s s7/roff2.s s7/roff3.s s7/roff4.s s7/roff5.s s7/roff7.s s7/roff8.s s7/suftab.s 256 entries 1194 used 1256 last END # chdir /mnt # mkdir s1 s2 s3 s4 s7 # chown bin * # chmod 755 * # tp mx END # chdir /usr/source/s1 # rm -f [a-f]* # rm -f * # chdir ../s2 # rm -f * # chdir ../s3 # rm -f * # chdir ../s4 # rm -f [a-f]* # rm -f * # chdir ../s7 # rm -f * # chdir .. # rmdir * # chdir / # /etc/umount /dev/rk1 # /etc/mount /dev/rk1 /usr/source # ed /etc/rc 70 $ /etc/update i /etc/mount /dev/rk1 /usr/source . w 102 q #

Adding users to this system isn’t as straightforward as the modern Unix distributions; you’ll need to directly modify the /etc/passwd file to add a new entry that contains a new user, aptivi.

# ed /etc/passwd 30 $ bin::3:1::/bin: a aptivi::10:1::/usr/aptivi: . w 57 q # mkdir /usr/aptivi # chown aptivi /usr/aptivi # login: aptivi % who aptivi tty8 Jun 12 20:03 % login: root # passwd aptivi test # login: aptivi Password: %

As the site that provided us this tutorial claimed that we can install the B programming language compiler, but our tests have failed due to errors in the installation process.

[aptivi@archapt uv4]$ wget http://squoze.net/B/b.tp --2026-04-01 14:15:13-- http://squoze.net/B/b.tp Resolving squoze.net (squoze.net)... 93.128.9.138 Connecting to squoze.net (squoze.net)|93.128.9.138|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 137216 (134K) [application/octet-stream] Saving to: ‘b.tp’ b.tp 100%[================================================>] 134.00K 168KB/s in 0.8s 2026-04-01 14:15:14 (168 KB/s) - ‘b.tp’ saved [137216/137216] [aptivi@archapt uv4]$ simh-pdp11 boot.ini PDP-11 simulator V3.12-5 Disabling XQ k unix mem = 64529 login: root # Simulation stopped, PC: 002040 (MOV (SP)+,177776) boot.ini> # type k Unknown command boot.ini> # type unix Unknown command sim> at tc0 b.tp TC0: 16b format, buffering file in memory sim> c # mkdir /usr/b # chdir /usr/b # mkdir bilib libb # chown bin * # chmod 755 * # tp 0x END # sh install libb.a: non existent chdir chmod chown close creat ctime execl execv exit fork fstat getchr getuid gtty lchar link makdir open printf printn putchr read seek setuid sleep stat stty time unlink wait write char bilib.a: non existent a b1 b10 b102 b103 b11 b112 b113 b114 b115 b116 b117 b12 b120 b13 b14 b15 b16 b17 b2 b20 b3 b4 b5 b6 b7 c f n11 n123 n4 n6 n7 s t u10 u2 u3 u4 u5 u6 u7 va vx x y z brt1 brt2 bc File not found: /usr/lib/bilib.a un: s un: x un: c un: n4 un: b7 un: f un: ix un: n2 un: vx un: t un: n3 un: ivx un: b1 un: u4 un: n1 un: b5 un: n11 un: va un: iva un: u10 un: u7 un: a un: ia un: b4 un: b14 un: b2 un: n6 un: z un: b11 un: b114 un: u3 un: b3 un: b10 un: b15 un: b17 un: u5 un: y un: u2 un: u6 un: b6 un: b116 un: b117 un: n7 un: ic un: b103 un: b13 un: b20 un: b16 ba File not found: /usr/lib/bilib.a un: y un: s un: x un: c un: n4 un: b7 un: f un: ix un: n2 un: vx un: t un: n3 un: ivx un: b1 un: iva un: n1 un: b11 un: ia un: z un: n6 un: a un: b17 un: b14 un: va un: b114 un: u7 un: b5 un: b4 un: b15 un: u6 un: u3 un: n11 un: b3 un: u10 un: b10 un: b2 un: u2 un: n7 un: ic un: b20 un: b16 B i Bus error -- Core dumped Source file non-existent B i Bus error -- Core dumped Source file non-existent #

Other than this error when it comes to the B programming language, the Unix system works.

#news #simh #Tech #Technology #Unix #UNIXFourthEdition #UNIXV4 #update
UNIX Fourth Edition on SIMH v3.12-5

UNIX v4 was officially released for the DEC PDP-11/45 computers on November 1973, when those computers were the only computers eligible for this version of UNIX. Since then, it was thought to …

Aptivi

UNIX Fourth Edition tape has been recovered!

For half a century, the UNIX v4 tape was not found, until this year. Everything changed when staff members at the University of Utah have found the UNIX v4 tape while cleaning out storage rooms. That was a very strong sign that the computer history was preserved and archived by those who make archives of old operating systems and other computer-related things.

UNIX v4 was officially released for the DEC PDP-11/45 computers on November 1973, when those computers were the only computers eligible for this version of UNIX. Since then, it was thought to be lost until November 7th when the tape has been rediscovered. Apparently, this tape was sitting somewhere in one of the storage rooms in the University of Utah.

The Computer History Museum has further handled this by letting bitsavers.org conduct the recovery process, where the tape has been successfully recovered to a raw tape, which has then been uploaded publicly to the Internet Archive for publication.

For those who are eager to run UNIX v4 using the simulation program, simh, on your host PC, you can follow the instructions on this page.

The Internet Archive entry has very interesting pieces of history of this tape that said:

  • UNIX V4 tape from the University of Utah, received by Martin Newell in June 1974 around when he modeled the Utah Teapot.
  • This is the raw analog waveform and the reconstructed digital tape image (analog.tap), read at the Computer History Museum’s Shustek Research Archives on 19 December 2025 by Al Kossow using a modified tape reader and analyzed with Len Shustek’s readtape tool.
  • The tape was found in July 2025 by Aleks Maricq in the storage closet of the Flux Research Group in the Merrill Engineering Building, among the documents of Jay Lepreau.
  • It was brought to the Computer History Museum by Jon Duerig and Thalia Archibald.

This tape was preserved in the storage room for more than half a century before it’s found in July 2025, then discovered on November, before being uploaded to the Internet Archive on December 22nd.

#news #simh #Tech #Technology #Unix #UNIXFourthEdition #UNIXV4 #update