\ Der ANTIC Grafikchip - Familie Eichler Website
Drucken

Der ANTIC Grafikchip

Hauptkategorie: 8-Bitter
Erstellt: 12 November 2011
Zugriffe: 26058
            *** ATARI INTERN                                   ANTIC ***













                                 D E R    A N T I C
                                 ------------------














            1) ALLGEMEINES

            2) DIE KONTROLL- UND LIGHTPENREGISTER

            3) DER DMA FÜR DIE PLAYER-MISSILE-GRAFIK

            4) DER BEFEHLSSATZ DES ANTIC UND DAS ANTIC-PROGRAMM

            5) DIE BILDGRAFIK-MODI

            6) DIE SCHRIFTGRAFIK-MODI

            7) SCROLLING (VERSCHIEBEN DES BILDES)



                                                                     73

            *** ATARI INTERN                                   ANTIC ***


            Der ANTIC ist kein Standard-IC, sondern ein Spezialbaustein.
            "ANTIC" steht dabei wohl für "Alphanumeric Television Inter-
            face  Controller".  Beim ANTIC handelt es sich um einen kun-
            denspezifisch hergestellten Mikroprozessor,  der als Subpro-
            zessor für den Bildaufbau zuständig ist.  Der ANTIC kann der
            CPU  Arbeitszyklen "stehlen" (man spricht hier wirklich  von
            "Cycle-Stealing"),  das  heißt,  daß er die CPU  immer  dann
            anhält,  wenn er Daten aus dem Arbeitsspeicher benötigt. Der
            ANTIC  liest die Daten also im direkten Speicherzugriff,  im
            DMA (Direct Memory Access).  Der ANTIC kann die gesamten  64
            KByte  Arbeitsspeicher adressieren und muß nicht  erst,  wie
            andere  Grafikbausteine  in  anderen  Mikrocomputersystemen,
            durch Register auf bestimmte Speicherbereiche gelegt werden.

            Der ANTIC besitzt einen eigenen Befehlssatz, mit dem man ihn
            dazu  bringen kann,  einzelne oder auch gleich mehrere Bild-
            zeilen auf dem Bildschirm darzustellen.  Durch den ANTIC ist
            es möglich,  verschiedene Grafikmodi beliebig auf dem  Bild-
            schirm zu kombinieren. Man kann also Schrift- und Grafikmodi
            gleichzeitig  verwenden.  Das ist bislang mit keinem anderen
            Mikrocomputer dieser Preisklasse mit der gleichen Flexibili-
            tät möglich.

            Der ANTIC ist aber nicht alleine für die Bildausgabe zustän-
            dig. Er erstellt nicht selbst das fertige Bildsignal mit den
            Farbinformationen,  sondern überträgt die Informationen  zur
            Bilderstellung,  die  er  aufgrund von Befehlen  aus  seinem
            Programm (dem ANTIC-Programm) aus dem Arbeitsspeicher geholt
            hat,  zu einem weiteren Baustein, dem GTIA. Der GTIA fügt zu
            den  Bildinformationen,  die  der ANTIC ihm  überträgt,  die
            Farbinformationen hinzu.

            Außerdem  ist  der GTIA für die  sogenannte  Player-Missile-
            Grafik,  das  heißt für die Darstellung beweglicher  Objekte
            auf dem Bildschirm,  zuständig.  Der ANTIC kann den GTIA bei
            der Erstellung der Player-Missile-Grafik unterstützen, indem
            er dem GTIA in jeder Bildzeile die Daten zur Erstellung  der
            Player-Missile-Grafik  aus  dem Arbeitsspeicher holt und  in
            GTIA-Register überträgt.




            74

            *** ATARI INTERN                                   ANTIC ***


            Für viele der Register des ANTICs sind sogenannte  Schatten-
            register  vorhanden.  Während  des  Vertikal-Leertaktes  des
            Bildes   werden  die  Register- und  Schattenregisterinhalte
            aufeinander abgestimmt.  Weitere Ausführungen dazu  befinden
            sich in den Kapiteln über den GTIA und das Betriebssystem.


            Das  folgende Schaubild soll die Herkunft  und  Verarbeitung
            der Bilddaten verdeutlichen:

Der ANTIC

                                                                     75

            *** ATARI INTERN                                   ANTIC ***


            Der ANTIC erstellt 50 Halbbilder pro Sekunde. Die Halbbilder
            sind  aber nicht wie beim normalen Fernsehbild gegeneinander
            verschoben.  Auf diese Art erhält man ein ruhiger  stehendes
            Bild. Man spricht hier auch vom "non interlaced Scan". Jedes
            dieser Halbbilder besteht aus 310 Bildzeilen. Jede Bildzeile
            besteht  wiederum  aus  228  sogenannten  Farbtakten  (engl.
            "Color-Clocks").  Ein  solcher  Farbtakt  hat  ungefähr  die
            Breite  von zwei Bildzeilen-Höhen.  In einer Sekunde gibt es
            also ca. 3,5 Mio. Farbtakte (50 * 310 * 228). Die CPU arbei-
            tet mit einer Taktfrequenz von etwa 1,77 MHz. Diese Frequenz
            wurde  gewählt,  damit  auf einen Maschinentakt  genau  zwei
            Farbtakte kommen.

            Im  Grafikmodus mit der höchsten Auflösung kann man einzelne
            kleine Felder,  sogenannte "PIXEL",  mit einer  horizontalen
            Auflösung  von  einem halben Farbtakt und  einer  vertikalen
            Auflösung von einer Bilzeile ansprechen.

            Da  Fernseher  normalerweise nicht den  wirklichen  Bildrand
            zeigen,   erzeugt  das  Betriebssystem  nach  der  Vertikal-
            Synchronisation  24 Leerzeilen bevor es mit dem eigentlichen
            Bild  beginnt.  Dadurch wird sichergestellt,  daß  auch  das
            ganze  Bild  auf  dem Bildschirm sichtbar  ist.  Sollte  der
            Bildrand trotzdem nicht auf den Bildschirm gelangen,  so ist
            der sogenannte "Overscan" des Bildschirms oder Fernsehers zu
            groß.

            Die  Größe  des eigentlichen Bildfeldes auf  dem  Bildschirm
            läßt  sich  vertikal  durch die Anzahl und  Art  der  ANTIC-
            Befehle im ANTIC-Programm bestimmen.

            Die  Breite des eigentlichen Bildfeldes läßt sich  auf  drei
            verschiedene  Werte  bringen.  Ein enges Bild hat 128  Farb-
            takte,  das  normale Bild (das auch vom  Betriebssystem  er-
            stellt  wird) hat 160 Farbtakte und das breite Bild hat  192
            Farbtakte. Somit ergeben sich maximale horizontale Auflösun-
            gen von 256, 320 und 384 Pixeln (Bildpunkten).

            Das   Betriebssystem   erstellt  grundsätzlich  ein   ANTIC-
            Programm,  das  24  Leerzeilen am oberen  Bildrand  und  192
            eigentliche  Bildzeilen  hat.  Man sollte grundsätzlich  nie


            76

            *** ATARI INTERN                                   ANTIC ***


            mehr Zeilen als das Betriebssystem abbilden.  Wenn man  ver-
            sucht,  mehr  als 24 Leer- und 192 Bildzeilen auf den  Bild-
            schirm zu bringen,  ist es möglich,  daß das Bild anfängt zu
            rollen.










            ********************************************
            *                                          *
            *                                          *
            *   DIE KONTROLL- UND LIGHTPENREGISTER     *
            *   ----------------------------------     *
            *                                          *
            ********************************************



            Das Register (bzw. das Schattenregister)

            DMACNTL   54272     $d400
            DMACNTL@    559      $22f

            kontrolliert  den direkten Speicherzugriff des ANTIC.  Dabei
            haben die einzelnen Bits des Registers folgende Funktionen:

            Bit 0-1 :      Größe des Bildschirms
            Bit  2  :      Wenn dieses Bit auf "1"  steht,  ist der  DMA
                           für die Geschosse eingeschaltet.
            Bit  3  :      Wenn  dieses Bit auf "1" steht,  ist der  DMA
                           für die Spieler eingeschaltet.
            Bit  4  :      Wenn dieses Bit auf "1" steht, ist einzeilige
                           Auflösung  für Spieler und Geschosse gewählt,
                           ist das Bit dagegen "0",  werden Spieler  und
                           Geschosse zweizeilig aufgelöst dargestellt.


                                                                     77

            *** ATARI INTERN                                   ANTIC ***


            Bit  5  :      Wenn  dieses Bit auf "1" steht,  ist der  DMA
                           für das Lesen des ANTIC-Programms eingeschal-
                           tet.  Steht  das Bit auf "0",  erscheint kein
                           Bild auf dem Monitor.
            Bit 6-7 :      unbenutzt


            Die  Bits  0  und  1 des Registers  wählen  die  Breite  des
            Bildfeldes auf folgende Art:


            Bit1 Bit0                Funktion

             0    0        Es  werden  keine  DMA-Zyklen  für  das  Bild
                           ausgeführt,    es   gibt   also   kein   Bild
                           (Spielfeld).
             0    1        Enges Spielfeld
                           Das Bild hat jetzt 128 Farbtakte.
             1    0        Normales Spielfeld
                           Das  Bild  hat  jetzt  160  Farbtakte.  Diese
                           Einstellung   benutzt   das    Betriebssystem
                           grundsätzlich.
             1    1        Breites Spielfeld
                           Das Bild hat jetzt 192 Farbtakte.


            Der  Standardwert  (der sogenannte "default  value")  dieses
            Registers ist $22 bzw. 34.





            Oft ist es nötig,  die "normale" Tätigkeit der CPU zu unter-
            brechen,  da bestimmte Aufgaben zum Beispiel nur während der
            Vertikal-Synchronisation erledigt werden können oder sollen,
            oder  es  müssen bestimmte  Anfragen  von  Peripheriegeräten
            sofort  beantwortet werden.  Dafür gibt es bei der CPU 6502,
            die auch im Atari verwendet wurde,  grundsätzlich zwei  ver-
            schiedene  Interrupts  (Unterbrechungen).   Der  maskierbare
            Interrupt  (IRQ :  Interrupt ReQuest,  Unterbrechung auf An-


            78

            *** ATARI INTERN                                   ANTIC ***


            frage)  wird  vom POKEY und gegebenenfalls von der  PIA  be-
            nutzt.  Der  nicht von der CPU intern maskierbare (abschalt-
            bare)  Interrupt  (NMI :  Non Maskable Interrupt)  wird  vom
            ANTIC verwaltet. Bei den alten 400/800er Modellen löste auch
            die  "RESET"-Taste  über den ANTIC einen NMI  aus,  bei  den
            neuen Modellen ist diese Methode unbrauchbar geworden,  weil
            zum Beispiel nach dem Einstecken eines (anderen)  ROM-Moduls
            unbedingt  ein Hardware-Reset erfolgen muß,  wenn dabei  das
            System  abgestürzt  ist.  Bei den alten Geräten  wurde  beim
            Modulwechsel automatisch der Computer abgeschaltet.


            Im ANTIC gibt es das Register

            NMIEN     54286     $d40e

            mit  dem  es möglich ist,  die  sogenannten  ANTIC-Programm-
            Unterbrechungen  und den Vertikalsynchron-Interrupt (in  dem
            das  Betriebssystem  zum Beispiel die  Schattenregister  er-
            zeugt)  bereits im ANTIC zu unterbinden.  Eine  Unterbindung
            (Maskierung) des NMI bei (hier nicht vorgesehenem) Signal an
            der  "RNMI"-Leitung ist mit NMIEN nicht möglich.  Die  Bits
            von NMIEN haben folgende Funktionen:

            Bit 0-5 :      nicht benutzt
            Bit  6  :      Wenn   dieses  Bit  gesetzt  ist,   ist   der
                           Vertikalsynchron-Interrupt eingeschaltet
            Bit  7  :      Wenn  dieses  Bit gesetzt  ist,  sind  ANTIC-
                           Programm-Unterbrechungen möglich.


            Vom Betriebssystem wird der Wert $40 bzw. 64 in NMIEN einge-
            tragen.  Wenn der NMI-Eingang der CPU auf "0"  geht,  unter-
            bricht  sie  ihre  normale  Tätigkeit  und  bearbeitet  eine
            Interrupt-Routine,  deren Anfangsadresse an einer bestimmten
            Adresse ($fffa und $fffb) im System gespeichert ist .  Diese
            Routine  muß  am Anfang feststellen,  was die  Unterbrechung
            ausgelöst hat. Dies kann sie im Register

            NMIST     54287     $d40f



                                                                     79

            *** ATARI INTERN                                   ANTIC ***


            abfragen.  Für jede Interruptquelle steht ein Bit zur Verfü-
            gung. Daß eine bestimmte Unterbrechungsbedingung aufgetreten
            ist,  zeigt der ANTIC durch Setzen des entsprechenden  Bits.
            Die Bits in NMIST sind wie folgt zugeordnet:


            Bit 0-4 :      unbenutzt
            Bit  5  :      "RNMI"-Eingang
            Bit  6  :      Vertikalsynchron-Interrupt
            Bit  7  :      ANTIC-Programm-Unterbrechung


            Zum Rücksetzen eines gesetzten Bits in diesem Register,  muß
            man lediglich irgendeinen Wert in das Register

            NMIRES    54287     $d40f

            schreiben.  Dieses  Register  hat  die gleiche  Adresse  wie
            NMIST.  Wenn auf diese Adresse ein Lesezugriff erfolgt, wird
            NMIST angesprochen, bei einem Schreibzugriff dagegen NMIRES.


            Mit dem Register

            VCOUNT    54283     $d40b

            ist  es möglich festzustellen,  welche Bildzeile  der  ANTIC
            gerade  darstellt.  Die Bits des Registers VCOUNT  enthalten
            den Stand des internen Bildzeilenzählers. Das niedrigste Bit
            des  Bildzeilenzählers  ist aber nicht in VCOUNT  enthalten.
            VCOUNT  enthält also die Nummer der aktuellen Bildzeile  ge-
            teilt durch zwei. Bei einem Bilddurchlauf zählt VCOUNT von 0
            bis 155.



            Unter  Umständen  ist  es für besondere  Effekte  nötig  den
            Prozessor parallel zu einer Zeile arbeiten zu lassen. Da der
            Aufbau einer Zeile jedoch zu schnell ist,  um einfach  abzu-
            fragen, wann die nächste Zeile beginnt, gibt es das Register



            80

            *** ATARI INTERN                                   ANTIC ***


            WAITHSYNC      54282     $d40a

            Wenn  irgendein  Wert in dieses  Register  hineingeschrieben
            wird, wird die CPU bis zum Anfang der nächsten Zeile einfach
            gestoppt.  Dabei  wird  die "READY"-Leitung der CPU auf  "0"
            geschaltet.  Sobald  das nächste  Horizotalsynchronisations-
            signal kommt,  also die Zeile beendet ist,  arbeitet die CPU
            wieder weiter.



            An  den Atari-Computer läßt sich an die  Joystick-Anschlüsse
            ein sogenannter "Lightpen" anschließen.  Wenn man einen der-
            artigen Lightpen auf den Bildschirm hält,  wird seine  Posi-
            tion in zwei Registern und Schattenregistern gespeichert:

            LPENH     54284     $d40c     Hier  wird die Horizontalposi-
            LPENH@      564      $234     tion  des  Lightpens   gespei-
                                          chert.  Das  Register  enthält
                                          die Nummer des Farbtaktes, bei
                                          dem  sich der Lightpen  befin-
                                          det.

            LPENV     54285     $d40d     Hier wird die Vertikalposition
            LPENV@      565      $235     des Lightpens gespeichert. Das
                                          Register  enthält  die  Nummer
                                          der Bildzeile, in der sich der
                                          Lightpen   befindet    geteilt
                                          durch zwei. (vergl. VCOUNT)


            Es gibt allerdings häufig Probleme beim Einsatz eines Light-
            pens.  Ein  Lightpen  ist eigentlich nichts weiter  als  ein
            Fototransistor. Das Prinzip des Lightpens ist es, ein Signal
            an den ANTIC zu geben, sobald der das Bild erzeugende Strahl
            die Position des Lightpens passiert.  Dazu muß der Fototran-
            sistor   oder  das  jeweilige  Aufnahmeelement  jedoch  sehr
            schnell  reagieren.  Derartig schnell  reagierende  Elemente
            sind sehr teuer.  Unter Umständen erhält man auch akzeptable
            Ergebnisse mit billigen Fototransistoren,  meist gibt es mit
            ihnen aber Probleme bei der Aufnahme der Horizontalposition.


                                                                     81

            *** ATARI INTERN                                   ANTIC ***


            Für viele Zwecke ist es ausreichend nur die Vertikalposition
            des  Lightpens festzustellen,  zum Beispiel wenn man  Punkte
            eines Auswahlmenüs mit dem Lightpen wählen möchte. Dann kann
            auch  ein in der Vertikalposition nicht richtig  funktionie-
            render Lightpen befriedigende Ergebnisse liefern.








            *********************************************
            *                                           *
            *                                           *
            *   DER DMA FÜR DIE PLAYER-MISSILE-GRAFIK   *
            *   -------------------------------------   *
            *                                           *
            *********************************************



            Die  Player-Missile-Grafik wird vom GTIA erzeugt.  Der  GTIA
            unterstützt dabei jedoch immer nur eine Bildzeile. Es müssen
            daher für jede Bildzeile jeweils neue Daten in die sogenann-
            ten  Grafikregister des GTIA geschrieben werden.  Dies  kann
            auch per Assemblerprogramm geschehen,  der Aufwand dafür ist
            aber sehr hoch. Einfacher ist es, den DMA des ANTICs für die
            Player-Missile-Grafik zu verwenden.

            Man muß lediglich ein Speicherfeld mit den Daten der Spieler
            und  Geschosse  im Speicher aufbauen.  Für  jede   Bildzeile
            (oder für jede zweite Bildzeile,  wenn zweizeilige Auflösung
            gewählt  ist)  holt  der ANTIC Daten aus  dem  Speicher  und
            überträgt sie in die GTIA-Grafikregister.  Die Horizontalpo-
            sition der Objekte wählt man dann im GTIA, die Vertikalposi-
            tion  wird  durch  die Lage des Objekts  im  Player-Missile-
            Speicherfeld bestimmt.




            82

            *** ATARI INTERN                                   ANTIC ***


            Auf  diese Art können Spieler beliebige vertikale Ausdehnung
            haben, also auch die gesamte Höhe des Schirms ausfüllen. Für
            die  horizontale Darstellung stehen acht Bits  bei  Spielern
            und  zwei Bits bei Geschossen zur Verfügung.  Wieviel  Farb-
            takte  ein  Bit von einem Spieler oder einem Geschoß  jedoch
            belegt,  wie  groß ein Spieler oder ein  Geschoß  horizontal
            also  ist,  läßt  sich  durch die  "SIZE"-Register  im  GTIA
            wählen.

            Der  DMA für die Spieler und für die  Geschosse,  sowie  die
            vertikale Auflösung (einzeilig oder zweizeilig),  werden mit
            dem  Register DMACNTL bzw.  DMACNTL@ eingeschaltet bzw.  ge-
            wählt.


            Die  Basisadresse des Player-Missile-Speicherfeldes wird  im
            Register

            PMBASE    54279     $d407

            gespeichert.






















                                                                     83

            *** ATARI INTERN                                   ANTIC ***

