[TUHS] v7 K&R C

Dan Cross crossd at gmail.com
Tue May 19 02:11:00 AEST 2020


On Sun, May 17, 2020 at 12:24 PM Paul Winalski <paul.winalski at gmail.com>
wrote:

> On 5/16/20, Steffen Nurpmeso <steffen at sdaoden.eu> wrote:
> >
> > Why was there no byte or "mem" type?
>
> These days machine architecture has settled on the 8-bit byte as the
> unit for addressing, but it wasn't always the case.  The PDP-10
> addressed memory in 36-bit units.  The character manipulating
> instructions could deal with a variety of different byte lengths:  you
> could store six 6-bit BCD characters per machine word,


Was this perhaps a typo for 9 4-bit BCD digits? I have heard that a reason
for the 36-bit word size of computers of that era was that the main
competition at the time was against mechanical calculator, which had
9-digit precision. 9*4=36, so 9 BCD digits could fit into a single word,
for parity with the competition.

6x6-bit data would certainly hold BAUDOT data, and I thought the Univac/CDC
machines supported a 6-bit character set?  Does this live on in the Unisys
1100-series machines? I see some reference to FIELDATA online.

I feel like this might be drifting into COFF territory now; Cc'ing there.

or five ASCII
> 7-bit characters (with a bit left over), or four 8-bit characters
> (ASCII plus parity, with four bits left over), or four 9-bit
> characters.
>
> Regarding a "mem" type, take a look at BLISS.  The only data type that
> language has is the machine word.
>
> >   +getfield(buf)
> >   +char buf[];
> >   +{
> >   +       int j;
> >   +       char c;
> >   +
> >   +       j = 0;
> >   +       while((c = buf[j] = getc(iobuf)) >= 0)
> >   +       if(c==':' || c=='\n') {
> >   +               buf[j] =0;
> >   +               return(1);
> >   +       } else
> >   +               j++;
> >   +       return(0);
> >   +}
> >
> > so here the EOF was different and char was signed 7-bit it seems.
>
> That makes perfect sense if you're dealing with ASCII, which is a
> 7-bit character set.


To bring it back slightly to Unix, when Mary Ann and I were playing around
with First Edition on the emulated PDP-7 at LCM+L during the Unix50 event
last USENIX, I have a vague recollection that the B routine for reading a
character from stdin was either `getchar` or `getc`. I had some impression
that this did some magic necessary to extract a character from half of an
18-bit word (maybe it just zeroed the upper half of a word or something).
If I had to guess, I imagine that the coincidence between "character" and
"byte" in C is a quirk of this history, as opposed to any special hidden
meaning regarding textual vs binary data, particularly since Unix makes no
real distinction between the two: files are just unstructured bags of
bytes, they're called 'char' because that was just the way things had
always been.

        - Dan C.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20200518/4afbbf66/attachment.htm>


More information about the TUHS mailing list