68k interrupts
The cartridge systems use 3 auto-vectored interrupt levels. The CD systems use 6 vectored interrupts, 3 of which are equivalent to the cartridge system's.
See 68k vector table.
Video-related interrupts must to be acknowledged to re-trigger in the future by writing to the register REG_IRQACK.
- bit 2: Acknowledge v-blank interrupt
- bit 1: Acknowledge timer interrupt
- bit 0: Acknowledge reset interrupt (only occurs on cold boot ?)
Multiple bits can be set:
move #$0007,REG_IRQACK ; Acknowledge all interrupts
Bits 8~10 of the 68k's SR register is used to set the minimum priority:
move #$2000,SR ; Accept all interrupts (+Supervisor mode)
move #$2700,SR ; Ignore all interrupts (+Supervisor mode)
Note that the 68k's interrupt level setting is different from the interrupt configuration bits in REG_LSPCMODE.
Vertical blank interrupt
The v-blank interrupt is almost always used. It occurs when the rendering of a frame is about to start (~60 times per second). See display timing.
Timer interrupt
The timer interrupt's behavior can be programmed through the LSPC's memory mapped registers. It is triggered by a 32-bit down counter clocked by the 6MHz pixel clock, and a corresponding reset register. When the counter reaches 0, an interrupt is generated. Intervals can range from 166.7ns (would cause an interrupt flood !) to a little over 11.9 minutes.
It can be used for special video effects such as scanline effects, for example:
- The interlaced Sammy logo in Viewpoint
- Sengoku 2's intro
- The road in Riding hero
- Neo Turf Masters's ground perspective
- ...
AES/MVS interrupt levels
- Level 1: V-blank
- Level 2: Timer
- Level 3: Pending after reset
CD interrupt levels
The V-blank and Timer levels are swapped compared to the cartridge systems.
- Level 1: Timer
- Level 2: V-blank
- Level 3: Not used ?
- Vector 21: CD host decoder interrupt (data ready)
- Vector 22: CD drive communication start
- Vector 23: Used but not understood