[TUHS] New project to recreate the B compiler for the PDP-11

Angelo Papenhoff aap at papnet.eu
Wed Apr 24 09:12:55 AEST 2019

Forgot to mention something on my site but I think I should bring it up
on the list anyway because I think it's a very neat hack
(by dmr, as scj told me):

B expects word addresses but the linker can't generate those on a byte
addressed machine. So all addresses have to be patched before calling
main at runtime. How can you do that if you link multiple files?
You will notice that the disassembled B files printn.s and printf.s
start with 'jmp 9f' and end with 'jsr r5,chain; 0'
Unfortunately we don't have the chain function but the way this
must work is the B runtime falls off into the first B object file,
which jumps to the end, calls a function to patch all addresses in
the current file, and falls off at the end itself into the next file.
The last file in the link has to be a B runtime file as well to end
the chain.

Note that this doesn't work with printn and printf because they're
inside bilib, but they have no addresses that need patching anyway,
guess you have to be careful.


On 23/04/19, Robert Swierczek wrote:
> I just started a project to recreate the B compiler for the PDP-11 as
> authentically as possible, given the few fragments that remain and
> some educated guesswork.  It should be fun (for various definitions of
> fun).
> Here is the repository  https://github.com/rswier/pdp11-B
> I have borrowed some tools from Warren's
> https://github.com/DoctorWkt/unix-jun72
> I have made a good start at reverse engineering the B run time library
> in /usr/lib/libb.a.  I have tried to make the source match the same
> style as the earliest C library found on the last1120c-bits tape.  The
> remaining functions in libb.a include printf and printn which appear
> to be written in B.  This should provide more clues needed to create
> the compiler.
> I am also tackling the dis-assembly of the threaded code interpreter
> /usr/lib/bilib.a (which at the moment is a big mess on my hard-drive)
> Later steps will include creating the B compiler itself by carefully
> pruning down the last1120c C compiler.  The fun here will be to
> boot-strap the B compiler without help from any existing modern
> compilers.  I think TMG will come into play to make that happen.
> All are welcome to contribute!
> Rob

More information about the TUHS mailing list