Recently I installed 2.11 BSD on my PiDP11/70, and indeed it still runs on that machine as I type. The catch though was that the platform was sufficiently old and limited that it was very hard to compile any useful software to run on it.

Still wanting to run something Unix like on “old” hardware, I went looking to see what I could run on a VAX. A few searches later and I was looking at NetBSD 10.0.

My power bill doesn’t allow me to run this on a real VAX, even if I had one, so I’m running this under simh on a Raspberry Pi 5. I’m sure I can find ways to do this better, but below is what’s working for me so far and what I’ve found.

building simh

The version of simh included with the Raspbian OS (based in Debian) is very old.

I cloned the open-simh (a fork of simh) repo from https://github.com/open-simh/simh.git and built it from source. From memory I needed to install libpcap-dev and libvdeplug-dev before compiling to get network support.

Once I had a vax binary, I moved it into /home/pi and gave it a couple of extra capabilities so it could access the network adapter:

setcap cap_net_raw,cap_net_admin+eip /home/pi/vax

simh config

The simh configuration file looks like this:

set cpu autoboot
set cpu conhalt
set cpu 256m
set cpu model=microvax
set cpu idle=netbsd

attach nvr netbsd-vax-nvram.img

set rl disabled

set rq enabled
set rqb enabled
set rqc enabled
set rqd enabled

set rq0 ra92
attach rq0 netbsd-vax-rq0.img

set rq1 rauser=8192
attach rq1 netbsd-vax-rq1.img

set rq2 rauser=8192
attach rq2 netbsd-vax-rq2.img

set rq3 rauser=8192
attach rq3 netbsd-vax-rq3.img

set rqb0 rauser=8192
attach rqb0 netbsd-vax-rqb0.img

set rqb1 rauser=8192
attach rqb1 netbsd-vax-rqb1.img

;set rq3 cdrom
;attach rq1 NetBSD-10.0-vax.iso

attach xq0 eth0

set dz disabled

set rom delay
boot cpu

This emulated MicroVAX 3900 has FOUR disc controllers.

  • RQ has the boot drive, configured as a standard RA92, plus three extra drives configured as 8G RA92’s.
  • RQB has two extra drives configured as 8G RA92’s (I can add two more later)
  • RQC and RQD are unused currently.

If I end up liking this arrangement, I’ll install an NVMe HAT on the Raspberry Pi and use an NVMe drive for storage - it’ll be vastly faster (and have a longer lifespan) than the MicroSD card.

It has an ethernet card attached to eth0 on the Raspberry Pi, and the DZ terminal multiplexer is disabled (I don’t need it).

Installation

During installation I had just rq0 and rq3 (I had the CD drive attached, with the ISO image mounted as can be seen commented out in the simh configuration above).

set rq0 ra92
attach rq0 netbsd-vax-rq0.img

This was my first mistake - I think.

This gives me a 1.5G rq0 drive, which is enough to install NetBSD on, but it doesn’t leave a lot of wiggle-room post-install. I assume I could have defined rq0 as ‘set rq0 rauser=8192’ to create an 8G boot drive and made the partitions larger (I haven’t tried it, but it seems like it should work - unless the DEC boot ROM can’t boot from a drive that large?)

Traps for young players (like me)

Perl CPAN

The Perl CPAN shell will run a 256MB RAM machine out of memory and it’ll swap into oblivion. Ask me how I know…

Networking

The network setup I have, using libpcap and putting the host interface into promiscuous mode, fails (as far as I can tell) to recognise, and hence reply to, ARP requests. It listens for its own MAC address, but ARP requests are broadcast.

In my case the emulated VAX lives in a different network to my workstations, and through natural chatter from the NetBSD host my router always has an ARP entry cached. Things just work.

If the emulated VAX was on the same network as my workstation, I’d have to use the emulation console to log in and ping my workstation. That populates my workstations ARP cache and then things just work.

Alternatively I could configure the NetBSD box to generate gratuitous ARP responses.