Ein Rasterinterrupt (auch horizontaler Austastinterrupt genannt ) ist ein Interruptsignal in älteren Computersystemen, das zur Steuerung des Anzeigetimings dient. Es wird üblicherweise, aber nicht immer, vom Grafikchip des Systems generiert , wenn die Scanzeilen eines Frames für die Anzeige auf dem Monitor vorbereitet werden. Die einfachste Implementierung eines Rasterinterrupts ist der vertikale Austastinterrupt .

Ein solcher Interrupt ermöglicht es, Grafikregister mitten im Frame zu ändern, sodass sie ober- und unterhalb des Interruptpunkts unterschiedliche Werte annehmen. Dadurch kann beispielsweise ein einfarbiges Objekt wie der Hintergrund oder der Bildschirmrand mehrere horizontale Farbbänder aufweisen . Oder ein Hardware- Sprite kann neu positioniert werden, um den Eindruck zu erwecken, es gäbe mehr Sprites, als das System unterstützt. Die Einschränkung besteht darin, dass sich die Änderungen nur auf den Bereich des Displays unterhalb des Interrupts auswirken. Sie erlauben keine zusätzlichen Farben oder Sprites in einer einzelnen Scanzeile.

Moderne Betriebssysteme im geschützten Modus unterstützen Raster-Interrupts im Allgemeinen nicht, da der Zugriff auf Hardware-Interrupts durch unprivilegierte Benutzerprogramme die Systemstabilität gefährden könnte. Da ihr wichtigster Anwendungsfall, das Multiplexen von Hardware-Sprites, heutzutage keine Relevanz mehr besitzt, existiert kein moderner Nachfolger für Raster-Interrupts.

Systeme, die Raster-Interrupts unterstützen

Viele gängige Heimcomputer und Videospielkonsolen enthielten Grafikchips, die Rasterinterrupts unterstützten oder über Funktionen verfügten, die sich zu Rasterinterrupts kombinieren ließen. Die folgende Liste ist nicht vollständig.

Astrocade (zwei Spezialchips, 1977)

Der Bally Astrocade unterstützte einen horizontalen Blank-Interrupt zur Auswahl der vier Bildschirmfarben aus einer Palette von 256 Farben. Hardware-Sprites wurden vom Astrocade nicht unterstützt.

Atari 8-Bit-Computer (ANTIC-Chip, 1979)

Der in den Atari 8-Bit-Computern verwendete ANTIC- Chip verfügt über Display-List-Interrupts (DLIs), die beim Zeichnen des Bildschirms ausgelöst werden. [ 1 ] [ 2 ] Der ANTIC-Chip selbst ist äußerst leistungsstark und bietet zahlreiche Funktionen, für deren Nachbildung andere Systeme Raster-Interrupts benötigen. ANTIC kann mehrere Grafikmodi auf dem Bildschirm mischen, horizontale und vertikale Overscan-Grafiken darstellen und ausgewählte horizontale Bereiche präzise scrollen. DLIs werden auf dem Atari typischerweise verwendet, um dem Bildschirm zusätzliche Farben hinzuzufügen und Grafikelemente von Player/Missile wiederzuverwenden.

ColecoVision und MSX (TMS9918-Chip, 1979)

Die ColecoVision , eine 1982 erschienene 8-Bit-Spielkonsole, sowie der MSX , ein standardisierter Heimcomputer aus dem Jahr 1983, nutzten den Texas Instruments TMS9918 . Dieser verfügt über eine „vertikale Interruptquelle“, um die Hardware-Sprites auf dem Bildschirm neu zu positionieren.

Commodore 64 (MOS Technology VIC-II Chip, 1982)

Der MOS Technology VIC-II des Commodore 64 und Commodore 128 verfügt über ein flexibles Rasterinterrupt-System. Rasterinterrupts und CPU-Eingriffe sind erforderlich, um Sprites auf dem Bildschirm wiederzuverwenden, Grafikmodi zu mischen und Bildschirmbereiche gezielt zu scrollen. Rasterinterrupts werden auch vom MOS Technology TED im Plus/4 und Commodore 16 unterstützt .

Nintendo Entertainment System (PPU-Chip, 1983)

