----------------------------------------------------

Kapitel 5

Display-List-Interrupts

----------------------------------------------------

 

 

Der Display-List-Interrupt ist eine der leistungsstärksten Fähigkeiten des ATARI ™ Personal Computer Systems, es ist allerdings auch eine der am schwersten zugänglichen. Er erfordert tiefste Kenntnis der Maschinensprache und der Maschinen-Charakteristiken. Display-List-Interrupts an sich liefern keine Verbesserungen; sie müßen in Verbindung mit den anderen Möglichkeiten des Systems, wie z.B. Player-Missile-Graphiken, indirekte Zeichensatz- oder Farb- register-Adressierung, benutzt werden. Mit Display-List-Interrupts kann die volle Leistungsstärke dieser Möglichkeiten erreicht werden.

 

Display-List-Interrrupts ziehen den Vorteil aus der sequentiellen Anordnung des Raster-Scan-Fernsehsytems. Der Fernseher zeichnet das Bild in einer bestimmten Zeitfolge vom oberen zum unteren Bildschirmrand. Dieser Zeichenvorgang verbraucht ungefähr 13.000 Mikrosekunden, was dem menschlichen Auge als ein gleichmäßiges Bild erscheint, für den Computer aber ein großer Zeitraum ist. Das Gerät hat sehr viel Zeit, um die Parameter des Displays zu ändern, während der Bildschirm gezeichnet wird. Das bedeutet, der Zyklus des Parameter-Änderns muß zum Zyklus des Bildschirmzeichnens synchronisiert werden. Dieses kann zum einen geschehen, indem der 6502 in eine Schleife geschickt wird, deren Ausführungsfrequenz exakt bei 50 Hertz liegt. Dieses macht andere Berechnungen allerdings nahezu unmöglich. Eine andere (und bessere) Methode ist, zu unterbrechen, d.h. anzuhalten <->Interrupt). Der 6502 reagiert auf den den Interrupt, indem er die Bildschirmparameter ändert und danach zu seinen normalen Aufgaben zurückkehrt. Der Interrupt hierfür muß zeitlich präzise abgestimmt werden, damit er exakt beim Bildschirm-Zeichen-Prozeß auftritt. Dieser speziell getimte Interrupt wird von ANTIC ausgelöst und als Display-List-Interrupt (DLI) bezeichnet.

 

Das Timing und die Ausführung eines jeden Interrupt-Prozesses ist kompliziert; daher soll hier erst die Folge von Ereignissen, die bei einem sauber arbeitenden Display-List-Interrupt auftritt, geschildert werden. Der Vorgang beginnt damit, daß der ANTIC-Chip auf eine Instruktion in der Display-List stößt, deren Interrupt-Bit (D7) gesetzt ist. ANTIC wartet dann bis zur letzten Scan-Line der im Augenblick angezeigten Mode-Line und "sieht" dann im NMIEN-Register "nach", ob Display-List-Interrupts eingeschaltet, d.h. zugelassen sind. Ist das entsprechende Bit ausgeschaltet, dann ignoriert ANTIC den Interrupt und fährt mit seiner normalen Anzeige-Arbeit fort. Andernfalls schickt ANTIC ein NMI-Signal (NMI = Non Maskable Interrupt = Nicht maskierbares Interrupt) an den 6502 und kehrt dann erst zu seiner normalen Aufgabe zurück. Der 6502 springt über den NMI-Vektor zur Interrupt-Routine des OS. Diese Routine stellt als erstes den Grund für den Interrupt fest. Wenn letzterer tatsächlich ein Display-List-Interrupt ist, wird die angesprungene Routine über die Adressen $0200 und $0201 (nieder-, danach höherwertig) zu einer DLI-Service-Routine umgeleitet. Diese DLI-Routine ändert ein oder mehrere Graphik-Register, die die Anzeige kontrollieren. Danach führt der 6502 sein Hauptprogramm weiter.

 

Es gibt eine Anzahl von Schritten, die für das Erstellen eines DLIs erforderlich sind. Als erstes muß natürlich die DLI-Routine selbst geschrieben werden. Diese Routine muß alle 6502-Register, die evt. geändert werden, auf den Stapel schieben, da die OS-Routine keine Register rettet (Das Status-Register des Prozessors wird automatisch auf den Stapel gebracht). Die Routine sollte kurz und schnell sein; sie sollte nur Register ändern, die in Zusammenhang mit dem Display stehen. Sie muß außerdem damit enden, daß alle auf den Stapel gebrachten Register wieder zurückgespeichert werden.

 

