> From: SPC <spedraja(a)gmail.com>
> I'll keep a reference of this message and try it as soon as possible...
No rush! Take your time...
> the disruptive fact (in terms of time) here is to put up-to-date both
> the PDP-11/23-PLUS and RL02.
My apologies, I just now noticed that you have an 11/23-PLUS (it is slightly
different from a plain 11/23).
I am not very familiar with the 11/23-PLUS (I never worked with one), but from
documentation I just dug out, it seems that they normally come with the MMU
chip, so we don't need to worry about that. However, the FPP is not standard,
so that is still an issue for bringing up Unix.
In fact, there are two different FPP options for the 11/23-PLUS (and,
actually, for the 11/23 as well): one is the KEF-11AA chip which goes on the
CPU card (on the 11/23-PLUS, in the middle large DIP holder), and the other is
something called the FPF-11 card, which is basically hardware floating point
(the KEF-11A is just microcode), for people who are doing serious number
crunching. It's a quad-size card which has a cable with a DIP header on the
end which plugs into the same DIP holder on the CPU card as the KEF-11A. They
look the same to software; one is just faster than the other.
Anyway, if you don't have either one, we'll have to produce a new Unix
load for you (not a big problem, if it is needed).
Noel
Does anyone know if the source for an early PDP-11 version of MERT is
available anywhere?
(For those who aren't familiar with MERT, it was a micro-kernel [as we would
name it now] which provided message-passing and [potentially shared] memory
segments, intended for real-time applications; it supported several levels of
protection, using the 'Supervisor' mode available in the 11/45 and 11/70. One
set of supervisor processes provided a Unix environment; the combination was
called UNIX/RT - hence my asking about it here.)
Thanks!
Noel
>> I got one PDP-11/23-PLUS without any kind of disk (by now, I got one
>> RL12 board plus one RL02 drive pending of cleaning and arrangement)...
>> I guess if could be possible to run V6 in this machine. There's any
>> kind of adaptation of this Unix version (or whatever) to run under ?
> IIRC the README page for that set of disk images indicates that in fact
> they originally came off an 11/23, so they should run fine on yours.
So I was idly looking through main.c for the Shoppa Unix (because it printed
some unusual messages when it started, and I wanted to see that code), and I
noticed it had some fancy code for dealing with the clock, and that tickled a
very dim memory that LSI-11's had some unusual clock thing. So I decided I
had better check up on that...
I got out an LSI-11 manual, and it looked like the 23 should work, even for
the 'vanilla' V6 from the Bell distro. But I decided I had better check it to
be sure, so I fired up the simulator, mounted a Bell disk, set the cpu type
to '23', and booted 'rkunix'. Which promptly halted!
After a bit of digging, it turned out that the problem is that the 11/23
doesn't have a switch register! It hit a kernel NXM trying to touch it -
and then another trying to read it in the putchar() routine trying to do a
panic(), at which point it died a horrible death.
So I added a SR (you can create all sorts of bizarre hybrids like that with
Ersatz-11, like 11/40's with 11/45 type floating point :-), and then it
booted fine. The clock even worked!
So you will have to use the Shoppa disk to boot (but see below), or we'll
have to spin you a special vanilla V6 Unix that doesn't try to touch the SR -
that shouldn't be much work, I only found two place in the code that touch it.
I did try the Shoppa 'unix', and it booted fine on an 11/23.
Two things to check for, though: first, your 11/23 _has_ to have the MMU chip
(that's the large DIP package with one chip on it nearest the edge of the
card), so if yours looks like this:
http://www.psych.usyd.edu.au/pdp-11/Images/23.jpeg
you're OK. Without the MMU chip, most variants of Unix will not run on the 23
(although there's something called MiniUnix, IIRC, which runs on an LSI-11,
which would probably run on a /23 without an MMU).
Here's the part that might be a problem: To run any of the Unixes on the
Shoppa disk, you also have to have the FPP chip too (that's the second large
DIP package with two chips on it - the image above does not include that
chip, so if yours looks like that, you have a minor problem, and I will have
to build you a Unix or something).
All of the Unixes on the Shoppa disk have to have the FPP, except one - and
that one wants an RX floppy as the root/swap device! The others will all
crash (I tried one, to make sure) if you try and boot them on an 11/23
without the FPP.
I could try patching the binary on the one that doesn't expect to use the FPP
to use the RL as the root, or either i) build you a vanilla V6 for a 23
(above), or ii) figure out how to build systems on the Shoppa disk, and build
you a Unix there which i) uses the RL as the root/swap, and ii) does not
expect to have the FPP.
But let's first find out exactly what you have...
Noel
> From: SPC <spedraja(a)gmail.com>
> I got one PDP-11/23-PLUS without any kind of disk (by now, I got one
> RL12 board plus one RL02 drive pending of cleaning and arrangement)...
> I guess if could be possible to run V6 in this machine. There's any
> kind of adaptation of this Unix version (or whatever) to run under ?
As I mentioned in a previous message on this thread, when I took that root
pack image from the Shoppa group, I could get it to boot to Unix right off.
All it needs is a single RL02 drive (RL/0) (and the console terminal, of
course).
I looked at the 'unix' on it, and it's for an 11/40 type machine (which
includes 11/23's); IIRC the README page for that set of disk images indicates
that in fact they originally came off an 11/23, so they should run fine on
yours.
That Unix has a couple of other devices built into it (looks like an RX and
some sort of A-D), but as long as you don't try and touch them, they will not
be an issue.
Let me know if you need any help getting it up (once you have a working RL02).
Noel
> From: John Cowan <cowan(a)mercury.ccil.org>
> Well, provided the compiler is honest, contra [Ken].
A thought on this:
The C compiler actually produces assembler, which can be (fairly easily)
visually audited; yes, yes, I know about disassembly, but trust me, having
done some recently (the RL bootstrap(s)), disassembled code is a lot harder
to grok!
So, really, to find the Thompson hack, we'd have to edit the binaries of the
assembler!
For real grins, we could write a program to convert .s format assembler to
.mac syntax, run the results through Macro-11, and link it with the other
linker... :-)
Also, I found on what's going on here:
> What was wierd was that in the new one, the routine csv is one word
> shorter (and so is csv.o). So now I don't understand what made them the
> same sizes!? The new ones should have been one word shorter!? Still
> poking into this...
The C compiler is linked with the -n flag, which produces pure code. What
the linker documentation doesn't say (and I never realized this 'back in the
day') is that when this option is used, it rounds up the size of the text
segment to the nearest click (0100).
So, in c2 (which is what I was looking at), the last instruction is at
015446, _etext is at 015450, but if you look at the executable header, it
lists a text size of 015500 - i.e. 030 more bytes. And indeed there are 014
words of '0' in the executable file before the data starts.
And if you link c2 _without_ the -n flag, it shows 015450 in the header as
the text size.
So that's why the two versions of all the C compiler phases were the same
size (as files); it rounded up to the same place in both, hiding the one-word
difference in text size.
Noel
Erg! Discussion of file name length brought back some chilling memories
of very early Unix, when file names were at most 6 characters long.
Longer names were accepted but truncated at 6 characters. So you could
edit ABCDE.c, store it, read it and edit it again, but the file system
knew it as "ABCDE." So when you compiled the program, the compiler
produced ABCDE.o, which overwrote the source code!
> To boot up the root pack (I don't think I did this at any point; I've
> always mounted it as a subsidiary drive)
> ...
> The disk has a working RL bootstrap in block 0, it should boot OK.
So I recently had to reboot my machine, and I took the opportunity to try
this; it worked right off, booted 'unix' OK. (I didn't try any of the other
Unixes in the root directory.) I had only that pack mounted on DL0, nothing
else.
> So, just for grins, because I was curious (after your question), I did
> try recompiling the C compiler, to see what I'd get.
> What I got were three files (c0, c1 and c2) which were _the exact same
> size_ (down to the byte) as the binaries on the V6 Research distro, but
> had a number of differences when compared with 'cmp -l'. Odd!
> ...
> I'll take a gander tomorrow and try and work it out.
So, this turned out to be because I had replaced the csv.o in libc.a with a
new one, because the standard V6 one doesn't work with long returns (which
use R1 as well as R0, and the V6 cret bashed R1). I put the old csv.o back,
and re-linked them, and this time c? all turned out identical.
So the source in the distro really is the source for the running compiler on
it.
What was wierd was that in the new one, the routine csv is one word shorter
(and so is csv.o). So now I don't understand what made them the same sizes!?
The new ones should have been one word shorter!? Still poking into this...
I understand most of the differences between the versions of c? with the old
and new csv.o; in all the jumps to cret, the indirect word in the instruction
was off by two (because cret was one word lower because csv was one word
shorter); that, along with different contents in csv.o, created most of the
differences.
Why one word shorter? Because in csv:
tst -(sp) / creates a temporary on top of the stack
jmp (r0)
had been replaced with:
jsr pc,(r0)
(saving one instruction, and making it one word smaller).
Noel
The web page mentions files-11 which is ODS-1.
Technically (it is all coming back to me now):
FILES-11 is a family of file systems that started in RSX-11
(or perhaps before but that's the oldest instance I know).
ODS-1 is really FILES-11 ODS-1; ODS is `on-disk [something].'
RSX-11 used ODS-1. VMS used ODS-2. I'm not sure of all
the differences offhand, but they were substantial enough
that we ended up writing two different programs to fetch
files to UNIX from RSX and VMS volumes (we had the latter
to deal with too). Certainly the directory entries were
different between the two: ODS-1 used RADIX-50-encoded
file names with at most six characters plus an at-most-three-
character `extension' (a term which newbies sometimes
improperly import into UNIX as well); I forget the exact
filename rules in VMS, but filenames certainly could be
longer than six characters.
I've found the early-1980s programs I remembered. There
were two, getrsx.c and getvms.c; two programs, one for
each file-system format. They are surely full of ancient
sloppiness that won't compile or won't work right under
a modern C compiler, and they make assumptions about byte
order. I'll spend some time in the next few days going over
them and see if I can quickly get something workable.
A footnote as to their origin: in the world where we wrote
these programs, we had not only multiple systems, but
shared disk drives. The disk drives themselves were
dual-ported; the controllers we used could connect to
multiple hosts as well. Each system had its own dedicated
disk drives, but the UNIX systems could also see the drives
belonging to the RSX and VMS systems; hence the file-fetching
programs, since this was well before the sort of networking
we take for granted these days.
On the other hand, we had several UNIX systems which spoke
uucp to one another, and that was occasionally used for
large file transfers. To speed that up, I taught uucico
a new protocol, whereby control information still went over
a serial line, but data blocks were transferred over a
chunk of raw shared disk (with appropriate locks, of course).
It was a simpler world back then, but that made it a lot more fun.
Norman Wilson
Toronto ON
This is also an RSX pack (I think), but when I tried to boot it, it said
"THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM", and since I don't
know how to mount disks under RSX-11 I left it at that.
There exists somewhere a UNIX program that reads an ODS-1 file-system
image and produces directory listings and extracts named files.
I know it exists because it was written by a friend (and probably hacked
around a little by me) almost 35 years ago, when we both worked in a
place that had some UNIX and some RSX-11. That means `somewhere'
probably includes some place in my old files. I'll see if I can
dig it out, upgrade it to work cleanly with modern C (it's just possible
I have an ODS-1 file system image lying around somewher too), and
post it either somewhere on the web or just to the list.
Norman Wilson
Toronto ON
> From: Larry McVoy <lm(a)bitmover.com>
> have you gotten to a point where you can rebuild the world and install
> your newly built stuff?
Well, I haven't tried to do that (it's not something that I'm that interested
in), but it _should_ be possible, since the 'vanilla' V6 distribution does
include the source for pretty much everything (including the C compiler,
assembler, loader, etc).
(This does not include the stuff from the Shoppa disk, like the new C
compiler, where I don't have the source. [The PWB distribution, which
includes a C compiler from 1977, is probably pretty close. Looking into
the PWB stuff is one of my next projects; we have 17 different versions
of that stuff, and I'd like to see what the differences among them are,
and maybe create a 'canonical' PWB.]
Also, per the 'Improvements' page, I have source for the Standard I/O
Library, but I'm using the binary library from the Shoppa disk, which may or
may not correspond to that source.)
Noel