[comp.sys.dec] 11/73 help

Richard Neitzel (04/07/88)

While looking through my KDJ11-A manual recently (looking for something
else), I noticed the section on the Program Interrupt Request Register
(PIRQ). This resister is at memory location 17777772 and the book states
that setting the appropreiate bit will cause an interrupt at the specified
level through vector location 240. Being a curious soul, I quickly wrote
a priviledged task that set the PIRQ to interrupt at level 4 and ran it.
(I am running RSX-11M 4.2C) "Nothing" happened. No crash, no console messages,
etc. I tried setting the register and then saving it in a task register to 
display, but the register was set to 0. I tried to use odt to peek at the
register, but got the same result. 

Well, thought I, RSX must have some code here that handles the interrupt
by clearing the PIRQ and little else. Then I decided to try to do the 
same myself. I wrote a CINT task that attached to vector 240 and set the
PIRQ to interrupt at level 4. BOOM! The system crashed and in looking at the 
crash dump, I noticed that the system stack pointer was at -48. The stack
itself consisted of a regular repeating pattern. Now I am not an expert in
reading crash dumps, but I assume this means the CPU started wildly asking
for interrupts until RSX died. I looked at my CINT task and changed it to
clear the PIRQ interrupt request bits, but the same thing occurred.

My question is: why the wild interrupting and what am I doing wrong to
control it. Since my first task didn't crash the system, I know RSX
can handle the PIRQ. Then why didn't my CINT ISR seem to react fast
enough. In fact, this seems a bit strange, since it seems to violate the
interrupt service rules. After all, if the processor is servicing an interrupt
and another occurs at a lower or equal level then that in the PSW, the others
are blocked. My CINT specifies priority 7 on dispatch of the vector address,
per the standard interrupt handling methods. Since I don't change the PSW
and from the crash dump it is at level 7 when the crash occurs, how come
the wild interrupting. What is it that I am overlooking?

Lest you think that this is just esoteric playing, I can see some uses if
I can tame this beast. A task could this as a psuedo-driver for example.
In any case, if anyone can shed some light on this, I would greatly
appreciate it.

			Richard Neitzel
			Rockwell International
			Computer Aided Manufacturing and Control
			Golden, CO 80402
			303-966-7203