von Bernd Dongus Herzlich willkommen im neuen Jahr ! Wie viele habe auch ich Besserung ge- lobt und beim Magazin will ich gleich anfangen. Zunächst will ich meine Artikel mehr von Euren Reaktionen abhängig machen, also helft mir bei der Neugestaltung. Schreibt mir neue Ideen, schickt mir meine von Euch verbesserten Routinen, oder sagt mir einfach das ich mich nicht auf dem Holzweg befinde. Wenn Ihr Euch nicht beteiligt dürft Ihr Euch auch nicht beschweren, da ich, wie in der Schule, bei Schweigen Eurerseits davon ausgehe, alles sei klar und zur Zufriedenheit aller. Meine Adresse : Bernd Dongus Mühlrain 15 7000 Stuttgart 1 Die Scrolling-Erklärung ist scheinbar nicht allzu verständlich gewesen. Wie mir der Redakteur mitteilte gab es einige Klagen. Diese Klagen beruhten hauptsächlich auf Mangel an Wissen, welches ich vorausgesetzte hatte. Tja, hätte ich mir mehr Mühe gegeben und alles erklärt, wäre das nicht passiert. Aus diesem Grund wird ab jetzt erst einmal geforscht, d.h. Grundlagen ge- bildet. Aber auch hierzu muß schon ein gewisses Wissen bei Euch vorhanden sein. Solltet ihr nichts über RAM, ROM, Bits, Bytes, Words, Binär- und Hexadezimalzahlen wissen, solltet ihr Euch dieses aneig- nen. Ohne dieses Wissen ist es ohnehin sinnlos einen Computer in Assembler zu programmieren. (Sollte die aber Bedarf bestehen, werde ich auch das erklären.) Aufbau des XL/XE Der XL/XE hat außer seiner CPU, ein 6502C, noch ein paar 'Hilfs'-Chips. Der POKEY POtentiometer and KEYboard integrated circuit soll diese Abkürzung heißen. Dieser Chip ist für die Sounderzeugung, die Tastatur und zum Teil für die Da- tenübertragung zuständig. Der PIA Dies steht für 'Peripheral Interface Adaptor'. Dieser Chip hat mehrere Aufgaben. Er übernimmt z.B. die Richtungsabfrage der Joystickports, einen Teil der Speicher- verwaltung, ... . Der GTIA Wie der Name, 'Graphic Television Interface Adaptor', schon sagt ist er für die Grafik verantwortlich. Genauer gesagt für die Farbdarstellung. Er besitzt neun Farbregister, mit denen der Benutzer bestimmt welche Farben aus der Palette von 128 Farben benutzt wer- den. Welches Farbregister er darstellen soll sagt ihm der zweite Grafikchip. Der ANTIC Dies ist wohl die Abkürzung für 'AlphaNumeric Television Interface Controller'. Aber auch hier ist, wie bei den vorigen Bausteinen, die Namens- gebung eine reine Vermutung. Dieser Chip hat einen eigenen Befehlssatz, ist also programmierbar. Er besitzt 14 verschiedene, beliebig kombinierbare Modi der Bilddarstellung. Ich habe vor längerer Zeit von einem neuen Baustein, SALLY hieß er glaube ich, gehört, der eine erweiterte Ver- sion des ANTIC gewesen sein soll. Nun ja, beim Gerücht ist es dann auch ge- blieben. Von nun an werden wir uns mit den bei- den letztgenannten Bausteinen befassen. Der ANTIC arbeitet im DMA-Betrieb, d.h. er klaut der CPU Rechenzeit, wenn er auf den Arbeitsspeicher zugreift. Wie bei allen anderen Bausteinen gibt es auch beim ANTIC für viele seiner Regis- ter sog. Schattenregister während des VBI (Vertical Blank Interupt) werden diese aufgefrischt. Der ANTIC erstellt 50 Halbbilder in der Sekunde, diese sind aber nicht wie beim normalen Fern- sehbild gegeneinander verschoben. Durch diesen 'non interlaced scan' soll ein ruhigeres Bild entstehen, d.h. es soll nicht so sehr flimmern. Jedes Halbbild besteht aus 310 Zeilen und jede davon besteht aus 228 Farb- takten. Soviel zum grobe Aufbau eines Bildes. Die Techniker unter euch werden natürlich sagen 'Da fehlt aber Eini- ges'. Doch ich will ja nicht über Bilder, deren Signalaufbau und ahnlich- es reden, sondern über die Program- mierung eines Bildes mit dem ANTIC bzw. GTIA. Es gibt einige wichtige Beschränkungen, die bei nicht Beachtung zu Überrasch- ungen führen können. Stellt man mehr als 239 Bildzeilen dar, kann es zu Verzerrungen od. Bildrollen kommen. Die horizontale Auflösung wird durch die Anzahl von Farbtakten beschränkt. VORSICHT! Farbtakte sind nicht das Gleiche, wie PIXEL. Je nach Grafikmodus entspricht ein Pixel einer bestimmten Menge von Farbtakten. 'GRAPHICS 8' z.B. 1 Farbtakt = 2 PIXEL (Bildpunkte). Bevor ich zum Befehlssatz des ANTIC komme, müssen noch ein paar Sachen erklärt werden: Die Arbeit des ANTIC, wie auch die der anderen Bausteine, läßt sich durch HARDWARE-REGISTER beeinflussen. Da die meisten dieser Register aber beim Lesen andere Werte liefern als man rein- geschrieben hat gibt es sog. SCHATTEN- REGISTER. In ihnen stehen die aktuellen Werte der Nur-Schreib-Register, welche von jedem VBI in die entsprechenden Hardware-Register kopiert werden. Im Folgenden werde ich zuerst das Hardware-Register, dann das Schatten- Register angeben. Nun aber ran an die Register. $d400, $22f =========== Dieses Register beeinflußt den DMA (direkter Speicherzugriff) des ANTIC : Bit 0-1 : Bildbreite. BIT 0 1 --- 0 0 = kein DMA, kein Bild 0 1 = eng, 128 Farbtakte 1 0 = normal, 160 Farbt. 1 1 = breit, 192 Farbt. Bit 2 : 1 = DMA für Missiles an Bit 3 : 1 = DMA für Players an Bit 4 : 1 = einzeilige PM-Auf- lösung 0 = zweizeilige PM-Aufl. Bit 5 : 1 = ANTIC-Programm an (Display-List abarbeiten) Bit 6-7 : - Wert nach dem Booten : $22 $d401, $2f3 =========== In den Textmodi kann man hiermit die Darstellung der Zeichen verändern. Bit 0 : 1 = In den Modi 2 und 3 werden alle Zeichen, deren 7. Bit gesetzt ist unsichtbar. Bit 1 : 1 = s.o., aber die Zeichen werden invers dargestellt. Bit 2 : 1 = Alle Zeichen werden vertikal gespiegelt. Bit 3-7 : - Wert nach dem Booten : 2 $d402/$d403, $230/$231 ====================== Dies ist der Zeiger auf das ANTIC-Pro- gramm, die Display-List. Zuerst das Low-Byte, dann das High-Byte. Wert nach dem Booten : mit BASIC : $9c20 ohne BASIC : $bc20 $d404 ===== Für dieses Register gibt es kein Schat- tenregister, da das Betriebssystem kein horizontales Scrolling unterstützt. Es wurde zwar schon in aller epischen Breite beschrieben, doch hier noch ein- mal eine Kurzfassung. Der Wert, der hier abgelegt wird, be- stimmt, um wieviele Farbtakte der, durch das ANTIC-Programm gekennzeich- nete, Teil des Bildes nach rechts ver- schoben wird. $d405 ===== Wie $d404 ist auch dieses Register ein Write-Only-Register und für die Fein- verschiebung verantwortlich. Aber hier wird das Bild nicht nach rechts, son- dern nach oben verschoben. $d406 ===== Hier verlässt mich die Weisheit und mein schlaues Buch, sollte ich aber in nächster Zeit herausbekomen was dieses Register bewirkt, werde ich es in der Assembler-Ecke verkünden. $d407 ===== In diesem Register legt man die Spei- cherseite für den Anfang der PM-Grafik- Daten ab. $d408 ===== Siehe $d406. $d409, $2f4 ========== In diesem Register muß die Speicher- seite abgelegt werden, ab der die Zeichensatz-Daten anfangen. $d40a ===== Durch Schreiben in dieses Register bis zum Beginn der nächsten Horizontal- synchronisation angehalten. Also etwa zu Beginn der nächsten Bildzeile. Bis hierher waren alle Register nur zu beschreiben, ein Auslesen ergibt meist $ff. $d40b ===== Diese Register zählt der ANTIC bei jeder zweiten Bildzeile um eins hoch, d.h. hier kann man die gerade erzeugte Bildzeile geteilt durch zwei auslesen. $d40c, $234 =========== Hier ist die horizontale Position des Light-Pen enthalten. $d40d, $235 =========== Vertikalposition des Light-Pen. Sie ist aufgebaut, wie der Wert in $d40b. (Bildzeile/2) $d40e ===== Mit diesem Register ist es möglich die sog. ANTIC-Programmunterbrechung(DLI) und die Vertikalsynchronisation (VBI) ein- bzw. auszuschalten. Die Bits 0-5 haben keinerlei Auswirkung. Bit 6 : 1 = VBI an. Bit 7 : 1 = DLI an. Wird ein Bit gesetzt, muß auch gewährleistet sein, daß die jeweiligen Vektoren auf eine vernünftige Routine zeigen !!! Wert nach dem Booten : $40 Der Vektor für den VBI steht in den ROM-Adressen $fffa und $fffb. Die Rou- tine des Betriebssystems, die hierdurch angesprungen wird, springt dann anfangs wiederum zu der Adresse, die in $222, $223 steht, dies ist der 'unmittelbare VBI'. Wird dieser nicht verbogen frischt das Betriebssystem die Schat- tenregister auf, zählt die Echtzeituhr hoch, etc. Zum Schluß dieser Betriebs- systemroutine hat der Programmierer noch einmal die Möglichkeit in den VBI einzugreichen, über den Vektor $224,$225. Der Vektor für das DLI-Programm ist $200,$201. $d40f ===== Dieses Register enthält den Wert, den man in $d40e geschrieben hat. Hier hat Bit 5 aber noch eine zusätzliche Funktion. Ist es gesetzt, fordert der 'RNMI'-Eingang eine Unterbrechung an. Der 'RNMI'-Eingang ist der Hardware- Reset-Schalter bei der alten 400/ 800-Serie. ER IST NICHT GLEICH DEM RESET-TASTER DER XL/XE-SERIE !!! Schreibt man irgendeinen Wert in diese Register, werden die Bits (in $d40f) wieder zurückgesetzt. Puh !!! Jetzt raucht mir, wie Euch vermutlich auch, ganz schön der Kopf. Ich glaube ich habe soeben den längsten Artikel geschrieben, der bis heute im USER-MAG erschienen ist. Statistik : 1392 Worte 9592 Bytes. (Redaktion: Stimmt leider, leider nicht so ganz. Den bisher längsten Artikel hat Harald Schönfeld im Rahmen des QUICK-Kurses geschrieben. Sorry ! Es ist aber auf jeden Fall die längste As- semblerecke ! Gruß nach Stuttgart)