The standard Sinclair ZX Spectrum only used mode 1 and mode 2 interrupts but the Z80 also has a mode 0 interrupt that the original Speccy never used.
But there were many exotic clones of the ZX Spectrum. Did any of those use interrupt mode zero?
Retrocomputing Stack Exchange is a question and answer site for vintage-computer hobbyists interested in restoring, preserving, and using the classic computer and gaming systems of yesteryear. It only takes a minute to sign up.
Sign up to join this communityIM 0 is the backwards-compatibility mode with the i8080 CPU. You have to use some external circuit to provide desired RST 0..38h instruction. RST 0 is effectively the same as RESET, RST 38h is the same as IM 1 mode provides.
All the other RST addresses have their own meaning in the ZX Spectrum ROM (see):
The main benefit of using the RST instructions for often-called subroutines is to shorten your code. A CALL instruction uses 3 bytes but a RST only 1.
So here is the deal:
OR
Actually, original 48k Speccies also work in IM0 mode. During the vector read (/IORQ+/M1) the CPU reads all 0xFFs from the bus (because of the pullups), thus reading RST #38
instruction. In other words, IM0 mode on the original speccies works identical to IM1 mode.
For anything more meaningful in IM0 mode on Speccies, one would need to use intel's 8259 interrupt controller that is capable of generating full call ADDR
instructions for the CPU to fetch in IM0 mode. which is identical to what 8080 does during its interrupt entry.
Another option is to have ROM swapped off (which is possible on Speccies). If one put there RAM with proper code at every RST point, IM0 could be used as a cheap substitute for IM2, with only 3 bits of interrupt vector (out of 7 for IM2).
RST7
, and that is exactly the same as mode 1 (and no additional components needed). If you want fine grained interrupts, and you can use a non-compatible ROM, then mode 2 is more useful (you can define jump table). Remember that mode 0 was there only because of backward compatibility.