Die Textseiten des Buchs in vorformatiertem ASCII, zum Teil auch schon in echter HTML-Darstellung.

Hauptkategorie: 8-Bitter
Erstellt: 13 November 2011
Zugriffe: 4226

Lieber Leser,

gleich zu Anfang dieser Einleitung möchten wir uns bei Ihnen bedanken, daß Sie dieses Kapitel überhaupt lesen. Hoffentlich blättern Sie nicht jetzt gleich um. Dies wäre kurzsichtig gehandelt, wie die Autoren aus eigener Erfahrung berichten können.

Sicherlich haben Sie wie wir nach dem Kauf Ihres Atari, sofern Sie einen besitzen, zuerst das Gerät ausprobiert, bevor Sie die Bedienungsanleitung gelesen haben. Bei genauerem Studium der mitgelieferten Dokumentation werden Sie dann sicherlich auch festgestellt haben, daß die interessantesten Angaben fehlen.

Dies ist in der Computerbranche leider üblich. Zudem gibt es über das Atari-System eine Reihe von Einzelpublikationen, die jeweils nur ein Spezialgebiet ohne Betrachtung anderer und oft auch unvollständig oder gar falsch erfassen. Bitte denken Sie nicht, daß wir für unser Buch Vollständigkeit oder gar Fehlerfreiheit beanspruchen; wir versuchen lediglich, ein Buch zu schreiben, das möglichst umfassend die Atari - Hardware und das Betriebssystem erläutert und allein schon dadurch die vielfältigen Möglichkeiten des Atari aufzeigt. Zudem werden wir an Stellen, die uns problematisch erscheinen, Beispiele einfügen.

Dieses Buch ist also besonders für den gedacht, der das Prinzip des Computers und das Basic bereits ausreichend beherrscht, vielleicht auch schon weiß, was hexadezimale Zahlen sind. Im nächsten Kapitel erklären wir auch noch kurz den Umgang mit dem uns normalerweise leider fremden Zahlensystem.

Wenn man ein Buch über Computer schreibt oder auch einfach nur über sie spricht, so stellt sich immer die Frage nach der Wortwahl. Da in der gesamten Informatik Englisch Fachsprache ist, sind praktisch alle Fachausdrücke ebenfalls Englisch. Man muß sich also darüber klar werden, welche Ausdrücke man eindeutscht und für welche man den englischen Ausdruck beibehält.

Bereits in der Branche akzeptierte Fachausdrücke sollte man unbehandelt lassen, allerdings nur, sofern es nicht bereits einen ebenso akzeptierten deutschen Ausdruck dafür gibt. Dies sichert nach einiger Eingewöhnungszeit leichtere Verständigung mit anderen. Bei der Übersetzung oder beim "Eindeutschen" sollte man darauf achten, wenigstens "richtiges" Deutsch zu benutzen. Wer von "editieren" redet, weiß nicht, daß die Übersetzung schon in Form von "edieren" vorhanden ist. Ungläubige mögen den Duden zu Rate ziehen.

Weiter ist unbedingt zu beachten, daß keine sogenannten "Sekretärinnenübersetzungen" entstehen. Zum Beispiel ist es unsinnig und sogar falsch, den Ausdruck "Symbol table" in "Zeichentisch" zu übersetzen, richtig wäre "Symboltabelle". Allgemein sollte man immer versuchen, ein gesundes Mittelmaß zu finden. So ist es unsinnig, den Fachausdruck "Editor" korrekt in "Textbearbeiter" zu übersetzen. Wer jedoch bei Leitungen von "Lines" spricht, täuscht im allgemeinen Fachwissen vor und sollte weiter nur versuchen, Gäste von Stehparties zu beeindrucken und sich nicht wundern, wenn ihn wirkliche Fachleute belächeln.

Vielleicht kann man aber auch durch eine günstig gewählte Übersetzung das englischsprachige Original an Klarheit übertreffen. Wir werden zum Beispiel statt des in Deutschland durchaus üblichen Ausdrucks "Display-List" den Begriff "ANTIC-Programm" verwenden.

Ein weiteres Problem ergibt sich bei der Verwendung der Artikel bei englisch belassenen Ausdrücken. Soll man den Artikel übersetzen? Wir glauben, daß es dafür keine allgemeingültige Regel gibt. Allerdings hat sich für die meisten Wörter eine Form besonders durch den Univeritätsbetrieb eingebürgert. Wir versuchen, diese, soweit sie uns bekannt ist, zu verwenden.

In der Öffentlichkeit hat Ataris Ruf leider etwas gelitten. Dies liegt vor allem daran, daß Atari eine Zeitlang durch konsequentes Nichteinhalten jeglicher Liefertermine glänzte. Durch die in dieser Zeit sehr hohen Verkaufszahlen der Konkurrenz, im Speziellen Commodore C-64, erhielten die Atari-Geräte den Ruf, auch technisch grundsätzlich schlechter zu sein.

Wir meinen dagegen, mit der Ansicht, beide Geräte auf eine Stufe zu stellen, der Wahrheit wesentlich näher zu kommen. Natürlich könnte man anführen, daß der C-64 eine wesentlich einfachere Sprite-Verarbeitung hat, das heißt, daß sich sehr leicht bewegliche Spielfiguren darstellen und verarbeiten lassen. Für den versierten Atari-Programmierer bieten sich dagegen mit der Player-Missile-Grafik zwar nicht so leicht zu programmierende, aber wesentlich effektvollere Bildaufbauten. Mit entsprechenden Tricks lassen sich auch erheblich mehr Objekte, als "in der Grundausstattung" vorhanden, darstellen.

Den größten Leistungsvorsprung findet man beim Atari im ANTIC-Baustein. Dieser Baustein stellt einen zweiten Prozessor dar, der auch über einen eigenen Maschinencode verfügt. Die einzelnen Befehle des ANTIC erzeugen bei ihrer Ausführung jeweils Teile des Gesamtbildes. Dabei ist es möglich, verschiedene Grafikbetriebsarten, sogenannte Grafikmodes, auf einem Bild frei zu kombinieren. Zum Beispiel kann man diverse Textdarstellungen mit unterschiedlich hoch auflösenden Blockgrafikmodes auf einem Bild kombinieren. Dieses Konzept findet man auch bei erheblich teureren Systemen nur sehr selten.

Die Tonerzeugung auf den vier grundsätzlich unabhängigen Tonkanälen ist ebenfalls sehr sauber entwickelt. Sie kann sich nach unserer Meinung mit allen anderen auf dem Homecomputermarkt befindlichen Systemen messen.

Das Basic ist aufgrund seiner eingeschränkten Größe in der Verarbeitung von Strings (Zeichenketten) unglücklich und gewöhnungsbedürftig, liefert aber gerade für den Einsteiger vielfältige Möglichkeiten durch zahlreiche schnelle Grafikund Tonbefehle. Es ist grundsätzlich leider nicht üblich, mit dem bereits eingebauten Basic die Hardware so leicht und effizient auszunutzen, wie es erfreulicherweise bei Atari der Fall ist. Gerade für den Anfänger ist es angenehm, wenn er häufig benötigte Befehle nicht erst in teuer zu erstehenden oder illegal (schwarz) zu kopierenden Erweiterungen findet.

Dieses Buch soll sowohl "durchlesbares" Lehrbuch als auch Nachschlagewerk sein. Wir haben daher sowohl ein Register der verwendeten LABELS, als auch ein INHALTSREGISTER im Buch aufgenommen. Dabei haben wir beide alphabetisch geordnet. Das Labelregister verweist auf die hexadezimalen Adressen, die das jeweilige Label repräsentiert. Das Kapitel über das Betriebssystem ist grundsätzlich nach Adressen geordnet. Das Inhaltsregister verweist dagegen auf Seitenzahlen.

Hexadezimale Zahlenwerte werden wir immer durch ein vorangestelltes "$"-Zeichen kennzeichnen. Binäre Werte erhalten an Stellen, die Unklarheiten mit sich bringen können, ein vorangestelltes "%"-Zeichen.

Hauptkategorie: 8-Bitter
Erstellt: 13 November 2011
Zugriffe: 4474

Die Atari-Mikrocomputer sind vom Konzept her eindeutig als Hobbygeräte entworfen. Ihre Hard- und Softwareeigenschaften bieten verschiedene Anwendungen besonders an. So eignen sich die Atari-Geräte durch ihre Ton- und Bilddeigenschaften besonders zum Videospielcomputer. Natürlich sind sie ebenso zum Erlernen von BASIC geeignet. Aber schon das BASIC ist mehr auf spielerische Anwendungen, als auf kommerzielle, ausgelegt. Genauso ist es möglich, mit Zusätzen auch andere Programmiersprachen, wie zum Beispiel Assembler oder auch PILOT, PASCAL, C oder ACTION!, kennenzulernen. Auch für eine Sprache wie Forth eignet sich der Atari hervorragend. Eine weitere Anwendung wäre die Verwendung des Atari als Lerncomputer für den Schulstoff (zum Beispiel für Vokabeln). Sicher kann man den Atari auch im Haushalt verwenden. So ließe sich beispielsweise eine Budgetüberwachung realisieren oder eine Schallplattenkartei aufbauen. Auch kürzere Briefe ließen sich durch den Atari leicht und effizient erstellen.

