von Frederik Holst Diesmal widmen wir uns der GTIA, dem Grafikprozessor im ATARI. Einige dieser Register erfüllen beim Lesen eine andere Aufgabe als beim Schreiben, deswegen wird die Lesefunktion mit einem R gekennzeichnet, die Schreibfunktion mit W. 53248 $d000 HPOSP0 (W) Enthält die horizontale Position von Player 0. Die Werte gehen von 0 bis 227, genau wie die Werte des Paddles. Die auf dem Bildschirm sichtbaren Werte gehen jedoch nur von 48 bis 208. Die Ober- und Untergrenzen der sichtbaren Positionen in vertikaler Richtung betragen oben bei einfacher Auflösung 32, bei doppelter 16 und unten 224 bei einfacher und 112 bei doppelter Auflösung. Wichtig bei den Positionsregistern ist, daß diese nur geschrieben und nicht gelesen werden können. (R) M0PF Kollisionsregister Missile 0 mit Playfield. Beim Lesen wird angezeigt, mit welchem Playfield Missile null kollidiert hat. Das Schema sieht folgendermaßen aus: Bit 3 2 1 0 Playfield 3 2 1 0 Dezimal 8 4 2 1 53249 $D001 H0PSP1 (W) Horizontale Position von Player 1. (R) M1PF Kollision von Missile 1 mit Playfield. 53250 $D002 HPOSP2 (W) Horizontale Position von Player 2. (R) M2PF Kollision von Missile 2 mit Playfield. 53251 $D003 HPOSP3 (W) Horizontale Position von Player 3. (R) M3PF Kollision von Missile 3 mit Playfield. 53252 $D004 HPOSM4 (W) Horizontale Position von Missile 0. (R) P0PF Kollision von Player 0 mit Playfield. Es gibt bezüglich der Kollisionsabfrage Probleme in den Grafikstufen neun bis elf. In neun und elf werden Kollisionen nicht oder nicht richtig erkannt und in GR.10 funktioniert die Kollision nur mit den Playfieldregistern, die auch sonst PF-Register sind. Außerdem wird die Hintergrundfarbe durch PCOLR0 (704) bestimmt und nicht durch COLOR4 (712), was die Prioritätenreihenfolge beeinträchtigt. 53253 $D005 HPOSM1 (W) Horizontale Position von Missile 1. (R) P1PF Kollision von Player 1 mit Playfield. 53254 $D006 HPOSM2 (W) Horizontale Position von Missile 2. (R) P2PF Kollision von Player 2 mit Playfield. 53255 $D007 HPOSM3 (W) Horizontale Position von Missile 3. (R) P3PF Kollision von Player 3 mit Playfield. 53256 $D008 SIZEP0 (W) Größe von Player 0. Ein Wert von null oder zwei ergibt die normale Breite, eine eins eine doppelte Breite und eine drei für eine vierfache Breite. Jeder Player kann seine eigene Breite bekommen, unabhängig von den anderen Größen. (R) M0PL Kollision von Missile 0 mit einem Player. Eine Adresse zur Abfrage von Missile-Missile Kollisionen existiert leider nicht, hier muß mit Positionsvariablen gearbeitet werden. 53257 $D009 SIZEP1 (W) Größe von Player 1. (R) M1PL Kollision von Missile 1 mit einem Player. 53258 $D00A SIZEP2 (W) Größe von Player 2. (R) M2PL Kollision von Missile 2 mit einem Player. 53259 $D00B SIZEP3 (W) Größe von Player 3. (R) M3PL Kollision von Missile 3 mit einem Player. 53260 $D00C SIZEM (W) Größe für alle Missiles. Folgende Werte ergeben diese Größen: Bits 1* 2* 4* 7+6: Missile 3 0, 128 64 192 5+4: Missile 2 0, 32 16 48 3+2: Missile 1 0, 8 4 12 1+0: Missile 0 0, 2 1 3 Um also ein Missile 2 mit doppelter Größe zu erhalten, gibt man POKE 53260, 48 ein. (R) Kollision von Player 0 mit einem Player. So, daß war der GTIA erster Teil, nächstes Mal geht's weiter...