Als nächstes muß die DLI-Service-Routine irgendwo im Speicher plaziert werden. Page 6 ist hierfür ideal. Danach wird der Vektor bei $0200 und $0201 so gesetzt, daß er auf diese Routine zeigt. Nun wird der vertikale Punkt auf dem Schirm festgelegt, an dem der DLI auftreten soll, dann die zugehörige Anweisung in der Display-List gesetzt. Dort wird Bit D7 der vorangegangenen Instruktion gesetzt. Schließlich wird der DLI eingeschaltet, indem Bit D7 des NMIEN-Registers ($D40E) gesetzt wird. Der DLI ist dann sofort aktiviert.

 

Wie bei jeder Interrupt-Service-Routine können durch zeitliche Erfordernisse Probleme aufgeworfen werden. ANTIC leitet den Interrupt nicht sofort an den 6502 weiter, sobald er auf eine entsprechende Anweisung stößt, sondern wartet bis zur letzten Scan-Line der unterbrechenden Mode-Line. Der 6502 und die Interrupt-Service-Routine des OS verbrauchen zusammen zwischen 18 und 25 Maschinenzyklen. Die erste Instruktion der DLI-Service-Routine wird also erst erreicht, nachdem mindestens 18 Maschinenzyklen vergangen sind. Diese 18 Maschinenzyklen entsprechen 36 Color Clocks auf dem Bildschirm. Das bedeutet, daß sich der Elektronenstrahl in der Mitte des Schirms (in der letzten Scan-Line der unterbrechenden Mode-Line) befindet, wenn die DLI-Routine gestartet wird. Ändert die DLI-Service-Routine ein Farbregister, dann erscheint die alte Farbe auf der linken und die neue Farbe auf der rechten Bildschirmseite. Aufgrund des unsicheren Timings beim Reagieren dem 6502 auf einen Interrupt, ist diese Grenzlinie zwar scharf, zittert aber hin und her.

 

Es gibt allerdings eine Lösung für dieses Problem. Sie besteht im WSYNC- (Warten auf waagerechte Synchronisation) Register. Immer wenn dieses Register auf irgendeine Weise adressiert wird, setzt ANTIC das RDY-Signal des 6502 Low und "friert" damit den 6502 solange ein, bis das Register durch eine waagerechte Synchronisation wieder zurückgesetzt wird. Wird in der Interrupt-Routine eine STA WSYNC-Anweisung genau vor der Anweisung, die den Wert eines Farbregisters ändert, plaziert, so wird die entsprechende Farbe geändert, während sich der Elektronenstrahl außerhalb des linken Bildschirmrandes befindet. Dadurch wechselt die entsprechende Farbe erst eine Scan-Line tiefer, als ursprünglich beabsichtigt, ist dafür aber "sauber".

 

Die richtige Benutzung eines DLIs ist deshalb, das DLI-Bit der Mode-Line vor der Mode-Line zu setzen, in welcher der DLI auftreten soll. Die DLI-Service-Routine muß also als erstes die 6502-Register auf den Stapel schieben. Danach werden diese mit den zu benutzenden neuen Graphik-Werten geladen. Die Routine muß eine STA WSYNC-Anweisung ausführen und dann die neuen Werte in die entsprechenden ANTIC- bzw. CTIA-Register speichern. Schließlich müßen die 6502-Register wieder vom Stapel geholt werden, woraufhin zum Hauptprogramm zurückgesprungen wird. Dieser Vorgang garantiert, daß die Graphik-Register am Anfang der gewünschten Zeile geändert werden, während der Elektronenstrahl sich außerhalb des Bildschirmrandes befindet.

 

Das folgende Programm ist ein Beispiel für einen DLI:

 

10 DLIST=PEEK(560)+256*PEEK(561):REM Display-List finden

20 POKE DLIST+15,130:REM Einfügen der Interrupt-Anweisung

30 FOR I=O TO 19:REM Schleife zum Einpoken der DLI-

40 READ A:POKE 1536+I,A:NEXT I:REM Service-Routine

50 DATA 72,138,72,169,80,162,88

60 DATA 141,10,212,141,23,208

70 DATA 142,24,208,104,170,104,64