Jedoch erreicht der Atari hier seine Grenze. Größere Datenmengen lassen sich mit ihm nur sehr schwer bewältigen, da seine Diskettenlaufwerke nicht groß und schnell genug sind. Auch ist es mühsam, ihn als Textsystem zu gebrauchen, da sein Bildschirm nicht über die, für die meisten Zwecke benötigten, 80 Zeichen pro Zeile verfügt. Für kommerzielle Anwendungen sind die Atari-Geräte also nur sehr bedingt geeignet. Auch für "diskettenorientierte" Programmiersprachen, wie PASCAL, FORTRAN oder insbesondere COBOL, ist der Atari in der praktischen Arbeit nicht unbedingt geeignet.

Um den Atari in seinen Einzelheiten zu verstehen, sollte man sich sein Konzept, seine prinzipielle Struktur vor Augen führen. Erst wenn man diese "durchschaut" hat, ist es sinnvoll auf die Einzelheiten der hochintegrierten Peripheriebausteine (POKEY, ANTIC, GTIA und PIA) und des Betriebssystems einzugehen.

Bei den Atari-Geräten handelt es sich um Mikrocomputer, die mit dem weit verbreiteten Mikroprozessor "6502" ausgerüstet sind.

Sicherlich kann man sich angesichts der auf dem Markt befindlichen Prozessoren fragen, ob dieser Prozessor überhaupt noch zeitgemäß ist. Gerade die 16-Bit bzw. 32-Bit-Prozessoren sind erheblich leistungsfähiger. Auch gibt es in diesen Prozessorfamilien Bausteine, die über einen nur 8 Bit breiten Datenbus verfügen, die also kaum eine komplexere Hardware benötigen, als der 6502. Zur Zeit, als die ersten Atari-Mikrocomputer entwickelt wurden, gab es diese Prozessoren allerdings noch nicht in den benötigten Stückzahlen auf dem Markt. Auch sind sie noch heute wesentlich teurer als der 6502.

Andere zu dieser Zeit verfügbare 8-Bit-Prozessoren, wie zum Beispiel der Z80, der 8080/8085, der 6800/6802 oder auch der 6809, haben entweder keinen entscheidenden Leistungsvorsprung gegenüber dem 6502 oder sind selbst relativ teuer (oder waren zum Zeitpunkt der Entwicklung der ersten AtariGeräte relativ teuer). Man sollte aber ehrlich anmerken, daß bei der Auswahl auch ganz andere Gesichtspunkte eine Rolle spielen. So kommt es bei derartigen "Großprojekten" (in der Stückzahl) auch auf das Vertrauen, und besonders die Verbindungen zum Lieferanten an. Auch müssen die personellen Möglichkeiten für eine Entwicklung vorhanden sein oder entsprechende Entwickler angeworben werden. Sicher spielen besondere Vorlieben der maßgeblichen Leute für einen bestimmten Prozessor auch noch eine Rolle.

Bei der Entwicklung der 600XL- und 800XL-Geräte wählte Atari wiederum einen 6502-Prozessor. Es wurde eine weiterentwickelte Version der bekannten CPU mit der Bezeichnung 6502C, die aber vollständig softwarekompatibel ist, verwendet. Dies geschah wohl vor allem mit Blick auf eine größtmögliche Kompatibilität zu den alten Modellen. So konnte man viele Programme und Programmteile direkt übernehmen.

Der 6502 hat außerdem den Vorteil, daß sein Systemtakt aus zwei gleichlangen Phasen besteht. Der Prozessor greift jeweils nur während der zweiten Phase auf die Peripherie bzw. auf den Speicher zu. Die Zugriffe erfolgen also immer an den gleichen "Stellen" des Systemtaktes. Dieses Konzept vereinfacht die Hardware anderer Bausteine im System, die ohne Umweg über die CPU direkt auf den Speicher zugreifen sollen und dazu die CPU stoppen müssen. In diesem Detail unterscheidet sich der 6502 wesentlich von anderen Mikroprozessoren wie zum Beispiel vom Z80, 8080 oder auch 8085.

Der 6502-Prozessor wird im Atari mit 1,77 MHz betrieben. Diese Frequenz liegt erheblich über der bei 6502-Rechnern dieser Preisklasse üblichen Arbeitsfrequenz.

Die normale Eingabe erfolgt über eine Tastatur. Die Belegung entspricht im wesentlichen der in Amerika üblichen Form (QWERTY). Einige Sonderzeichen sind beim Atari jedoch an anderer Stelle zu finden als bei anderen Computern. Die Umlaute oder andere, für andere Sprachen nötige Sonderzeichen oder Sonderformen von Buchstaben, sind beim Atari nicht ohne weiteres über die Tastatur verfügbar. Dies ist bei Computern in dieser Preisklasse aber leider üblich zu nennen. Der Atari 400 war mit einer Folientastatur ausgestattet. Das größere Modell, der Atari 800, besaß dagegen eine Tastatur mit "normalen" Tasten (ähnlich Schreibmaschinentasten). Die neuen Atari-Geräte, also der Atari 600XL und der Atari 800XL, verfügen grundsätzlich über "normale" Tasten. Die Tastaturbelegungen der Geräte unterscheiden sich nur in sehr kleinen Details, es gibt also nicht, wie bei anderen Herstellern, für jeden neuen Computer auch eine neue Tastaturbelegung. Zusätzlich zum Haupttastenfeld gibt es noch rechts auf dem Gerät die Zusatztasten "SELECT", "OPTION" und "START".

Zur Abfrage der Tastatur wurde keiner der üblichen Tastaturabfragebausteine verwendet. Statt dessen übernimmt ein Baustein im Atari (der sogennannte POKEY), der ansonsten noch für die serielle Schnittstelle und für die Tonerzeugung zuständig ist, die Abfrage der Tastatur. Das Ergebnis, das heißt, welche Taste gedrückt ist, stellt er in einem Register zur Verfügung. Die Tastatur, die wie bei anderen Systemen als Matrix aufgebaut ist, wird also nicht, wie bei anderen Hobbycomputersystemen, von der CPU zeilenweise abgefragt. Dies spart Rechenzeit der CPU. Der POKEY ist in der Lage, in dem Moment, in dem eine Taste gedrückt wird, einen Interrupt bei der CPU auszulösen (den IRQ). Es ist damit möglich, die Tastatur per Interrupt zu betreiben.

Die Zusatztasten ("SELECT", "OPTION" und "START"), die sogenannten Konsolentaster, werden über einen weiteren hochintegrierten Baustein im Atari (den GTIA) abgefragt.

Die Standardausgabe des Atari erfolgt auf einen Bildschirm. Als Bildschirm eignet sich praktisch jeder Fernseher. Ein Modulator ist in die Atari-Geräte eingebaut, es wird also nur der normale Antennen- und kein Videoeingang beim Fernseher benötigt. Zur Darstellung steht auf einem Farbfernseher eine Palette von 128 Farben zur Verfügung. Dabei wird vom Betriebssystem eine Auflösung von bis zu 320 x 192 Punkten oder 24 Zeilen mit je 40 Zeichen unterstützt. Die höchste Auflösung liegt bei 384 Punkten horizontal und etwa 210 Punkten vertikal (je nach Bildschirm).

Die gesamte Bilderstellung wird von einem Baustein, der nur von Atari verwendet wird, übernommen. Dieser Baustein wird als "ANTIC" bezeichnet. ANTIC steht wohl für "Alphanumeric Television Interface Controller". Der ANTIC ist ein zweiter Mikroprozessor, der über einen eigenen Befehlssatz verfügt. Durch das Programm des ANTICs, das man an beliebiger Stelle im Speicherraum ablegen kann, wird das darzustellende Bild definiert. Der ANTIC verfügt über 14 verschiedene Modi zur Bilddarstellung. Diese Modi lassen sich beliebig auf dem Bildschirm kombinieren. Es stehen sowohl Modi zur Schriftdarstellung (auch mit Unterlängen) und Modi zur allgemeinen Zeichendarstellung (zum Beispiel für Spielfiguren) als auch zahlreiche Betriebsarten zur Einzelpunktdarstellung mit unterschiedlich hohen Auflösungen zur Verfügung.

