(If you do not see the frame version of this page with a table of contents in the left frame, click here.)


In 1974 I wrote an operating system for the PDP8, which included support for a tape drive, four CRT workstations, a disk drive, a printer, and the other usual PDP8 peripherals. I called it P8OS.

The PDP8 is a 4K machine, but DEC did support multiple banks for 4k 12-bit words, and ours had 3 banks, or 12k words of storage. P8OS occupied the first bank, and used the remaining two banks for the applications. It used the disk drive to store the programs to support data entry on the four CRTs. reports on the printer, and, of course, the operating system, itself. Because of the small memory, programs had to be rolled in as needed. P8OS supported this, and also supported additional banks if available.

P8OS, itself, was small enough to provide support for the peripherals and the multi-tasking functions and still had a couple of pages for "transients." These were small extensions to the applications that could roll in to the privileged first bank to perform such tasks as formatting the data-entry screens, and accepting the data that the users entered.

Recently, I started wondering if I had any materials related to P8OS. After much searching around the house, I discovered that I did, indeed, have a 43 year-old assembly listing. Needless to say, I had no digital copy of P8OS. So I photographed each page and spent several weekends transcribing the code to a set of ASM-files, and, to make sure that I had entered all that code correctly, I wrote an assembler in Java. The point, of course, was to try to preserve what I consider a pretty good design and I hated to let it just disappear into the black hole of pre-internet time as has so many other good works from the past.

I still have contact with my associate at the time, Mike Kuhn, who was instrumental in implementing P8OS back then. He did a lot of the testing and modifying of the device drivers, and wrote a number of the routines we used in the system, but which were not part of the OS, per se. He also wrote a printer output formatter tool (along the lines of a printf processor)which ran as a transient and was available to all the applications. He wrote the decimal math library, and modified our existing application suite to be compatible with P8OS.

So I asked him if he had any materials related to the work we did. Turned out, he did. He generously copied his materials, which mostly consists of my hand-written API notes, along with copies of relevant pages from DEC manuals for the various peripherals, and listings of a number of transient modules that were available to the applications. These materials are in the three PDFs that are part of this package.

I did not transcribe the transient modules. They are generally small, since they can only be two pages in size at most.

Download P8OS


How to assemble P8OS

The assembler jar file is in the P8OS folder, so open a command window and cd to that folder.

Enter the following command:
C:\P8OS> java -jar P8OSAsm.jar Source\P8OS.ASM P8OSLst.txt

The first parameter (P8OS.ASM) is the name of the source file to assemble, and the second parameter (P8OSLst.txt) is the name of the assembly output list file.

The assembler does not generate a binary file. Probably could be added easily enough, but I don't know the specs for that. I only needed the assembler to verify that my transcription matches the listings. I don't have a PDP8 to test it on.

(The assembler was compiled with JDK 1.8, requires JRE 1.6 or later, and could be compiled with 1.6 probably)

The child folders of the P8OS folder are

The main assembler file is P8OS.ASM, which uses INCLUDE commands to include the component files in the order shown in the listings.



Good starting point

pal-8 cross assembler download

pal-8 cross assembler reference manual


PDP-8 Document Information



I have not found the first several pages of the listing, consequently there is nothing of page zero, and the beginning of the interrupt chain is missing. However, I was able to use the symbol list at the end of the listing to reconstruct much of it. I did not add code for the start-up, but maybe it was loaded via paper tape? I don't remember. I did find some code on one of the sites that suggested what it would be, so I added that, but it probably is not what we had originally.

Also, the first four entries of the interrupt chain at 0200 were missing from the list. I guessed that the disk interrupt check would have been the first on the list, and I think I got that code right. But other peripherals are not accounted for. No mag tape, for example. The interrupt test code is maybe gleanable from DEC's original docs for those peripherals, and some of that is reproduced in the PDF manuals in the Documents folder.

We do not have listings of any of the transients, but I believe they did things like set up and take down control blocks for threads and files. There was probably a transient for setting up CRTs with data-entry templates. CRTs were simple 80x24 addressable-cursor ASCII terminals connected to the computer via RS232.

Templates would be roughly analogous to HTML forms that are used on the web, but would have been managed on the computer rather than in the CRT. Would mean that the applications could simply identify a template on the disk, and a CRT to the OS, and would get back the data that the user entered using the template. I would think the OS managed the user's cursor so that the user could not overtype the field labels.

We also have no listings of any of the several applications Mike and I wrote for P8OS, but there is probably enough information in the manuals in the Documents folder to figure out how to use the OS. The assembler that I wrote to validate my typing skills does not have a macro ability, but that would be pretty easy to add.

pal.c, pdpnasm.zip, and SMAL32.c are other assemblers I found on the internet at the links I listed above. I made no effort to make my assembler compatible with them.

2016.5.7 Paul Medlock and Mike Kuhn