90 POKE 512,0:POKE 513,6:REM Setzen des Interrupt-Vektors

90 POKE 54286,192:REM DLI einschalten

 

Dieses Programm benutzt die folgende DLI-Service-Routine in Assembler:

 

          PHA            Akkumulator sichern

          TXA

          PHA            X-Register sichern

          LDA #$50       Dunkle Farbe für Zeichen

          LDX #$58       Purpur

          STA WSYNC      Warten

          STA COLPF1     Farbe speichern

          STX COLPF2     Farbe speichern

          PLA

          TAX            Zurückspeichern der Register

          PLA

          RTI            Abschluß der Routine

 

Dieses ist eine sehr einfache DLI-Routine. Sie ändert die Hintergrundfarbe von Blau nach Purpur, sowie die Farbe der Buchstaben, so daß diese dunkler vor dem hellen Hintergrund angezeigt werden. Es ist vielleicht verwunderlich, daß die obere Hälfte des Bildschirmes weiterhin die blaue Farbe behält, obwohl die DLI-Rautine andauernd Purpur in das Farbregister schiebt. Die Antwort hierauf liegt in der Vertical-Blank-Routine des OS, die während des Vertical-Blanks immer wieder den blauen Farbwert in das Farbregister schreibt. Das Blau wird von der Schattenadresse dieses Farbregisters geliefert. Jedes Hardware-Farbregister besitzt eine Schattenadresse an einer festgelegten RAM-Speicherstelle. Diese Adressen liegen bei dezimal 708 bis 712. In den meisten Fällen werden die Farben geändert, indem die neuen Werte in diese Register geschrieben werden. Wenn direkt in die Hardware-Register geschrieben wird, "wischt" das OS die neuen Werte durch den ‹bertragungsprozeß innerhalb einer 50stel Sekunde wieder aus dem Register. Bei DLIs muß der neue Farbwert allerdings direkt in die Hardware-Register geladen werden. Ein DLI kann nicht, verwendet werden, um die Farbe der ersten Scan-Line zu ändern; das OS übernimmt deren Farbgebung. DLIs sind also nur für die nachfolgenden Zeilen anwendbar.

 

Durch das direkte Speichern von Farbwerten in die Hardware-Register wird ein neues Problem hervorgerufen: der "Attract-Modus" des Gerätes wird außer Kraft gesetzt. Dieser Modus ist eine Einrichtung, die durch das OS gesteuert wird. Wird neun Minuten lang keine Taste des Computers gedrückt, so beginnt das System die Bildschirmfarben durch zufällige Werte auf geringeren Helligkeitsstufen laufen zu lassen. Dieses garantiert, daß der mehrere Stunden nicht bediente Computer kein Bild in die Mattscheibe brennt. Es ist sehr einfach, einen solchen Modus in einen DLI einzufügen. Es müßen lediglich zwei neue Zeilen in das Assemblerprogramm eingeschoben werden:

 

 

     Alt            Neu

 

     LDA NEWCOL     LDA NEWCOL

     STA WSYNC      EOR COLRSH

     STA COLPF2     AND DRKMSK

                     STA WSYNC

                     STA COLPF2

 

DRKMSK und COLRSH sind Zero-Page-Adressen ($4E und $4F), die während des Vertical-Blank-Interrupts vom OS auf den neuesten Stand gebracht werden. Wird der Attract-Modus außer Kraft gesetzt, nehmen die Register COLRSH und DRKMSK die Werte $00 bzw. $FF an. Ist der Attract-Modus aktiviert, dann erhält COLRSH alle 4 Sekunden einen neuen Zufallswert, wogegen DRKMSK den Wert $F6 enthält. Das bedeutet, COLRSH bestimmt die Farbe und DRKMSK "maskiert" das höchste Helligkeits-Bit "aus".

 

Die Einfügung des Attract-Modus in einen DLI ist allerdings ein Problem: die Ausführungszeit eines DLIs wird erhöht. Dieses Problem wird vielleicht durch die Beschreibung des DLI-Timings deutlicher. Die Ausführung eines DLIs läßt sich in drei Phasen auf teilen: Phase Eins reicht vom Beginn des DLIs bis zur STA WSYNC-Anweisung. Während dieses Zeitraumes zeichnet der Elektronenstrahl die letzte Scan-Line der unterbrechenden Mode-Line. Phase Zwei ist die Periode vom STA WSYNC-Befehl bis zum Auftauchen des Strahls auf dem Bildschirm. Diese Phase gehört zum Horizontal-Blank; alle Graphik-ƒnderungen sollten während dieser Periode ausgeführt werden. Phase Drei umfaßt den Zeitraum vom Auftauchen des Elektronenstrahls auf dem Schirm bis zum Ende der DLI-Service-Routine. Das Timing dieser Phase ist nicht als kritisch zu bezeichnen.

 

Eine Horizontal-Scan-Line benötigt 114 Taktzyklen. Ein DLI erreicht den 6502 ungefähr beim 15. Zyklus. Der 6502 benötigt nun weitere 7 Zyklen, um auf den Interrupt zu reagieren. Die OS-Routine zum Bearbeiten des Interrupts, sowie deren Sprung zur DLI-Service-Routine verbraucht 11 Maschinenzyklen. Dieses bedeutet, die Service-Routine wird nicht vor Verstreichen von 33 Taktzyklen erreicht. Außerdem muß mit der STA WSYNC-Anweisung beim 103. Zyklus begonnen werden; dieses reduziert die in Phase Eins verfügbare Zeit um weitere 11 Zyklen. Schließlich gehen dem 6502 noch weitere Zyklen durch den DMA vom ANTIC-Prozessor verloren. Dieses läßt maximal 61 Zyklen für die erste Phase zu; dieses Maximum wird allerdings nur mit Blank-Line-Mode-Lines erreicht. Zeichen- und Map-Modus-Befehle resultieren in dem Verlust eines Zyklus¥ für jedes Datenbyte der Anzeige. Im ungünstigsten Fall sind dieses die BASIC-Modi 0,7 oder 8, die jeweils 40 Bytes pro Zeile verbrauchen. In solchen Modi sind lediglich 21 Maschinenzyklen für Phase Eins vorhanden. Das bedeutet, die Routine, die in Phase Eins abgearbeitet werden soll, besitzt eine Ausführungszeit von 21 bis 61 Maschinenzyklen.

 

 

Phase Zwei erstreckt sich über 24 Taktzyklen und ist die kritische Periode eines DLIs. Ebenso wie bei Phase Eins gehen einige Zyklen durch den DMA ANTICs verloren. Player-Missile-Graphiken verbrauchen 5 Zyklen, sofern sie benutzt werden. Die Anzeige-Anweisung kostet einen Zyklus; ist es eine LMS-Anweisung, so gehen zwei weitere Zyklen verloren. Schließlich werden noch ein oder zwei Taktzyklen durch die Speicherauffrischung oder durch das Einholen von Daten verbraucht. Das heißt für Phase Zwei sind 14 bis 23 Maschinenzyklen verfügbar.

 

Das Timing-Problem bei DLIs wird nun offensichtlich. Um eine einzelne Farbe laden, ändern und speichern zu können, werden 14 Zyklen benötigt. Das Sichern des A-, X- und Y-Registers auf den Stapel, sowie das Laden der 3 Farben in diese Register und deren abschließendes Abspeichern verbraucht 47 Zyklen, was den größten, wenn nicht sogar ganzen Teil von Phase Eins ausmacht. Der Programmierer, der DLIs für ausgedehnte Graphik-ƒnderungen benutzt, muß das Timing derselben genau beachten. Glücklicherweise muß der angehende Programmierer sich nicht den Kopf über Timing-Berechnungen zerbrechen, da das Zählen der Zyklen und eine Geschwindigkeits-Optimierung bei einfachen Graphik-Operationen überflüssig ist. Diese Berücksichtigungen sind nur in Situationen erforderlich, bei denen eine hohe Leistung gewünscht wird.

 

Es gibt keine Vereinfachungen für den Programmierer, der mehr als drei Farbregister in einem einzigen DLI ändern will. Es mag möglich sein, eine vierte Farbe während der dritten Phase zu ändern, sofern diese nicht am linken Bildschirmrand angezeigt wird. Entsprechend kann eine Farbe, die nicht am rechten Rand erscheint, während der ersten Phase nicht geändert werden. Eine andere Möglichkeit wäre, den überaktiven DLI in zwei weniger beschäftigte DLIs aufzuspalten, die jeweils die Hälfte der Arbeit des ursprünglichen ausführen. Der zweite DLI könnte durch Einfügen einer einzigen Scan-Line-Blank-Line-Anweisung (deren DLI-Bit gesetzt ist), plaziert werden, die direkt unter die unterbrechende Mode-Line in die Display-List eingefügt wird. Hierdurch wird natürlich ein kleiner Bereich des Bildschirmes verbraucht.

 

Eine andere Teillösung wäre, die Berechnungen für den Attract-Modus während des Vertical-Blanks durchzuführen. Hierfür müßten zwei Farbtafeln im RAM gespeichert werden: die erste Tafel enthält die Farbwerte, die durch die DLI-Routinen angezeigt werden sollen; die zweite beinhaltet die Attract-Werte der ersten. Während des Vertical-Blanks holt dann eine vom Benutzer geschriebene Routine die Farben aus der ersten Tafel, wandelt sie um und speichert diese Attract-Farben in der zweiten Tafel. Die DLI-Routine nimmt dann die Werte direkt aus der zweiten Tafel, ohne daß dabei Zeit für das Umwandeln der Attract-Farben verloren geht.

 

Vielfach wird der Einsatz von mehreren DLIs gewünscht, die an verschiedenen senkrechten Bildschirmpositionen auftreten. Dieses ist eine wichtige Möglichkeit, um mehr Farbe auf den Bildschirm zu bringen. Es gibt aber nur einen DLI-Vektor; sollen mehrere DLIs eingesetzt werden, dann muß die Vektorenänderung mit in die DLI-Routine eingebracht werden. Es gibt verschiedene Wege, um dieses zu tun. Falls die DLI-Routine jedesmal den gleichen Arbeitsgang nur mit anderen Farben ausführt, kann sie über eine Speichertafel gesteuert werden. Jedesmal, wenn die DLI-Routine angesteuert wird, wird ein Zähler inkrementiert und als Index für die zu benutzende Tafel verwendet. Das folgende Programm ist ein, Beispiel für diese Idee:


          PHA

          TXA

          PHA

          INC COUNTR

          LDX COUNTR

          LDA COLTAB,X   Page $F0 wird als Farbtafel benutzt

          STA WSYNC      Warten

          STA COLBAK

          CPX #$4F       Letzte Zeile

          BNE ENDDLI     Nein - DLI beenden

          LDA #$00       Ja - Zähler zurücksetzen

          STA COUNTR

ENDDLI    PLA

          TAX

          PLA            Akkumulator zurückspeichern

          RTI

 

 

Das BASIC-Programm zum Aufrufen dieser Routine sieht wie folgt aus:

 

10   GRAPHICS 7

20   DLIST=PEEK(560)+256*PEEK(561):REM Display-List finden

30   FOR J=6 TO 84:REM In jede Mode-Line ein DLI einfügen

40   POKE DLIST+J,141:REM BASIC-Modus 7 mit gesetztem DLI-Bit

50   NEXT J

60   FOR J=0 TO 30

70   READ A:POKE 1536+J,A:NEXT J:REM Laden der Service-Routine

                                      in Page 6

80   DATA 72,138,72,238,32,6,175,32,6

90   DATA 189,0,240,141,10,212,141,26,208

100  DATA 224,79,208,5,169,0

110  DATA 141,32,6,104,170,104,64

120  POKE 512,0:POKE 513,6:REM Vektor zur Service-Routine

130  POKE 54286,192:REM DLI einschalten

 

Dieses Programm bringt 80 verschiedene Farben auf den Schirm.

 

Es gibt noch eine andere Möglichkeit, um mehr DLIs einzusetzen. Einerseits könnte ein DLI-Zähler zum Verzweigen zu den Service-Routinen benutzt werden. Dieses verlangsamt allerdings die "Reaktion" der DLI-Routine; besonders die der am Ende der Abfrage liegenden Routine. Eine andere Möglichkeit wäre, daß jede DLI-Routine die Adresse der DLI-Vektoren bei $200 und $201 schreibt. Es ist die beliebteste Methode beim Einsetzen mehrerer DLIs. Sie hat außerdem den Vorteil, daß die Vektor-Logik nach anstatt vor der kritischen Zeitphase ausgeführt wird.

 

Die Routine für das Klicken der Tastatur wird mit der Funktion eines DLIs zwischengeschaltet. Bei jedem Tastendruck ertönt aus dem internen Lautsprecher ein Klicken, sofern dieser Druck anerkannt wurde. Das Timing für dieses Geräusch wird durch mehrere STA WSYNC-Anweisungen geliefert. Hierdurch kann allerdings das Timing einer DLI-Routine gestört worden, die Bildschirmfarben rutschen für den Bruchteil einer Sekunde eine Scan Line nach unten. Es gibt allerdings keine einfache Lösung dieses Problems. Eine Möglichkeit bezieht sich auf das VCOUNT-Register. Es ist ein Nur-Lese-Register im ANTIC-Chip, das ANTIC mitteilt, welche Zeile dieser augenblicklich anzeigt. Eine DLI-Routine könnte dieses vorgenannte Register überprüfen und entscheiden, ob eine Farbe zu ändern ist.

 

Eine andere Lösung wäre das Abschalten der OS-Routine und das Einsetzen einer eigenen Routine, was allerdings eine komplizierte Aufgabe ist. (Die brutalste Lösung wäre die Verweigerung sämtlicher Tastatureingaben. Werden keine Tastendrucke anerkannt so kann auf dem Bildschirm auch kein Zittern auftreten.)

 

 

Der DLI wurde entworfen, um eine primitive Software/Hardware-Technik zu ersetzen, welche als "Kernel" bezeichnet wird. Ein Kernel ist eine Programmschleife des 6502-Prozessors, die präzise zum Anzeige-Zyklus des Fernsehgerätes synchronisiert ist. Durch ‹berwachung des VCOUNT-Registers und Konsultieren einer Tafel, in welcher Bildschirm-ƒnderungen als eine Funktion von VCOUNT-Werten katalogisiert sind, kann der 6502 eigenmächtig alle Graphikwerte des gesamten Schirmes kontrollieren.

 

Für diese Leistungsfähigkeit wird allerdings ein hoher Preis bezahlt: der 6502 kann während der Bildschirm-Anzeige Periode nicht mehr für Berechnungen benutzt werden, was einen Zeitraum von ungefähr 75% der gesamten Prozessorzeit ausmacht. Außerdem darf keine Berechnung größer als ca. 4000 Maschinenzyklen sein, die während des Vertical Blanks und der Overscanzeit zur Verfügung stehen. Das heißt, Kernel können nur in Programmen benutzt werden, die wenig Berechnungen erfordern, wie es bei einigen Telespielen der Fall ist. Das "BASKETBALL "TM""-Programm auf dem ATARI Computer benutzt z.B. die Kerneltechnik; das Spiel benötigt wenig Berechnungen, aber viel Farbe. Die mehrfarbigen Player dieses Programms könnten nicht mit DLIs erzeugt werden, da diese auf vertikale Bildschirm- anstatt auf Playerpositionen bezogen werden.

 

Es ist möglich, die Kernel-Idee soweit zu erweitern, daß sie nur auf einzelne Scan-Lines angewandt wird. Auf diese Weise kann ein einzelnes Farbregister in einer Scan-Line mehrere Farben erzeugen. Die waagerechte Position des Farbwechsels wird durch die Zeit bestimmt, die bis zur Farbänderung vergeht. Das heißt, durch sorgfältiges Abzählen von Maschinenzyklen kann der Programmierer mehr Farbe auf den Bildschirm bringen.

 

Unglücklicherweise ist dieses in der Praxis sehr schwer durchführbar. Durch ANTICs DMA ist es schwierig zu bestimmen, wieviel Zyklen in Wirklichkeit verstreichen; ein einfaches Zählen der 6502-Zyklen reicht hierbei nicht aus. Wenn der DMA ANTICs abgeschaltet wird, kann der 6502 zwar die volle Kontrolle über die Anzeige übernehmen, muß aber zusätzlich alle Arbeit verrichten, die der ANTIC-Prozessor sonst durchführt. Aus diesem Grunde sind waagerechte Kernels sehr selten den Aufwand wert, den sie erfordern. Natürlich wäre diese Technik durchführbar, wenn zwei Bilder, die verschiedene Farben besitzen sollen, einen einigermaßen großen Abstand zueinander haben. Hierdurch muß das Timing nicht so genau abgestimmt sein.

 

Der ungeheure Wert der indirekten Graphik-Adressierung und aller Register wird nun offensichtlich. Mit Hilfe von Display-List-Interrupts können diese Register "im Vorbeigehen" geändert werden. Deshalb ist es möglich mehr Farbe, bessere Graphik oder spezielle Effekte auf den Bildschirm zu bringen. Die offensichtlichste Verbesserung ist die Erzeugung von vielfarbigen Displays. Jedes Farbregister kann so oft geändert werden, wie DLIs vorhanden sind. Das gilt natürlich sowohl für Playfield- als auch für Player-Missile-Farbregister, von denen Jedes 128 Farben speichern kann.

 

