---------------------------------------------------
Anhang
VIII
GTIA
---------------------------------------------------
Der
GTIA ist ein neuer Graphik-Chip, der den älteren CTIA ersetzt. Der GTIA unterscheidet
sich nicht sonderlich vom CTIA. Er liefert zusätzlich neue Möglichkeiten.
So gibt es drei weitere Modi für die Interpretation der vom ANTIC-Chip kommenden
Informationen. Der ANTIC braucht hierbei keinen neuen Modus, um sich mit dem GTIA
zu verständigen; es wird der hochauflösende Modus $0F (BASIC-Modus 8) verwendet.
Ansonsten ist der GTIA-Prozessar absolut kompatibel zum CTIA. Es folgt nun eine kurze
Beschreibung der GTIA-Möglichkeiten, so daß die Unterschiede zwischen
GTIA und CTIA deutlich werden.
Der
CTIA-Chip wird zum Anzeigen der Daten auf dem Fernsehschirm benutzt. Er erzeugt das
Playfield, die Player/Missile-Graphiken und fragt Kollisionen einzelner Objekte auf
dem Schirm ab. Der CTIA interpretiert die vom ANTIC-Prozessor kommenden Daten als
6 Text- und 8 Graphik-Modi. Bei einem statischen Display werden die von ANTIC gelieferten
Informationen zum Anzeigen von Farben und Helligkeiten verwendet (wie in den 4 Farbregistern
festgelegt). Durch den GTIA wird dieses Spektrum auf 9 Farbregister (9 Farben + Helligkeiten),
16 Farben in einer Helligkeit oder eine Farbe in 16 Helligkeiten erweitert.
Die
3 ìneuenî Graphik-Modi, die durch den GTIA-Chip möglich werden,
sind einfach drei neue Interpretationsarten des Hochauflösungs-Modus $0F. Alle
drei Modi beeinflussen lediglich das Playfield; die Player/Missile-Objekte können
weiterhin benutzt werden. Außerdem können alle Farben und Helligkeiten
durch Display-List-Interrupts geändert werden.
Der
GTIA benutzt jeweils 4 Bit der von ANTIC kommenden Daten, um ein Pixel festzulegen
(daher die Bezeichnung Pixel-Daten). Jedes Pixel ist 2 Color-Clocks breit und eine
Scan-Line hoch, ist also viermal so breit wie hoch. Das Display besitzt eine Auflösung
von 80 Pixel in der Breite mal 192 Pixel in der Höhe. Jede Zeile benötigt
320 Speicherbits, d.h. 40 Bytes, was der im Modus $0F benötigten Speichergröße
entspricht. Ein Programm, das mit den GTIA-Modi arbeiten soll, muß daher einen
freien Speicherraum von mindestens 8k zur Verfügung haben.
Die
GTIA-Modi werden durch das Prioritäts-Register PRIOR ausgewählt. PRIOR
besitzt eine Schatten-Adresse bei $026F und liegt im OS bei $D01B. Die Bits D6 und
D7 sind die für die GTIA-Modi maßgeblichen Kontrollbits. Ist keines dieser
Bits gesetzt, wird kein GTIA-Modus benutzt und der GTIA-Prozessor arbeitet wie der
CTIA. Wenn Bit D7 auf 0 und Bit D6 auf 1 gesetzt sind, dann wird der GTIA-Modus 9
angesprochen, welcher eine Farbe in 16 verschiedenen Helligkeiten zuläßt.
Sind Bit D7 auf 1 und Bit D6 auf 0 gesetzt, dann wird der GTIA-Modus 10 eingeschaltet.
Dieser Modus erzeugt 9 Farben + zugehörigen Helligkeiten, indem die 4 Playfield-
plus die 4 Player/Mismile plus 1 Hintergrund-Farbregister verwendet werden. Werden
in diesem Modus die Player/Missile-Objekte eingesetzt, dann erhalten auch sie ihre
Farbdaten aus den ihnen zugeordneten Registern. (im Original:...erhalten sie ihre
Farbe auch hier ihre Farbdaten aus...) ) Wenn sowohl Bit D7, als auch Bit D6 auf
1 gesetzt sind, dann wird GTIA-Modus 11 eingeschaltet. Dieser Modus liefert 16 Farben
in einer Helligkeit. Wie bei Modus 9 können auch hier Play- und Missile-Objekte
zum Erweitern der Farb- bzw. Helligkeitsauflösung benutzt werden.
PRIOR
D7
D6 D5 D4 D3 D2 D1 D0
D7 D6
OPTION
0 0
KEIN GTIA-Modus (Modi 0-8)
(CTIA-Operation)
0 1
1 Farbe, 16 Helligkeiten
(Modus 9)
1 0
9 Farben + Helligkeiten
(Modus 10)
1 1
16 Farben, 1 Helligkeit
(Modus 11)
Abbildung
VIII.1:
Bit-Muster
in PRIOR zum Anwählen der GTIA-Modi
Das
Anwählen der GTIA-Modi ist genauso einfach, wie das der anderen CTIA-Betriebsarten:
um die GTIA-Modi von BASIC aus aufzurufen, sind lediglich die Kommandos GRAPHICS
9, GRAPHICS 10 oder GRAPHICS 11 für die Modi 9, 10 und 11 erforderlich. In Assembler
entspricht der Aufruf dieser Betriebsarten dem Bildschirmöffnen für die
anderen Modi. Wird eine neue Display-List aufgebaut, so muß PRIOR zum richtigen
Einschalten der GTIA-Betriebsarten mitbenutzt werden (Siehe Abbildung VIII.1).
In
Modus 9 werden bis zu 16 verschiedene Helligkeitsstufen einer Farbe erzeugt. Der
ANTIC-Chip liefert die Pixel-Daten, welche die jeweilige Helligkeit auswählt.
Der Farbton wird durch das Hintergrund-Register bestimmt (dieses geschieht in BASIC
mittels POKE oder SETCOLOR). Das obere Nybble des Hintergrund-Registers gibt die
Farbe an, während das untere Nybble auf Null gesetzt wird. Das Format dieses
Kommandos sieht demnach wie folgt aus:
SETCOLOR 4,ìFarbwert",0
Die
4 gibt hierbei an, daß die Farbe ins Hintergrund-Register gebracht werden soll.
Der Farbton kann wie gewöhnlich ein Wert von 0 bis 15 sein, wobei die Null den
Helligkeitswert des Farbregisters auf 0 setzt. Dieses ist erforderlich, weil die
Pixel-Daten von ANTIC mit dem unteren Nybble des Hintergrund-Registers oderiert werden,
um die gewünschte Helligkeit auf den Schirm zu bringen. Auch das COLOR-Kommando
wird zum Bestimmen der zum Zeichnen auf den Bildschirm verwendeten Helligkeit benutzt.
Der Parameter-Wert bei diesem Befehl kann sich zwischen 0 und 15 inklusive bewegen.
Ein BASIC-Programm muß also mindestens die folgenden Anweisungen enthalten,
damit der GTIA-Modus 9 verwendet werden kann:
GRAPHICS 9
GTIA 9 ansteuern
SETCOLOR 4,12,0 Hintergrund-Farbregister
auf
Grün festlegen.
FOR I=0 TO 15
Beispiel für die Verwendung des
COLOR I
COLOR-Kommandos.
PLOT 4,I+10
NEXT I
In
Assembler muß die OS-Schatten-Adresse des Hintergrund-Registers bei $2C8 benutzt
werden, um den Farbton mit dem oberen Nybble festzulegen. Wird CIO aufgerufen, dann
werden die Pixel-Daten im OS-Register ATACHR bei $2FB gespeichert. Hierdurch wird
die Helligkeit mit den Werten $0 bis $F ausgewählt. Werden vom Programmierer
eigene Anzeige-Daten geliefert, dann gehen diese Pixel-Daten direkt in die linke
bzw. rechte Hälfte des Bytes des Anzeige-RAMs.
Abbildung
VIII.2
OR-Verknüpfung
von Hintergrund-Farbregister und
Pixel-Daten
zum Erhalten des endgültigen Farbwertes.
Modus
11 entspricht dem oben gezeigten Modus 9, außer daß bei diesem nicht
16 Helligkeiten einer Farbe, sondern 16 Farben in einer Helligkeit angezeigt werden
können. ANTIC liefert dann die Pixel-Daten zur Auswahl der 16 Farbabstufungen.
In BASIC wird das SETCOLOR-Kommando verwendet, um den Helligkeitswert aller Farben
im unteren und den Farbwert im oberen Nybble auf Null zu setzen. Das Format für
dieses Kommando lautet also:
SETCOLOR 4,0,ìHelligkeitî
Die
4 wählt das Hintergrund-Register an. Die Null setzt das obere Nybble auf Null
und der Helligkeitswert kann eine Zahl von 0 bis 15 sein. Wie bei anderen Graphik-Modi
(ausgenommen Modus 9), ist das erste Bit der Helligkeit maßgebend. Daher sind
nur gerade Zahlen und somit 8 Helligkeiten in diesem Modus möglich. Das COLOR-Kommando
wird in diesem Modus benutzt, um einen der verschiedenen Farbwerte (0 bis 15) auszuwählen.
Die Pixel-Daten von ANTIC werden mit dem oberen Nybble des Hinergrund-Registers oderiert,
um den endgültigen Farbwert festzulegen. Ein BASIC-Programm muß daher
mindestens die folgenden Schritte ausführen, um im Modus 11 arbeiten zu können:
GRAPHICS 11
Modus 11 anwählen
SETCOLOR 4,0,12
Hintergrund auf eine Helligkeit
setzen, in diesem Fall sehr hell.
FOR I=0 TO 15
Beispiel für die Benutzung
COLOR I
des COLOR-Be+ehls
PLOT 4,I+10
NEXT I
In
Assembler muß die OS-Schatten-Adresse bei $2C8 des Hintergrund-Farbregisters
benutzt werden, um die Helligkeit in den unteren vier Bit auf einen Wert zwischen
$0 und $F zu setzen. Wird die CIO angesprungen, dann müßen die Pixel-Daten
in ATACHR bei $2FB gespeichert werden. Hierdurch wird ein Farbwert von $0 bis $F
ausgewählt. Liefert der Programmierer eigene Anzeige-Daten, so gehen die Pixel-Daten
direkt in die linke oder rechte Hälfte des Bytes des Anzeige-Rams.
Abbildung
VIII.3
OR-Verknüpfung
von Hintergrund-Farbregister und Pixel-
Daten
zum Erhalten des endgültigen Farbwertes
Modus
10 gestattet die gleichzeitige Benutzung aller 9Farbregister auf dem Playfield. In
jedes Farbregister wird
hierbei
eine Kombination aus Farb- und Helligkeitswert gespeichert. Die in diesem Modus von
ANTIC kommenden Pixel-Daten werden zur Auswahl eines dieser 9 Register verwendet.
In BASIC kann das SETCOLOR-Kommando, wie im BASIC-Referenz Manual beschrieben, zum
Setzen der Hintergrund- und Playfield-Farbregister benutzt werden. Die Farbwerte
dieser Register können aber auch mit Hilfe des POKE-Befehls für die Adressen
708-712 (Speicherstellen der Register) verwendet werden. Zum Setzen der Player/Missile-Farbregister
muß das POKE-Kommando verwendet werden, dessen Speicherstellen zwischen 704
und 707 liegen.
Der
COLOR-Befehl wird zum Auswählen des gewünschten Farbregisters verwendet,
wobei die bedeutungsträchtigen Werte zwischen 0 und 8 inklusive liegen. Da von
ANTIC in diesem Modus 4 Daten-Bits pro Pixel gesendet werden, wäre theoretisch
eine Auswahl von 16 Farbregistern möglich. Ein nicht zulässiger Daten-Wert
von 9 bis 15 resultiert daher in der Anzeige eines Farbregisters mit einem anderen
Stellenwert. Ein BASIC-Programm, das den GTIA-Modus 10 benutzt, muß die folgenden
Anweisungen enthalten:
1)
ein
GRAPHICS 10-Kommando zum Anwählen des Modus;
2)
eine
Reihe von POKE- oder SETCOLOR-Befehlen, um die gewünschten Werte in die Farbregister
zu bringen und
3)
ein
COLOR-Kommando zur Auswahl des gewünschten Farbregister.
In
Assembler werden die Pixel-Daten, wie in Modus 9 und 11, in ATACHR ($2FB) oder direkt
im Bildschirm-RAM gespeichert. In diesem Modus besitzen die Pixel-Daten einen Wert
von 0 bis 8 und wählen somit eines der 9 Farbregister aus.
WERT
DES COLOR- BENUTZTES
FARB- OS-SCHATTEN-
BEFEHLS
REGISTER
ADRESSE
0
D012
2C0
1
D013
2C1
2
D014
2C2
3
D015
2C3
4
D016
2G4
5
D017
2C5
6
D018
2C6
7
D019
2C7
8
D01A
2C8
Abbildung
VIII.4:
Farbregister-Nummern,
-Speicherstellen
und
COLOR-Befehl-‹bersicht
Eine
wichtige Frage betrifft die Kompabilität des GTIAs zum CTIA. Der GTIA-Chip ist
aufwärts voll kompatibel zum CTIA, so daß weiterhin Player/Missile-Graphiken,
Kollisions-Register oder Display-List-Interrupts benutzt werden können. Sämtliche
GTIA-Modi können durch das OS bearbeitet werden, daher laufen alle Utilities
und Graphik-Kommandos, die mit dem CTIA funktionieren, auch auf dem GTIA-Chip.
Durch
den GTIA wird das Anzeigen von noch mehr Farben gleichzeitig möglich. In einer
Bildschirmzeile können 16 Farbänderungen erfolgen, ohne daß der 6502-Prozessor
beeinflußt wird. Durch Display List Interrupts wäre ein absolutes Maximum
von 128 Farbänderungen pro Zeile machbar. Durch den GTIA-Modus können Konturen
und räumliche Tiefe besser dargestellt werden, so daß realistische 3-D
Graphiken möglich werden.
Es
gibt allerdings auch einige Nachteile dieser Graphik-Modi. Diese Betriebsarten sind
Map-Modi, d.h. es kann kein Text auf den Bildschirm gebracht werden, wenn sie aktiviert
sind. Um Zeichen darzustellen, muß eine neue Display-List aufgebaut werden.
Zum Zweiten ist ein Fixel dieser MQdi ein langes horizontales Rechteck (ein Verhältnis
von 4 zu 1 in Länge zu Höhe), daher können Kurven nicht gut gezeichnet
werden. Weiterhin benötigt jedes Pixel 4 Informations-Bits, so daß ein
GTIA-Modus fast 8K-RAM zum Arbeiten verbraucht. Schließlich ist der GTIA nicht
abwärts kompatibel, d.h. Programme, die auf dem GTIA-Computer laufen, nicht
unbedingt auf älteren CTIA-Modellen arbeiten. Graphiken sind zwar erkennbar,
aber natürlich nicht so farbig. Ein Programm besitzt keine Möglichkeit
festzustellen, ob es auf einem CTIA- oder GTIA-Computer läuft.