Rasterzeileninterrupt
Der Rasterzeileninterrupt ist ein Hardwareinterrupt, der ausgelöst wird, wenn der Videochip eines Computers die Darstellung einer bestimmten Zeile auf dem Bildschirm beginnt.
Die Rasterzeileninterruptprogrammierung wurde intensiv auf den Heimcomputern der 1980er Jahre angewendet. Sie wurde bald zu einem festen Bestandteil vieler für 8-Bit-Heimcomputer geschriebener Computerspiele.
Der Bildaufbau auf Bildschirmen findet zeilenweise statt. Der Videochip, der die Bilddaten ausgibt, enthält dazu unter anderem einen Zähler für die momentan auszugebende Bildzeile, die sogenannte Rasterzeile. Unterstützt der Videochip einen Rasterzeileninterrupt, kann vom Programm eine Zeile festgelegt werden, bei der dieser Interrupt ausgelöst werden soll. Erreicht der Rasterzeilenzähler diesen Wert, signalisiert der Videochip eine Interruptanforderung an den Prozessor. Dieser unterbricht das laufende Programm und führt eine Unterbrechungsroutine (Interrupt Handler) aus. Am Ende der Unterbrechungsroutine fährt der Prozessor mit dem unterbrochenen Programm fort.
Der Rasterzeileninterrupt vereinfacht es, Programmteile beim Erreichen einer bestimmten Bildschirmzeile auszuführen, also mit dem Bildaufbau zu synchronisieren. Das Programm muss nicht aktiv auf das Erreichen dieser Position warten, sondern wird durch die vom Videochip signalisierte Unterbrechungsanforderung (Interrupt) informiert. So lassen sich beispielsweise sehr einfach während des Bildaufbaus Grafikmodi wechseln (Split Screen) oder normalerweise für das Gesamtbild geltende Farben umschalten. Auch die gleichzeitige Darstellung einer größeren Anzahl hardwaregenerierter Sprites als ursprünglich vom System vorgesehen durch Änderung der Bildschirmpositionen nicht mehr benötigter Sprites aus dem bereits überstrichenen in den noch vom Elektronenstrahl zu zeichnenden Bildschirmbereich wird durch den Rasterinterrupt vereinfacht (z. B. bei Spielen für den Commodore 64).
Hardware
Ein bekannter klassischer Grafikchip, bei dem der Hersteller die Mechanismen für einen Rasterzeileninterrupt eingebaut hat, ist der VIC-II (MOS Technology 6569 und ähnliche Varianten). Dieser wurde unter anderem im Commodore 64 verbaut. Zeitgenössische 8-Bit-Hardware wie der Atari 800,<ref>Display List Interruptprogrammierung am Atari 800: Artikel bei Atariarchives.org (englisch)</ref> Homecomputer nach dem MSX-Standard oder der Schneider CPC beherrschten ihn ebenfalls. Aber auch jüngere Hardware unterstützt Rasterzeileninterrupts, wie z. B. das Megadrive,<ref>Programmierung des Sega Megadrives: {{#switch:
|0|=Vorlage:Toter Link/Core{{#if: http://www.gamefaqs.com/console/genesis/file/916377/9755 | {{#if: Dokumentation | Dokumentation }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }} | (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.) }}{{#switch: |no|0|= |#default={{#if: || }} }}{{#invoke:TemplatePar|check |opt = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.gamefaqs.com/console/genesis/file/916377/9755 | {{#if:{{#invoke:URLutil|isWebURL|http://www.gamefaqs.com/console/genesis/file/916377/9755}} || {{#if: || }} }} | {{#if: Dokumentation | {{#if: || }} | {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=http://www.gamefaqs.com/console/genesis/file/916377/9755 Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if: | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. ) {{#if: | {{#if: | | Vorlage:Toter Link/archivebot }} }}Vorlage:Toter Link/Core{{#switch: |no|0|= |#default= {{#if: || }} }}{{#invoke:TemplatePar|check |all = inline= url= |opt = datum= date= archivebot= bot= botlauf= fix-attempted= checked= |cat = Wikipedia:Vorlagenfehler/Vorlage:Toter Link |errNS = 0 |template = Vorlage:Toter Link |format = |preview = 1 }}{{#if: http://www.gamefaqs.com/console/genesis/file/916377/9755 | {{#if:{{#invoke:URLutil|isWebURL|http://www.gamefaqs.com/console/genesis/file/916377/9755}} || {{#if: || }} }} }}{{#if: | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}} || {{#if: || }} }} }}{{#switch: |checked|deadurl|= |#default= {{#if: || }} }}}} bei GameFAQs (englisch)</ref> das Super Nintendo, der Game Boy Advance<ref>Display-Interruptprogrammierung am Game Boy Advance: [http://wiki.nycresistor.com/wiki/GB101:Working_with_Palettes Wikiseite bei NYC Resistor (englisch)</ref> oder der GameCube, wo die Technik oft in Spielen für diverse optische Effekte eingesetzt wurde.
Literatur
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
- {{#invoke:Vorlage:Literatur|f}}
Weblinks
- Text zur Programmierung des Rasterzeileninterrupts am C64 (englisch)
- Ivo Herzeg: Interruptkurs in der Magic Disk 64, CP Verlag
- Michael Steil: {{#if:|: }}{{#if:|Show }}[https://www.youtube.com/{{#if:
|user/ The Ultimate Commodore 64 Talk]
|{{#if:
|channel/ The Ultimate Commodore 64 Talk]
|{{#if:
|c/ The Ultimate Commodore 64 Talk]
|{{#if:
|@ The Ultimate Commodore 64 Talk]
|{{#if:
|show/ The Ultimate Commodore 64 Talk]
|{{#if:
|show?p= The Ultimate Commodore 64 Talk]
|{{#if:
|playlist?list= The Ultimate Commodore 64 Talk]
|watch?v=ZsRRCnque2E{{#if:|&t={{#if:|{{{h}}}h}}{{#if:|{{{m}}}m}}{{#if:|s}}}} The Ultimate Commodore 64 Talk]{{#if:| (ab {{#if:|{{{h}}}:|0:}}{{#if:|{{#ifexpr:{{#invoke:Str|len|{{{M}}}}}>1||0}}:|00:}}{{#if:|{{#ifexpr:{{#invoke:Str|len|}}>1||0}}|00}})|{{#if:| (ab {{#expr: trunc( / 3600 ) }}:{{#ifexpr:
{{#expr:
trunc(
( - trunc( / 3600 ) * 3600 )
/ 60 )
}} < 10 | 0
}}{{#expr:
trunc(
( - trunc( / 3600 ) * 3600 )
/ 60 )
}}:{{#ifexpr:
{{#expr:
- trunc( / 3600 ) * 3600
- trunc( ( - trunc( / 3600 ) * 3600 ) / 60 ) * 60
}} < 10 | 0
}}{{#expr:
- trunc( / 3600 ) * 3600
- trunc( ( - trunc( / 3600 ) * 3600 ) / 60 ) * 60
}})}}}}
}}
}}
}}
}}
}}
}}
}} auf {{#ifeq:{{{link}}}|0|YouTube |YouTube}}{{#if:
|, {{#invoke:DateTime|format||T._Monat JJJJ}}
}}{{#if:
|, abgerufen am {{#invoke:DateTime|format||T._Monat JJJJ}}
}}{{#if:| ({{#if:
| {{#invoke:Multilingual|format|{{{sprache}}}|slang=!|split=[%s,]+|shift=m|separator=, }}
}}{{#if:
| {{#if:
| ;
}}
}}{{#if:
| {{#if:
| ;
}}Laufzeit: {{{laufzeit}}}
}})
}}{{#if: |.}}{{#invoke:TemplatePar|check
|all=
|opt= 1= id= 2= title= titel= 3= abruf= zugriff= z= h= m= time= sec= uploader= upl= upload= d= kommentar= k= link= user= channel= c= alias= list= show= showid= sprache= laufzeit=
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=h
|2=n
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=m
|2=n
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=sec
|2=n
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=time
|2=n
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=sprache
|2=langs
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@
}}{{#invoke:TemplatePar|valid
|1=link
|2=/^[01]?$/
|template=Vorlage:YouTube
|cat=Wikipedia:Vorlagenfehler/Vorlage:YouTube
|format=@@@ 0 oder 1 erlaubt
}}{{#if:ZsRRCnque2E||Vorlage:YouTube: Fehlender Typ-Parameter. Entweder id, list, show, showid, user, channel, c oder alias muss angegeben werden.
}} – Vortrag auf dem 25. Chaos Communication Congress (englisch)
Einzelnachweise
<references />