Natürlich können die hierdurch gegebenen Möglichkeiten nicht mit jedem Programm voll ausgenutzt werden. Zu viele DLIs beeinflussen die Programmgeschwindigkeit. In der Praxis bedeutet dieses: ein Dutzend Farben sind einfach einzubringen, zwei Dutzend Farben erfordern eine genaue Planung, und noch mehr Farben schon von vornherein sehr günstige Umstände.

 

DLIs können allerdings nicht nur benutzt werden, um mehr Farben auf den Bildschirm zu bringen, mit ihnen kann auch die Leistungsfähigkeit von Player-Missile-Graphiken gesteigert werden. Die waagerechte Position eines Players kann mit Hilfe eine DLIs geändert werden. Auf diese Weise kann ein Player auf dem Bildschirm etwas tiefer ein zweites, drittes oder viertes Mal erscheinen. Ein einzelner Player kann verschiedene Figuren auf dem Bildschirm darstellen. Wenn man sich einen Player als einen senkrechten Papierstreifen vorstellt, auf dem sich Bilder befinden, dann wäre der DLI eine Schere, mit der dieser Streifen in mehrere Teile zerschnitten wird, die dann neu positioniert werden. Hierbei können natürlich nicht zwei Teile eines Players auf der gleichen Zeile stehen. Wird ein Display aufgebaut, daß Graphik-Objekte benötigt, die sich niemals auf den gleichen Zeilen befinden, kann hierfür ein einziger Player benutzt werden.

 

Eine andere Art DLIs in Verbindung mit Playern zu verwenden wäre, ihre Breite oder Priorität zu ändern. Dieses geschieht meistens mit dem Maskierungs-Trick, der in Kapitel 4 beschrieben wurde.

 

Die letzte Anwendung von DLIs betrift das ƒndern von Zeichensätzen mit zunehmender Zahl der Bildschirmzeilen. Dieses ermöglicht einem Programm die Verwendung von Zeichengraphiken innerhalb eines großen und normalen Textes innerhalb eines kleinen Fensters. Ein Programm könnte also einen Graphik-Satz im oberen Bildschirmrand, einen Großschrift-Satz in der Bildschirmmitte und normalen Text am unteren Rand ausgeben. Außerdem könnte das Reflektions-Bit mit einer DLI-Routine geändert werden, was besonders für schon angesprochene Kartenspiele von Nutzen ist.

 

Die einwandfreie Benutzung eines DLIs erfordert sorgfältiges Anlegen des Displays, bei welcher der Programmierer die senkrechte Architektur der Bildschirmaufteilung in Erwägung ziehen muß. Das Raster-Scan-Fernseh-System ist nicht zweidimensional symetrisch; es besitzt aufgrund der Geschwindigkeitsverhältnisse beim Zeichnen des Schirmes eine mehr in senkrechte Richtung orientierte Struktur. Das waagerechte Zeichnen läuft ungefähr 200 mal schneller ab als das senkrechte. Das Display System des ATARI Computers wurde speziell für dieses Raster-Scan-System entwarfen, daher spiegelt sich dessen Struktur in der Technik dem Computers wieder. Das ATARI™-Display ist kein flaches, leeres Blatt, auf welchem gezeichnet wird; es ist ein Stapel von dünnen Streifen, von denen jeder andere Werte annehmen kann. Der Programmierer, der auf einem speziellen Display besteht, schlägt viele Möglichkeiten aus. Optimale Resultate werden erzielt, wenn die anzuzeigende Information in einer streng senkrechten Struktur angelegt wird. Dieses erlaubt die Entfaltung der vollen Leistungsfähigkeit von DLIs.

 

Abbildung 5.1 zeigt einige Bildschirme verschiedener Programme und gibt die relative Menge der verwendeten DLIs an.


                        Missile Command                                           Star Raiders

                             ---einige---                                                  ---wenige---

 

                        Space Invaders                                                Scram

                        ---sehr viele---                                            ---wenige---

 

 

Abbildung 5.1.

Beispiele senkrechter Bildschirmarchitektur