Übersicht

            84

            *** ATARI INTERN                                   ANTIC ***


            Die  eigentliche Adresse,  aus der sich der ANTIC die  Daten
            für die Player-Missile-Grafik holt, setzt sich bei einzeili-
            ger Auflösung folgendermaßen zusammen:


            Bit 0-7   :         Bildzeilenzähler    für   Spieler    und
                                Geschosse
            Bit 8-10  :         Diese    Bits   wählen,    für   welchen
                                Spieler/Geschoß der DMA erfolgt.
            Bit 11    :         PMBASE, Bit 3
            Bit 12    :         PMBASE, Bit 4
            Bit 13    :         PMBASE, Bit 5
            Bit 14    :         PMBASE, Bit 6
            Bit 15    :         PMBASE, Bit 7


            PMBASE wählt also die Nummer des 256-Byte-Blocks, an dem das
            Player-Missile-Speicherfeld beginnt.  Dieser Block muß  aber
            am  Beginn  eines 2 KByte Speicherblockes liegen.  Man  kann
            auch sagen,  daß mit PMBASE einer von 32  möglichen 2  KByte
            Speicherblöcken  ausgewählt wird ( 5 Bits von PMBASE  werden
            verwendet).  Die Bits 8-10 "wählen" wie erwähnt, für welchen
            Spieler/Geschoss der DMA erfolgt. Dies geschieht auf folgen-
            de Weise:


            Bit10 Bit9 Bit8               Beschreibung

              0    0    0       Diese 3 Kombinationen treten nicht  auf,
              0    0    1       daher  sind  bei  einzeiliger  Auflösung
              0    1    0       auch die ersten 3 * 256 Bytes unbenutzt.
                                Prinzipiell  gibt es 8 Kombinationen der
                                Bits  8-10,  da  aber nur 4  Felder  für
                                Spieler  und ein Feld für die  Geschosse
                                benötigt werden, bleiben 3 Kombinationen
                                unbenutzt.
              0   1    1        Bei  dieser  Kombination  wird  aus  dem
                                Speicherfeld  für  die Geschosse im  DMA
                                gelesen.
              1    0    0       Bei  dieser  Kombination  wird  aus  dem
                                Speicherfeld   für  Spieler  0  im   DMA


                                                                     85

            *** ATARI INTERN                                   ANTIC ***


                                gelesen.
              1    0    1       Bei  dieser  Kombination  wird  aus  dem
                                Speicherfeld   für  Spieler  1  im   DMA
                                gelesen.
              1    1    0       Bei  dieser  Kombination  wird  aus  dem
                                Speicherfeld   für  Spieler  2  im   DMA
                                gelesen.
              1    1    1       Bei  dieser  Kombination  wird  aus  dem
                                Speicherfeld   für  Spieler  3  im   DMA
                                gelesen.




            Bei zweizeiliger Auflösung der Spieler und Geschosse,  setzt
            sich  die  eigentliche Adresse für den DMA  (das  heißt  die
            Adresse,  aus  der die Daten,  die in die Grafikregister ge-
            schrieben werden, gelesen werden) folgendermaßen zusammen:


            Bit 0-6 :           Bildzeilenzähler    für   Spieler    und
                                Geschosse
            Bit 7-9 :           Diese   Bits   wählen,    für    welchen
                                Spieler/Geschoß  der DMA erfolgt.  Dabei
                                gilt das für die Bits 8-10 bei einzeili-
                                ger Auflösung Gesagte. Jedoch muß beach-
                                tet  werden,  daß jeder Spieler und  die
                                Geschosse nur je 128 Bytes  belegen.  Es
                                bleiben  am  Anfang des  Player-Missile-
                                Speicherfeldes  also  auch nur 3  *  128
                                Byte unbenutzt (im Gegensatz zu den 3  *
                                256 Byte bei einzeiliger Auflösung).
            Bit 10  :           PMBASE, Bit 2
            Bit 11  :           PMBASE, Bit 3
            Bit 12  :           PMBASE, Bit 4
            Bit 13  :           PMBASE, Bit 5
            Bit 14  :           PMBASE, Bit 6
            Bit 15  :           PMBASE, Bit 7





            86

            *** ATARI INTERN                                   ANTIC ***


            PMBASE wählt also die Nummer des 256-Byte-Blocks, an dem das
            Player-Missile-Speicherfeld  beginnt.  Dieser Block muß aber
            am  Beginn eines 1 KByte Speicherblockes  liegen.  Man  kann
            auch  sagen,  daß mit PMBASE einer von 64 möglichen 1  KByte
            Speicherblöcken ausgewählt wird.









            *******************************************************
            *                                                     *
            *                                                     *
            *   DER BEFEHLSATZ DES ANTIC UND DAS ANTIC-PROGRAMM   *
            *   -----------------------------------------------   *
            *                                                     *
            *******************************************************

            Wie  schon  erwähnt,  handelt  es sich beim ANTIC  um  einen
            Mikroprozessor.  Bei  seinen  Befehlen handelt  es  sich  um
            Kommandos,  die  die Darstellung von 1 bis 16 Bildzeilen zur
            Folge haben. Außerdem gibt es für jeden Befehl eine bestimm-
            te Form,  die veranlaßt,  daß sich der ANTIC den Anfang  des
            Bildspeichers "merkt", daß der sogenannte Bildspeicherzähler
            geladen  wird.  Wie bei "normalen" Mikroprozessoren gibt  es
            auch  beim  ANTIC Sprungbefehle,  die bewirken,  das er  das
            ANTIC-Programm von einer anderen Speicherstelle aus  weiter-
            liest.

            Natürlich muß man dem ANTIC mitteilen, von welcher Speicher-
            stelle  aus er sein Programm abarbeiten soll.  Diese Adresse
            teilt man ihm in zwei Registern bzw.  zwei Schattenregistern
            (einem sogenannten Pointer,  also Zeiger auf das  ANTIC-Pro-
            gramm) mit:

            DLPTRL    54274     $d402          unteres Byte der Adresse
            DLPTRL@     560      $230          (Schattenregister)


                                                                     87

            *** ATARI INTERN                                   ANTIC ***


            DLPTRH    54275     $d403          obere Hälfte  der Adresse
            DLPTRH@     561      $231          (Schattenregister)


            Die Akürzung "DLPTR" kommt von "Display-List-Pointer",  dies
            heißt soviel wie "Zeiger auf das ANTIC-Programm".  Der ANTIC
            verwendet  den  Wert  der Register intern  als  Wert  seines
            Programm-Zählers. Dieser ANTIC-Programm-Zähler zeigt jeweils
            auf den abzuarbeitenden ANTIC-Befehl. Da die obersten 6 Bits
            des ANTIC-Programm-Zählers nur Register sind und nicht hoch-
            gezählt werden können, kann das ANTIC-Programm eine 1 KByte-
            Grenze nur durch einen ANTIC-Programm-Sprung überwinden.


            Durch den Wechsel der Inhalte der Register DLPTRL und DLPTRH
            kann man das gesamte Bild wechseln. Man muß vorher lediglich
            ein neues ANTIC-Programm und einen Bildspeicher irgendwo  im
            System aufbauen.

            Man sollte diese Register nur während der Vertikalsynchroni-
            sation ändern,  ansonsten kann das Bild kurzzeitig abrollen.
            Die  Schattenregisterinhalte werden immer während der Verti-
            kalsynchronisation  in die Register geschrieben,  daher  muß
            hier nicht darauf geachtet werden,  daß man selbst nur  wäh-
            rend  der Vertikalsynchronisation schreibt.  Damit der ANTIC
            überhaupt  das  ANTIC-Programm lesen kann,  muß  Bit  5  von
            Register DMACNTL gesetzt sein.


            Alle  ANTIC-Befehle  kann  man grundsätzlich  in  3  Gruppen
            einteilen:
                           1) Befehle, um Leerzeilen zu erzeugen
                           2) Sprungbefehle
                           3) Befehle, die Bildzeilen erzeugen

            Jeder ANTIC-Befehl wird per DMA in das Befehlsregister gela-
            den.  Bei Sprungbefehlen werden vom ANTIC zwei weitere Bytes
            per  DMA gelesen.  Diese beiden Bytes werden in  den  ANTIC-
            Programm-Zähler geladen. Wie bei CPU-Befehlen wird auch hier
            zuerst das niederwertige Byte und dann das höherwertige Byte
            gelesen.


            88

            *** ATARI INTERN                                   ANTIC ***




            Bei  Befehlen,  die veranlassen,  daß der Bildspeicherzähler
            geladen  wird,  holt der ANTIC ebenfalls zwei weitere  Bytes
            per DMA aus dem Speicher und transportiert sie in das  Bild-
            speicherzählerregister  (auch  hier wird  das  niederwertige
            Byte  zuerst gelesen).  Bei "normalen" Anzeigekommandos holt
            der  ANTIC  das nächste Byte der Bilddaten  direkt  aus  der
            Speicheradresse,  die der folgt, aus der das letzte Byte der
            vorherigen Zeile gelesen wurde.  Der Bildspeicherzähler wird
            dabei  nicht neu geladen.  Dadurch werden die Bilddaten  der
            jeweils  nächsten Zeile direkt aus den Speicherstellen,  die
            der vorhergehenden Zeile folgen,  gelesen. Die Bilddaten der
            einzelnen Zeilen werden so ohne Lücke aneinandergereiht.  Es
            ergibt sich dadurch ein Bildspeicherblock,  wie er auch  bei
            fast allen anderen Mikrocomputern vorhanden ist.

            Der  Bildspeicherzähler (der Pointer auf die Bilddaten)  be-
            steht  aus  4 Register- und 12 Zählerbits.  Daher  kann  ein
            zusammenhängender Bildspeicherbereich nie länger als 4 KByte
            sein.  Jeweils  beim Übergang zum nächsten 4 KByte-Block muß
            der  Bildspeicherzähler durch ein geeignetes  ANTIC-Kommando
            neu geladen werden. Besonders sollte man auch darauf achten,
            das  der 4 KByte-Block nicht während der  Darstellung  einer
            Zeile  überschritten wird.  Dies würde nämlich dazu  führen,
            daß plötzlich,  innerhalb der laufenden Zeile, die Daten aus
            Speicherstellen vom Anfang des durch die obersten 4 Bits des
            Bildspeicherzählers bestimmten 4 KByte-Blocks,  gelesen wür-
            den.


            Für jeden Befehl gibt es eine Version,  die  veranlaßt,  daß
            bei der Bearbeitung der letzten, durch diesen Befehl erzeug-
            ten  Bildzeile,  die normale Tätigkeit der CPU  unterbrochen
            wird  und  stattdessen die Routine,  deren Startadresse  bei
            DLIVKT (niederwertiges Byte in 512/$200,  höherwertiges Byte
            in 513/$201) steht,  bearbeitet wird. Die Vorraussetzung für
            eine  derartige ANTIC-Programm-Unterbrechung ist, daß Bit  7
            von NMIEN gesetzt ist. Eine ANTIC-Programm-Unterbrechung ist
            nicht  eine Unterbrechung des ANTIC-Programms,  sondern eine
            Unterbrechung  (Interrupt)  der CPU,  die durch  das  ANTIC-


                                                                     89

            *** ATARI INTERN                                   ANTIC ***


            Programm ausgelöst wird.

            Mit ANTIC-Programm-Unterbrechungen lassen sich zum  Beispiel
            während  eines  Bildes in einer bestimmten Zeile die  Farben
            wechseln. Mit einer ANTIC-Programm-Unterbrechung ist es auch
            möglich,  mehr als vier Spieler und Geschosse  darzustellen,
            indem man PMBASE auf ein anderes Player-Missile-Speicherfeld
            legt und die Farben und Bildschirmpositionen,  soweit nötig,
            wechselt.  ANTIC-Programm-Unterbrechungen bieten vielfältige
            Möglichkeiten, da es mit ihnen auf sehr einfache Art möglich
            ist,  einen  Programmteil während der Darstellung einer  be-
            stimmten Bildschirmposition abzuarbeiten.





            Befehle, um Leerzeilen zu erzeugen:
            -----------------------------------

            Der ANTIC besitzt Befehle, die auf dem Bildschirm Leerzeilen
            erzeugen.  Wenn  ein  derartiger Befehl  abgearbeitet  wird,
            werden keine Bilddaten aus dem Speicher geholt. Statt dessen
            erscheint die Hintergrundfarbe auf dem Monitor. Die Leerzei-
            lenbefehle sind grundsätzlich ein Byte lang. Mit einem Leer-
            zeilenbefehl  werden ein bis acht  Leerzeilen  erzeugt.  Ein
            ANTIC-Befehl für Leerzeilen wird wie folgt aufgebaut:

            Bit 0-3 :           Diese     Bits    müssen    für    einen
                                Leerzeilenbefehl  binär %0000 enthalten.
            Bit 4-6 :           Der Binärwert dieser drei Bits  bestimmt
                                die Anzahl der Leerzeilen plus eins, die
                                mit  diesem Befehl erzeugt werden.  Wenn
                                diese  Bits  zum   Beispiel  binär  %010
                                enthalten, werden 3 Leerzeilen erzeugt.
            Bit  7  :           Wenn  dieses Bit gesetzt ist,  wird eine
                                ANTIC-Programm-Unterbrechung   bei   der
                                Darstellung  der letzten,  durch  diesen
                                Befehl erzeugten Bildzeile ausgelöst.




            90

            *** ATARI INTERN                                   ANTIC ***


            Sprungbefehle:
            --------------

            Mit diesen Befehlen wird der ANTIC-Programm-Zähler neu gela-
            den. Wenn ein derartiger Befehl in einem Bildblock auftritt,
            verursacht  er eine Leerzeile.  Daher sollten  Sprungbefehle
            nur am Ende eines Bildes ausgelöst werden. Die beiden Bytes,
            die im ANTIC-Programm einem Sprungbefehl  folgen,  enthalten
            die  neue Adresse (niederwertiges Byte zuerst).  Ein  ANTIC-
            Sprungbefehl wird wie folgt aufgebaut:

            Bit 0-3 :           Diese Bits müssen bei einem Sprungbefehl
                                binär %0001 enthalten.
            Bit  4  :           Wenn  dieses Bit "0" ist,  wird ein ein-
                                facher  Sprung ausgelöst,  bei dem  eine
                                Leerzeile  verursacht wird.  Ist  dieses
                                Bit "1", erfolgt ebenfalls ein Sprung an
                                die angegebene Adresse.  Der ANTIC  war-
                                tet  mit  der  Ausführung des  folgenden
                                Befehls  bis  zum Ende der nächsten Ver-
                                tikalsynchronisation,   also   bis   zum
                                nächsten Bild.
            Bit 5-6 :           Diese Bits sollten "0" sein.
            Bit  7  :           Wenn  dieses  Bit  "1"  ist,  wird  eine
                                ANTIC-Programm-Unterbrechung ausgelöst.




            Befehle, die Bildzeilen erzeugen:
            ---------------------------------

            Diese  Befehle enthalten die Nummer (hexadezimal) des ANTIC-
            Modus,  mit  dem die nächste  Bildzeile,  bzw.  der  nächste
            Bildblock  dargestellt wird.  Oft werden diese Befehle  auch
            als  "Display"-Befehle  bezeichnet.  Ein  Displaybefehl  des
            ANTIC ist folgendermaßen aufgebaut:

            Bit 0-3 :           Diese Bits enthalten die  (hexadezimale)
                                Nummer/Bezeichnung des ANTIC-Modus.
            Bit  4  :           Wenn  dieses  Bit gesetzt ist,  ist  der


                                                                     91

            *** ATARI INTERN                                   ANTIC ***


                                Horizontalvorschub   (das    Horizontal-
                                Scrolling) eingeschaltet.
            Bit  5  :           Wenn  dieses  Bit gesetzt ist,  ist  der
                                Vertikalvorschub     (das      Vertikal-
                                Scrolling) eingeschaltet.
            Bit  6  :           Wenn dieses Bit gesetzt ist, so wird vor
                                der  Darstellung  der ersten, zu  diesem
                                Befehl     gehörigen     Zeile,      der
                                Bildspeicherzähler  mit  den  beiden  im
                                ANTIC-Programm folgenden Bytes geladen.
            Bit  7  :           Wenn dieses Bit gesetzt ist,  wird  eine
                                ANTIC-Programm-Unterbrechung   bei   der
                                Darstellung  der  letzten  durch  diesen
                                Befehl erzeugten Bildzeile ausgelöst.


            ------------------------------------------------------------

            Die  folgenden Tabellen fassen die ANTIC-Befehle noch einmal
            zusammen (dabei sind die Daten hexadezimal angegeben):



            BEFEHL                  mit            ohne
                                ANTIC-Programm-Unterbrechung

            1 Leerzeile              00             80
            2 Leerzeilen             10             90
            3 Leerzeilen             20             a0
            4 Leerzeilen             30             b0
            5 Leerzeilen             40             c0
            6 Leerzeilen             50             d0
            7 Leerzeilen             60             e0
            8 Leerzeilen             70             f0

            Sprung                   01             81
            Sprung u. Warten         41             c1






            92

            *** ATARI INTERN                                   ANTIC ***


            HScrolling          --   XX   --   XX   --   XX   --   XX
            VScrolling          --   --   XX   XX   --   --   XX   XX
            lade Bildspei-      --   --   --   --   XX   XX   XX   XX
            cherzähler


            BEFEHL                OHNE ANTIC-PROGRAMM-UNTERBRECHUNG

            Modus "2"           02   12   22   32   42   52   62   72
            Modus "3"           03   13   23   33   43   53   63   73
            Modus "4"           04   14   24   34   44   54   64   74
            Modus "5"           05   15   25   35   45   55   65   75
            Modus "6"           06   16   26   36   46   56   66   76
            Modus "7"           07   17   27   37   47   57   67   77
            Modus "8"           08   18   28   38   48   58   68   78
            Modus "9"           09   19   29   39   49   59   69   79
            Modus "A"           0a   1a   2a   3a   4a   5a   6a   7a
            Modus "B"           0b   1b   2b   3b   4b   5b   6b   7b
            Modus "C"           0c   1c   2c   3c   4c   5c   6c   7c
            Modus "D"           0d   1d   2d   3d   4d   5d   6d   7d
            Modus "E"           0e   1e   2e   3e   4e   5e   6e   7e
            Modus "F"           0f   1f   2f   3f   4f   5f   6f   7f


            BEFEHL                MIT ANTIC-PROGRAMM-UNTERBRECHUNG

            Modus "2"           82   92   a2   b2   c2   d2   e2   f2
            Modus "3"           83   93   a3   b3   c3   d3   e3   f3
            Modus "4"           84   94   a4   b4   c4   d4   e4   f4
            Modus "5"           85   95   a5   b5   c5   d5   e5   f5
            Modus "6"           86   96   a6   b6   c6   d6   e6   f6
            Modus "7"           87   97   a7   b7   c7   d7   e7   f7
            Modus "8"           88   98   a8   b8   c8   d8   e8   f8
            Modus "9"           89   99   a9   b9   c9   d9   e9   f9
            Modus "A"           8a   9a   aa   ba   ca   da   ea   fa
            Modus "B"           8b   9b   ab   bb   cb   db   eb   fb
            Modus "C"           8c   9c   ac   bc   cc   dc   ec   fc
            Modus "D"           8d   9d   ad   bd   cd   dd   ed   fd
            Modus "E"           8e   9e   ae   be   ce   de   ee   fe
            Modus "F"           8f   9f   af   bf   cf   df   ef   ff



                                                                     93

            *** ATARI INTERN                                   ANTIC ***


            BEISPIEL FÜR EIN ANTIC-PROGRAMM:
            --------------------------------

            Das  ANTIC Programm und der Bildspeicher im BASIC-Modus  "0"
            ("GRAPHICS 0"):


            Adresse   Daten
            (hex.)    (hex.)

            7c20      70             24 Leerzeilen am oberen Bildrand
                      70             (wegen "Overscan" des Bildschirms)
                      70
                      42             Der   Bildspeicherzähler  wird  mit
                      40             $7c40 geladen
                      7c             (Darstellung mit ANTIC-Modus "2")
                      02             --I
                      02               I
                      02               I
                      .                I
                      .                I--   23 weitere Zeilen
                      .                I     im ANTIC-Modus "2"
                      .                I
                      02               I
                      02             --I
                      41             Springe  nach  $7c20 und warte  auf
                      20             das Ende des Vertikal-Leertaktes
                      7c             (ANTIC-Programm-Zähler neu laden)
            7c40                     1. Bildzeile   --I
            7c68                     2. Bildzeile     I
            7c90                     3. Bildzeile     I
             .                                        I--  je 40 Zeichen
             .                                        I     Bildspeicher
             .                                        I
            7f60                    23. Bildzeile     I
            7f88                    24. Bildzeile   --I


            Der  Bildspeicher  ist insgesamt 960 ($3c0) Bytes  lang  und
            endet bei $7faf (dezimal : 32687)



            94

            *** ATARI INTERN                                   ANTIC ***


            ***************************
            *                         *
            *                         *
            *   DIE BILDGRAFIK-MODI   *
            *   -------------------   *
            *                         *
            ***************************

            Der  ANTIC verfügt über acht  verschiedene  Bildgrafik-Modi.
            Bei einem Bildgrafik-Modus kann man jedes einzelne Pixel auf
            dem Bildschirm einzeln ansprechen. Nicht alle sind durch das
            Betriebssystem im BASIC verfügbar. Die einzelnen Modi unter-
            scheiden  sich im Grad der Auflösung und in der  Anzahl  der
            für  jeden  Pixel verfügbaren Farben,  somit  also  auch  im
            Speicherbedarf.

            Unter einem Pixel versteht man ein rechteckiges Feld auf dem
            Bildschirm,  das  ein  bis  acht Bildzeilen hoch  und  einen
            halben  bis 4 Farbtakte breit sein kann.  Bei  einem  ANTIC-
            Programm  mit  192 Bildzeilen und 160 Farbtakten  pro  Zeile
            ergeben  sich  somit Auflösungen von 24 * 40 bis 192  *  320
            Pixeln.  Bei 192 Farbtakten pro Zeile ergibt sich sogar eine
            maximale horizontale Auflösung von 384 Pixeln.

            ANTIC-Modi mit geringer Auflösung haben den Vorteil, daß sie
            wenig  Speicherraum  verbrauchen,  sich somit  auch  schnell
            komplett  ändern  lassen.  Außerdem benötigen sie  nicht  so
            viele  DMA-Zyklen,  verlangsamen die CPU also auch  weniger,
            als  ANTIC-Modi mit hoher Auflösung.  Die Adresse des  Bild-
            speichers  wird (wie im Kapitel über das ANTIC-Programm  be-
            schrieben) im ANTIC-Programm festgelegt.

            Die  Daten  werden,  wenn sie zur  Bilddarstellung  benötigt
            werden,  per  DMA vom ANTIC aus dem Arbeitsspeicher  geholt.
            Außer auf den Bildschirm,  transportiert der ANTIC die Bild-
            daten noch in ein internes,  sogenanntes Verschieberegister.
            Dort  stehen die Bilddaten für den Fall zur  Verfügung,  daß
            mehrere Zeilen gleichartig sind (wenn zum Beispiel ein Pixel
            mehrere Bildzeilen einnimmt).  Auf diese Art liest der ANTIC
            die  Bilddaten für gleichartige Zeilen nur einmal und  spart
            dadurch DMA-Zyklen ein.


                                                                     95

            *** ATARI INTERN                                   ANTIC ***


            DIE EINZELNEN MODI:
            -------------------

            Die Angaben beziehen sich,  wenn nicht anders angegeben, auf
            die normale Zeilenbreite (160 Farbtakte pro Bildzeile).


            ANTIC-              Beschreibung
            MODUS

             "8"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "3".
                      Es  werden  40 Pixel pro Normalzeile  dargestellt,
                      dabei  stehen vier verschiedene Farben zur  Verfü-
                      gung.  Jedes Pixel hat eine Höhe von 8 Bildzeilen.
                      Pro Normalzeile werden 10 Bytes Bildspeicher benö-
                      tigt. Jedes Pixel belegt 4 Farbtakte. Bei normaler
                      Bildschirmeinstellung sind die Pixel also  quadra-
                      tisch.  Jeweils zwei Bits der Bilddaten wählen ein
                      Farbregister an, dabei gilt folgende Tabelle:

                               Daten         Farbregister

                                00             COLBAK
                                01             COLPF0
                                10             COLPF1
                                11             COLPF2


             "9"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "4".
                      Es  werden 80 Pixel pro  Normalzeile  dargestellt,
                      dabei ist jedes Pixel 2 Farbtakte breit. Es stehen
                      zwei  verschiedene Farben zur Verfügung.  Pro Zeile
                      werden auch bei diesem Modus 10 Byte  Bildspeicher
                      benötigt.  Auch  bei  diesem Modus sind die  Pixel
                      normalerweise quadratisch.  Für jedes Pixel  steht
                      ein  Bit in den Bilddaten zur Verfügung,  wenn das
                      Bit  "0" ist,  wird die Farbe aus COLBAK  (Hinter-
                      grund) abgebildet,  ansonsten erscheint die  Farbe
                      aus COLPF0.




            96

            *** ATARI INTERN                                   ANTIC ***


             "A"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "5".
                      Auch  hier sind die Pixel quadratisch.  Pro  Zeile
                      werden  80  Pixel ,  die je zwei  Farbtakte  breit
                      sind,  dargestellt.  Es  stehen  vier  verschieden
                      Farben  für jedes Pixel zur Verfügung.  Pro  Zeile
                      werden 20 Bytes Bildspeicher benötigt. Jedes Pixel
                      ist 4 Bildzeilen hoch. Je zwei aufeinander folgen-
                      de  Bits  der  Bilddaten wählen aus  vier  Farbre-
                      gistern eins aus, dabei gilt folgende Tabelle:

                              Daten     Farbregister

                                00        COLBAK
                                01        COLPF0
                                10        COLPF1
                                11        COLPF2


             "B"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "6".
                      Pro  Zeile  werden 160 quadratische  Pixel  darge-
                      stellt, die je einen Farbtakt breit und 2 Bildzei-
                      len hoch sind. Es stehen zwei Farben für die Pixel
                      zur Verfügung. Pro Zeile werden also 20 Byte Bild-
                      daten benötigt. Für die Farbe jedes Pixels ist ein
                      Bit der Bilddaten "zuständig". Wenn dieses Bit "0"
                      ist,  wird  die Farbe aus COLBAK dargestellt,  an-
                      sonsten erscheint die Farbe aus COLPF0.


             "C"      Dieser  ANTIC-Modus wird vom Betriebssystem  nicht
                      verwendet.  Die  Pixel sind hier etwa  doppelt  so
                      breit wie hoch.  Pro Zeile werden 160 Pixel darge-
                      stellt, die je einen Farbtakt breit und eine Bild-
                      zeile hoch sind.  Es stehen zwei Farben zur Verfü-
                      gung.  Pro Zeile werden auch hier 20 Bytes Bildda-
                      ten  benötigt.  Für  jedes Pixel ist ein  Bit  der
                      Bilddaten  "zuständig".  Wenn dieses Bit "0"  ist,
                      wird  die Farbe aus COLBAK dargestellt,  ansonsten
                      erscheint die Farbe aus COLPF0.




                                                                     97

            *** ATARI INTERN                                   ANTIC ***


             "D"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "7".
                      Die Pixel sind hier quadratisch.  Pro  Normalzeile
                      werden  160 Pixel abgebildet,  für die vier Farben
                      zur Verfügung stehen.  Jedes Pixel ist einen Farb-
                      takt  breit und zwei Bildzeilen  hoch.  Pro  Zeile
                      werden  also 40 Bytes Bilddaten benötigt.  Je zwei
                      aufeinander folgende Bits der Bilddaten wählen aus
                      vier Farbregistern eins aus,  dabei gilt  folgende
                      Tabelle:

                              Daten     Farbregister

                                00        COLBAK
                                01        COLPF0
                                10        COLPF1
                                11        COLPF2


             "E"      Auch  dieser ANTIC-Modus wird nicht vom  Betriebs-
                      system  bzw.  BASIC benutzt.  Die Pixel sind  auch
                      hier  etwa  doppelt so breit wie hoch.  Pro  Zeile
                      werden  160 derartige Pixel dargestellt,  für  die
                      vier Farben zur Verfügung stehen.  Jedes Pixel ist
                      einen Farbtakt breit und eine Bildzeile hoch.  Für
                      eine Zeile werden 40 Bytes Bildspeicher  benötigt.
                      Bei  diesem  Modus ist besondere Vorsicht bei  der
                      Erstellung eines ANTIC-Programms geboten: Wenn man
                      diesen Modus mit 192 Zeilen bzw.  Bildzeilen (hier
                      sind  Zeilen und Bildzeilen  identisch)  betreibt,
                      ist  der Bildspeicher größer als 4 KByte,  etwa in
                      der Mitte des ANTIC-Programms muß daher der  Bild-
                      speicherzähler  durch einen entsprechenden  ANTIC-
                      Befehl  neu  geladen werden.
                      Je  zwei aufeinander folgende Bits  der  Bilddaten
                      wählen aus vier Farbregistern eins aus, dabei gilt
                      die folgende Zuordnung:

                              Daten     Farbregister

                                00        COLBAK
                                01        COLPF0


            98

            *** ATARI INTERN                                   ANTIC ***


                                10        COLPF1
                                11        COLPF2


             "F"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "8".
                      In  einer Zeile werden 320 quadratische Pixel dar-
                      gestellt, die eine Bildzeile hoch und einen halben
                      Farbtakt breit sind.  Da die Pixel nur noch  einen
                      halben Farbtakt breit sind,  können sie nur unter-
                      schiedliche  Helligkeiten  und nicht  verschiedene
                      Farben haben. Pro Bildzeile werden auch bei diesem
                      Modus 40 Bytes Bildspeicher benötigt. Auch bei der
                      Erstellung eines ANTIC-Programms für diesem  Modus
                      ist  besondere Vorsicht geboten:  Wenn man  diesen
                      Modus  mit 192 Zeilen bzw.  Bildzeilen (hier  sind
                      Zeilen und Bildzeilen identisch) betreibt, ist der
                      Bildspeicher größer als 4 KByte, etwa in der Mitte
                      des ANTIC-Programms muß daher der Bildspeicherzäh-
                      ler  durch  einen entsprechenden ANTIC-Befehl  neu
                      geladen werden.  Die Farbe der Pixel ist immer die
                      Farbe,  die in COLPF2 steht. Für jedes Pixel steht
                      ein  Bit  in den  Bilddaten  zur  Verfügung.  Wenn
                      dieses Bit "0" ist, wird die Helligkeit des Pixels
                      ebenfalls  durch COLPF2 bestimmt.  Ist das Bit "1"
                      wird das Pixel mit der Helligkeit dargestellt, die
                      in COLPF1 eingetragen ist.





            Auf der nächsten Seite folgt eine Tabelle, die die einzelnen
            Grafik-Modi noch einmal zusammenfaßt.










                                                                     99

            *** ATARI INTERN                                   ANTIC ***


            ANTIC-MODUS         "8"  "9"  "A"  "B"  "C"  "D"  "E"  "F"

            Basic-Modus         "3"  "4"  "5"  "6"  ---  "7"  ---  "8"



            Pixel pro Zeile     32   64   64   128  128  128  128  256
            (schmales Bild)

            Pixel pro Zeile     48   96   96   192  192  192  192  384
            (breites Bild)

            Pixel pro Zeile     40   80   80   160  160  160  160  320
            (Normalzeile)

            Bytes pro Zeile     10   10   20   20   20   40   40   40
            (Normalzeile)

            Bildzeilen          8    4    4    2    1    2    1    1
            (pro Pixel)

            Farbtakte           4    2    2    1    1    1    1    1/2
            (pro Pixel)

            Farbanzahl          4    2    4    2    2    4    4    1,5

            Datenbits           2    1    2    1    1    2    1    1
            (pro Pixel)


             VERWENDETE
            FARBREGISTER

            COLPF0              X    X    X    X    X    X    X
            COLPF1              X         X              X    X    H
            COLPF2              X         X              X    X    X
            COLPF3
            COLBAK              X    X    X    X    X    X    X


                   H : Nur die Helligkeitsangabe wird verwendet !


            100

            *** ATARI INTERN                                   ANTIC ***


            **************************
            *                        *
            *                        *
            *   DIE SCHRIFTGRAFIK    *
            *   -----------------    *
            *                        *
            **************************


            Der  ANTIC verfügt nicht nur über leistungsfähige  Modi  zur
            Darstellung  von Punktgrafiken,  er besitzt auch 6 Modi  zur
            Darstellung  von Schriftzeichen.  Den Begriff Schriftzeichen
            sollte man allerdings nicht allzu wörtlich nehmen. Natürlich
            kann man auch andere Gegenstände mit den  Schriftgrafik-Modi
            auf dem Bildschirm darstellen,  man muß sich lediglich einen
            eigenen  Zeichensatz definieren.  Mehrere Schriftgrafik-Modi
            eignen  sich  auch nicht ohne weiteres zur  Darstellung  von
            Buchstaben, da sie nur vier Pixel breit sind. Dafür sind sie
            für andere Zeichendarstellungen (z.B.  in Spielen) geeignet,
            da sie über vielfältige Farbmöglichkeiten verfügen.  Mit den
            Schriftgrafik-Modi kann man sehr hoch aufgelöste Bilder  mit
            wenig Bildspeicherraum darstellen.


            Der     wesentliche    Unterschied    zwischen     Bild- und
            Schriftgrafik-Modi  liegt in der Quelle der Daten,  die  auf
            dem Bildschirm dargestellt werden. Bei der Bildgrafik werden
            die  Daten  aus dem Bildspeicher direkt auf  dem  Bildschirm
            abgebildet.  Bei Schriftgrafik-Modi werden dagegen die Daten
            aus dem Bildspeicher als Nummer eines Zeichens (als Zeichen-
            name) aus einem Zeichensatz aufgefaßt.  Die Bilddaten werden
            also  indirekt über einen Zeichensatz,  der irgendwo im  Ar-
            beitsspeicher  liegt (einen sogenannten "Zeichengenerator"),
            auf dem Bildschirm dargestellt.  Man spricht bei dieser Form
            der Darstellung auch oft von einer  Zeichen-Projektion.  Der
            ANTIC  liest dabei die Daten aus dem Bildspeicher und trans-
            portiert sie in das Verschieberegister.  Je nachdem,  welche
            Bildzeile einer Zeile gerade dargestellt werden soll,  liest
            der ANTIC per DMA mit Hilfe der Daten aus dem  Bildspeicher,
            die  er  ja im Schieberegister hat,  die Bilddaten  aus  dem
            Zeichengenerator.


                                                                     101

            *** ATARI INTERN                                   ANTIC ***


            Für  jedes Zeichen sind acht Bytes im Zeichengenerator  vor-
            handen.  Jedes Byte eines Zeichens bestimmt das Aussehen des
            Zeichens  in  einer Zeile von Pixeln (also in ein oder  zwei
            Bildzeilen  je nach Modus).  Der Zeichengenerator  ist  eine
            Liste aller Zeichendaten. Der Zeichengenerator enthält keine
            Lücken, die Zeichen sind direkt aneinandergereiht.


            Nach  der Projektion  einer  Pixelzeile (Eine Pixelzeile hat
            ein  oder zwei Bildzeilen, je  nachdem, welcher  ANTIC-Modus
            benutzt  wird) wird intern im ANTIC der Zeilenzähler um eins
            erhöht (inkrementiert). Dadurch werden, nachdem zum Beispiel
            die  Daten für die erste Bildzeile aus dem  Zeichengenerator
            gelesen wurden,  die Daten für die zweite Bildzeile aus  dem
            Zeichengenerator gelesen.


            Natürlich muß man dem ANTIC mitteilen,  wo er den Zeichenge-
            nerator findet.  Die Nummer des 256 Byte-Blocks,  an dem der
            Zeichengenerator beginnt,  schreibt man in das Register bzw.
            Schattenregister

            CHARBASE       54281     $d409
            CHARBASE@        756      $2f4


            Bei  Modi  mit 40 Zeichen pro Zeile werden Bit 0 bis  6  der
            Bildspeicherdaten  als  Name  des  darzustellenden  Zeichens
            aufgefaßt. Der Zeichengenerator umfaßt also 128 Zeichen.  Da
            jedes Zeichen 8 Bytes belegt, werden 1024 Bytes Zeichengene-
            rator benötigt.  Bei diesen Modi werden die Bits 2 bis 7 von
            CHARBASE benutzt.  Der Zeichengenerator muß daher an einer 1
            KBYTE-Grenze im System beginnen.

            Bei  Modi  mit 20 Zeichen pro Zeile werden Bit 0 bis  5  der
            Bildspeicherdaten  als  Name  des  darzustellenden  Zeichens
            aufgefaßt.  Der Zeichengenerator umfaßt also 64 Zeichen.  Da
            jedes Zeichen 8 Bytes belegt,  werden 512 Bytes Zeichengene-
            rator benötigt.  Bei diesen Modi werden die Bits 1 bis 7 von
            CHARBASE  benutzt.  Der Zeichengenerator muß daher an  einer
            512 Byte-Grenze im System beginnen.


            102

            *** ATARI INTERN                                   ANTIC ***

