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: