[ih] Intel 4004 vs the IMP

Jack Haverty jack at 3kitty.org
Tue Nov 16 12:26:58 PST 2021


Not right, the IMP did all I/O using DMA, including normal packet 
traffic as well as the code image download.   The code image was of 
course much larger than the usual packet I/O.   I don't recall all the 
exact behavior now, but basically the IMP needing code reload would 
abort all I/O, issue a write instruction to send out the reload request 
to a neighbor, and execute a read instruction to put whatever 
subsequently arrived on that interface from the neighbor to replace the 
contents of its program space in memory.   Then it waited in a single 
instruction loop for the interrupt on completion of the read or 
expiration of the watchdog timer.

The IMP being reloaded would stop handling traffic.   In the typical 
case where something was "seriously wrong", it probably had already 
stopped handling regular traffic.   All other IMPs kept running 
normally, so the ARPANET kept moving user traffic for everyone else.

Essentially the IMP was a multiprocessor, with the main CPU as well as 
I/O using DMA.  It was a bit challenging to mentally trace the program 
path over time since some of the "state" of the machine was maintained 
by modifying instructions in the active program.   So when looking for 
example at how the IMP handled some interrupt, I couldn't assume that 
the instructions shown in the listing were actually what was in memory 
at the time when the interrupt handler ran.   The instructions might 
have been changed earlier, so when the handler ran it did something 
different from what you'd expect by simply looking at the code 
listing.   Some instructions in the program were essentially "state 
variables" of the overall IMP program design.

Jack Haverty


On 11/16/21 4:58 AM, Lukasz Bromirski wrote:
> Jack,
>
>> On 16 Nov 2021, at 06:43, Jack Haverty via Internet-history <internet-history at elists.isoc.org> wrote:
>>
>> Once the IMP was executing the reload code, it would block all interrupts.  There might still be I/O in progress, but when it completed nothing would happen. […]
>> The IMP would hang forever executing that instruction -- but the DMA and watchdog are still active.   And the neighbor IMP is hopefully receiving the "reload me" request and then issuing an I/O write to send its entire code space of its memory out the wire to the other IMP which has an I/O read active to receive it and overwite its own whole code memory.
>> Effectively the machine is now locked in a tight loop, with all interrupts disabled except for the one associated with that read operation ... and the watchdog timer.   And the I/O is still happening.
> So given the description, IMP would stop forwarding traffic during such
> remote reload — or not? The I/O and DMA statements relate to ONLY
> serving code download, right?
>





More information about the Internet-history mailing list