Die Breite des Bildes läßt sich auf drei verschiedene Werte einstellen. Je nach Einstellung ergeben sich maximale horizontale Auflösungen von 256, 320 oder 384 Bildpunkten pro Zeile. In der Bildumrandung erscheint eine (programmierbare) Farbe.

Der ANTIC liest alle Daten, die er zur Bilddarstellung benötigt, direkt ohne Umweg über die CPU aus dem Speicher. Diese Art des Zugriffs bezeichnet man als DMA (Direct Memory Access - direkten Speicherzugriff). Während eines Zugriffes des ANTICs auf den Speicher im DMA wird die CPU angehalten. Dadurch vermindert sich die effektive Arbeitsgeschwindigkeit der CPU. In den meisten Modi ist der Befehlsdurchsatz der CPU jedoch trotzdem höher als bei 6502-Systemen mit einem Systemtakt von einem Megahertz.

Der ANTIC erstellt nicht selbst die Farbinformationen im Videosignal, das über den Modulator auf dem Fernseher dargestellt wird. Der ANTIC überträgt die Bildinformationen, die er per DMA aus dem Speicher gelesen hat, zu einem weiteren Atari-Baustein. Dieser Baustein wird "GTIA" genannt. GTIA steht wohl für "Graphic Television Interface Adaptor". Der GTIA enthält unter anderem neun Farbregister, mit denen der Benutzer die Farben, die auf dem Bildschirm erscheinen sollen, aus einer Palette von 128 Farben auswählen kann. Der GTIA erhält vom ANTIC jeweils Informationen, welche Farbe, das heißt, die Farbe welchen Farbregisters, er abbilden soll. Durch dieses Konzept ergibt sich eine Farbpalette, die sonst meist nur von professionellen CAD-Systemen erreicht wird und sich kaum mit der anderer Mikrocomputer vergleichen läßt.

Besonders interessant dürfte auch sein, daß die Hardware des ANTICs die Verschiebung des Bildes um einzelne Punkte sowohl horizontal als auch vertikal unterstützt. Der Bildspeicher kann ohne "Tricks" an beliebiger Stelle im Speicherraum liegen. Der Zeichengenerator kann sich prinzipiell auch an jeder Stelle des Speichers befinden, muß allerdings, je nach ANTIC-Modus (je nachdem ob er 512 oder 1024 Bytes groß ist), an einer 512-Byte oder 1 KByte-Grenze des Speichers beginnen.

Mit diesem Gesamtkonzept der Bildschirmdarstellung ist der Atari leistungsfähiger als die meisten anderen Systeme dieser Klasse. Gerade für seine Zielgruppe, das heißt für Anwender im Spiel-, Hobby- und Heimbereich, dürften diese Leistungsmerkmale besonders interessant sein. Vor allem das Konzept eines zweiten Mikroprozessors im System, das Konzept des ANTICs, ermöglicht eine auf andere Art nicht zu erreichende Vielfalt von unterschiedlichen Arten der Bildschirmdarstellung. Auch bringt das Prinzip eines relativ hohen Systemtakts (1,77 MHz), bei dem der Befehlsdurchsatz der CPU durch Speicherzugriffe per DMA des ANTICs verringert wird, eine relativ hohe Verarbeitungsgeschwindigkeit. Zudem kann man während der Bearbeitung rechenintensiver Routinen einen ANTIC-Darstellungsmodus wählen, der nur wenige Zugriffe im DMA benötigt, oder kann sogar den Bildschirm abschalten. Dadurch erhöht sich der Befehlsdurchsatz der CPU erheblich.

Der Atari besitzt außerdem sehr vielfältige Möglichkeiten einer Tonausgabe. Diese wird von dem Baustein übernommen, der außerdem für die Abfrage der Tastatur zuständig ist, dem "POKEY". POKEY steht wohl für "POtentiometer and KEYboard Integrated Circuit". Der Pokey verfügt über vier Tongeneratoren, die sowohl unabhängig voneinander, als auch miteinander verbunden arbeiten können. Außerdem sind für jeden Kanal vielfältige Möglichkeiten zur Verzerrung usw. vorhanden. Auch sogenannte Höhenfilter lassen sich programmieren. Mit dem POKEY kann man, entsprechende Programme vorausgesetzt, die Klangvielfalt eines Synthesizers erreichen. Es ließe sich zum Beispiel auch eine SynthesizerTastatur an den Atari anschließen. Der Ton des POKEYs wird über den Modulator zum Fernseher übertragen. Zur Tonausgabe wird also der normale Fernseherlautsprecher verwendet. Es ist zudem möglich, über einen Eingang des Atari, ein externes Tonsignal in das Signal des POKEYs zu mischen.

Als großer Vorteil muß die Tatsache angesehen werden, daß es möglich ist, aus dem BASIC heraus Töne zu erzeugen, ohne, wie es bei Konkurrenzmodellen nötig ist, den "POKE"-Befehl zu benutzen. Die direkte Programmierung der Tonkanäle aus Assemblerprogrammen ist etwas komplizierter als bei vergleichbaren Geräten. Dafür sind die Möglichkeiten der Tonerzeugung, die der Atari bietet, aber den Möglichkeiten der Tonerzeugung bei Konkurrenzmodellen mindestens ebenbürtig. Unterstützt wird die Tonerzeugung zudem durch mehrere automatische Zähler, die in dem Moment, in dem sie bei Null angelangt sind, einen Interrupt der CPU auslösen. In der Interruptroutine kann man dann die Frequenz oder Lautstärke oder auch andere Parameter der Tonerzeugung verändern.

Die neuen Atari-Geräte (600XL/800XL) entsprechen in den meisten Details den alten Modellen (400/800). So sind alle Adressen der Hardware gleich geblieben. Basicprogramme lassen sich meist direkt austauschen oder müssen nur geringfügig modifiziert werden.

Bei den alten Atari-Modellen sind 4 Joystick-Ports vorhanden. An jeden der Joystick-Ports lassen sich, an Stelle eines Joysticks, auch zwei Paddles ("Drehregler") oder ein sogenannter Lightpen anschließen. Wenn man einen Lightpen auf eine Stelle des Bildschirms hält, ist es möglich, die Position des Lightpens zu bestimmen. Dies wird durch den ANTIC ermöglicht. Die Abfrage der "Joystick-Richtungen" erfolgt über einen weiteren Baustein im Atari, die "PIA". Pia steht für "Peripheral Interface Adaptor". Die "Feuertasten

der Joysticks werden über die sogenannten Triggereingänge des GTIA abgefragt. Der analoge Wert der Stellung der Drehregler (Paddles) wird im POKEY in einen digitalen Wert umgewandelt.

Bei den neuen Geräten sind nur noch zwei Anschlüsse für Joysticks vorhanden. Dies stellt nur einen geringfügigen Nachteil dar, da es für die alten Geräte nur wenige Spiele und Anwendungen gab, die alle vier Joystickports belegten, und außerdem die Werte der Joystickports 3 und 4 simuliert werden. Die so frei gewordenen Anschlüsse der PIA wurden zum Teil intern im Atari für die sogenannte MMU (Memory Management Unit) verwendet.

Im Gegensatz zu den alten Geräten, hat Atari den Speicherraum des Prozessors bei den 600XL und 800XL-Modellen zum Teil doppelt belegt. So läßt sich zum Beispiel beim Atari 800XL (oder bei einem Atari 600XL der auf 64 KByte RAM nachgerüstet wurde) das Betriebssystem abschalten. An Stelle des Betriebssystems steht dann RAM zur Verfügung. So ist es zum Beispiel möglich, das Betriebssystem der Atari 400 und 800-Modelle in die neuen Geräte zu laden. Außerdem verfügen die neuen Modelle über ein Selbsttestprogramm (im ROM), das in den normalen Arbeitsspeicherbereich eingeblendet wird, wenn beim Einschalten des Atari die "OPTION"-Taste gedrückt ist und kein Cartridge eingesteckt ist. Mit diesem Selbsttestprogramm ist es möglich den RAM-Speicher, die Tonerzeugung, die Tastatur und den Bildschirm zu testen.

Die verschiedenen Speicherbelegungen wählt man mit mehreren Portleitungen der PIA, die bei den alten Geräten für den dritten und vierten Joystickport verwendet wurden. Die sogenannte MMU gibt, je nach Einstellung und "Situation", Freigaben an die einzelnen Hardwarekomponenten des Atari. Bei der MMU handelt es sich um einen Logikbaustein, einen sogenannten PAL-Baustein (PAL steht hier für "Programmable Array Logic" und nicht für das Fernseherfarbsystem), der speziell für Atari programmiert ist. In seiner Funktion ist dieser PAL-Baustein mit gewöhnlichen TTL-Bausteinen vergleichbar.

Um andere Programme ohne Ladezeiten der Diskette oder Cassette verwenden zu können, verfügt der Atari über einen Cartridge-Slot. In diesen Cartridge-Slot lassen sich Module einstecken, die bis zu 16 KByte im Speicher belegen können. Diese Module bieten eine höhere Datensicherheit als Cassetten oder Disketten, unter anderem durch eine grundsätzlich kaum begrenzte Lebensdauer. Wenn ein Cartridge in den Slot gesteckt ist, wird der vom Speicher im Cartridge überdeckte RAM-Speicher (in zwei 8 KByte-Blöcken) abgeschaltet. Außerdem startet das Betriebssystem automatisch das im Cartridge enthaltene Programm. Zudem ist im Cartridge-Slot noch eine Freigabe-Leitung für einen 256 Byte-Block (eine Page) im Bereich der anderen I/O-Bausteine vorhanden. Damit ist es möglich, im Cartridge verschiedene ROM-Bereiche umzuschalten. Man kann also auch ROMs mit mehr als 16 KByte verwenden. Selbstverständlich könnte man mit Hilfe dieser Freigabe-Leitung auch eine Karte mit einem Peripheriebaustein im Slot betreiben. Dies ist aber bei den Atari 400 und 800Modellen umständlich, da für den Betrieb die Klappe über dem Slot geschlossen sein muß. Bei den neuen Geräten hat Atari auf die Klappe wohl aus Kostengründen verzichtet. Dabei hat sich aber die Bildqualität geringfügig verschlechtert (da die Abschirmung nicht mehr so gut ist). Dieser Effekt ist aber von Gerät zu Gerät unterschiedlich. Es kommt vor allem auch darauf an, welche anderen Geräte in der Nähe des Computers arbeiten.

Ursprünglich enthielten die Atari-Computer nur das Betriebssystem. Das BASIC, das es als Cartridge gab, mußte extra erworben werden. Atari ging offenbar davon aus, daß nicht jeder das BASIC haben wollte. Später gehörte ein BASICCartridge zum Lieferumfang dazu. Jeder, der einen AtariComputer (400 oder 800) kaufte, bekam einen BASIC-Cartridge.

Die neuen Atari-Computer (600XL/800XL) enthalten das BASIC bereits fest eingebaut. Es ist vollkommen kompatibel zu den Cartridge-Versionen des BASICs. Die Programme lassen sich also direkt austauschen, sofern nicht einige Betriebssystemroutinen, bestimmte Betriebssystemadressen oder bestimmte "Zero-Page-Adressen" verwendet worden sind. Auch ist es möglich, mit Hilfe der MMU das BASIC abzuschalten. Wenn ein Cartridge in den Slot gesteckt wird, wird das eingebaute BASIC abgeschaltet, sofern der Cartridge den gleichen Speicherraum wie das BASIC belegt. So ist es möglich, sowohl andere Programmiersprachen, als auch Erweiterungen des BASICs als Cartridge zu verwenden.

Diskettenlaufwerke, Drucker, der Cassettenrecorder sowie andere Peripheriegeräte werden an eine serielle Schnittstelle angeschlossen. Dieser Übertragungskanal wird vom POKEY bedient. Mit ihr sind Übertragungsraten bis zu 19200 Baud (in diesem Zusammenhang = Bit/Sekunde) möglich. Die Wandlung der parallen Daten in serielle und umgekehrt wird von der POKEY-Hardware übernommen. So ergeben sich höhere Übertragungsraten als bei vergleichbaren Systemen, die diese parallel/seriell-Wandlung von der CPU vornehmen lassen. Der POKEY kann einen Interrupt an die CPU senden, wenn entweder alle Bits des Ausgaberegisters übertragen sind oder das Eingaberegister voll ist. Durch diese Möglichkeit des POKEY ist es möglich, die Datenübertragung zu erledigen, gleichzeitig die CPU aber andere Aufgaben erfüllen zu lassen. Die serielle Schnittstelle entspricht leider keinem üblichen Standard. Prinzipiell ließe sie sich auch als "normale" V24-Schnitstelle programmieren. Dann wäre aber zum Beispiel ein Diskettenbetrieb nicht quasi-gleichzeitig möglich. Auch der Steckverbinder der seriellen Schnittstelle entspricht leider keiner üblichen amerikanischen oder europäischen Norm. Dadurch ist es für Zweitanbieter schwierig, die serielle Schnitstelle in eigenen Produkten zu verwenden.