Schrift

                                                                     103

            *** ATARI INTERN                                   ANTIC ***

Schriftsatz

                                                                    
            104

            *** ATARI INTERN                                   ANTIC ***


            Die  untersten  6 (bei Modi mit 64 Zeichen  im  Zeichensatz)
            bzw.  7  (bei Modi mit 128 Zeichen) Bits eines Bytes aus dem
            Bildspeicher  bestimmen also,  welches Zeichen aus dem  Zei-
            chensatz  abgebildet  wird.  Das  oberste  bzw.  die  beiden
            obersten  Bits bestimmen bei mehreren Modi  die  Farbe.  Bei
            zwei  Modi (ANTIC-Modi "2" und "3") werden durch das oberste
            Bit  (Bit  7) eines Bytes aus dem  Bildspeicher  zusätzliche
            Funktionen  gesteuert.  Für  diese Zusatzfunktionen und  die
            Steuerung  der Schriftgrafik-Modi überhaupt,  steht das  Re-
            gister bzw. Schattenregister

            CHARCNTL       54273     $d401
            CHARCNTL@        755      $2f3

            zur Verfügung.


            Die Bits dieses Registers haben folgende Funktionen:

            Bit 0 :        Zeichen-Ausblendung:
                           Dieses  Bit hat nur bei den Modi "2" und  "3"
                           eine  Funktion.  Wenn es bei diesen Modi  ge-
                           setzt  ist,  veranlaßt es,  daß alle Zeichen,
                           bei  denen  das höchste Bit (Bit  7)  gesetzt
                           ist,  nicht  auf dem  Bildschirm  erscheinen.
                           Wenn  man  das Bit 7 von einem Zeichen  setzt
                           und Bit 0 von CHARCNTL periodisch umschaltet,
                           blinkt das Zeichen periodisch auf.
            Bit 1 :        Zeichen-Invertierung:
                           Dieses  Bit hat nur bei den Modi "2" und  "3"
                           eine  Funktion.  Wenn es bei diesen Modi  ge-
                           setzt ist,  veranlaßt es,  daß bei allen Zei-
                           chen,  bei denen Bit 7 (das höchste Bit)  ge-
                           setzt   ist,   die  Farben  von  Zeichen  und
                           Zeichenhintergrund  vertauscht  werden.   Ein
                           Zeichen,  das  sonst  weiß auf  blauem  Grund
                           erscheint,  wird  dann blau auf weißem  Grund
                           dargestellt. Diese Funktion wird zur Darstel-
                           lung des Cursors verwendet.
            Bit 2 :        Dieses Bit wird am Anfang jeder  Schriftzeile
                           abgefragt.  Wenn  es  gesetzt ist,  wird  die


                                                                     105

            *** ATARI INTERN                                   ANTIC ***


                           Schriftzeile  komplett auf den Kopf  gestellt
                           (vertikal gespiegelt).
            Bit 3-7 :      unbenutzt



            Es folgt eine Aufstellung der einzelnen Schriftgrafik-Modi:
            -----------------------------------------------------------

            ANTIC-                   BESCHREIBUNG
            MODUS


             "2"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "0",
                      also dem, der nach dem Einschalten des Atari akti-
                      viert  ist.  Es werden 40 Zeichen pro  Normalzeile
                      dargestellt. Jedes dieser Zeichen besteht horizon-
                      tal aus 8 Pixeln,  die jeweils einen halben  Farb-
                      takt  breit  sind.  Dadurch können  die  einzelnen
                      Pixel  auch  nicht mehr  unterschiedliche  Farben,
                      sondern  nur unterschiedliche Helligkeiten  haben.
                      Eine  Zeile ist 8 Pixel hoch,  dabei belegt  jedes
                      Pixel  eine Bildzeile.  Jedes Bit der Bilddaten im
                      Zeichengenerator  bestimmt  die  Helligkeit  eines
                      Pixels,  die Farbe stammt immer aus  COLPF2.  Wenn
                      das  Bit  "0" ist,  wird auch die  Helligkeit  aus
                      COLPF2 genommen, ansonsten wird die Helligkeit aus
                      COLPF1 genommen.  Der Zeichensatz für diesen Modus
                      besteht  aus 128 Zeichen,  somit werden 1024  Byte
                      Zeichengenerator benötigt.  Bit 7 der Zeichennamen
                      (der  Daten im Bildspeicher) steuert das  Aussehen
                      des Zeichens über das Register CHARCNTL/CHARCNTL@.


             "3"      Dieser  ANTIC-Modus wird vom Betriebssystem  nicht
                      benutzt. Wie ANTIC-Modus "2", ist er besonders zur
                      Darstellung vom Schriftzeichen geeignet.  Der  we-
                      sentliche Unterschied zum ANTIC-Modus "2" ist, daß
                      es  mit diesem Modus möglich ist,  die  Buchstaben
                      mit  Unterlängen darzustellen.  Unterlängen werden
                      zum Beispiel für den Buchstaben "g" benötigt:  Der


            106

            *** ATARI INTERN                                   ANTIC ***


                      untere Teil des "g" muß unter den anderen Buchsta-
                      ben liegen. In einer Normalzeile werden 40 Zeichen
                      mit  je  8 Pixeln  horizontal  dargestellt,  dabei
                      belegt jedes Pixel einen halben  Farbtakt.  Neben-
                      einander  liegende  Pixel  können daher  auch  bei
                      diesem  Modus  nur  unterschiedliche  Helligkeiten
                      haben. Jedes Bit aus dem Zeichengenerator bestimmt
                      dabei die Helligkeit eines Pixels,  eine "0" wählt
                      die  Helligkeit  aus COLPF2,  eine "1"  wählt  die
                      Helligkeit aus COLPF1.  Die Farbe stammt immer aus
                      COLPF2.  Eine  Zeile  dieses Modus' ist  10  Pixel
                      hoch,  dabei  belegt  jedes Pixel eine  Bildzeile.
                      Auch bei diesem Modus enthält der Zeichensatz  128
                      Zeichen,  das achte Bit der Zeichennamen (Bytes im
                      Bildspeicher)  steuert  wiederum das Aussehen  des
                      Zeichens  über  Register  CHARCNTL.  Die  folgende
                      Skizze stellt die Darstellung der Zeichen aus  dem
                      Zeichengenerator dar:

