Has anyone gotten Xinu running in SIMH? It seems like it should be straightforward to run the "support" utilities under BSD on an emulated VAX and then run Xinu itself on an emulated LSI-11. If anyone's done so, I'd be interested to learn what all you had to do to set it up and get it working.
-- Chris
-- who needs to figure out SIMH config file syntax to match the board set he wants to simulate
Does anyone have an email for Eric Schmidt? My vibe is he is super
private so contact me off list if you need to know why I am looking.
I overlapped with him at Sun and talked to him a few times but I doubt
he remembers me.
--lm
I've made a number of 'improvements' to the LSI-11 version of MINI-UNIX.
(I'm starting to be fairly impressed with MINI-UNIX; for people who have a
hardware PDP-11 with no memory management, it's a very capable system; most
of V6, and very good source compatability.)
First, with help from feedback from Paul Riley, I've improved the "Running
MINI-UNIX on the LSI-11" page:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/Mini.html
It should be pretty usable at this point, but more feedback on further
improvements gratefully accepted! (Hint, hint :-)
In code changes, I have a new version of mch.s:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/mch.s
The main improvements are a tiny prs() and prn(), to allow systems to leave
out prf.c to save space, but still be able to print messages (rather than
simply dying silently, as is MINI-UNIX's wont). The prs() also saves and
restores the console'e CSR, and prints with console interrupts off (to prevent
spurious interrupts).
An idea from Milo Velimirovic (use the top of the stack!) resulted in minor
improvements in two places where there wasn't a register free to use
MFPS/MTPS.
Also,I have a working RL driver for MINI-UNIX now (I was able to attach a V6
filesystem to RL0 and then could do "icheck /dev/rl0" and it worked); I'll be
up-loading that, and adding directions for using it, 'soon'. (It pretty much
just worked; pulled out the XMem bits, and the raw I/O calls, and it worked
right off.)
To make an RL the root filesystem, I need to tweak a few more things; the
parameters ROOTDEV, etc - crucially, including SWPLO and NSWAP - are currently
set in param.h, so you'd have to recompile the OS to switch disk types. I'm
going to put them back as externals in conf.c, the way they are in V6; that
way you'll only need an 'rlconf.c' to switch roots. (I'm not sure why they
were moved; it only saves one word each to make them #define's.)
Noel
[ Warning: you need to be an OF to understand the references ]
Time to re-post this... And trust me, an IBM 3090 was really big iron in
those days.
I don't recall the author, but I found it on the 'net.
-----
VAXen, my children, just don't belong some places. In my business, I am
frequently called by small sites and startups having VAX problems. So when a
friend of mine in an Extremely Large Financial Institution (ELFI) called me one
day to ask for help, I was intrigued because this outfit is a really major VAX
user - they have several large herds of VAXen - and plenty of sharp VAXherds to
take care of them.
So I went to see what sort of an ELFI mess they had gotten into. It seems they
had shoved a small 750 with two RA60s running a single application, PC style,
into a data center with two IBM 3090s and just about all the rest of the disk
drives in the world. The computer room was so big it had three street
addresses. The operators had only IBM experience and, to quote my friend, they
were having "a little trouble adjusting to the VAX", were a bit hostile towards
it and probably needed some help with system management. Hmmm, hostility...
Sigh.
Well, I thought it was pretty ridiculous for an outfit with all that VAX muscle
elsewhere to isolate a dinky old 750 in their Big Blue Country, and said so
bluntly. But my friend patiently explained that although small, it was an
"extremely sensitive and confidential application." It seems that the 750 had
originally been properly clustered with the rest of a herd and in the care of
one of their best VAXherds. But the trouble started when the Chief User went
to visit his computer and its VAXherd.
He came away visibly disturbed and immediately complained to the ELFI's
Director of Data Processing that, "There are some very strange people in there
with the computers." Now since this user person was the Comptroller of this
Extremely Large Financial Institution, the 750 had been promptly hustled over
to the IBM data center which the Comptroller said, "was a more suitable place."
The people there wore shirts and ties and didn't wear head bands or cowboy
hats.
So my friend introduced me to the Comptroller, who turned out to be five feet
tall, 85 and a former gnome of Zurich. He had a young apprentice gnome who was
about 65. The two gnomes interviewed me in whispers for about an hour before
they decided my modes of dress and speech were suitable for managing their
system and I got the assignment.
There was some confusion, understandably, when I explained that I would
immediately establish a procedure for nightly backups. The senior gnome seemed
to think I was going to put the computer in reverse, but the apprentice's son
had an IBM PC and he quickly whispered that "backup" meant making a copy of a
program borrowed from a friend and why was I doing that? Sigh.
I was shortly introduced to the manager of the IBM data center, who greeted me
with joy and anything but hostility. And the operators really weren't hostile
- it just seemed that way. It's like the driver of a Mack 18 wheeler, with a
condo behind the cab, who was doing 75 when he ran over a moped doing its best
to get away at 45. He explained sadly, "I really warn't mad at mopeds but to
keep from runnin' over that'n, I'da had to slow down or change lanes!"
Now the only operation they had figured out how to do on the 750 was reboot it.
This was their universal cure for any and all problems. After all it works on a
PC, why not a VAX? Was there a difference? Sigh.
But I smiled and said, "No sweat, I'll train you. The first command you learn
is HELP" and proceeded to type it in on the console terminal. So the data
center manager, the shift supervisor and the eight day-operators watched the
LA100 buzz out the usual introductory text. When it finished they turned to me
with expectant faces and I said in an avuncular manner, "This is your most
important command!"
The shift supervisor stepped forward and studied the text for about a minute.
He then turned with a very puzzled expression on his face and asked, "What do
you use it for?" Sigh.
Well, I tried everything. I trained and I put the doc set on shelves by the
750 and I wrote a special 40 page doc set and then a four page doc set. I
designed all kinds of command files to make complex operations into simple
foreign commands and I taped a list of these simplified commands to the top of
the VAX. The most successful move was adding my home phone number.
The cheat sheets taped on the top of the CPU cabinet needed continual
maintenance, however. It seems the VAX was in the quietest part of the data
center, over behind the scratch tape racks. The operators ate lunch on the CPU
cabinet and the sheets quickly became coated with pizza drippings, etc.
But still the most used solution to hangups was a reboot and I gradually got
things organized so that during the day when the gnomes were using the system,
the operators didn't have to touch it. This smoothed things out a lot.
Meanwhile, the data center was getting new TV security cameras, a halon gas
fire extinguisher system and an immortal power source. The data center manager
apologized because the VAX had not been foreseen in the plan and so could not
be connected to immortal power. The VAX and I felt a little rejected but I
made sure that booting on power recovery was working right. At least it would
get going again quickly when power came back.
Anyway, as a consolation prize, the data center manager said he would have one
of the security cameras adjusted to cover the VAX. I thought to myself,
"Great, now we can have 24 hour video tapes of the operators eating Chinese
takeout on the CPU." I resolved to get a piece of plastic to cover the cheat
sheets.
One day, the apprentice gnome called to whisper that the senior was going to
give an extremely important demonstration. Now I must explain that what the
750 was really doing was holding our National Debt. The Reagan administration
had decided to privatize it and had quietly put it out for bid. My Extreme
Large Financial Institution had won the bid for it and was, as ELFIs are wont
to do, making an absolute bundle on the float.
On Monday the Comptroller was going to demonstrate to the board of directors
how he could move a trillion dollars from Switzerland to the Bahamas. The
apprentice whispered, "Would you please look in on our computer? I'm sure
everything will be fine, sir, but we will feel better if you are present. I'm
sure you understand?" I did.
Monday morning, I got there about five hours before the scheduled demo to check
things over. Everything was cool. I was chatting with the shift supervisor
and about to go upstairs to the Comptroller's office. Suddenly there was a
power failure.
The emergency lighting came on and the immortal power system took over the load
of the IBM 3090s. They continued smoothly, but of course the VAX, still on
city power, died. Everyone smiled and the dead 750 was no big deal because it
was 7 AM and gnomes don't work before 10 AM. I began worrying about whether I
could beg some immortal power from the data center manager in case this was a
long outage.
Immortal power in this system comes from storage batteries for the first five
minutes of an outage. Promptly at one minute into the outage we hear the gas
turbine powered generator in the sub-basement under us automatically start up
getting ready to take the load on the fifth minute. We all beam at each other.
At two minutes into the outage we hear the whine of the backup gas turbine
generator starting. The 3090s and all those disk drives are doing just fine.
Business as usual. The VAX is dead as a door nail but what the hell.
At precisely five minutes into the outage, just as the gas turbine is taking
the load, city power comes back on and the immortal power source commits
suicide. Actually it was a double murder and suicide because it took both
3090s with it.
So now the whole data center was dead, sort of. The fire alarm system had its
own battery backup and was still alive. The lead acid storage batteries of the
immortal power system had been discharging at a furious rate keeping all those
big blue boxes running and there was a significant amount of sulfuric acid
vapor. Nothing actually caught fire but the smoke detectors were convinced it
had.
The fire alarm klaxon went off and the siren warning of imminent halon gas
release was screaming. We started to panic but the data center manager shouted
over the din, "Don't worry, the halon system failed its acceptance test last
week. It's disabled and nothing will happen."
He was half right, the primary halon system indeed failed to discharge. But the
secondary halon system observed that the primary had conked and instantly did
its duty, which was to deal with Dire Disasters. It had twice the capacity and
six times the discharge rate.
Now the ear splitting gas discharge under the raised floor was so massive and
fast, it blew about half of the floor tiles up out of their framework. It came
up through the floor into a communications rack and blew the cover panels off,
decking an operator. Looking out across that vast computer room, we could see
the air shimmering as the halon mixed with it.
We stampeded for exits to the dying whine of 175 IBM disks. As I was escaping
I glanced back at the VAX, on city power, and noticed the usual flickering of
the unit select light on its system disk indicating it was happily rebooting.
Twelve firemen with air tanks and axes invaded. There were frantic phone calls
to the local IBM Field Service office because both the live and backup 3090s
were down. About twenty minutes later, seventeen IBM CEs arrived with dozens
of boxes and, so help me, a barrel. It seems they knew what to expect when an
immortal power source commits murder.
In the midst of absolute pandemonium, I crept off to the gnome office and
logged on. After extensive checking it was clear that everything was just fine
with the VAX and I began to calm down. I called the data center manager's
office to tell him the good news. His secretary answered with, "He isn't
expected to be available for some time. May I take a message?" I left a
slightly smug note to the effect that, unlike some other computers, the VAX was
intact and functioning normally.
Several hours later, the gnome was whispering his way into a demonstration of
how to flick a trillion dollars from country 2 to country 5. He was just
coming to the tricky part, where the money had been withdrawn from Switzerland
but not yet deposited in the Bahamas. He was proceeding very slowly and the
directors were spellbound. I decided I had better check up on the data center.
\Most of the floor tiles were back in place. IBM had resurrected one of
the
3090s and was running tests. What looked like a bucket brigade was working on
the other one. The communication rack was still naked and a fireman was
standing guard over the immortal power corpse. Life was returning to normal,
but the Big Blue Country crew was still pretty shaky.
Smiling proudly, I headed back toward the triumphant VAX behind the tape racks
where one of the operators was eating a plump jelly bun on the 750 CPU. He saw
me coming, turned pale and screamed to the shift supervisor, "Oh my God, we
forgot about the VAX!" Then, before I could open my mouth, he rebooted it. It
was Monday, 19-Oct-1987. VAXen, my children, just don't belong some places.
-- Dave
Just for completeness: I have one OpenBSD 6.7 system at
home and look after several more at work, and yes, OpenBSD
still has raw disk devices.
Norman Wilson
Toronto ON
> I noticed a place where I used R0 as a temp ... and was being bashed.
> So I fixed it, and now the shell starts OK, but attempting to do any
> command (e.g. "echo foo"), things hang
Well, I had 'fixed' it; it turned out my 'fix' had a bug. :-( (The code I had
to change for the /03 there was pushing the old PS, and that and the temp I
had to push got intermangled.)
Anyway, with that fixed, the /03 Mini-Unix works now. The old user command
binaries seem to work OK on the /03; not that I've tried the all, but the ones
I have tried (including the C compiler) all worked. They all should all work
(there's nothing in user code that's model-dependent). I have tweaked the
shell (to allow 'cd') and init (to get rid of the annoying long rights
message), but that's all.
The latest, greatest mch.s is uploaded:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/mch.s
Although a couple of files (bio.c, clock.c, slp.c, and tty.c) had minor
changes (to remove direct rerferences to the PS; they now call getps() and
putps() for that), and main.c has minor changes to work when there's no KW11
or switch register, really the only file with significant changes for the /03
is mch.s. It's the only one where the object code is model-dependent; all the
other changed ones use the same object code for all CPU models.
I'll put up a Web page with details, links to sources, etc, 'soon'.
A couple of other things.
Mini-Unix has removed 'raw' devices (not sure why, probably seemed un-needed),
so other disk drivers (e.g. the RL11 driver) aren't straight drop-ins. Minimal
tweaks needed, though; just remove the read and write routines, I think.
If there was a real use for 'raw' devices, they could probably be added back,
but physio() would have to be modified (simplified). Not sure if anything else
special would be needed; the process can't be swapped while raw I/O is
ongoing, and so on Mini-Unix no other process could run. Probably OK, but
needs to be checked.
I recommend that everyone trying to run Mini-Unix on a hardware /03 invest in
a KEF11 chip. (There are a few on eBait.) That way, you can leave the EIS
emulator out of the build, which will save some space, and allow more room for
device drivers. I added kernel printf() into the build, to help with
debugging, but it can be removed to save space.
You can change the system to use more room for the kernel (see the Mini-Unix
docs), but that involves re-linking _every single user command_, including the
shell and init. Not recommended.
Noel
can stanley lieber contact me please (regarding an 8th edition manual)?
i can’t contact you via sl(a)stanleylieber.com (because of an SPF error),
so perhaps via another email address.
thanks
> From: Paul Riley
> port Mini-Unix will create some demand for device drivers on the /03
> systems, so may be worthwhile to implement RAW device.
I'm not sure I understand this ("worthwhile to implement RAW device"); let me
explain what the removal of 'raw' I/O devices from MINI-UNIX really means, and
then ask what it is that you are after.
Early Unix (no idea about later ones) supports two classes of devices; 'block'
devices, which can be used to hold file-systems, and 'character' devices,
which cannot. (I seem to recall a paper, perhaps from the Unix BSTJ issue,
which talks about them in some detail.)
The former are those where the underlying physical device has restricted
semantics; they are block-addressable mass storage devices. All access to them
is via the system's block buffer pool, so reads/writes by the user of
arbitrary size and location are possible. 'Character' devices are everything
else.
'Raw' devices are an interface to the devices of 'block' devices which does
not go through the system's buffer pool; I/O operations to them perform DMA
directly to the user process' memory. They are 'character' devices, in the
Unix device taxonomy. The only semantics available are those supported by the
hardware - e.g. seeks only to block boundaries.
So when I say that MINI-UNIX doesn't have 'raw' devices, it just means that
e.g. the RK disk controller device _only_ talks to the Unix block buffer
system; if a user program wants to look at the disk contents, it has to go
via that system.
So, with that in hand, what exactly is the need you forsee for raw devices
in MINI-UNIX?
Also, I've started to work on getting the V6 RL driver to work in MINI-UNIX;
it should have been easy (just delete the charater device interface), but
for some reason it didn't work when I tried it. I'll look at it in more
detail 'soon'.
Noel
> From: Jay Logue
> Are your other changes available anywhere?
Yeah, they're all up-loaded, and linked to from my 'Running MINI-UNIX on the
LSI-11' page:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/Mini.html
It's mostly done, but I'll probably continue to tweak it a bir.
If anyone notices any errors, or has questions that aren't answered there, etc
please let me know.
> Also, I was wondering if it might be useful to have a github repo with
> these changes. I'd be happy to help set this up.
Feel free to go for it, if people think it would be useful. (I'm not sure
there is a 'basic' MINI-UNIX repo to start on.)
Noel
How did globbing come about in unix?
Related, as regexes were already well known because of qed/ed, why wasn't a
subset of regular expressions used instead?
Tyler
> From: Paul Riley
> Always darkest before the dawn.
Well, we'll see.
I found _that_ one; process 1 managed to exec() init, do a fork(), and then
the child process exec()'d the shell - then that apparently died, and the code
in init falls through into:
termall();
execl(init, minus, 0);
when the single-user shell exits, so then init restarted; rinse, repeat.
So a _lot_ of the code in mch.s seemed to be working correctly; system calls
(2 exec()'s, and a fork()) worked, processing switching worked, device
interrupts (for the disk and console tty) seemed to be working.. Not sure
what's left!
So I looked at mch.s again, to see what else _was_ there, and I noticed a
place where I used R0 as a temp - with the MFPS/MTPS thing to get to the PS,
instructions like:
BIS #340, PS
need to change to:
MFPS R0
BIS #340, R0
MTPS R0
and R0 was being used to hold an arg (in pword:), and was being bashed.
So I fixed it, and now the shell starts OK, but attempting to do any command
(e.g. "echo foo"), things hang (the shell doesn't fork). If I type the
interrupt character, the shell exits, and init restarts.
Oh well, hopefully this one won't be too painful to work out. The system's
mostly working, which I think will really help.
Noel
> Now to see if 'cc' works on an '-11/40'
Yeah, the C compiler works fine on a /40; so the SOB bug (or perhaps some
_other_ one I haven't found yet) must have affected it too.
The thing that's odd about that bug is that SOB works _sometimes_ on an /05;
the 'rkmx' on the distro tape will boot (which if the SOB _never_ worked, it
wouldn't). So there must be a data dependency somehow. John Wilson says the
SOB is very optimized, so maybe there's a bug.
> then back to the /03.
Well, I tried /03 version, and it doesn't work; /etc/init continually
restarts.
The thing is that _every_ file except mch.s is identical between the '05'
version (which runs fine on the /40; above), and the /03 version. So the bug
must be in mch.s - unless there's somehow an /03 dependency somewhere else I
missed. I looked through init.c, didn't see anything.
Here:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/mch.s
is the mch.s source, if anyone wants to look through it and see if they see
anything. It's conditionalized for the /03; there's a very simple header file
(here:
http://ana-3.lcs.mit.edu/~jnc/tech/unix/Mini/03mch.s
for the 03 version) to set the flags (so one doesn't have to edit the main file
to change the flag settings).
I had a careful look at mch.s, before I started, checking all the added
conditionalized code; found one that could have been an issue (I was using a
temporary register, r0, that had needed data in it), but the rest all looked
OK. I have some ideas on how to proceed on working out what's going on, but
I'm done for today, gotta do other stuff.
Noel
> I suspect there must be an issue with the -11/05 emulation in Ersatz-11
There is. The C compiler on MiniUnix emits SOB instructions. The -11/05 doesn't
implement SOB; however, the instruction emulator in MiniUnix (emul.s) is
prepared to emulate it. (So MiniUnix should work fine on real -11/05's.)
However, when set to an -11/05, Ersatz-11 treats SOBs as NOPs; they fall
through without any effect. Without a trap, they can't be emulated either.
This caused the problem with namei() failing (namei() calls bcopy(), which has
a SOB in it), and probably caused the problem I was seeing with the C
compiler, but I'm too burned out to check right now. Tomorrow.
Noel
> I just realized that the _first_ entry, #'9', is actually #0 _in the
> directory_; u_count counts _down_, whereas the code looks through dir
> entries going _up_.
Fixed that (kept my own index of which entry it was working on, and
caculated the name location in the buffer, and got:
chk 0 15 2 '..'
chk 1 14 18 '.'
chk 2 13 34 'bin'
chk 3 12 50 'dev'
chk 4 11 66 'etc'
etc... and it blew right past the 'etc' entry, to the end of the
directory. WTF?
> Still don't understand why I can't print the dir entries out of the u
> area, though.
Now that my brain has turned on, I'll bet that's not _my_ bug, I'll bet it's
_the_ bug! If the directory entry in u.u_dent.u_name is all 0's, _of course_
the match is going to fail.
Just for grins, I set the CPU type in Ersatz-11 to "40 EIS NOMMU" and... it
booted up fine! I suspect there must be an issue with the -11/05 emulation in
Ersatz-11, since MiniUnix worked fine on _real_ -11/05's.
Now to see if 'cc' works on an '-11/40' - then back to the /03.
Noel
> it looks at the following entries:
> Anyway, after printing the entry for 5, it goes to 'done'
Uh, I just realized that the _first_ entry, #'9', is actually #0 _in the
directory_; u_count counts _down_, whereas the code looks through dir entries
going _up_.
Still don't understand why I can't print the dir entries out of the u area,
though.
Noel
> From: jay-tuhs9915
> Are there any notes you can share on how to get to the point you're at?
Well, there are three areas where the /03 version needs work, over the /05:
- No LTC clock register
- No switch register
- PS access only via MFPS/MTPS instructions
For the first two, the needed changes are identical to the ones detailed here:
http://gunkies.org/wiki/Running_UNIX_V6_on_an_-11/23
These have all been tested on the /23. Rather than anyone make the exact same
changes independently, I can put up the modified versions of the MiniUnix
files for them (low.s, main.c and param.h).
For the third, I have an mch.s with a conditional assembly flag that _should_
do it all; like I said, there are also really minor edits to bio.c, clock.c,
slp.c, and tty.c. Again, I can upload the mch.s which is already done.
I haven't been able to _confirm_ that these work, but it should be mostly good;
the changes are pretty straight-foward.
> The code is doing a string comparison between the name in the current
> directory entry (u_dent) and the current pathname component (in
> u_dbuf). The expression in brackets is the relative distance between the
> two name fields within the u struct.
Yeah, I'd worked that out (the immediately preceding comment in the code -
"String compare the directory entry and the current component" - indicates
what it's doing, and as my "the term inside the []'s seems to be an offset
.. into the copy of the current directory entry" indicates, I'd worked out how
it did that. I was still puzzled by some othet aspects of the code, I just
included that to give a flavour of the code.
> In what way does it fail? Is it simply that namei() doesn't find the
> file its looking for?
Right. It's looking for 'etc' in the root directory (only one block), and
it looks at the following entries:
9 146 '05mx'
8 130 'usr'
7 114 'tmp'
6 98 'mnt'
5 82 'lib'
(I put a printf() in the loop; I've added prf.c to the load so I can do
that. The numbers are the index, u.u_count - although it's already been
descremented at that point, so it will be '0' when doing the last entry - and
location of that entry in the directory, given next to it. For some reason, I
can't get the entry to print from u.u_dent.u_name, so I'm printing it straight
from the block buffer, bp->b_addr[]. I can print the _inode number_,
u.u_dent.u_ino as a string, but not the dir entry. Wierd.)
Anyway, after printing the entry for 5, it goes to 'done', with u_error
containing '2'. I can't see how it could do that.
I'm using printf() because I'm too lazy to figure out how to build a kernel
with a debugger like DDT included. (We never did that when we were working
on V6 at MIT BITD; ISR we mostly just used printf() back then, too.)
Noel
>> 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[0]; 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)
fails.
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?
Noel
Hi All.
I know this is off topic, but this list is full of the people who
can help me with this.
I'd like to nomimate Chet Ramey for the USENIX lifetime achievement
award (yes, he's aware). I need 2-4 letters of support for this;
anyone who agrees that he deserves it should send me such a letter,
please (PDF, I guess) and I'll send in the whole package. See the
details below.
The deadline is October 19; please send a letter sooner rather
than later.
Let's start by sending me "yes, I'll write a letter" and then if
there are lots, I'll pick four.
PLEASE reply directly to me; no need to inundate TUHS with mail
on this.
Thanks,
Arnold
> Date: Wed, 30 Sep 2020 16:00:19 -0700 (PDT)
> From: Casey Henderson <casey.henderson(a)usenix.org>
> To: Arnold Robbins <arnold(a)skeeve.com>
> Subject: Call for Nominations for the USENIX Lifetime Achievement Award
>
> Dear Arnold:
>
> USENIX offers several awards that recognize public service and technical
> excellence in the fields, including the USENIX Lifetime Achievement Award
> ("The Flame"): https://www.usenix.org/about/flame
>
> The Flame recognizes and celebrates singular contributions to the USENIX
> community of both intellectual achievement and service that are not
> recognized in any other forum. Please consider nominating a deserving
> colleague!
>
> We invite you to submit nominations for USENIX's awards at any
> time. However, to help us offer the award this year, we strongly encourage
> nominations for The Flame by October 19.
>
> A nomination should include:
> *Name and contact information of the person making the nomination
> *Name(s) and contact information of the nominee(s)
> *A citation, approximately 100 words long
> *A statement, at most one page long, on why the candidate(s) should receive the award
> *Between two and four supporting letters, no longer than one page each
>
> Please submit your nominations to the Awards Committee via awards(a)usenix.org.
>
> Best Wishes,
> Casey Henderson
> Executive Director
> USENIX Association
> At some point, I'll produce a 'MiniUnix ld' on vanilla V6, so I can
> build MiniUnix versions of applications there; the first will be the
> shell, so I don't have to keep typing 'chdir' instead of 'cd'! :-)
OK, that was pretty smooth. I now have (on the main V6 system) a linker in
V6 binary form that outputs MX binary files, so I can do things like:
mld sh.o /mnt/lib/lib[ca].a
to produce a new shell (which worked fine). (I think to build 'mld' all I
had to do was 'cc ld.c', in usr/sys/source on the MX disk.)
This whole 'futz with MX by mounting the MX disk under V6' thing works really
well.
> 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. Doesn't boot, though; tries to do a panic, I
think. I'm too burned out to keep going, I will continue tomorrow morning (US
East Coast time).
Once I get it running, before I make it available for download, 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; I had originally planned on doing that, but I
was in such a 'code attack' mode I forgot all about it.
Noel
> From: Paul Riley
> So mounting Mini-Unix on a running V6 system I guess allows you to run
> Mini-Unix user mode binaries stuff
Ah, no. They are all link-loaded to run at TOPSYS (060000), so won't run on
V6 native.
> Or do you plan to recompile on a stable system?
Well, I need to find out what the problem is, first.
Still, notable progress: using my 'mount the Mini-Unix RK pack on a V6 system'
hack (which woked fine; the native V6 'icheck' and 'dcheck' work on that
pack), I was able to sucessfully compile a few tweaked system modules (to get
my usual line-editing chars, and turn off that irritating lower-case mode),
and then build an OS load which could sucessfully boot. So good progress
there. A couple of things I learned:
- MiniUnix tools use the 'new' archive format, so the V6 vanilla 'ar' doen't
grok MiniUnix archives (e.g. lib1/lib2). I have a 'nar', which I found on the
'Shoppa disks', which can deal with them. (We don't have source for it, but
I'll bet the MIT PWB1 system has that; I'll get to that eventuallly. There's also
an 'ar.c' on the MiniUnix disk; between the two, we'll be able to reconstitute
source for 'nar'.)
- Also, the vanilla V6 linker, 'ld', _also_ doesn't understand new archives;
so the shell file to build a new system, 'shld':
ld -a -x low.o conf.o lib1 lib2
blows out because it doesn't grok the libraries. Also, the '-a' flag, which
says 'link starting at 0, not TOPSYS', doesn't exist in the V6 'ld'.
I got around all that by unpacking lib1 (using 'nar', above) - it only contains
two files - and then listing the files to link directly:
ld -x low.o conf.o syso emulo dev/kl.o dev/devstart.o dev/rk.o
The vanilla V6 linker of course produces an output linked at 0 without
the -a flag.
At some point, I'll produce a 'MiniUnix ld' on vanilla V6, so I can build
MiniUnix versions of applications there; the first will be the shell, so I
don't have to keep typing 'chdir' instead of 'cd'! :-)
Then on to trying to find out why MiniUnix crashes whenever I try and do
anything significant.
Noel
> I think before I try debugging it directly, I'll try one of the other
> Mini-Unix repositories; the one I've been using (from Bob Eager's site)
> may have some bit-rot.
Well, foo, the one from TUHS has the same symptom: random re-starts. Looks
like I'm going to have to actually debug this.
I guess the first step is to work out how the re-start is happening; I suspect
it's not a trap (I'll check, but I think Mini-Unix catches them all). My best
guess is a jump to 0 (somehow); if so, that should be easy to catch. Then the
next thing is to try and work out where/how/why that is happening.
Following a suggestion of Warner Losh, I think there's a good idea on how to
make progress, which is to mount the Mini-unix pack under V6 (running on a
simulator); that's rock-solid - and the V6 tool-chain can be used to build
Mini-Unix binaries.
And here I thought it was going to be easy to convert Mini-unix to run on
an -11/03. Well, it still might - if I can get Mini-Unix to run reliably!
Noel
David C. Brock posted on Twitter links to the Bell Labs January 1968
Organizational Directory scans. The Research, Communications Sciences
Division is available at
https://drive.google.com/file/d/171jywFyIDyyWUMX4jYl3Czblqe5VGX2q/view
In it the Computing Science Research Center appears on tab 13, page 15
(PDF page 6). Most of the names are very familiar to members of this
list; some are even posting here.
Diomidis - https://www.spinellis.gr
> It is definite, though, that Q22 memory won't work with an LSI-11/2
> (M7270) ... I'll try an LSI-11 (M7264) tomorrow, make sure it's the
> same; it and the LSI-11/2 are similar enough that it should, but it'd be
> good to confirm it.
Yes, it too won't work with Q22 memory (tried it, no go - ODT won't even start).
> Then back to trying to work out why Mini-Unix is so fragile for me.
I tried some changes in the simulator set-up, to see if that would fix my
issue; no luck.
It's quite problematic: if I boot Mini-Unix on a clean copy of the RK pack, cd
to /usr/sys/dev, cp kl.c to nkl.c, and 'cc -c nlk.c', Mini-Unix reliably
restarts (trashing the disk in the process). (If I omit the 'cp', I can 'cc -c
kl.c' 3 times, and Mini-Unix restarts on the third.) Something's seriously
wrong.
I think before I try debugging it directly, I'll try one of the other
Mini-Unix repositories; the one I've been using (from Bob Eager's site) may
have some bit-rot.
> From: Paul Riley <paul(a)rileyriot.com>
> I'm checking with Peter Schranz about whether or not his RLV12/RL02
> boards can run on the '03.
Dave Bridgham and I discussed whether the QSIC would work with an -11/03, and
that analysis should apply equally to the RLV12. Our conclusion was that it
should; here's our reasoning:
The device registers on the board should work fine on either Q18 or
Q22. That's because when going to the I/O page, the CPU asserts a special bus
line, BBS7 (that says 'this cycle is to the I/O page'). The device doesn't
look at the higher address lines when that's on, just BDAL00-12; so if the
LSI-11 is messing with some of BDAL181-21, it shouldn't matter.
For DMA cycles from the device to memory, since the CPU requires Q18 memory
to work, the device too should be able to read/write to Q18 memory. At least,
that's our theory.
I guess all this PDP-11 hardware detail isn't really on-topic for this list; I
should move it to Classic Computers, or something. Sorry all; it's
intermingled with early Unix stuff, and it was easier to keep it all in one
place.
Noel
> From: Paul Riley
> Can you clarify something for me regarding memory? I understand the
> bottom area of memory in a Unix system is for the Kernel and it's stuff,
> and that the top 8kB is set aside for device I/O
Well, technically, the top 8KB of _address space_, not of memory - it's mostly
used for device registers, etc. Here:
http://gunkies.org/wiki/Unix_V6_kernel_memory_layout
is a bit more detail on how the memory is laid out.
> The LSI-11 board has 4kW of RAM on it, and I have already a 16KW
> board. If I want to further expand the RAM, and say I buy another 16kW
> board, that makes an arithmetic sum of 32kW for the boards, making 36kW
> total. Can the 4kW of on-board RAM be disabled, and only the 32kW on
> the boards be used?
Yeah, if you look at LSI-11 documentation, there are jumpers that allow
configuration of the on-board memory. Depending on the etch revision; for my F
revision, jumper W11 (at the top, towards the handle edge, in the middle of
that edge; just below the W1/W2 jumper pair) should be out to disable the
on-board memory.
Or you could configure the two 32KB boards to be at 020000 and 0120000; there
will be 72KB of memory total on the QBUS, but the LSI-11 CPU (no memory
management) will only be able to 'see' the bottom 56KB.
> Is it ok for the installed RA mto overlap the 8kW at the high memory
> area?
Yeah, what the CPU sees as the I/O page (at 0160000-0177776 in its address
space) is actually at 0760000-0777776 on the QBUS (on a Q18 QBUS); the CPU
automagically translates the 0160000-0177776 addresses up. On a PDP-11
with memory management, the MMU has to be set up to do that. E.g. in V6,
in:
https://minnie.tuhs.org//cgi-bin/utree.pl?file=V6/usr/sys/conf/m40.s
there is the following code:
/ initialize io segment
mov $IO,(r0)+
mov $77406,(r1)+ / rw 4k
to set the I/O page in kernel address space to point to the I/O page on the
bus.
Noel