This article needs additional citations for verification. (December 2016) (Learn how and when to remove this template message)
A raster interrupt (also called a horizontal blank interrupt) is an interrupt signal in a computer system which is used for display timing. It is usually, though not always, generated by a system's graphics chip as the scan lines of a frame are being readied to send to the monitor for display.
Such an interrupt provides a mechanism for graphics registers to be changed mid-frame, so they have different values above and below the interrupt point. This allows a single-color object to have multiple, horizontal color bands, for example, or for a sprite to be repositioned to give the illusion that there are more sprites than a system supports. The limitation is that changes only affect the portion of the display below the interrupt. They don't allow more colors or more sprites on a single scan line.
Systems supporting raster interruptsEdit
Several popular home computers and video game consoles included graphics chips supporting raster interrupts or had features that could be combined to work like raster interrupts.
Bally Astrocade (1977)Edit
Atari 8-bit family (ANTIC chip, 1979)Edit
The ANTIC chip used by the Atari 8-bit family includes display list interrupts (DLIs), which are triggered as the display is being drawn. The ANTIC chip itself is considerably powerful and inherently capable of many features which other systems require raster interrupts to duplicate. ANTIC can mix multiple graphics modes on the screen, display horizontal and vertical overscan graphics, and fine scroll selected horizontal regions. DLIs on the Atari are typically used to add additional color to the display and reuse Player/Missile graphics elements.
Commodore 64 (MOS Technology VIC-II chip, 1982)Edit
The C64's VIC-II has a flexible raster interrupt system. Raster interrupts and CPU intervention are necessary to reuse sprites on the screen, mix graphics modes, and selectively scroll screen regions.
Nintendo Entertainment System (PPU chip, 1983)Edit
The Nintendo Entertainment System's PPU graphics chip does not support true raster interrupts - an interrupt can be set to trigger during the vertical blank interval, but not at any arbitrary scan line - instead required polling of a "hit flag" that indicated when the first sprite was being drawn. Although early games like Super Mario Bros., Castlevania, and The Legend of Zelda managed to produce effective split-screen scrolling with this method, it is CPU-intensive. Some later cartridges incorporated MMC circuitry (most prominently Nintendo's MMC3 chip) that kept track of the PPU's address and data lines and generated raster interrupts.
MSX2 (Yamaha V9938, 1985)Edit
MSX2 computers feature a dedicated Yamaha V9938 Video Display Processor (VDP) that, like the NES, supports 'vertical blank interrupts' but requires polling for 'horizontal blank interrupts'. It was commonly used to create split screens, mix multiple video modes together on one screen and to increase the number of unique colours on the screen beyond the official spec. Prominent usage examples are the Aleste series and Konami's Space Manbow.
Commodore Amiga (Copper chip, 1985)Edit
The Amiga computers include a custom coprocessor called the Copper which is dedicated to servicing raster interrupts. The Copper runs a program of simple instructions directing it to wait for a specific vertical scan line and horizontal beam position, then update the contents of a custom chip hardware register. This is typically used for modifying display parameters, such as mixing display modes, reusing sprites, or changing color registers, but can also be used to trigger a CPU interrupt.
Nintendo Game Boy (PPU chip, 1989)Edit
The Game Boy's PPU has support for four raster interrupts : it can be set to trigger at the beginning of a specified scanline, at the end of scanlines (during Horizontal blanking), at the beginning of all scanlines, or at the beginning of Vertical blanking. Its biggest drawback is that the same Interrupt handler is used for the first three, requiring the use of "dispatching" code if more than one condition is used.