ANTIC Modus-3 Zeichen

                                                                     107

            *** ATARI INTERN                                   ANTIC ***


             "4"      Auch dieser Modus wird nicht vom BASIC benutzt. In
                      diesem Modus werden wieder 40 Zeichen pro  Normal-
                      zeile abgebildet.  Die einzelnen Zeichen sind hier
                      aber  nur 4 Pixel breit,  dabei belegt jedes Pixel
                      einen Farbtakt.  Dieser Modus eignet sich  dadurch
                      besonders  für  Darstellungen in Spielen,  die  in
                      vielen Farben dargestellt werden sollen,  aber nur
                      wenig  Speicherraum benötigen  dürfen.  Landkarten
                      zum Beipiel, lassen sich mit diesem Modus sehr gut
                      darstellen.   Die  Zeichen haben eine Höhe  von  8
                      Pixeln, dabei ist jedes Pixel eine Bildzeile hoch.
                      Eine  Zeile in diesem Modus ist also 8  Bildzeilen
                      hoch.  Die  Bits  0 bis 6 der Zeichennamen  wählen
                      auch  hier,  welches Zeichen aus  dem  Zeichensatz
                      dargestellt wird. Der Zeichensatz umfaßt also auch
                      bei diesem Modus 128 Zeichen. Bit 7 der Zeichenna-
                      men  (der  Daten des Bildspeichers) wird  für  die
                      Wahl der Farben verwendet.  Die Farbe eines Pixels
                      wird  außerdem  von den Bits  im  Zeichengenerator
                      gewählt.  Je  zwei im Zeichengenerator nebeneinan-
                      derliegende Bits wählen ein Farbregister aus.  Für
                      die  Farbwahl der Pixel in diesem Modus gilt  fol-
                      gende Tabelle:


                    Bit 7 im            Bitwerte im         Farbregister
                  Zeichennamen       Zeichengenerator

                       0                   00                  COLBAK
                       0                   01                  COLPF0
                       0                   10                  COLPF1
                       0                   11                  COLPF2

                       1                   11                  COLPF3



             "5"      Die  ANTIC-Modi "4" und "5" sind  fast  identisch.
                      Sie unterscheiden sich nur in der Höhe der Zeilen.
                      Während eine Zeile des ANTIC-Modus' "4" acht Bild-
                      zeilen hoch ist,  ist eine Zeile des  ANTIC-Modus'


            108

            *** ATARI INTERN                                   ANTIC ***


                      "5"  16 Bildzeilen hoch.  Aber auch im ANTIC-Modus
                      "5" liegen 8 Pixel in einer Zeile übereinander, im
                      Gegensatz zum ANTIC-Modus "4" ist hier aber  jedes
                      Pixel  zwei Bildzeilen hoch.  Auch der ANTIC-Modus
                      "5" wird nicht vom BASIC unterstützt. Die Wahl der
                      Farben   ist  in  den  ANTIC-Modi  "4"   und   "5"
                      identisch.


             "6"      Dieser ANTIC-Modus wird vom BASIC als  BASIC-Modus
                      "1"  unterstützt.  Bei diesem Modus werden 20 Zei-
                      chen pro Normalzeile abgebildet. Jedes Zeichen ist
                      acht Pixel breit, ein Pixel belegt einen Farbtakt.
                      Eine Zeile dieses Modus ist acht Pixel hoch, jedes
                      Pixel  ist eine Bildzeile hoch.  Für  die  Zeichen
                      stehen  insgesamt  fünf  verschiedene  Farben  zur
                      Verfügung.  Mit  den  Bits 0 bis 5 der  Daten  des
                      Bildspeichers  (der  Zeichennamen) wählt  man  das
                      Zeichen aus.  In diesem Modus besitzt der Zeichen-
                      generator nur 64 Zeichen.  Die Bits 6 und 7 wählen
                      ein Farbregister aus:


                      Bit7 Bit6        Farbregister

                       0    0             COLPF0
                       0    1             COLPF1
                       1    0             COLPF2
                       1    1             COLPF3


                      Für  jedes Pixel steht im Zeichengenerator ein Bit
                      zur Verfügung.  Wenn dieses Bit "0" ist,  hat  das
                      Pixel die Farbe aus COLBAK.  Die Farbe des Farbre-
                      gisters,  das  man  über Bit 6 und 7 gewählt  hat,
                      erscheint  überall dort im Zeichen,  wo  das  ent-
                      sprechende  Bit  des  Zeichengenerators  "1"  ist.
                      Dieser  ANTIC-Modus eignet sich besonders zur Dar-
                      stellung großer Schriften,  also zum Beispiel  für
                      die Schaufensterwerbung.  Die Technik der Farbwahl
                      ermöglicht  es,  verschiedenfarbige Buchstaben mit


                                                                     109

            *** ATARI INTERN                                   ANTIC ***


                      dem  gleichen Zeichengenerator  zu  erzeugen.  Wer
                      allerdings  in einem Zeichen mehr als zwei  Farben
                      benötigt, muß die ANTIC-Gänge "4" oder "5" verwen-
                      den.  Für  "normale" Schriften kann man ohne  wei-
                      teres den normalen Zeichensatz des Betriebssystems
                      verwenden.


             "7"      Dieser ANTIC-Modus entspricht dem BASIC-Modus "2".
                      Die  ANTIC-Modi  "6" und "7" sind fast  identisch.
                      Sie  unterscheiden sich lediglich in der Höhe  der
                      Zeilen.  Während  die Zeilen von  ANTIC-Modus  "6"
                      acht  Bildzeilen hoch sind,  jedes Pixel also eine
                      Bildzeile  hoch  ist,  sind die  Zeilen,  die  mit
                      ANTIC-Modus  "7"  erzeugt  werden,  16  Bildzeilen
                      hoch.  Jedes Pixel ist hier zwei Bildzeilen  hoch.
                      Damit  eignet  sich dieser Modus hervorragend  für
                      Überschriften und für die Werbung.  Auch die  Wahl
                      der  Farben  für die Zeichen und  den  Hintergrund
                      erfolgt im ANTIC-Modus "7" wie im ANTIC-Modus "6".
                      Der  Zeichengenerator  kann  ebenfalls  übernommen
                      werden.






            Auf  der nächsten Seite folgt eine Übersicht über die ANTIC-
            Schriftgrafik-Modi.













            110

            *** ATARI INTERN                                   ANTIC ***


            ANTIC-Modus                   "2"  "3"  "4"  "5"  "6"  "7"

            Basic-Modus                   "0"  ---  ---  ---  "1"  "2"



            Anzahl der Zeichen            40   40   40   40   20   20
            pro Zeile

            Anzahl der Pixel              8    8    4    4    8    8
            pro Zeichen (horizont.)

            Anzahl der Farbtakte          1/2  1/2  1    1    1    1
            pro Pixel (horizont.)

            Anzahl der Pixel pro          8    8    8    8    8    8
            Zeichen (vertikal)

            Anzahl der Bildzeilen         8    10   8    16   8    16
            pro Zeile

            Anzahl der Bildzeilen         1    1    1    2    1    2
            pro Pixel

            Anzahl der Farben             1,5  1,5  5    5    5    5

            Anzahl der Buchstaben         128  128  128  128  64   64
            pro Zeichensatz

            Anzahl der Bytes              1K   1K   1K   1K   512  512
            pro Zeichensatz

            Anzahl der Bytes im           40   40   40   40   20   20
            Bildspeicher pro Zeile

            Anzahl der Datenbits aus
            dem Zeichengenerator          1    1    2    2    1    1
            pro Pixel





                                                                     111

            *** ATARI INTERN                                   ANTIC ***


            ******************************************
            *                                        *
            *                                        *
            *   SCROLLING (VERSCHIEBEN DES BILDES)   *
            *   ----------------------------------   *
            *                                        *
            ******************************************


            Häufig  existiert das Problem,  mehr auf dem Bildschirm dar-
            stellen zu müssen,  als Platz findet. Eine Möglichkeit wäre,
            das  gesamte Bild nach bestimmten Tastenkommandos  zu  wech-
            seln, eine andere automatisch im Programmablauf zwischen den
            verschiedenen Bildern umzuschalten.

            Die  meisten  Mikrocomputern  bieten höchstens  die  Auswahl
            zwischen zwei Bildspeichern und somit zwei  Bildern.  Möchte
            man  zwischen  mehr Bildern umschalten oder,  wenn  nur  ein
            Bildspeicher  vorhanden ist,  überhaupt ein zweites Bild an-
            zeigen, muß der gesamte Inhalt des Bildspeichers von der CPU
            verschoben werden.  Da dies für die CPU sehr arbeitsintensiv
            ist, geschieht es zu langsam, Störungen des Bildes sind kaum
            zu  vermeiden.  Der  Atari bietet dagegen  eine  komfortable
            Möglichkeit, das Bild zu wechseln. Man braucht lediglich die
            Adresse  des  ANTIC-Programms zu wechseln.  Wenn das  ANTIC-
            Programm für beide Bilder identisch ist,  reicht es aus,  im
            ANTIC-Programm den Befehl, der die Adresse des Bildspeichers
            in den Bildspeicherzählers schreibt, jeweils abzuändern.


            Gerade bei der Bearbeitung großer Tabellen oder beim Schrei-
            ben  von  Texten  mit mehr als 40 Zeichen  pro  Zeile,  wird
            jedoch ein Bildwechsel als störend empfunden.


            Eine  weitaus bessere Möglichkeit,  mehr auf dem  Bildschirm
            darzustellen,  als auf einmal auf ihn paßt, ist es, das Bild
            vertikal oder horizotal in kleinen Schritten zu verschieben.
            Der Bildschirm fungiert nur noch als Fenster,  durch das man
            ein  größeres Feld betrachtet.  Auf diese Art  entsteht  der
            Eindruck, auf einem großen Bild zu arbeiten.


            112

            *** ATARI INTERN                                   ANTIC ***


            Auch  dies  ist beim Atari leichter möglich als bei  anderen
            Mikrocomputern.  Bei vielen anderen Geräten muß der  gesamte
            Bildspeicherinhalt verschoben werden.  Dabei ist der Rechen-
            aufwand  der CPU enorm.  Ein sich nur langsam verschiebendes
            Bild ist die Folge.  Der Atari ermöglich es,  für jede Zeile
            den Bildspeicherzähler neu durch das ANTIC-Programm laden zu
            lassen.  Es können auch mehr Zeilen,  als auf den Bildschirm
            passen,  bereits  im Speicher vorbereitet werden (ein  Bild-
            speicher  mit mehr Zeilen,  als auf den  Bildschirm  passen,
            wird  dazu  angelegt).  Soll  das  Bild  verschoben  werden,
            braucht  man nur das ANTIC-Programm entsprechend zu  ändern.
            Die  Änderung des ANTIC-Programms erfordert weniger  Rechen-
            aufwand  als  die  Verschiebung des  gesamten  Bildspeicher-
            inhalts.



            BEISPIEL:
            ---------

            Der Bildschirm ist in zwei Teile zu unterteilen.  Der  obere
            Teil  soll  auf dem Bilschirm 16 Zeilen mit je  40  normalen
            Buchstaben  umfassen,  sich aber über ein Feld von 32 *  256
            Zeichen bewegen lassen.  Der untere Teil des Bildschirm soll
            8 feststehende Textzeilen umfassen. Das Programm, das diesen
            Bildschirm  benötigt,  läßt  den Arbeitsspeicher ab  Adresse
            $5000 frei.


            Das folgende ANTIC-Programm liefert ein derartiges Bild:
            (alle Daten und Adressen hexadezimal):












                                                                     113

            *** ATARI INTERN                                   ANTIC ***


            ADRESSE        DATEN               KOMMENTAR
            -------        -----               ---------


                      das ANTIC-Programm für das Bild:

             5000          70
                           70                  24 Leerzeilen
                           70

             5003          42                  1. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + 0      geladen
                           42                  2. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + 1      geladen
                           42                  3. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + 2      geladen
                           42                  4. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + 3      geladen
                           .
                           .
                           .
                           .
                           .
                           .
                           .
                           42                  15. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + $e     geladen
                           42                  16. Bildzeile
                           XPOS                Bildspeicherzähler wird
                           YPOS + $60 + $f     geladen

             5030          42                  1. Zeile des
                           00                  feststehenden Bildteils
                           55                  Bildspeicherzähler laden
                           02                  2. Zeile
                           02                  3. Zeile


            114

            *** ATARI INTERN                                   ANTIC ***


                           .                   .
                           .                   .
                           .                   .
                           .                   .
                           02                  7. Zeile
                           02                  8. Zeile
             503a          41                  springe  nach  $5000  und
                           00                  warte  auf das  Ende  der
                           50                  Vertikalsynchronisation

                 hier endet das ANTIC-Programm


             5500          Beginn  des Bildspeichers  des  feststehenden
                           Bildteils (1. Zeile)
             5528          2. Zeile des feststehenden Bildteils
             5550          3. Zeile des feststehenden Bildteils
             5578          4. Zeile des feststehenden Bildteils
             55a0          5. Zeile des feststehenden Bildteils
             55c8          6. Zeile des feststehenden Bildteils
             55f0          7. Zeile des feststehenden Bildteils
             5618          8. Zeile des feststehenden Bildteils
             563f          ENDE   des  Bildspeichers  des  feststehenden
                           Bildteils


             6000          Beginn des Feldes (mit 32 * 256 Zeichen)  für
                           den verschiebbaren Teil des Bildes
                           1. Zeile des Feldes
             6100          2. Zeile des Feldes
             6200          3. Zeile des Feldes
             6300          4. Zeile des Feldes
             6400          5. Zeile des Feldes
             6500          6. Zeile des Feldes
             .             .
             .             .
             .             .
             7d00          31. Zeile des Feldes
             7e00          32. Zeile des Feldes
             7fff          ENDE  des Feldes für den verschiebbaren  Teil
                           des Bildes


                                                                     115

            *** ATARI INTERN                                   ANTIC ***


            Dieses Beispiel ist bewußt sehr einfach aufgebaut. Bei jeder
            Änderung der "Position" des Bildes über dem Speicherfeld muß
            das ANTIC-Programm geändert werden.  Es soll dabei nach  dem
            im  Beispiel  angegebenen Muster erstellt werden.  Für  XPOS
            wird  die horizontale Position im  Speicherfeld  eingesetzt,
            für YPOS die vertikale.  Es muß darauf geachtet werden,  daß
            XPOS  nie  größer als $d8 und YPOS nie größer als $10  wird.
            Ansonsten treten Fehler auf,  weil die Zeilenenden des Bild-
            schirms  die Zeilenenden des  Speicherfeldes  überschreiten.
            Das Beispiel nutzt den Speicher auch nicht besonders gut aus
            (  es  hinterläßt große Lücken zwischen den einzelnen  Spei-
            cherfeldern),  dafür  ergeben  sich bei der  Berechnung  der
            Adressen aber meist "glatte" Werte.

            Natürlich  kann man dieses Beispiel auch auf  hochauflösende
            ANTIC-Modi  übertragen.  Allerdings wird dann sehr viel  Ar-
            beitsspeicher  für das Bildspeicherfeld benötigt.  Das  Ver-
            schieben  von Bildteilen "lohnt" sich am meisten bei  ANTIC-
            Modi, die wenig Speicherraum benötigen.



            Einen  Nachteil  hat die beschriebene  Methode  jedoch.  Man
            erhält  kein "pixelweise" ruhig abrollendes Bild,  der Bild-
            schirm "springt" immer horizontal um ein Zeichen und  verti-
            kal um eine Zeile.

            Der  ANTIC bietet jedoch sehr komfortable Möglichkeiten  zur
            Verschiebung von Bildteilen oder ganzen Bildern.  Es ist mit
            dem ANTIC möglich, das Bild horizontal um einzelne Farbtakte
            und  vertikal um einzelne Bildzeilen zu  verschieben.  Dabei
            bleiben  die  Spieler und Geschosse jedoch auf  ihrer  alten
            Position  stehen.  Sie werden durch die Verschiebungen nicht
            beeinflußt.

            Im ANTIC stehen zwei Register zur Verfügung,  die die  Fein-
            verschiebung  des Bildes oder eines Bildteiles in horizonta-
            ler  und vertikaler Richtung steuern.  Für  die  horizontale
            Verschiebung, das horizontale Scrolling, ist Register

            HSCROL         54276     $d404


            116

            *** ATARI INTERN                                   ANTIC ***


            zuständig.   Die   vertikale  Verschiebung,   das  vertikale
            Scrolling, wird von Register

            VSCROL         54277     $d405

            gesteuert.


            Von  diesen  Registern  werden jedoch nicht  unbedingt  alle
            Bildzeilen beeinflußt.  In jedem ANTIC-Befehl,  der eine Er-
            zeugung von Bildzeilen zur Folge hat (also nicht in Leerzei-
            len-Befehlen), stehen zwei Bits zur Verfügung, die die hori-
            zontale bzw.  die vertikale Verschiebung der von diesem  Be-
            fehl erzeugten Bildzeilen einschalten.  Auf diese Art ist es
            möglich,  entweder  das  ganze Bild oder auch  nur  einzelne
            Teile  des Bildes zu verschieben.  Die horizontale Verschie-
            bung wird von

            Bit 4

            des  ANTIC-Befehls  eingeschaltet.  Für das Einschalten  der
            vertikalen Verschiebung ist

            Bit 5

            des ANTIC-Befehls zuständig.  Hierbei muß der Teil des  Bil-
            des, der horizontal verschoben wird, nicht mit dem identisch
            sein, der vertikal verschoben wird.





            Die vertikale Verschiebung
            --------------------------

            Bei einem Grafik-Modus,  der mit jedem ANTIC-Befehl nur eine
            Bildzeile  erzeugt,  kann  mit der im  Beispiel  verwendeten
            Methode  das Bild um einzelne Bildzeilen verschoben  werden.
            Bei anderen Modi,  zum Beispiel bei Schriftgrafik-Modi,  er-
            zeugt  jeder  ANTIC-Befehl gleich mehrere  Bildzeilen.  Hier


                                                                     117

            *** ATARI INTERN                                   ANTIC ***


            ergibt sich das Problem,  daß  mit der im Beispiel verwende-
            ten  Methode das Bild nicht um einzelne Zeilen  verschiebbar
            ist.


            Der  ANTIC bietet mit dem VSCROL-Register  die  Möglichkeit,
            auch  in ANTIC-Modi,  die mehrere Bildzeilen  erzeugen,  das
            Bild um einzelne Bildzeilen zu verschieben.  Es werden  alle
            Bildzeilen,  bei denen Bit 5 im ANTIC-Befehl gesetzt ist, um
            die  Anzahl  von  Bildzeilen nach oben  verschoben,  die  in
            VSCROL  steht.  Die letzte Zeile,  die  derartig  verschoben
            wird,  ist die erste Zeile,  bei der Bit 5 des ANTIC-Befehls
            nicht gesetzt ist.  Um zu verstehen,  wie der ANTIC die Ver-
            schiebung erreicht, muß man sich zuerst den normalen Vorgang
            der Erzeugung der Bildzeilen vor Augen führen:

            Der  ANTIC besitzt intern einen  Zähler,  der  kontrolliert,
            welche  Bildzeile der ANTIC-Programm-Zeile gerade abgebildet
            wird.  Dieser Zähler wird in der Literatur auch oft als DCTR
            bezeichnet.  DCTR steht dabei für "Deltacontrol",  das  Wort
            "Delta"  wird in den meisten Naturwissenschaften für "Diffe-
            renz"  verwendet.  Dieser Zähler zählt die Bildzeilen von  0
            bis  zu einer höchsten Zahl,  die durch den ANTIC-Modus  be-
            stimmt wird. Diese höchste Zahl ist immer um eins  niedriger
            als die Anzahl der Bildzeilen, die mit dem jeweiligen ANTIC-
            Modus erzeugt werden.  Die folgende Tabelle soll noch einmal
            den  Zählerhöchststand (das Maximum von DCTR) der  einzelnen
            ANTIC-Modi zeigen:



             ANTIC-Modus           Zählerhöchststand

                "2"                       7
                "3"                       9
                "4"                       7
                "5"                      15
                "6"                       7
                "7"                      15




            118

            *** ATARI INTERN                                   ANTIC ***


                "8"                       7
                "9"                       3
                "A"                       3
                "B"                       1
                "C"                       0
                "D"                       1
                "E"                       0
                "F"                       0


            Bei ANTIC-Modi,  bei denen nur eine Bildzeile erzeugt  wird,
            zählt der DCTR-Zähler nicht. Daher ist der Zählerhöchststand
            in diesen Modi auch "0".  Bei diesen Modi ist eine Verschie-
            bung  des Bildes um einzelne Bildzeilen auch ohne  Benutzung
            von VSCROL möglich.


            Gewöhnlich wird durch das ANTIC-Programm ein Block von  Zei-
            len definiert, der verschiebbar ist. Bei der Darstellung der
            ersten Zeile dieses verschiebbaren Blocks (der ersten Zeile,
            bei  der  Bit 5 des ANTIC-Befehls gesetzt ist),  fängt  DCTR
            nicht wie üblich mit "0" an zu zählen, sondern mit dem Wert,
            der  in VSCROL steht.  Dadurch fehlen Bildzeilen  im  oberen
            Teil der Zeile. Die Zeile ist nach oben gerückt worden.

            Alle  weiteren  Zeilen,  bei denen  Bit 5 des  ANTIC-Befehls
            gesetzt  ist,  werden  direkt an die  letzte  Bildzeile  der
            jeweils  vorhergehenden  Zeile angefügt.  Sie werden  normal
            dargestellt.  Da  bei der ersten Zeile   der  verschiebbaren
            Zeilen  oben  Bildzeilen fehlen,  ist der gesamte Block nach
            oben verschoben.

            Bei  der ersten Zeile,  bei der Bit 5 im ANTIC-Befehl  nicht
            mehr  gesetzt  ist,  beginnt der Zähler DCTR zwar  bei  "0",
            zählt aber nur bis zu dem Wert der in VSCROL steht.  Dadurch
            erscheint  diese  Zeile  als von unten  gekürzt.  Die  erste
            Zeile,  bei  der Bit 5 des ANTIC-Befehls nicht mehr  gesetzt
            ist,  ist  also die letzte Zeile,  die nach oben  verschoben
            wird.




                                                                     119

            *** ATARI INTERN                                   ANTIC ***


            Es wäre unklug, den Wert im Register VSCROL (also die Anzahl
            der  Bildzeilen,  um  die ein Bildblock  nach  oben  gerückt
            werden  soll),  größer zu wählen,  als den Maximalstand  des
            DCTR-Zählers.  Meistens werden die "überflüssigen" Bits ein-
            fach ignoriert, aber gerade bei ANTIC-Modus "3" kann es auch
            zu anderen Störungen kommen.


            Soll  der gesamte Bildschirm oder nur die  untersten  Zeilen
            verschiebbar  gemacht werden,  so muß eine weitere Sache be-
            achtet  werden:  Wenn auch bei der letzten Zeile des  Bildes
            Bit  5 des dazugehörigen ANTIC-Befehls  gesetzt  ist,  rollt
            diese Zeile nicht in das Bild,  sondern springt hinein.  Der
            ANTIC kann nicht erkennen,  daß es sich bei dieser Zeile  um
            die  letzte zu verschiebende Zeile handelt.  Damit der ANTIC
            auch  diese Zeile richtig behandelt,  muß bei ihr Bit 5  des
            ANTIC-Befehls gelöscht werden.  Jetzt kann der ANTIC  erken-
            nen,  daß  dies die letzte zu verschiebende Zeile ist und er
            "rollt" auch diese Zeile ins Bild.


            Mit dem VSCROL-Register kann man das Bild natürlich nicht um
            mehr  als eine Zeile,  das heißt um eine bis 15  Bildzeilen,
            abrollen  lassen.  Meist möchte man das Bild aber über  eine
            sehr viel größere Fläche bewegen.  Um dies zu erreichen, muß
            die Technik der groben Verschiebung,  die vorher im Beispiel
            verwendet  wurde,  mit der Feinverschiebung mit dem  VSCROL-
            Register kombiniert werden.  Beim Aufwärtsrollen eines  nor-
            malen  Textes,  bei dem jeder ANTIC-Befehl 8 Bildzeilen  er-
            zeugt  (zum Beispiel ANTIC-Modus "2"),  sollte man das  Bild
            erst mit 7 Feinverschiebungen nach oben rollen.  Statt einer
            (ohnehin nicht möglichen) achten Feinverschiebung, wird eine
            Grobverschiebung um eine Zeile vorgenommen und VSCROL wieder
            auf "0" gesetzt.  Beim Abwärtsrollen wird dagegen zuerst die
            Grobverschiebung um eine Zeile vorgenommen. Gleichzeitig mit
            dieser  Grobverschiebung,  wird aber VSCROL auf "7" gesetzt.
            Die  Verschiebungen um die nächsten sieben  Bildzeilen  sind
            reine Feinverschiebungen mit VSCROL.





            120

            *** ATARI INTERN                                   ANTIC ***


            Auf diese Art erhält man ein Bild, das über eine Fläche, die
            nur  durch den verfügbaren Speicherraum  begrenzt  wird,  um
            einzelne Bildzeilen verschoben werden kann.



            Die  folgende  Grafik soll das Prinzip der  vertikalen  Ver-
            schiebung demonstrieren:

