Weekly Classic Computer Trivia Question (20150112)

Johnny Billquist bqt at update.uu.se
Mon Jan 12 12:55:12 CST 2015


On 2015-01-12 19:43, Vincent Slyngstad wrote:
> From: Johnny Billquist: Monday, January 12, 2015 10:21 AM
>> On 2015-01-12 19:17, Johnny Billquist wrote:
>>> On 2015-01-12 18:19, Vincent Slyngstad wrote:
>>>> One answer might be "the skip chain".  Since interrupts weren't
>>>> vectored, it was necessary to query each device in priority order to
>>>> see
>>>> if it was currently requesting interrupt service.
>>>
>>> Ah. Good point. I forget to include this in the possible interpretations
>>> of interrupt latency.
>>
>> Actually. This needs some correction. The interrupt skip chain itself
>> is not the latency. The skip chain is just some extra time required to
>> actually jump to the correct interrupt handler. The interrupts are
>> (normally) off until the interrupt handler finishes.
>
> They'd better be off until the last device is in service, or you'll get
> re-entry problems in the interrupt service routine.  In practice, I've
> never seen interrupts on during a PDP-8 service routine.

A more correct statement would be that if you enable interrupts in your 
interrupt handler you must first save all the context of the current 
interrupt, so you can restore it before returning from the current 
interrupt.
It's not really that hard. Essentially you must store the contents of 
address 0, and probably also make sure you do not get a second interrupt 
from the same device, since I doubt you want to write a reentrant 
interrupt handler. (But that is normally the case anyway, since most 
devices need some kind of operation to enable a new interrupt to be 
generated.)

But if another device generates an interrupt, you'll be fine, unless you 
have some other pieces of code both interrupt handlers would share, in 
which case there are probably more things to deal with.

(Essentially, unless you take special care, code isn't reentrant on a 
PDP8, but I assume you know this. It's just that unless you share code 
between interrupt handlers, the only thing needed to be stashed away 
before enabling interrupts is the return address.)

>> The skip chain is  just a smaller part of that whole thing.
>
> OK, but it is a significant overhead compared to later (vectored)
> interrupt system designs, and means it takes longer to get to where
> you're going.

True. But the skip chain is still for most cases just a minor part of 
the whole execution time of an interrupt handler.

> The un-vectored design also means more problems with re-entry, since all
> the interrupts call the same routine.  And the JMS instruction design
> makes it a bear to write re-entrant code on a PDP-8.

Yes. But it don't have anything to do with the vectored or not 
interrupts. In fact, there were some devices who generated vectored 
interrupts on the PDP-8. The KL8A comes to mind.

It's all about the fact that the return address for interrupts is always 
stored in address 0. Makes no difference how you eventually locate the 
actual interrupt handler.

> I think it comes back to the "what do we mean by latency" question.

Yeah. That one I'm still not clear on. :-)

	Johnny

-- 
Johnny Billquist                  || "I'm on a bus
                                   ||  on a psychedelic trip
email: bqt at softjar.se             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


More information about the cctalk mailing list