von Bernd Dongus In der letzten Ausgabe wurden die Re- gister des ANTIC erklärt. Heute sind die des GTIA dran. Die Hauptaufgabe dieses Bausteins ist die Umsetzung der ANTIC-Daten in eine vollständiges Fernsehbild. Eine weitere Aufgabe ist die Erzeugung der PLAYER- MISSILE-Grafik. Er überwacht zusatzlich die Joystick-Ports des XL und steuert den Konsolen-Lautsprecher. Für alle diese Aufgaben existieren Re- gister, welche die Arbeit des GTIA be- einflussen oder die Ergebnisse seiner Arbeit enthalten. Diese Register sollen nun aufgelistet und kurz erklärt werden. (Wer sich für genauere Angaben interessiert, sollte im ATARI XL/XE INTERN nachschauen.) $d000 - $d003 ============= In diese vier Register werden die hori- zontalen Positionen der PLAYER null bis drei eingetragen (für jeden PLAYER ein Register). Wobei Werte unter $20 und Werte über $d8 außerhalb des sichtbaren Bildes liegen dürften. (von Fernseher zu Fernseher verschieden) Beim Lesen dieser Register erhält man Nummer des Farbregisters, mit dem der MISSILE (0-3) zusammengestoßen ist. $d004 - $d007 ============= Siehe oben, nur das die Rollen vertau- scht sind. Die Positionen der MISSILES werden eingetragen und die Kollisionen der PLAYER können gelesen werden. $d008 - $d00b ============= Werden diese Register gelesen, erhält man die Nummer des PLAYERs, mit dem das MISSILE (0-3) zusammengekracht ist. Bei einem Schreibzugriff aif diese Register sind nur die Bits null und eins relevant. Sie bestimmen die Breite der PLAYER null bis drei. Es gibt also nur vier verschiedene Werte. Null und vier bedeuten normale Größe (ein PLAYER ist acht Farbtakte breit). Eins erzeugt eine verdoppelte Darstel- lung (16 Farbtakte) und drei eine vervierfachte (32 Farbtakte). $d00c ===== Für die Breite eines MISSILES stehen in diesem Register jeweils zwei Bit zur Verfügung. Bit 0-1 : MISSILE 0, Bit 2-3 :, ... . Die unterschiedlichen Kombinationen haben für den jeweiligen MISSILE die- selbe Wirkung wie bei den PLAYER. Nur das die vier Byte zu einem zusammenge- fügt wurden. $d00d - $d010 ============= Diese Register sind nur etwas für die Hardcore-Freaks, denn sie können auch umgangen werden. Die hier vom Program- mierer eingetragene Bitkombination bringt den GTIA, Bei eingeschalteter PM-Grafik (kein DMA-Zugriff), dazu die gesetzten Bits als PLAYERpunkte darzu- stellen. Diese Register werden aber normaler- weise nicht angesprochen, da der ANTIC die Möglichkeit bietet diese Daten im DMA-Betrieb aus dem Speicher zu holen und dem GTIA zuzuweisen. $d011 ===== Wie oben, nur für die MISSILES. Ab hier kommt es zu Überlappungen, da ich meinen Artikel nicht strikt nach Speicheraufbau, sondern nach Funktions- gruppen, aufgebaut habe. $d00c - $d00f ============= Ein Lesenzugriff offenbart die Nummer des PLAYERs mit dem der zu dem Register gehörende PLAYER kollidiert ist. Bsp.: $d00d enthält den Wert 3. Dies würde heißen, daß PLAYER 2 mit PLAYER 3 einen Zusammenstoß hat. $d010 - $d013 / $284 - $287 =========================== Diese Gruppe enthält die Stati der Trigger-Eingänge (Feuerknöpfe). Für je- den Eingang steht ein Register zur Ver- fügung. Eine "1" signalisiert einen NICHT gedrückten Feuerknopf. Eine "0" einen gedrückten. Die XL/XE-Serie hat aber nur noch zwei Joystick-Ports. Für die 'neuen' hat das vierte Register keine Funktion und mit dem Dritten wird der Modulschacht über- prüft. "1" weist dabei auf ein einge- stecktes Modul hin. $d012 - $d015 / $2c0 - $2c3 =========================== und $d016 - $d01a / $2c4 - $2c8 =========================== Die von ANTIC übertragenen Grafiken müssen noch mit Farbdaten versehen wer- den. Diese Speicherstellen sind die Farbregister. Ihr Inhalt wird in eine Farbe umgewandelt, wobei, je nach Auf- lösung, manche Register ignoriert werden. Bit 0 eines jeden dieser Register hat keine Bedeutung. Die Bits 1 bis 3 be- stimmen die Helligkeit der, durch die- ses Register beschriebenen, Farbe. Je höher der Wert dieser drei Bits ist, desto heller wird die Farbe dargestel- lt. Die restlichen vier Bits bestimmen die Frabe nach folgender Tabelle: BIT : 7 6 5 4 0 0 0 0 grau 0 0 0 1 gold 0 0 1 0 orange 0 0 1 1 rotorange 0 1 0 0 rosa 0 1 0 1 purpur 0 1 1 0 violett 0 1 1 1 blau 1 0 0 0 blau 2 1 0 0 1 hellblau 1 0 1 0 türkis 1 0 1 1 blaugrün 1 1 0 0 grün 1 1 0 1 gelbgrün 1 1 1 0 grünor. 1 1 1 1 gold bzw. hellorange Der Bereich $d012-$d015 kontrolliert die Farbe der PLAYER-MISSILES. $d016-$d01a legt die Farbwerte für den Hintergrund ($d01a) und für die vier 'Malfarben' fest. $d014 ===== Hiermit läßt sich abfragen, ob ein NTSC- oder ein PAL-Fernseher angeschlossen ist. Bei PAL-gräten sind die Bits 1 bis 3 '0'. $d01b ===== BASIC-Programmierer kennen die Modi 9, 10 und 11. Diese Modi werden vom ANTIC behandelt, wie der Modus 8. Die verän- derte Darstellung wird durch den GTIA erzeugt. Mit dem Register $d01b teilt man dem Chip mit, wie er die ANTIC-Da- ten interpretieren soll. Für die ver- schiedene 'Betriebsarten' sind die Bits 6 und 7 verantwortlich. Die restlichen Bits (0 bis 5) werden für die PLAYER- MISSILE-Grafik verwendet, da es hier Prioritäten u.Ä. gesetzt werden müssen. Aber dazu an anderer Stelle mehr. Im Normalfall sind die Bits 6 und 7 null. Sind beide gesetzt nimmt der GTIA di Helligkeit aus $d01a und die Farbe entsteht aus jeweils vier Bits des Bildspeichers. Dies entspräche GRAPHICS 11 in BASIC. Ist nur Bit 6 eins, so nimmt er die in $d01a stehende Farbe und die Helligkeit wird durch vier Bits des Bildspeichers erzeugt. Hier käme der BASIC-Modus 9 zum Vergleich in Frage. Und last, but not least, BASIC-Modus 10 wird durch Setzen von Bit ? , ja Bit 7, hervorgerufen. Mit diesen zwei Bits läßt sich unter anderem der 256-Farben-Modus herbeizau- bern. Wie ? Abwarten. Irgendwann werd' ich's erklären. Die Bits 0 bis 3 legen die Priorität der PM-Grafik fest. In der folgenden Tabelle fällt die Pri- orität von links nach rechts, d.h. die Grafik ganz links überlagert bei Über- schneidungen alle anderen. Der Hintergrund wird natürlich von allen überlagert. PM = PLAYER-MISSILE PF = SPIELFELDFARBE Bit 0 gesetzt: PM0, PM1, PM2, PM3, PF0, PF1, PF2, PF3/P5 Bit 1 gesetzt: PM0, PM1, PF0, PF1, PF2, PF3/P5, PM2, PM3 Bit 2 gesetzt: PF0, PF1, PF2, PF3/P5, PM0, PM1, PM2, PM3 Bit 3 gesetzt: PF0, PF1, PM0, PM1, PM2, PM3, PF2, PF3/P5 Ja ihr lest richtig, P5. Es gibt FÜNF PLAYER, aber nur vier MISSILES. Da steckt natürlich ein Trick dahinter. Für dieses Wunder ist Bit 4 dieses Re- gisters verantwortlich. Ist es gesetzt, haben alle Geschosse die Farbe von $d019. Dadurch lassen die vier MISSILES zu einem PLAYER zusammenfassen. Jetzt fehlt nur noch Bit 5. Durch Setz- en dieses Bits werden die PLAYER 0 und eins, sowie 2 und 3, bei Überlappungen miteinander verknüpft. Eine neue Farbe entsteht. So lassen sich 'mehrfarbige' PLAYER erzeugen. ACHTUNG ! Setzt man mehr als eines der Priori- täts-Bits, erscheinen die Überlappungszonen schwarz. $d01c ===== Dieses Register hat nur dann eine Wir- kung, wenn die zweizeilige PM-Grafik eingestellt ist (mehr dazu beim näch- sten Register). Durch Setzen der jeweiligen Bits, wird die PM-Grafik um eine Zeile verschoben. Dies macht man um auch eine zweizeilige PM-Grafik auf die Zeile genau zu posi- tionieren. Bit 0 MISSILE 0 Bit 1 MISSILE 1 Bit 2 MISSILE 2 Bit 3 MISSILE 3 Bit 4 PLAYER 0 Bit 5 PLAYER 1 Bit 6 PLAYER 2 Bit 7 PLAYER 3 $d01d ===== Grob gesagt werden hiermit die Feuer- knöpfe und die PM-Grafik gesteuert. Bit 0 : Bei '1' ist die Übertragung der der MISSLE-Daten auf den Bildschirm. Bit 1 : Mit '1' werden die PLAYER 'angeschaltet'. Bit 2 : Ist dieses Bit gesetzt, werden die Feuerknopfeingänge beim Loslassen NICHT auf '0' gesetzt. Die restlichen Bits haben keine Funktionen. $d01e ===== Da die Kollisionsregister (z.B.$d000) ihre Werte beibehalten müssen diese gelöscht werden. Sonst werden keine neuen Daten eingetragen. Diese Löschen geschieht durch Schreiben irgendeines Wertes in dieses Register. $d01f ===== Der GTIA ist auch für die DREI Konso- lentaster zuständig. Es befinden sich zwar FÜNF Taster auf der Konsole, aber die HELP-Taste wird über den POKEY mit einem normalen Scan-Code abgefragt und der RESET-Taster löst direkt den Reset des 6502 aus. Für die restlichen drei Taster exis- tiert jeweils ein Bit. Bit 0 : START Bit 1 : SELECT Bit 2 : OPTION Ein NICHT gesetztes Bit zeigt den Druck auf den jeweiligen Taster an. Durch Setzten eines der Bits wird der entsprechende Taster gesperrt. Bit 3 steuert den 'Tastatur-Klick'. Löscht man dieses Bit löst man den 'Klick' aus. Es sollte nur kurzfristig auf '0' stehen. Zum Schluß noch ein Wort in eigener Sache : Euch ist hoffentlich klar, daß meine Beschreibungen oberflächlich sind. Wollt Ihr Genaueres wissen, müßt Ihr euch in dem Buch ATARI XL/XE INTERN kundig machen. Am Besten Ihr macht Euch einen Ausdruck und benutzt ihn als Nachschlagewerk.