Horizontalverschiebung

            Die horizontale Verschiebung
            ----------------------------

            Im  Beispiel wurde gezeigt,  wie das Bild um  jeweils  ganze
            Bytes  des Bildspeichers horizontal verschoben werden  kann.
            Bei  der  Verschiebung  um  ganze  Bytes  des  Bildspeichers
            springt das Bild jedoch, da jedes Byte des Bildspeichers, je
            nach ANTIC-Modus, unterschiedlich viele Pixel in einer Bild-
            zeile,  also auch unterschiedlich viele Farbtakte,  erzeugt.


                                                                     121

            *** ATARI INTERN                                   ANTIC ***


            Die folgende Tabelle zeigt noch einmal,  welcher ANTIC-Modus
            in einer Bildzeile wieviele Farbtakte und Pixel pro Byte des
            Bildspeichers erzeugt:


              ANTIC-MODUS     Anzahl der Pixel      Anzahl der Farbtakte
                               pro Byte des Bildspeichers und Bildzeile


                 "2"                 8                        4
                 "3"                 8                        4
                 "4"                 4                        4
                 "5"                 4                        4
                 "6"                 8                        8
                 "7"                 8                        8

                 "8"                 4                       16
                 "9"                 8                       16
                 "A"                 4                        8
                 "B"                 8                        8
                 "C"                 8                        8
                 "D"                 4                        4
                 "E"                 4                        4
                 "F"                 8                        4


            Zum  Beispiel  erzeugt  im ANTIC-Modus "B"  jedes  Byte  des
            Bildspeichers  in zwei Bildzeilen je 8 Pixel.  Diese 8 Pixel
            sind zusammen 8 Farbtakte breit.  Anders ausgedrückt erzeugt
            ein  Byte des Bildspeichers in diesem ANTIC-Modus  in  jeder
            der beiden Bildzeilen 8 Farbtakte.



            Der  ANTIC bietet mit dem Register HSCROL eine  Möglichkeit,
            das  Bild  auch  um einzelne Farbtakte  zu  verschieben.  Er
            verschiebt die Bildzeilen,  bei deren ANTIC-Befehl das Bit 4
            gesetzt ist,  um die Anzahl von Farbtakten nach rechts,  die
            in  Register HSCROL steht.  Dabei sind nur die  untersten  4
            Bits  von  HSCROL  gültig.  Das Bild läßt sich also  nur  um
            maximal 15 Farbtakte verschieben.  Für darüber hinausgehende


            122

            *** ATARI INTERN                                   ANTIC ***


            Verschiebungen gilt,  wie beim vertikalen  Verschieben,  daß
            diese  Art der "Feinverschiebung" mit der anfangs  gezeigten
            Grobverschiebung kombiniert werden muß.


            Wenn  der  ANTIC einen Befehl liest,  bei dem Bit 4  gesetzt
            ist,  unterdrückt er eine,  dem Inhalt von HSCROL   entspre-
            chende,  Anzahl  von Farbtakten (und somit Pixeln) am Anfang
            jeder, zu diesem ANTIC-Befehl gehörigen, Bildzeile.


            Der ANTIC benötigt zur Darstellung von horizontal verschobe-
            nen Zeilen mehr Daten,  als bei der Darstellung von  Normal-
            zeilen,  da  ja zum Beispiel bei Textmodi mit 40 Zeichen pro
            Zeile, links das 41. Zeichen auftaucht.

            Daher  holt  der ANTIC sich,  wenn im Register  DMACNTL  das
            schmale  Spielfeld gewählt wurde,  pro Zeile die Anzahl  von
            Bytes  aus dem Speicher,  die sonst beim normalen  Spielfeld
            pro Zeile verwendet werden.

            Bei normaler Spielfeldbreite liest der ANTIC die Anzahl  von
            Bytes, die er sonst beim breiten Spielfeld lesen würde.

            Beim  breiten Spielfeld kommt kein Wechsel der Byteanzahl in
            Frage, es wird Hintergrundfarbe eingeschoben.


            Normalerweise wird man bei Verwendung der horizontalen Fein-
            verschiebung  ohnehin  bei jedem ANTIC-Befehl den  Bildspei-
            cherzähler neu setzen (wie auch im Beispiel).  Daher ist  es
            nur  bedingt interessant,  wieviele Bytes der ANTIC tatsäch-
            lich für eine Zeile liest.  Man muß lediglich darauf achten,
            daß  der ANTIC keine Bytes aus Speicherstellen,  die  hinter
            dem  eigentlichen Zeilenende  liegen,  liest.  Außerdem  ist
            wichtig,  daß  bei  horizontaler Verschiebung am Ende  einer
            Zeile meist ein weiteres Zeichen auftaucht (bei Modi mit  40
            Zeichen pro Zeile das 41. Zeichen).





                                                                     123

            *** ATARI INTERN                                   ANTIC ***













































            124