The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: Angelo Papenhoff <aap@papnet.eu>
To: Robert Swierczek <rmswierczek@gmail.com>
Cc: TUHS main list <tuhs@minnie.tuhs.org>
Subject: Re: [TUHS] New project to recreate the B compiler for the PDP-11
Date: Wed, 24 Apr 2019 01:12:55 +0200	[thread overview]
Message-ID: <20190423231255.GA91890@indra.papnet.eu> (raw)
In-Reply-To: <CAAFR5pbE5mX25qzwZMp9BoGxS--dPn0CRm-ziskHDNkG5wO8kA@mail.gmail.com>

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.

aap

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

      parent reply	other threads:[~2019-04-23 23:13 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-23 22:11 Robert Swierczek
2019-04-23 22:47 ` Angelo Papenhoff
2019-04-23 23:36   ` Robert Swierczek
2019-04-23 23:12 ` Angelo Papenhoff [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190423231255.GA91890@indra.papnet.eu \
    --to=aap@papnet.eu \
    --cc=rmswierczek@gmail.com \
    --cc=tuhs@minnie.tuhs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).