Nice job -- one comment:  You said at the end of your document:
"Both cno and phx were written at what appears to have been what I would call v6b, version 6 as the standard library was moving from libS to libc, as Dennis Ritchie formalised the library proper. This can be seen in crt0.s where the form is not of standard V6 but of the libc V6 before it became standard in V7 and changed yet again. I was able to track this using the UNSW archives which have both libraries at the critical point."

I will place a bet it is not your v6b idea...  (which was basically V6 plus Ken's patch tape - although as Noel and I have decoded some of PWB 1.0 - which was based on V6 too -- made it into the wild in a couple of places).  Anyway, I think you are seeing code output from what was called the 'Typesetter C" compiler release which came out before V7 and was needed to compile troff et al.  which actually what conforms with the original K&R.   Indeed, that compiler used libS as the library.

The other thing, many v6 implementations (like CMU's and I think MIT) had a preprocessor (it was called /lib/cpp ) before we got Typesetter C.  i.e. a version of cpp that predated the Riesner cpp rewrite that was in Typesetter C and later V7.  Steve Johnson probably knows the history of the preprocessor better than I.   I know when we went through the V5 to V6 upgrade we somehow had a preprocessor.   I remember being curious about it and then being disappointed it was not as good as the BLISS macro facility.

But ... neither the binary nor the sources for that cpp are in Warner's Archives for V6 when I just looked.  

The Interdata 7/32 stuff Warren has is a V6 port, and has a version of cpp, but a note in the source says it is based on what looks like the Typesetter C compiler - which was sometimes called the Level 7 compiler because Dennis had told us all it was the new compiler for the next releases (TS and V7).

PWB 1.0 has a copy of cpp in the sources, but a quick look its not clear how close the V7 version it is.

So, unless anyone else can illuminate, I'm not sure where the first cpp that some of us using v6 had originated.

On Tue, Jan 7, 2020 at 3:14 PM Sean Dwyer via TUHS <tuhs@minnie.tuhs.org> wrote:
On Mon, Jan 06, 2020 at 11:48:02AM -0700, Warner Losh wrote:
> On Mon, Jan 6, 2020 at 11:38 AM Will Senn <will.senn@gmail.com> wrote:
>
> > On 1/6/20 12:29 PM, Warner Losh wrote:
> >
> > The good news is that disassembly will tell you right away if it was
> > written in C or not.
> >
> >
> > OK. I give up. How?
> >
>
> Generally, the C compiler generates code that's quite distinctive (at least
> PCC does, not sure about Dennis' compiler). People writing free assembler
> tend to do really weird things for function entry / return.
>
> And it will likely tell you if it's some weird wrapper around another
> binary, though that wasn't too common at bell labs.
>
> Warner

A while back I did some analysis (https://ewe2.ninja/computers/cno/) of
another source-less v6 binary, cno. Fortunately, it hadn't been stripped but I
still did some disasembly because of the interesting differences. v6 binaries
have a different crt0 preamble and simpler subroutine setup, and I narrowed
dowh the library code to an intermediate stage of iolib (which IIRC still
exists in the UNSW archive on TUHS). There's a few cribs in that essay to help
you figure out some basic things, pdp11 assembly isn't hard to decode.

--
I love deadlines. I love the whooshing noise as they fly by.