Der PPU -Grafikchip des Nintendo Entertainment Systems unterstützte keine echten Rasterinterrupts. Zwar konnte ein Interrupt während des vertikalen Austastintervalls ausgelöst werden , jedoch nicht an einer beliebigen Scanzeile. Stattdessen musste ein „Trefferflag“ abgefragt werden, das anzeigte, wann der erste Sprite gezeichnet wurde. Obwohl frühe Spiele wie Super Mario Bros. , Castlevania und The Legend of Zelda mit dieser Methode ein effektives Splitscreen-Scrolling ermöglichten, war sie sehr rechenintensiv. Einige spätere Module verwendeten MMC- Schaltungen (vor allem Nintendos MMC3-Chip), die die Adress- und Datenleitungen der PPU überwachten und Rasterinterrupts generierten.

IBM PCjr (Video Gate Array, 1984)

Der IBM PCjr mit Video Gate Array -Grafikchip unterstützte einen „vertikalen Rücklauf-Interrupt“, implementiert als IRQ5. [ 3 ] Später im Jahr 1984 führte IBM den EGA -Grafikstandard ein, der ebenfalls einen vertikalen Rücklauf-Interrupt unterstützte, jedoch als XT IRQ2 implementiert und standardmäßig deaktiviert war. [ 4 ] Allerdings implementierten nicht alle EGA-Karten diese Funktion, und nur sehr wenige Programme, die EGA-Modi nutzten, waren darauf angewiesen.

Moderne GPUs verfügen über eine auf dem Hauptprozessor registrierte Interrupt-Routine (IRQ). Wichtig ist, dass es sich dabei weder um einen vertikalen noch um einen horizontalen „Leer-Interrupt“ handelt; die Verarbeitung erfolgt durch den Gerätetreiber der Grafikkarte.

MSX2 (Yamaha V9938, 1985)

MSX2-Computer verfügen über einen Yamaha V9938 -Grafikchip, der – ähnlich wie der NES – vertikale Austastunterbrechungen unterstützt, für horizontale Austastunterbrechungen jedoch ein Polling erfordert. Er wurde häufig verwendet, um Splitscreens zu erzeugen, mehrere Videomodi auf einem Bildschirm zu mischen und die Anzahl der darstellbaren Farben über die offizielle Spezifikation hinaus zu erhöhen. Bekannte Beispiele hierfür sind die Aleste -Serie und Konamis Space Manbow .

Amiga (Kupferchip, 1985)

Die Amiga -Computer verfügen über einen speziellen Coprozessor namens Copper , der für die Verarbeitung von Rasterinterrupts zuständig ist. Der Copper führt ein Programm mit einfachen Anweisungen aus, das ihn anweist, auf eine bestimmte vertikale Scanzeile und horizontale Strahlposition zu warten und anschließend den Inhalt eines speziellen Hardware-Registers zu aktualisieren. Dies wird typischerweise verwendet, um Anzeigeparameter zu modifizieren, beispielsweise Anzeigemodi zu mischen, Sprites wiederzuverwenden oder Farbregister zu ändern, kann aber auch einen CPU-Interrupt auslösen.

X68000 (VSOP + VINAS-Chip, 1987)

Der X68000 , ein in Japan verkaufter 16-Bit-Heimcomputer, verfügt über ein flexibles Raster-Interrupt-System zum Multiplexen von Hardware-Sprites.

Game Boy (PPU-Chip, 1989)

Die PPU des Game Boy unterstützt vier Raster-Interrupts: [ 5 ] Sie kann so konfiguriert werden, dass sie am Anfang einer bestimmten Scanzeile, am Ende von Scanzeilen (während der horizontalen Austastlücke ), am Anfang aller Scanzeilen oder am Anfang der vertikalen Austastlücke ausgelöst wird. Ihr Nachteil besteht darin, dass für die ersten drei derselbe Interrupt-Handler verwendet wird, was die Verwendung von „Dispatching“-Code erfordert, wenn mehr als eine Bedingung zutrifft.

Referenzen

  1. ^ De Re Atari . Atari, Inc. 1982.
  2. ^ Watson, Alan (1982). „Eine Einführung in Display-Listen-Interrupts“ . COMPUTE!'s Second Book of Atari .
  3. ^ IBM PCjr Technische Referenz . International Business Machines Corporation. November 1983. S. 108.
  4. ^ IBM Enhanced Graphics Adapter-Handbuch (PDF) . International Business Machines Corporation. S. 72. Archiviert (PDF) vom Original am 24.05.2024 . Abgerufen am 29.07.2024 .
  5. ^ „Videoanzeige“ . GBDev Wiki . Abgerufen am 20. Oktober 2017 .

Siehe auch