next up previous
Next: Noise Up: Problems Encountered Previous: Dealing with Spin Compensation

Unexpected Signal

When an interrupt would come in while the main program was running, the system gave a message ``Unexpected signal''. This was the Verdix ([1]) runtime system's obscure way of saying it got an interrupt (vertical retrace interrupt in this project) that it was not set up to handle. This was diagnosed as happening when one of the programs driving the video board was left running. When a program wants to use the vertical retrace interrupt, it installs a handler for the interrupt, enables interrupts on the MVME133a processor board, and then sets the INTEN bit of the STATUS_CONTROL register on the FG-100-V video processor. It is very important that there be an interrupt handler installed before enabling interrupts and setting the INTEN bit, because once the INTEN bit is set, the FG-100-V will send an interrupt every 1/60 second to every card on the bus. Any processor with interrupts enabled will jump to the address where the handler is supposed to be, whether it is there or not. If a program that uses the vertical retrace exits abnormally, the INTEN bit will be left set. An attempt to run any other (Ada) program thereafter must fail, because of the action of the kernel. The kernel installs a default handler (which prints a message and halts the program) and then enables interrupts. One sixtieth of a second later (or less) the program prints a message and halts, since the Verdix kernel did not reset the INTEN bit.

One way tried to fix it (without modifying the Ada runtime) is to use MVME133A-Bug, the ROM debugger. The STATUS_CONTROL register is mapped to memory location FFFF101a in the MVME133a address space, and INTEN is bit 7 of that register. Using the 133A-Bug, one executes the following commands (comments are to the right):

133A-Bug>mm ffff101a   ; Memory Modify location ffff101a
FFFF101A 76E0? 7660    ; Debugger responds with the current
                       ;   value in the register,which has
                       ;   bit 7 set.  Type in that value with
                       ;   bit 7 reset (you type 7660).
**WARNING:NO MATCH**   ; The ``no match'' message is due to
                       ;   the fact that there are output
                       ;   bits in the STATUS_CONTROL register
                       ;   which constantly change.  Ignore
                       ;   this.
FFFF101A 7D40? .       ; The mm command replies with the
                       ;   current value of STATUS_CONTROL,
                       ;   now with bit 7 reset. Type . to
                       ;   return to the prompt.
133A-Bug>go fff20000      ; Done.  Ready to run program.

next up previous
Next: Noise Up: Problems Encountered Previous: Dealing with Spin Compensation

Ted &
Wed Feb 5 10:50:20 EST 1997