> Then on to trying to find out why MiniUnix crashes
whenever I try and do
> anything significant.
I decided I wasn't up to tackling that, so
instead I did all the edits
to produce an LSI-11 version of MX. ... I need to go
back and put conditional assembly flags in mch.s so there's only one
source file for both kinds of system. Doesn't boot, though.
So this has turned into a big swamp.
I went back and did the conditionals, and I can turn off the -11/03 flag and
produce the identical binary to the original mch.o file. -11/05 systems built
with that still won't boot, though!
So I had made some minor changes elsewhere in the system; e.g. a few files
(bio.c, clock.c, slp.c, and tty.c) refer the the PS explicitly (a no-no in the
-11/03) so I changed them all to call getps() and putps(), and added /05
versions of those to mch.s; so I backed them out, and re-built the system
using the original binaries of those; _still_ won't boot.
I then tried the original 'rkmx', and that _does_ boot; so there's no
mysterious damage to the file system. But now I'm deeply puzzled, since the
new system (which won't boot) should be basically identical (OK, not
bit-for-bit identical, but close).
So then I started trying to see why the new /05 system won't boot; the exec()
call in process 1 that starts /etc/init seems to be failing. Digging into
that, the call to namei() (in sys1$exec()) seems to be failing? Huh? The
file-system is OK (see above)?
So I'm trying to work out how that is happening. Which is non-trivial;
namei() is pretty convoluted. I can deal with the fact that there are two
nested loops using goto's (not the best form, but I can grok it), but then I
run into things like this:
for(cp = &u.u_dbuf; cp < &u.u_dbuf[DIRSIZ]; cp++)
if(*cp != cp[u.u_dent.u_name - u.u_dbuf])
Check out that second line! (And Heinz didn't touch it; this copy is from the
V6 source.) I'm not sure I 100% grok it, but I think I get roughly what it's
doing: 'cp' seems to be a (moving) pointer into the filename being matched,
and the term inside the 's seems to be an offset from there into the copy of
the current directory entry in the 'u' structure. (Which is a constant, it
doesn't need to be recomputed each time around the loop, though.) It seems to
check most of the (wrong) directory entries OK, but then inexplicably (to me)
At this point I'm getting a bad feeling that there could be a sim issue; that
could also explain the problem I'm seeing with the crashes, when trying to run
'cc' under the as-distributed -11/05 version.`
I'm not a SIMH user, though (I'm an Ersatz-11 person); is there anyone who is,
who'd like to play with MiniUnix with me?