An interrupt is a request to execute different code, initiated usually by a hardware condition such as data-ready or operation-complete, but also sometimes initiated by the running program. The processor saves its immediate state, IP and Flags, on the stack and loads a new IP value, effectively doing a CALL sequence to some interrupt service routine. The routine does whatever processing is required, and returns, restoring the running program.
Under normal conditions, the interrupt response sequence disables further interrupts, so that recursive entry does not occur. The service routine reenables interrupts just before returning, so that pending or further interrupts can be processed.
If multiple interrupt levels are to be supported, such as in the 8085, the interrupt service routine can set the interrupt mask, blocking the level in progress, and then reenable interrupts. This way, a second interrupt on a higher level can be processed while the first interrupt is being processed. On return, the lower level interrupt disables interrupts, restores the mask, and then reenables interrupts prior to return.
Chat with our AI personalities
It is possible to allow nested interrupts. This is often done when there is a heirarchy of interrupts, some with higher priority than others. In order for this to work, the second interrupt must not be allowed to influence the progress of the first interrupt. We call this being "thread safe". In a nested scheme, an interrupt mask is set so that higher priority interrupts can be permitted, while blocking interrupts of the same or lower priority, and then interrupts are reenabled during the interrupt service routine. At the conclusion of the first routine, interrupts are disabled again, the mask is restored, and the normal interrupt return sequence is executed. In the 8085, this can be supported using the Read Interrupt Mask (RIM) and Set Interrupt Mask (SIM) instructions. While not strictly required, the logical priority is often INTR, RST5.5, RST6.6, RST7.5, and then TRAP, in order of increasing priority.
A maskable hardware interrupt is one that can be disabled, or masked, by instructions in the CPU. In the 8085, all interupts except TRAP and (software) RST N can be masked by disabling interrupts, and RST7.5, RST6.5, and RST5.5 can be individually masked with the SIM (Set Interrupt Mask) instruction. In general, you leave interrupts disabled until one instruction before returning. In the case of the RST*.5 interrupts, you can mask it during interrupt processing and then enable interrupts, allowing other levels to interrupt you again. At the conclusion of the interrupt routine, you would disable interrupts, restore the mask, enable interrupts, and return. If you use this method, you can choose the nesting priority as desired. You determine what mask to set using the RIM (Read Interrupt Mask) instruction and then do bit manipulation before using SIM.
At reset, the 8085 starts at location 0000H. The INTR interrupt goes wherever the interrupt opcode says to go. The TRAP interrupt goes to 0024H. The RST5.5, RST6.5, and RST7.5 interrupts go to 002CH, 0034H, and 003CH respectively. The RST X interrupts goto 0000H plus 10H times X, i.e. 0000H, 0008H, 0010H, ..., 0038H.
A trap handler, also called an interrupt handler or interrupt service routine (ISR) is a program that executes when predefined events occur in a computer. There are software and hardware interrupts. An interrupt causes the computer's processor to stop running its current task and immediately run the trap handler to service the interrupt.
The lowest priority interrupt in the 8085 microprocessor is INTR, unless you also consider the software interrupts, RST 0 through RST 7, which are even lower.