von Carsten Strotmann Der ATARI besitzt zwei sehr gute Grafik-Chips, nämlich den ANTIC und den GTIA. Der ANTIC ist generell für den Bildschirmaufbau verantwortlich, d.h. für die Grafik- und Textmodi und die Zeichensätze, sowie für Grafikinter- rupts (DLI's). Der zweite, der GTIA, kümmert sich um die Darstellung der Grafik auf dem Bildschirm. Bei der Darstellung übernimmt er die Daten vom ANTIC, mischt die Farben dazu und gibt sie an den Monitor aus. Bei dieser Bearbeitung kann der GTIA noch die Daten für Player-Missile-Grafik in die Bildschirmdaten mischen. Man muß sich die PM-Grafik als eine spezielle Grafik vorstellen, die sozusagen unabhängig über dem normalen Bildschirmhintergrund aufgebaut wird. Aus diesem Grunde kann die PM Grafik über den Hintergrund be- wegt werden, ohne daß der Hintergrund zerstört wird. Diese elegante Art der Grafik besitzt neben dem XL/XE nur der AMIGA und teure Spielautomaten ! Doch nun ans Eingemachte: Leider gibt es im Turbo Basic keine speziellen Befehle für PM-Grafik, daher muß sie maschinennah programmiert wer- den. Der Computer will zuerst auf die PM-Grafik vorbereitet werden. Zur Spei- cherung der Grafikdaten brauchen wir wie beim Zeichensatz einen reservierten Speicherraum von 2KByte. Dies' errei- chen wir mit POKE 106,PEEK(106)-8 (RAMTOP). Nun sind am oberen Ende des Basicspeichers ab Adresse PEEK(106)*256 2KB (8*256 Bytes) Speicher reserviert. Aus diesem Speicher kann der GTIA-Chip nun die Grafikdaten nehmen, wir müssen ihm nur zeigen, wo dieser Speicherplatz liegt. Der GTIA erkennt diesen Spei- cherplatz an der Speicherstelle CHBASE (54279/$D409). Also POKE 54279,PEEK (106). Der ANTIC Chip will auch von der PM-Grafik wissen, über die Speicher- stelle SDMCTL (559/$22F). Hier muß für die PM Darstellung BIT 2 gesetzt wer- den, BIT 3 für die Player und BIT 4 für eine feine, einzeilige Auflösung der PM-Grafik. Am GTIA muß dann noch BIT 0+1 in GRACTL (53277/$D01D) gesetzt werden. Nun kann der ATARI die PM-Gra- fik darstellen. Den Programmcode zu der beschriebenen PM-Vorbereitung befindet sich im Listing PM_INIT.TUR. Diese Rou- tine erledigt das Einrichten der PM- Grafik. Die Bewegung: ------------- Das Bewegen der Player in horizontaler Richtung, d.h. von rechts nach links etc. ist recht einfach. Hierfür stellt der GTIA- Chip das Register HPOS zur Verfügung. Dieses Register gibt es jeweils für jeden Player ($D000-$D003/ 53248-53251) und jede Missile ($D004- $D007/53252-53255). Durch das Schreiben von Werten zwischen 0-255 in dieses Register wird das Objekt auf dem Bild- schirm positioniert. Hierbei ist zu beachten, daß die rechten und linken äußeren Positionen nicht auf den Bild- schirm zu sehen sind. Der sichtbare Bereich reicht ca. von 45 bis ca. 220. Dies kann je nach Bildschirm und Play- erbreite variieren. Daher ist hier aus- probieren angesagt. Die Bewegung in vertikaler Richtung ist ein wenig kom- plizierter. Jedem Player steht im Speicher ein 256 ($100) Bytes großer Speicherbereich offen. Die Position der Speicherbereiche ist folgende: Player 0:PMBASE+1024 Player 1:PMBASE+1280 PLAYER 2:PMBASE+1536 PLAYER 3:PMBASE+1792 Zur horizontalen Bewegung müssen die Playerdaten immer wieder an die neue Position in den Speicherbereich des Players geschrieben werden. Damit dies schnell genug geschied, muß man den MOVE Befehl verwenden. Am Anfang des Programms bringen wir die Playerdaten in eine Array-Variable, z. B. aus Data- zeilen. Dieses Array wird dann immer an die vertikale Position des Players im Speicherbereich 'gemoved'. Am besten ihr schaut euch die Technik in dem Pro- gramm PM_MOVE.TUR an. Kollisionen: Der ATARI besitzt im GTIA Chip für die Player Missile Grafik sogenannte Kolli- sionsregister, mit denen Kollisionen zwischen den PM-Objekten oder mit dem Hintergrund registriert werden können. Diese Registerabfragen lassen sich aber in Turbo-Basic meist nicht schnell ge- nug durchführen. Kollisionen mit dem (Zeichensatz-)Hintergrund sollten daher am Bildschirm(-speicher) überprüft werden. Animation: ---------- Die Animation von PM-Objekten wird durch den 'Daumenkinoeffekt' erreicht. Dazu erstellt man für jede Phase ein ARRAY (PHASE1$, PHASE2$, ...) Diese Phasen werden dann bei einer Bewegung nacheinander schnell in den Player Speicherbereich kopiert. Auf dem Bild- schirm entsteht dann einen fließende Animation der Figuren. Ich hoffe, euch mit meinen Ausführungen die Player-Missile Grafik ein wenig näher gebracht zu haben. Zum vollen Verständnis solltet ihr unbedigt einen Blick in die Beispiellistings werfen und versuchen, diese zu verstehen. Die Beispiele sind wie immer voll durchdo- kumentiert. In der nächsten Folge geht's dann an die Praxis: Ein Bei- spiel-Spiel wird programmiert.