[ih] inter IMP hackery [was Recently restored and a small ARPANET was run using simulated IMP hardware, ]
Bernie Cosell
bernie at fantasyfarm.com
Sun Sep 6 16:30:12 PDT 2020
Let me add a little bit to Jack's explorations. There are two things of interest we
put in the IMP code that relates to this. The first was the DDT/TTY machinery
and other was the "reload from your neighbor" machinery.
I remember that first quite well, since I mostly designed it [we did
EVERYTHING as a team so we coöperated and sorted stuff out together] and I
implemented it [so I was really responsible for the complicated machinery that
made this aspect of the IMP work]:
Early on as we were coding the IMP stuff the question arose as to what to do
about the TTY [and how the hell were we to debug the damn thing]. We did
several things in this regard. First I wrote a simple DDT [about as powerful as
the test-word switches on our PDP-1 :o)] but it allowed us to poke around in the
dead hulk of the code of a stopped system to see what went wrong and also put
patches in. I believe it was originally a stand alone - the imp would crash or hit a
diagnostic trap and they we could run the DDT and look at buffers and counters
and pointers and such and generally try to figure out what happened. When the
IMP was running solidly enough [which actually happened pretty early on in its
development], I can't remember the genesis of the underlying idea, but we
thought we could route the DDT *over* the net to other IMPs and poke at *then*.
I came up with a scheme that Will [I think] thought was way too complicated:
1) connect the DDT to the IMP as a "fake host",
&2) connect the TTY to the IMP as another "fake host"
With those now residing *in* the IMP, instead of apart from it we got a bunch of
benefits:
1) we could run the DDT *while* the IMP was up doing its thing, and
2) we could interrogate a *different* IMPs DDT [simply by pointing the TTY to
the appropriate fake host on the other IMP.
3) We could "IM" between machines [simply by pointing the TTY to the *TTY*
on the other machine.
[on (3) that ability was very handy as Ben and Marty were bringing up IMPs 1&2.
They knew, for example, long before any of the host interface and machinery was
working, that the IMP was doing just fine, since they could exchange messages
and *knew* it used the same code that the hosts would be using. It also replaced
lots of long-distance calls to coördinate what was happening at SRI and UCLA]
WE also had the IMPs send "health reports" [via a background process] and they
were hard wired to send to the IMP 5 TTY and so virtually from the outset we
could monitor [and with the DDT tweak] the whole network. Until the PDP-1
was online it chewed up a fair bit of paper :o)
It was all using the basic IMP packet-handling machinery, so that two IMPs
could be poking the DDT on a particular IMP and not interfere with one another.
When the PDP-1 came online as the first proto-NCC, the DDT was as happy to
talk to a real host as one of its fake brethrens and ditto for the "health reports"
that just changed which host they were going to and it all worked. So everything
was fitting together very nicely and very usefully [despite the complicated code]
A conceptually neat part about all this is that the *internals* of the IMP were
host-agnostic. They didn't care if they were fake or real, they just sent the
packets where there were supposed to go. and so we could implement "satellite"
activities that used the underlying IMP code to do other useful things beyond
just host-to-host.
Expanding this principle a few years later, we had a H316 that had *two* 16k
banks. [and I think I've mentioned this before on this list]. We decided to
implement the TIP as, what else?? :o), a host. But in this case it was a
pseudo-real-host [as I've mentioned before] this was done so that the TIP code
could live in the upper memory bank and its "host interface" transferred data and
control across the boundary. The IMP didn't need to know or care that the TIP
was there.
Phew. now to the second mechanism: reloading from a neighbor. Maybe dave
remembers this better than I do but I think that one of the things we did as the
IMP got more solid was removed its "loader" [which could boot the machine
from paper tape] and replaced with with something that could live in 20 words
[which was where the paper tape loader lived: in shadow memory behind the
registers] I think that that code was *just* enough of a bootstrap to send
message to a neighboring IMP and the first thing that IMP sent over a smarter
loader that than received a whole memory-full of IMP code from the neighbor
and then started the neighbor up. I believe we could trigger this remotely via
DDT and so if the IMP was up but just in need of an updated version it could
suck it in from its neighbor.
My opinion is that hacking in this kind of stuff [and piggybacking "services" on
top of the IMP's 'day job' of handing real host data] helped a lot in the ARPAnet
being virtually "operational" [and manageable] from the start.
/Bernie\
Bernie Cosell
bernie at fantasyfarm.com
-- Too many people; too few sheep --
More information about the Internet-history
mailing list