Sollte es tatsächlich noch Leser geben, die mit dem Begriff Player-Missile-Grafik noch nichts anfangen können? Das ist eigentlich kaum zu glauben. Aber wissen Sie auch, daß man damit noch viel mehr anfangen kann, als gemeinhin bekannt ist? So lassen sich z.B. vier Player in je sieben verschiedenen Farben darstellen. Auch ist es möglich, Figuren abzubilden, ohne den regulären PM-Speicher zu benutzen., Wenn dies für Sie neu ist, sollten Sie jetzt unbedingt weiterlesen!
Normalerweise gehen Sie beim Einschalten der PM-Grafik so vor: Ein Speicherbereich von 1 bzw. 2 KByte wird reserviert und per Programm gelöscht. über das Register PMBASE erfolgt die Mitteilung an den ANTIC-Chip, wo sich dieser Bereich im Speicher befindet. Nun wird die DMA ein- (Register SDMCTL) und die Darstellung der Player mit dem GTIA-Register GRACTL zugeschaltet. Die vertikale Position eines Objektes ist davon abhängig, an welcher Stelle sein Bit-Muster in den PM-Speicher geschrieben wird. Dagegen ist die horizontale Lage nur durch das zugehörige HPOS-Register festgelegt.
Die PM-Grafik ist ein Produkt der Zusammenarbeit zweier Chips im Rechner: Der eine, ANTIC, hat nur die Aufgabe, die für die Bildaufbereitung nötigen Daten aus dem Speicher zu holen. Der zweite, GTIA, übernimmt diese Daten und erzeugt daraus das Videosignal.
Es geht aber auch anders. So ist es möglich, PM-Grafik nur mit Hilfe von GTIA zu erstellen, ganz ohne Zutun der ANTIC-DMA. Es gibt nämlich fünf Register, mit denen man die Form jedes Players und der Missiles-festlegen kann. GTIA erzeugt ,diese Form (genauer gesagt, das Bit-Muster) so lange am Bildschirm, bis ein neues Muster in dieses Register geschrieben wird. Die horizontale Position, die Farbe und die Breite des Musters lassen sich durch die bekannten Register verändern.
Wenn man daher einmal einen Wert, sagen wir $FF, in das Formregister schreibt, wird ein farbiger Balken erzeugt, der vom oberen bis zum unteren Rand des Bildschirms reicht. Dieser Balken läßt sich mit den HPOSRegistern sehr leicht 'verschieben und deshalb auch in Basic effektvoll einsetzen. In Listing 1 finden alle vier Player auf diese Art Verwendung. Sie werden auf vierfache Breite geschaltet und mittels des Prioritätsregisters "vor" den Bildschirm gelegt. Nun folgt der Ausdruck eines Textes, der wegen der überdeckung noch nicht sichtbar ist. Fährt man jetzt die Player nach links und rechts weg, erhält man den Effekt eines sich öffnenden Vorhangs. Das könnte sich bestimmt gut für den Titelvorspann Ihres nächsten Programms eignen.
Gehen wir noch einen Schritt weiter. Wenn man die ANTIC-DMA benutzt, kommt die Form der Player zustande, indem pro Bildschirmzeile und pro Player ein Byte aus dem PM-Speicher gelesen und (natürlich auf internem Weg) in das Formregister von GTIA geschrieben wird. Diese Aufgabe kann aber auch der 6502 übernehmen! Wenn' man die Player durch "Handarbeit" des 6502 erzeugt, ist es zusätzlich möglich, ihre Farbe oder Breite für jede Zeile neu festzulegen. Im Klartext heißt das, daß man mit dieser Technik vier mehrfarbige Player erstellen kann. Im Programm nach Listing 2 werden vier siebenfarbige erzeugt und in Bewegung gehalten. Unmöglich? Schauen Sie es sich selbst an.
Timing Bevor Sie jedoch in zu großen Jubel ausbrechen, sollten Sie sich vor Augen halten, mit welchen Nachteilen diese Farbenpracht erkauft ist. Der 6502 wurde zum Sklaven der Bilderzeugung; er läßt sich nur noch in ca. 5000 bis 6000 Maschinenzyklen zum Rechnen benutzen. Die Player können nicht mehr frei über den Bildschirm bewegt werden, da z.B. die Farb- und Forminformationen für Player 4 erst ab etwa der horizontalen Mitte des Bildschirms zur Verfügung stehen.
Das ist einfach eine Begrenzung durch die maximale Geschwindigkeit des 6502. In der Zeit, die er braucht, um vier Form- und vier Farbregister zu ändern, ist der Elektronenstrahl schon in der Mitte des Bildschirms angelangt. Außerdem - und das ist das Schlimmste - darf die Hintergrund-DMA nicht mehr verwendet werden, da sie das ganze Timing durcheinanderbringt.
Trotz dieser enormen Beschränkungen ist es interessant, sich einmal mit diesen Techniken, in der Fachsprache Kernel genannt, auseinanderzusetzen. Der Trick dabei ist, daß der 6502 mit Hilfe des Registers VCOUNT feststellen kann, welche Bildzeile gerade erzeugt wird. Er kann diese Zahl mit den gewünschten vertikalen Positionen (VPOS -in Listing 2) der Player vergleichen und daraus ermitteln, zu welchen Zeitpunkten er Form und Farbe in die Hardware-Register schreiben muß. Die Werte für Form und Farbe werden zweckmäßigerweise für jeden Player in kurzen Tabellen festgehalten (STAB und CTAB in Listing 1).
Wie schon erwähnt; ist die ganze Sache ein Zeitproblem. Der Vergleich der Vertikalpositionen mit VCOUNT und das Laden der Form- und Farbwerte läßt sich schon nicht mehr in einer Bildschirmzeile bewältigen. Daher arbeitet das Programm auch nur mit zweizeiliger Auflösung. Jeweils in der ersten Zeile werden die Vergleiche von VCOUNT mit den Vertikalpositionen ausgeführt und die entsprechenden Werte aus den Tabellen geladen. Nach einer horizontalen Synchronisation durch einen Schreibbefehl auf WSYNC folgt die zweite Phase, in der die zuvor ermittelten Werte möglichst schnell in die HardwareRegister übertragen werden. Im Beispiel geschieht dies, indem die erste Phase die festgestellten Werte in den Operanden der LDA #-Befehle der zweiten Phase einträgt (selbstverändernder Code). Der ganze Vorgang läuft in einer Schleife ab, die im Vertical-Blank-Interrupt gestartet -ünd beim Erreichen eines bestimmten VCOUNT-Werts (im Beispiel 120) beendet wird.
Sie sehen, die Kernel-Programmiertechnik hat ihre engen Grenzen und ist auch nicht ganz einfach zu beherrschen. Auf der anderen Seite läßt sich damit aber Erstaunliches aus dem Atari herausholen. Es wäre sogar denkbar, das Horizontalregister eines Players innerhalb einer Bildzeile zu verändern und diesen somit zweimal in einer Zeile (!) zu verwenden. Solche sogenannten horizontalen Kernels bedeuten allerdings ein enormes Timing-Problem und sind nur in den seltensten Fällen ratsam.
Sinnvoll dagegen wäre z.B. eine Kombination von ANTIC-DMA mit der Kernel-Idee, indem man die DMA zur Erzeugung der Form, den Kernel dagegen nur zum Verändern der Farben einsetzt. Warum versuchen Sie es nicht einmal?