Bei den alten Modellen war der Systembus nicht extra herausgeführt. Alle Änderungen und Erweiterungen mußten im Gerät vorgenommen werden. Bei den neuen Geräten ist ein "Parallelbus" mit einem 50-poligen Anschluß vorhanden. Ein Platinensteckverbinder mit einem Kontaktabstand von 2,54 mm (1/10") läßt sich ohne weiteres aufstecken. Am Parallelbus sind alle Daten- und Adressleitungen, viele Steuersignale, sowie Signale zum Anschluß von sogenanneten dynamischen RAMs herausgeführt.

Damit ist es ohne weiteres möglich, den Atari 600XL oder 800XL zu erweitern. Beispiele wären RAM-Erweiterungen, Z80Erweiterungen um CP/M zu verwenden, direkt angeschlossene Diskettenlaufwerke, 80-Zeichen-Karten, diverse Schnittstellen, Steuerungen oder Überwachungsschaltungen. Die Reihe ließe sich fast beliebig fortsetzen.

Das Konzept des Atari

Die Atari 400 und 800-Geräte verfügten in mehreren Bausteinen über 10 KByte ROM. Darin befand sich im wesentlichen das Betriebssystem und ein Zeichengenerator. Bei den neuen Geräten setzte Atari ein modernes 16 KByte-ROM ein. Der so hinzugekommene ROM-Speicherraum wurde unter anderem für die Selbsttestroutine, einen zweiten Zeichengenerator und ein erweitertes Betriebssytem verwendet.

Atari hat schon bei den alten Geräten ein "fast" echtes Betriebssystem verwendet. Im Gegensatz zu vielen anderen sogenannten Betriebssystemen besteht das Atari-Betriebssystem nicht nur aus elementaren Betriebsroutinen, sondern verfügt über leistungsfähige Betriebssystemroutinen, die universell verwendet werden können. Zum Beispiel wird der Verkehr mit Peripheriegeräten durch eine universelle Prozedur erledigt. Das aufrufende Programm muß der I/O-Routine die Ziel- bzw. Quellenangaben und alle anderen Parameter in einem sogenannten I/O-Controlblock übergeben. Dieses Konzept findet man sonst erst bei diskettenorientierten Betriebssystemen wie CP/M, MSDOS, UNIX oder QNX. Bei den Betriebssystemen der anderen Hobbycomputer, ist gewöhnlich für jedes Ein- bzw. Ausgabegerät (Bildschirm, Tastatur, Diskette, Cassette, Drucker usw.) eine eigene Routine vorhanden. Jede dieser Routinen erwartet die Daten meist in einem anderen Format. Wenn man nun ein Programm schreiben möchte, das die Ausgaben entweder in einer Diskettendatei oder auf einem Drucker bringt, stellen sich bei derartigen Betriebssystemen meist nicht ganz unerhebliche Probleme.

Die Ein- und Ausgabe des Atari ist grundsätzlich, von ihrer Hardware her, interruptfähig. Dies wird vom Betriebssystem voll unterstützt. In eigenen Maschinenprogrammen ist es also ohne weiteres möglich, zu drucken oder Ein- und Ausgaben der Diskettenlaufwerke auszuführen, während der Prozessor ansonsten noch oder bereits mit einer anderen Aufgabe beschäftigt ist. Diese Möglichkeiten des Betriebssytems werden vom BASIC jedoch nicht ausgenutzt, da dies bei einem BASIC auf einem Einplatzsystem ohne Multitask-Option ohnehin kaum sinnvoll ist. Es ließe sich aber zum Beispiel ein Textsystem programmieren, bei dem der Benutzer praktisch ohne Rücksicht auf Diskettenschreib- oder -leseoperationen oder Such- und Austauschfunktionen des Textsystems, dauermäßig Eingaben machen kann. Der Datenverkehr mit den Disketten wird über das Betriebssystem im Interrupt vorgenommen. Um keine Tastatureingaben verlorengehen zu lassen, müßte der POKEY immer, wenn eine Taste gedrückt wird, einen Interrupt auslösen. In der Unterbrechungsroutine würden alle Tastatureingaben in einen Tastaturpuffer geladen. Der "Vordergrundjob" (die Tätigkeit der CPU, die von den Interrupts unterbrochen wird, das eigentliche Textverarbeitungsprogramm) holt sich die Eingaben bei Bedarf aus dem Tastaturpuffer. Nach diesem "Muster" lassen sich noch viele andere Programme entwerfen.

Der normale Betrieb des Atari wird alle 1/50 Sekunde unterbrochen. Während der Vertikalsynchronisation des Bildschirms wird ein Interrupt ausgelöst. In der dazugehörigen Interruptroutine werden mehrere Aufgaben erfüllt. So werden mehrere Speicherzellen erhöht oder erniedrigt, diese Speicherstellen stellen dadurch Softwarezähler dar, mit denen es möglich ist, den Zeitablauf der Programme (insbesondere bei Spielen wichtig !) zu steuern. Mehrere Register lassen sich, entsprechend umgerechnet, als Uhr verwenden. Eine weitere Hauptaufgabe dieser "Vertikal-Interrupt-Routine" ist es, sogenannte Schattenregister zur Verfügung zu stellen. Da viele Hardwareregister nur schreibend oder nur lesend sind, werden vom Betriebssystem Schattenregister im RAM erzeugt. Die Werte der Schattenregister bzw. der Hardwareregister werden so 50 mal pro Sekunde aktualisiert. Die Schattenregister kann man im Gegensatz zu den meisten Hardwareregistern auch zum Beispiel durch "Increment"- und "Decrement"-Befehle modifizieren. Allerdings muß man dabei immer beachten, daß die Inhalte der Schattenregister nicht unbedingt aktuell sind.

Das Betriebssystem der Atari-Geräte ist grundsätzlich sehr sauber programmiert. Die berühmte "Hauptsache: funktioniert"-Mentalität, die man bei vielen anderen Geräten dieser Preisklasse vorfindet, wird man bei Atari, von sehr wenigen Ausnahmen abgesehen, vergeblich suchen. Das Atari-Betriebssystem verfügt über relativ wenige, dafür aber universelle Unterprogramme. Alle wichtigen Routinen werden, auch im Betriebssystem intern, über eine sogenannte Vektortabelle angesprungen. In dieser Vektortabelle stehen die Startadressen der einzelnen Routinen. Durch dieses Konzept ist es relativ einfach, das Betriebssystem sowohl aus Maschinenprogrammen heraus zu benutzen, als auch es zu verändern.

Bei den neuen Geräten ist das Betriebssystem teilweise verändert und verbessert worden. So stehen beim neuen Betriebssystem einige neue Routinen zur Verfügung. Die Vektortabelle ist prinzipiell nicht verändert worden, es sind lediglich einige Vektoren angefügt worden. Auch mußte natürlich die veränderte Hardware (zum Beispiel die MMU und das eingebaute BASIC) im Betriebssystem berücksichtigt werden. Dies hat zur Folge, daß sehr viele Routinen im neuen Betriebssystem an anderer Stelle geringfügig modifiziert vorgefunden werden. Auch viele Speicherstellen im RAM, die vom Betriebssystem als Zwischenspeicher benutzt werden, liegen jetzt an anderen Stellen. Dies hat zur Folge, daß nicht mehr alle alten Programme auf den neuen Geräten laufen. Programme, die aber Betriebssystemroutinen nur über die Vektortabelle anspringen und sich auch ansonsten an die "Betriebssystemspezifikationen" halten, werden meist ohne Problem laufen. Programme, die "Tricks" anwenden, laufen dagegen oft nur nach einer, von Fall zu Fall unterschiedlich schwierigen Anpassung auf den neuen Geräten.

Hauptkategorie: 8-Bitter
Erstellt: 12 November 2011
Zugriffe: 4038
            *** ATARI INTERN                         Inhaltsregister ***




                       D A S    I N H A L T S R E G I S T E R
                       --------------------------------------




             $                                Bildzeilenbefehl
                                   8                                91
             %                                Bit
                                   8                                14
             6502                             Block
                                   28                               237
             ANTIC                            Booten
                                   39                               236
             .                                Busstecker
                                   65                               71
             ANTIC-Befehlssatz                Byte
                                   87                               20
             ANTIC-Programm                   CAS
                                   87                               61
             .                                CHARBASE
                                   94                               102
             ANTIC-Programmzähler             CHARCNTL
                                   88                               105
             AUDIOCOM                         COLPFn
                                   162                              131
             Adresse                          CPU
                                   25                               28
             Analog/digital                   .
                                   166                              64
             Anschlußpläne                    CTIA
                                   64                               131
             Asynchrone Übertragung           Cartridge
                                   169                              43
             Ausgaberoutine                   .
                                   263                              70
             BASIC                            Color-Clock
                                   44                               76
             Befehlstabellen                  Cursorsteuerung
                                   92                               301
             Betriebssystem                   DLPTRH/L
                                   47                               88
             .                                DMA
                                   191                              40
             Betriebssystemroutinen           DMA-Kontrolle
                                   214                              76
             Bildaufbauprinzip                DMA-Kontroller
                                   118                              193
             Bildbreite                       DMACNTL
                                   40                               76
             .                                Digitalrechner
                                   76                               11
             Bilddatendarstellung             Diskettenverarbeitung
                                   129                              212
             Bilddatenquellen                 Druckerverwaltung
                                   75                               314
             Bilderstellung                   Ein-/Ausgabe
                                   39                               202
             Bildgrafikmodus                  Eingabe
                                   95                               38
             Bildgrafiktabelle                Einleitung
                                   100                              5
             Bildschirm                       Erweiterung
                                   39                               45
             Bildschirmsteuerung              Farben
                                   301                              40
             Bildspeicher                     .
                                   40                               130
             Bildspeicherzähler               Farbregister
                                   89                               129
             Bildverschiebung                 .
                                   112                              138


                                                                     381

            *** ATARI INTERN                         Inhaltsregister ***


             Farbtakt                          Kbit
                                   76                                29
             Feinverscheibung                  Keyboard
                                   116                               38
             Formatierung                      Kollisionen
                                   244                               144
             Frequenz                          Konsolentaster
                                   154                               150
             Frequenzbereich                   LPENH/V
                                   155                               81
             GTIA                              Leerzeilenbefehl
                                   40                                90
             .                                 Lesen
                                   66                                26
             .                                 Lightpen
                                   125                               42
             GTIA-Betriebsarten                .
                                   132                               59
             GTIACNTL                          .
                                   143                               81
             Geräusch                          Link/Unlink
                                   155                               272
             Geschoßgrafikregister             Listen lineare
                                   139                               272
             Geschoßgröße                      Low
                                   141                               32
             Grafikregister                    MMU
                                   138                               43
             Grobverschiebung                  .
                                   113                               54
             HATABS                            .
                                   269                               69
             HSCROL                            MPD
                                   116                               61
             Halbbilder                        Matrix
                                   76                                23
             Handlertabelle                    Messen
                                   269                               33
             Hardware                          Meßinstrumente
                                   52                                33
             Hardwareprinzip                   NMI
                                   21                                79
             Hardwarespeicherplan              NTSC/PAL
                                   360                               151
             Hauptausgaberoutine               Netzteil
                                   263                               52
             Hexadezimal                       Oktal
                                   16                                20
             High                              Outputleitungen
                                   32                                30
             Horizontalverschiebung            Overscan
                                   121                               76
             Hüllkurve                         PAL
                                   155                               43
             I/O                               PIA
                                   30                                42
             IOCB                              .
                                   203                               68
             IOCB-Befehle                      .
                                   204                               183
             IOCB-Status                       PMCNTL
                                   207                               137
             Informationstheorie               POKEY
                                   23                                38
             Inputleitungen                    .
                                   30                                67
             Interlaced Scan                   .
                                   76                                153
             Interrupt                         Paddle
                                   47                                42
             .                                 .
                                   199                               59
             Joystick                          Paddlesteuerung
                                   42                                166
             Joystickport                      Pixel
                                   59                                101
             .                                 Player-Missile-Grafik
                                   70                                82
             KByte                             Port A
                                   29                                185
             Kaltstart                         Port B
                                   227                               185


            382

            *** ATARI INTERN                         Inhaltsregister ***


             Positionsregister                 Sprungvektorentabelle
                                   139                               258
             Pragmatik                         Standardausgabe
                                   23                                39
             Projektion                        Startbit
                                   101                               171
             RAM                               Stopbit
                                   21                                171
             .                                 Synchrone Übertragung
                                   52                                169
             RAS                               Syntax
                                   61                                23
             ROM                               Systembus
                                   21                                45
             .                                 TTL-Standard
                                   57                                31
             Reset                             Taktgenerator
                                   55                                53
             .                                 Tastatur
                                   199                               38
             .                                 Tastaturabfrage
                                   228                               154
             SIO-Steuerung                     Timer
                                   286                               200
             SIZEM                             Tonerzeugung
                                   142                               41
             SIZEPn                            .
                                   141                               154
             SKSTAT                            Track
                                   176                               237
             Schattenregister                  Triggereingänge
                                   128                               149
             .                                 Unterlängen
                                   199                               106
             Schieberegister                   VCOUNT
                                   157                               80
             Schnittstelle (ser.)              VDELAY
                                   44                                140
             Schreiben                         VSCROL
                                   26                                117
             Schriftgrafik                     Verschieben (Bild)
                                   101                               112
             Schriftgrafik, Übers.             Vertical-Blank-Int.
                                   111                               219
             Schwingung                        Vertikalverschiebung
                                   155                               117
             Scrolling                         Verzerrung
                                   112                               158
             Sedezimal                         WAITHSYNC
                                   16                                80
             Sektor                            Wandlung (Hex - Dez)
                                   237                               15
             Selbsttest                        Warmstart
                                   43                                226
             Semantik                          Wortwahl
                                   23                                6
             Serielle Schnittstelle            Zahlensystem
                                   44                                11
             .                                 Zeichenausblendung
                                   69                                105
             .                                 Zeichendrehung
                                   166                               105
             Serieller Bus                     Zeichengenerator
                                   286                               101
             Sonderzeichen                     Zeichengrafik
                                   8                                 101
             Speicher                          Zeichengrafik (Übers.)
                                   21                                111
             Speicheranordnung                 Zeicheninvertierung
                                   23                                105
             Speicheraufteilung                Zeichensatz
                                   63                                101
             Speicherplan                      Zentraleinheit
                                   321                               28
             Speicherplatz                     Zielgruppe des Atari
                                   26                                36
             Spielergröße                      Zusammenstöße
                                   141                               144
             Spielfeldbreite                   Überschreiben
                                   78                                27
             Sprungbefehl                      Übertragungsraten
                                   91                                170


                                                                     383
Hauptkategorie: 8-Bitter
Erstellt: 12 November 2011
Zugriffe: 4391
            *** ATARI INTERN                           Labelregister ***




                  D A S    R E G I S T E R    D E R    L A B E L S
                  ------------------------------------------------




            ABUFPTR1                                BITGET
                           $001D                                   $F75D
            ABUFPTR2                                BITMASK
                           $001E                                   $006E
            ABUFPTR3                                BITMASKE
                           $001F                                   $CA2F
            ACMISR                                  BITPUT
                           $02D7                                   $F73C
            ACMVAR                                  BITROL
                           $03ED                                   $F732
            ACTCHRNUM                               BLOAD
                           $0063                                   $C637
            ADD28E                                  BLOCK1
                           $C87B                                   $C5C9
            ADD28EGET                               BOOT
                           $C8C3                                   $C599
            ADD28EPUT                               BOTTOMLIN
                           $C8E0                                   $F55F
            ADD28EWRD                               BRKEVENT
                           $C8A0                                   $C092
            ADDRESS                                 BUFENDPTR
                           $0064                                   $0034
            ADJUST                                  BUFFERADR
                           $ED2E                                   $0015
            ADJUSTTAB                               BUFFULL
                           $EE11                                   $0038
            AKTBUFLEN                               BUFSTR
                           $006B                                   $006C
            ATASCICHR                               CALLTAB
                           $02FB                                   $E48F
            ATRAKTMSK                               CALLVKT
                           $004E                                   $E900
            ATTRACT                                 CALLVKTC1
                           $004D                                   $E894
            AUDICNTL1                               CARTCKSUM
                           $D204                                   $03EB
            AUDICNTL2                               CARTGO
                           $D205                                   $C47F
            AUDICNTL3                               CASBOOT
                           $D206                                   $C67C
            AUDICNTL4                               CASBUFLIM
                           $D207                                   $028A
            AUDICOM                                 CASBUFPTR
                           $D208                                   $003D
            AUDIFREQ1                               CASCLOSE
                           $D200                                   $FDCF
            AUDIFREQ2                               CASDATA
                           $D201                                   $0400
            AUDIFREQ3                               CASENTER
                           $D202                                   $EB9D
            AUDIFREQ4                               CASEOF
                           $D203                                   $003F
            BASMEMTOP                               CASFLAG
                           $000E                                   $030F
            BEEPCOUNT                               CASINIT
                           $0040                                   $C6AE
            BEEPWAIT                                CASINITV
                           $FDFC                                   $0002
            BEGINREAD                               CASMOTOFF
                           $ED3D                                   $FD05
            BELL                                    CASOPEN
                           $F556                                   $FCE6
            BITCLR                                  CASPUTBYT
                           $F74A                                   $FDB4
            BITCON                                  CASRDBYTE
                           $F723                                   $FD7A


                                                                    373

            *** ATARI INTERN                           Labelregister ***


            CASREADBL                               COLDSTART
                           $FD8D                                   $0244
            CASSPEED                                COLINC
                           $02EE                                   $02F9
            CASSTART                                COLPF0
                           $03EA                                   $D016
            CHAINLINK                               COLPF0@
                           $03FB                                   $02C4
            CHAINTMP                                COLPF1
                           $02EC                                   $D017
            CHAINTP1                                COLPF1@
                           $0312                                   $02C5
            CHAINTP1H                               COLPF2
                           $0313                                   $D018
            CHARBASE                                COLPF2@
                           $D409                                   $02C6
            CHARBASE@                               COLPF3
                           $02F4                                   $D019
            CHARCNTL                                COLPF3@
                           $D401                                   $02C7
            CHARCNTL@                               COLPM0
                           $02F3                                   $D012
            CHARSTPTR                               COLPM0@
                           $026B                                   $02C0
            CHECKFF                                 COLPM1
                           $CB64                                   $D013
            CHECKNEWP                               COLPM1@
                           $C9EA                                   $02C1
            CHECKROM1                               COLPM2
                           $FF6E                                   $D014
            CHECKROM2                               COLPM2@
                           $FF8D                                   $02C2
            CHECKSR0                                COLPM3
                           $C000                                   $D015
            CHECKSUM                                COLPM3@
                           $008B                                   $02C3
            CHECKSUM2                               COLREGSH
                           $FFF8                                   $004F
            CHKSUMSND                               COMENT
                           $003B                                   $E695
            CHKSUMTAB                               COMPUTE
                           $FFD2                                   $ECC8
            CIOCLOSE                                COMTAB
                           $E57C                                   $E72D
            CIOINIT                                 CONSOL
                           $E4C1                                   $D01F
            CIOJUMP                                 CONVERT
                           $E6F4                                   $F5AC
            CIOMAIN                                 CPIRQQ
                           $E4DF                                   $FC1A
            CIONOTOPN                               CRETRY
                           $E4DC                                   $029C
            CIOREAD                                 CRITICIO
                           $E5B2                                   $0042
            CIORETURN                               CURSCOL
                           $E670                                   $0055
            CIOSTATSP                               CURSOCTAB
                           $E597                                   $F49A
            CIOWRITE                                CURSORBS
                           $E61E                                   $F450
            CLEARLINE                               CURSORDWN
                           $F7E2                                   $F3F3
            CLEARSCRN                               CURSORHOM
                           $F420                                   $F440
            CLICKDISA                               CURSORINH
                           $02DB                                   $02F0
            CLOCK                                   CURSORLFT
                           $0012                                   $F400
            CMDAUX1                                 CURSORRIG
                           $023C                                   $F411
            CMDAUX2                                 CURSORTAB
                           $023D                                   $F47A
            CMDCMD                                  CURSORUP
                           $023B                                   $F3E6
            CMDDEVIC                                CURSOSTAB
                           $023A                                   $F495
            COLBAK@                                 CURSROW
                           $02C8                                   $0054
            COLCR                                   DBDDEC
                           $F997                                   $F565
            COLDCARTC                               DCBINIT
                           $C431                                   $E7BE


            374

            *** ATARI INTERN                           Labelregister ***


            DCBXINIT                                DSKFLAG
                           $E833                                   $0240
            DECBFP                                  DSKLDADR
                           $E6C8                                   $0242
            DECBUFL                                 DSKRDERR
                           $E6BB                                   $C64C
            DECTIMER                                DSKSECCNT
                           $C263                                   $0241
            DELCHAR                                 DSKSECLEN
                           $F4D5                                   $02D5
            DELLINE                                 DSKSTAT
                           $F520                                   $0030
            DELTIA                                  DSKSTATUS
                           $F918                                   $0303
            DERRMSG                                 DSKTIMOUT
                           $C44B                                   $0246
            DEVICSRCH                               DSKTIMOUT
                           $E712                                   $0306
            DEVICSTAT                               DSKUNIT
                           $02EA                                   $0301
            DEVS2PL3                                EDITORVKT
                           $E6FF                                   $E400
            DISKFORM                                EGETCH
                           $0018                                   $F24A
            DISKINIT                                ENDPOINTR
                           $C6B1                                   $0074
            DISKINTERF                              EOUTCH
                           $C6C1                                   $F2B0
            DISKUTIL                                ERANGE
                           $001A                                   $F6BC
            DISPLYFLG                               ERRORFLAG
                           $02FE                                   $023F
            DISPLYMSK                               ESCAPE
                           $02A0                                   $F3E0
            DLIVKT                                  ESCAPEFLG
                           $0200                                   $02A2
            DLPTR@                                  EXITVBL
                           $0230                                   $C298
            DLPTRH                                  EXTEND
                           $D403                                   $F7C2
            DLPTRL                                  FILEDAT
                           $D402                                   $02FD
            DMACNTL                                 FILEMNGMT
                           $D400                                   $0043
            DMACNTL@                                FINESCRFL
                           $022F                                   $026E
            DMASAVE                                 FINESCROL
                           $02DD                                   $026C
            DOBUFC                                  FKDEF
                           $F8B1                                   $FB11
            DOSAKTIV                                FKTDEFPTR
                           $0009                                   $0060
            DOSCROLL                                FREI0
                           $F7F7                                   $CB73
            DOSINITC                                FREI1
                           $C649                                   $EF65
            DOSINITV                                FREI2
                           $000C                                   $FCD6
            DOSVKT                                  GAPTYPE
                           $000A                                   $003E
            DOSVKTC                                 GETBLOCK
                           $C434                                   $C667
            DRAWTO                                  GETBYTEAC
                           $F9AF                                   $C7DD
            DRETRY                                  GETCH
                           $02BD                                   $F180
            DSKAUX1                                 GETCHECKS
                           $030A                                   $FFA4
            DSKAUX2                                 GETLOWEST
                           $030B                                   $C9BD
            DSKBUFFER                               GETPLT
                           $0304                                   $F18F
            DSKBUFPTR                               GETRAMHI
                           $0032                                   $C4B7
            DSKBYTCNT                               GOHANDLER
                           $0308                                   $E6EA
            DSKCHKSUM                               GOMEMTEST
                           $0031                                   $C3BD
            DSKCMD                                  GRAFM
                           $0302                                   $D011
            DSKDEVICE                               GRAFP0
                           $0300                                   $D00D


                                                                    375

            *** ATARI INTERN                           Labelregister ***


            GRAFP1                                  INTVKT
                           $D00E                                   $FFFE
            GRAFP2                                  IOCB0
                           $D00F                                   $0340
            GRAFP3                                  IOCB1
                           $D010                                   $0350
            GRAPHEMUL                               IOCB2
                           $0057                                   $0360
            GTIACNTL                                IOCB3
                           $D01B                                   $0370
            GTIACNTL@                               IOCB4
                           $026F                                   $0380
            HANDLERTB                               IOCB5
                           $E440                                   $0390
            HATABS                                  IOCB6
                           $031A                                   $03A0
            HELPFLAG                                IOCB7
                           $02DC                                   $03B0
            HIBYTELD                                IOCBAUX1Z
                           $0288                                   $002A
            HILFSWORT                               IOCBAUX2Z
                           $0000                                   $002B
            HITCLR                                  IOCBAUX3Z
                           $D01E                                   $002C
            HIUSEDLOD                               IOCBAUX4Z
                           $02CB                                   $002D
            HNDLRLOAD                               IOCBBUFAZ
                           $02E9                                   $0024
            HOLD2                                   IOCBBUFLZ
                           $029F                                   $0028
            HPOSM0                                  IOCBCHARZ
                           $D004                                   $002F
            HPOSM1                                  IOCBCHIDZ
                           $D005                                   $0020
            HPOSM2                                  IOCBCMD
                           $D006                                   $0017
            HPOSM3                                  IOCBCMDZ
                           $D007                                   $0022
            HPOSP0                                  IOCBDSKNZ
                           $D000                                   $0021
            HPOSP1                                  IOCBNUMZ
                           $D001                                   $002E
            HPOSP2                                  IOCBPUTBZ
                           $D002                                   $0026
            HPOSP3                                  IOCBSTATZ
                           $D003                                   $0023
            HSCROL                                  IOPORTINI
                           $D404                                   $C4E8
            IANTEMP                                 IOSOUNDEN
                           $022D                                   $0041
            INATAC                                  IRQEN
                           $F76A                                   $D20E
            INCBFP                                  IRQEN@
                           $E6D1                                   $0010
            INCLOAD                                 IRQST@
                           $E816                                   $0011
            INCRSB                                  IRQSTAT
                           $F60A                                   $D20E
            INDSETVKT                               ISRODN
                           $E912                                   $EAAD
            INIT                                    ISRSIR
                           $FCDB                                   $EB2C
            INIT200                                 ISRXD
                           $C459                                   $EAEC
            INIT31A                                 JMPCASOFF
                           $C34C                                   $EF6B
            INITCARTC                               JMPF21E
                           $C437                                   $F715
            INITLOAD                                JMPF983
                           $E7DE                                   $FCD8
            INITPOTS                                JMPIRQVKT
                           $C239                                   $C02C
            INITSOME                                JMPSIOINT
                           $EF8E                                   $E959
            INSCHAR                                 JMPTAB
                           $F49F                                   $E450
            INSLINE                                 JMPTIMER1
                           $F50C                                   $C25D
            INTERCHAR                               JMPTIMER2
                           $CC00                                   $C260
            INTTAB                                  JOYSTICK0@
                           $ECA9                                   $0278


            376

            *** ATARI INTERN                           Labelregister ***


            JOYSTICK1@                              LODZHIUSE
                           $0279                                   $02CD
            JOYSTICK2@                              LODZLOADA
                           $027A                                   $02D3
            JOYSTICK3@                              LOGGET
                           $027B                                   $F758
            JSRIND                                  LOGICMASK
                           $F2AD                                   $02B2
            KBCODE                                  LOWMEM
                           $D209                                   $0080
            KBCODE@                                 LPENH
                           $02FC                                   $D40C
            KBDISABLE                               LPENH@
                           $026D                                   $0234
            KBGETCHAR                               LPENV
                           $F302                                   $D40d
            KBVKT                                   LPENV@
                           $E420                                   $0235
            KEYCLICK                                LPTVKT
                           $F983                                   $E430
            KEYDEF                                  MASKTAB
                           $FB51                                   $C0CF
            KEYDEFPTR                               MATHMUELL
                           $0079                                   $D805
            KEYDELAY                                MEMLO
                           $02F1                                   $02E7
            KEYREP                                  MEMTOP
                           $02DA                                   $02E5
            KEYRPDELY                               MINTLK
                           $02D9                                   $03F9
            KOLM0PF                                 MLTTMP
                           $D000                                   $0066
            KOLM0PL                                 MONSTATUS
                           $D008                                   $004C
            KOLM1PF                                 MONTEMP1
                           $D001                                   $0051
            KOLM1PL                                 NEUDEVC1
                           $D009                                   $C99F
            KOLM2PF                                 NEUDEVC3
                           $D002                                   $C9A4
            KOLM2PL                                 NEUDEVC5
                           $D00A                                   $C9A9
            KOLM3PF                                 NEUDEVC7
                           $D003                                   $C9AE
            KOLM3PL                                 NEUDEVC9
                           $D00B                                   $C9B3
            KOLP0PF                                 NEUDEVCB
                           $D004                                   $C9B8
            KOLP0PL                                 NEUINIT
                           $D00C                                   $C91A
            KOLP1PF                                 NEUINITC
                           $D005                                   $E49B
            KOLP1PL                                 NEUIODREQ
                           $D00D                                   $0248
            KOLP2PF                                 NEUIOINIV
                           $D006                                   $0238
            KOLP2PL                                 NEUIOMASK
                           $D00E                                   $0249
            KOLP3PF                                 NEUIOPTR
                           $D007                                   $028C
            KOLP3PL                                 NEUIOREQ
                           $D00F                                   $C97C
            LCOUNT                                  NEUPORT
                           $0233                                   $D1FF
            LFTMARGIN                               NEUPORTERR
                           $0052                                   $C9D8
            LINEINSERT                              NEUPORTST
                           $F78E                                   $CA11
            LINK                                    NEUVECTOR
                           $E898                                   $C8F2
            LINKSOMETH                              NEUVRORHDN
                           $E739                                   $0247
            LOADER                                  NEWADRLOD
                           $C753                                   $028E
            LOADERTMP                               NEWCART
                           $0036                                   $C4D7
            LOADPTR                                 NEWDEVICE
                           $EB87                                   $EEBC
            LODADRESS                               NEWGRCOL
                           $02D1                                   $02F6
            LODGBYTEA                               NEWGRROW
                           $02CF                                   $02F5


                                                                    377

            *** ATARI INTERN                           Labelregister ***


            NEWLDTMP1                               PORTB
                           $024A                                   $D301
            NMIEN                                   PORTBCNTL
                           $D40E                                   $D303
            NMIENABLE                               POT0
                           $C00C                                   $D200
            NMIRES                                  POT1
                           $D40F                                   $D201
            NMIST                                   POT2
                           $D40F                                   $D202
            NMIVKT                                  POT3
                           $FFFA                                   $D203
            NOCHKSUM                                POT4
                           $003C                                   $D204
            NTSCPAL@                                POT5
                           $0062                                   $D205
            NUMTXTLIN                               POT6
                           $02BF                                   $D206
            OFFCURSOR                               POT7
                           $F718                                   $D207
            OLDGRADR                                POTGO
                           $005E                                   $D20b
            OLDGRCHR                                POTSTAT
                           $005D                                   $D208
            OLDGRCOL                                POWUPBYT1
                           $005B                                   $033D
            OLDGRROW                                POWUPBYT2
                           $005A                                   $033E
            OPTIONJMP                               POWUPBYT3
                           $030E                                   $033F
            OUTCH                                   PREPLINK
                           $F1A4                                   $CA37
            OUTPLT                                  PRINTBUF
                           $F1CA                                   $03C0
            PADDLE0@                                PRMODE
                           $0270                                   $FF46
            PADDLE1@                                PRTBUFPTR
                           $0271                                   $02DE
            PADDLE2@                                PRTBUFSIZ
                           $0272                                   $02DF
            PADDLE3@                                PRWONA
                           $0273                                   $EF6E
            PADDLE4@                                PTIMOUT
                           $0274                                   $0314
            PADDLE5@                                PTRIG0@
                           $0275                                   $027C
            PADDLE6@                                PTRIG1@
                           $0276                                   $027D
            PADDLE7@                                PTRIG2@
                           $0277                                   $027E
            PADTRIGS                                PTRIG3@
                           $C23C                                   $027F
            PHACRS                                  PTRIG4@
                           $F94C                                   $0280
            PHCLOSE                                 PTRIG5@
                           $FF02                                   $0281
            PHOPEN                                  PTRIG6@
                           $FEC2                                   $0282
            PHPUT                                   PTRIG7@
                           $FF3F                                   $0283
            PHSTAT                                  PUTADRESS
                           $FEA3                                   $C748
            PHWRITE                                 PUTBYTE1
                           $FECB                                   $EF26
            PLACRS                                  PUTCHAR
                           $F957                                   $C7E3
            PLOTCOLAC                               PUTLINE
                           $0072                                   $C650
            PLOTROWAC                               PUTMSC
                           $0070                                   $F9A6
            PMBASE                                  RAMSIZE
                           $D407                                   $02E4
            PMCNTL                                  RAMTOP
                           $D01D                                   $006A
            PNMI                                    RAMTSTPTR
                           $C018                                   $0004
            POKTAB                                  RANDOM
                           $EDF9                                   $D20A
            PORTA                                   READJOY0
                           $D300                                   $C20E
            PORTACNTL                               READJOY1
                           $D302                                   $C201


            378

            *** ATARI INTERN                           Labelregister ***


            READPOTS                                SIOTAB
                           $C22B                                   $E851
            READTRIG0                               SIZEM
                           $C219                                   $D00C
            READTRIG1                               SIZEP0
                           $C222                                   $D008
            RECEIVE                                 SIZEP1
                           $EAFD                                   $D009
            RECEIVEN                                SIZEP2
                           $EC40                                   $D00A
            RECEIVEND                               SIZEP3
                           $0039                                   $D00B
            RECLEN                                  SKCNTL
                           $0245                                   $D20F
            RESETCOLD                               SKCNTL@
                           $C2D6                                   $0232
            RESETCOLD                               SKSTAT
                           $C2B8                                   $D20F
            RESETVKT                                SKSTATRES
                           $FFFC                                   $D20A
            RESETWARM                               SPECHANDL
                           $C29E                                   $EEF9
            RETURM                                  SRTIMER
                           $F20B                                   $022B
            RIGMARGIN                               STACKSAVE
                           $0053                                   $0318
            ROMFLAG                                 STANDCHAR
                           $03FA                                   $E000
            ROWINC                                  STARTSTOP
                           $02F8                                   $02FF
            RTS                                     STARTTST
                           $E4C0                                   $03E9
            RUNADRC                                 STATUS
                           $C7E0                                   $FDCC
            RUNADRLOD                               STIMER
                           $02C9                                   $D209
            RUNLOADED                               STRBEG
                           $C7A3                                   $F90C
            SAVEADR                                 SUBBFL
                           $0068                                   $E6D8
            SCREENVKT                               SUBEND
                           $E410                                   $F6AE
            SCRNSTART                               SUBTEMP
                           $0058                                   $029E
            SCROLFINE                               SUPERFLAG
                           $F22E                                   $03E8
            SEARCHLNK                               SWAP
                           $E85D                                   $F962
            SEND                                    SWAPANSPR
                           $EA88                                   $F21E
            SENDDIS                                 SWAPFLAG
                           $EC84                                   $007B
            SENDENABL                               SWITCHROM
                           $EC17                                   $C90A
            SENDINIT                                SYSINIT
                           $ECAF                                   $C543
            SERIN                                   SYSTEMVBL
                           $D20d                                   $C0F0
            SEROUT                                  TABELLE
                           $D20d                                   $FE8D
            SETDCB                                  TABELLEN
                           $FF0F                                   $FB04
            SETTIM1V                                TABELLEN
                           $EDE2                                   $CA65
            SETTIMOUT                               TABMAP
                           $EC9A                                   $02A3
            SETVBLVKT                               TABSIOINI
                           $C280                                   $E7D4
            SHFAMT                                  TEMPLBT
                           $006F                                   $02A1
            SHIFTLOCK                               TEMPROW
                           $02BE                                   $02B8
            SINRDYIRQ                               TEMPSTAT
                           $C030                                   $0319
            SIO                                     TESTCNTL
                           $E971                                   $F93C
            SIOINIT                                 TESTDATA
                           $E95C                                   $0007
            SIOINTERF                               TESTROMEN
                           $C941                                   $F223
            SIOSYSBUF                               TEXTBUF
                           $FE3F                                   $0580


                                                                    379

            *** ATARI INTERN                           Labelregister ***


            TEXTCOL                                 VBLKIVKT
                           $0291                                   $0222
            TEXTGRAD                                VBREAK
                           $029A                                   $0206
            TEXTINDEX                               VBREAKKEY
                           $0293                                   $0236
            TEXTOLD                                 VCOUNT
                           $0296                                   $D40B
            TEXTROW                                 VDELAY
                           $0290                                   $D01C
            TEXTSTART                               VECTAB
                           $0294                                   $C0D7
            TIMCOUNT1                               VIMMEDIRQ
                           $0218                                   $0216
            TIMCOUNT2                               VINTERRUP
                           $021A                                   $0204
            TIMCOUNT3                               VKEYBOARD
                           $021C                                   $0208
            TIMCOUNT4                               VPRECEDE
                           $021E                                   $0202
            TIMCOUNT5                               VSCROL
                           $0220                                   $D405
            TIMEFLAG                                VSERCLOSE
                           $0317                                   $020E
            TIMER1VKT                               VSERIELIN
                           $0226                                   $020A
            TIMER2VKT                               VSERREADY
                           $0228                                   $020C
            TIMER3SIG                               VTIMER1
                           $022A                                   $0210
            TIMER4SIG                               VTIMER2
                           $022C                                   $0212
            TIMER5SIG                               VTIMER4
                           $022E                                   $0214
            TIMOUTINT                               WAIT
                           $EC11                                   $EA37
            TMPRAMSIZ                               WAITHSYNC
                           $0006                                   $D40A
            TRIG0                                   WAITRESET
                           $0284                                   $CODF
            TRIG0                                   WARMFLAG
                           $D010                                   $0008
            TRIG1                                   WRITEMODE
                           $0285                                   $0289
            TRIG1                                   WSIOSB
                           $D011                                   $FE7C
            TRIG2                                   X64KBFLAG
                           $D012                                   $03F8
            TRIG2                                   XMITEND
                           $0286                                   $003A
            TRIG3                                   XORKEYMSK
                           $0287                                   $02B6
            TRIG3                                   ZCHAIN
                           $D013                                   $004A
            UNLINK                                  ZCHAINH
                           $E915                                   $004B
            VBLKDVKT
                           $0224














            380
Hauptkategorie: 8-Bitter
Erstellt: 12 November 2011
Zugriffe: 83011
            *** 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