A Continuous Integration Pipeline for the PDP-11 (2.11BSD)
Recently I've been working on adding support to 2.11BSD for the
IBV11-A Qbus card. This is a GPIB controller capable of interfacing with
up to 15 devices over GPIB. Last night I managed to get it working well
enough to take waveform dumps from the oscilloscope and plot them (in
ASCII) with crtplot
. I have more projects in mind too, such
as support for ADAC parallel I/O cards and an SBD framebuffer card.
So, lots to keep me busy, but also lots to test and maintain. Like a normal millennial, I am tracking my changes in Git and the cool thing to do these days is use GitHub Actions (or GitLab CI/CD, or SourceHut builds, or whatever). In the case of GitHub Actions at least, you are allocated a virtual machine temporarily and can script a job to run.
Unfortunately GitHub does not offer PDP-11 virtual machines (yet…
wishful thinking), so I wrapped up simh
inside a container.
An expect
script takes care of booting up the PDP-11,
exiting single user mode and logging in. It then configures networking.
The container's entrypoint bundles the Github working directory into a
tar and transfers it over to the emulated PDP-11 using ftp.
Once the tarball has finished transferring, the expect script
resumes, first extracting, followed by building the kernel. The exit
status is checked after each command, which is also handled by
expect
, so we can tell if the kernel compiled
correctly.
Since networking inside the container is a bit awkward, I use NAT for the emulated networking. This has some limitations, but just about works for passive ftp transfers if you set up the containers addressing correctly.
Anyway, it's still a work in progress but works "well enough" for now. Here are some links:
Related posts:
Wanting to leave a comment?
Comments and feedback are welcome by email (aaron@nospam-aaronsplace.co.uk).