Agnus 8370

"Agnus" ist eine Abkürzung, die auf heute unerfindlichen Wegen aus "Address-Generator-Units" entstanden ist. Der Baustein ist für die Steuerung des Chip-RAMs zuständig, stellt die Video-Synchronsignale (HSY, CSY, VSY) zur Verfügung und enthält die Coprozessoren Copper und Blitter. Agnus enthält zusätzlich die komplette DMA-Logik für alle 6 möglichen Quellen. Für den zeitlichen Ablauf der einzelnen DMA-Zugriffe dient eine Bildschirmzeile als Zeitbezug. In jeder Zeile werden 225 Speicherzugriffe von Agnus auf die DMA-Kanäle und der CPU verteilt. Für das korrekte Timing sind ein Zeilen- und ein Spaltenzähler verantwortlich (HSY, VSY). Über diese Signale kann das Timing auch extern gesteuert werden (Genlock).

Ein Hauptbestandteil des Agnus-Chips ist ein großer Adressgenerator. Die Custom-Chips des Amiga haben ja unabhängig von der CPU direkten Zugriff auf den RAM- Speicher. Dazu benötigen diese Chips jedoch sogenannte "Adressgeneratoren" und DMA-Kanäle. Über DMA-Kanäle wird der Zugriff auf den RAM-Speicher abgewickelt. Ein Adressgenerator wandelt die Signale eines Chips in vollständige Speicheradressen um oder ordnet bestimmte Speicheradressen einzelnen Registern in den Chips zu. Man kann sich das so vorstellen, dass vor einem Haus statt der Postanschrift nur die Beschreibung "erste Straße nach dem Ortseingang und dann drittes haus auf der linken Seite" bekannt ist. Ein Adressgenerator würde daraus dann "Schillerstraße 12, 47324 Klotzhausen" machen.

Keiner der beiden anderen Chips enthält jedoch alle DMA-Kanäle oder Adressgeneratoren. Alle Speicherzugriffe laufen deshalb über Agnus und werden von ihm kontrolliert und koordiniert. Insgesamt hat Agnus 25 DMA-Kanäle, über die 25 verschiedene Geräte ohne Beihilfe der CPU Daten in den Speicher schreiben oder aus ihm lesen können.

Der Alice-Chip ist die Weiterentwicklung des Big Agnus. Alice wurde komplett neu gestylt und speziell auf die neueren CPUs (ab MC68020) zugeschnitten. Weil bei diesen Prozessoren der Bus 32-Bit breit ist, konnten einige Signale zusammengefasst bzw. entfernt werden.

Alice kann leider nicht in alte Amigas eingebaut werden. Er ist nur für die Amigas mit AGA-Chipset entwickelt worden (A1200/A4000)

Der Copper

Ein typischer Copperbalken-Farbverlauf als Hintergrund im Spiel
Ein typischer Copperbalken-Farbverlauf als Hintergrund im Spiel "Turrican II"

Der wohl wichtigste Coprozessor ist der Copper. Er hat als einziger eigene Befehle, drei an der Zahl, und ist damit in der Lage ein eigenes Programm abzuarbeiten. Dabei richtet sich der Copper genau nach dem Bildschirmaufbau, sprich der Rasterstrahlposition. Er ist direkt an den Elektronenstrahl gekoppelt, mit dem das Bild im Monitor gezeichnet wird und arbeitet zu diesem zweck eng mit Denise zusammen. Da der Copper auf fast alle Register der Custom-Chips zugreifen und zu jeder Rasterstrahlposition ändern kann, wird er hauptsächlich zum Bildschirmaufbau eingesetzt. Erst durch den Copper ist der Amiga in der Lage, mehrere Screens in verschiedenen Auflösungen und Farben gleichzeitig darzustellen. Allerdings kann man mit dem Copper noch einige Tricks mehr machen, wie Spiegeln, Parallax-Scrolling, die berühmten vielfarbigen Copperbalken usw.

Der Copper wird nicht wie ein normaler Prozessor programmiert. Seine Befehle bestehen jeweils aus zweimal 16- bit-Werten, welche nacheinander in einer Liste stehen müssen. Die Anfangsadresse dieser Copperliste muss in zwei Copperregistern eingetragen werden und über ein weiteres wird diese gestartet. Dabei sollte man die Copperliste am Besten zu beginn der vertikalen Austastlücke starten, da sonst ein unschönes Flackern entsteht.

Die beiden wichtigsten Befehle des Coppers sind der "WAIT" und der "MOVE" Befehl. Der WAIT-Befehl wartet auf eine bestimmte Rasterzeile und X-Position. Ist diese Position erreicht wird der nächste Befehl abgearbeitet, dies ist in der Regen ein oder mehrere MOVE-Befehle. MOVE dient zum direkten Ändern der Register der Custom-Chips, etwa der Farbpalette oder des Bildschirmmodus. Jeder MOVE-Befehl benötigt etwas Zeit um ausgeführt zu werden, und zwar wird pro dargestelltem Pixel ein Befehl abgearbeitet. Daher können sich aufwendige Modusänderungen über mehrere Pixel hinziehen, als Folge war es üblich, die ganze Zeile auszublenden um Grafikfehler zu vermeiden. Als Beispiel sei das Spiel "Wings of Fury" (die schwarze Linie zwischen dem Spielfeld oben und den Instrumenten am unteren Bildschirmrand) genannt.

Der am seltensten genutze Befehl ist der SKIP-Befehl, der lediglich das Ende der Copperliste anzeigt.

Der Blitter

Der Blitter ist ebenfalls Teil des Agnus und eine Abkürzung für "Block-Image-Transferer", was soviel heißt wie Grafikblockverschieber. Der Name "Blitter" hat schon eine recht lange Tradition und beruht auf der Prozedur "BitBlt" (bit block transfer), die es auf einem älteren Computer der Firma XEROX gab. Diese Prozedur war für das schnelle Verschieben "rechteckiger" Bereiche in einer Bitmap zuständig. Und da die für den Amiga entwickelte Hardware-Einheit innerhalb von Agnus genau dasselbe tut, lag es nahe, diesen Namen zu verwenden. Jay Miner, der Designer der drei Amiga-Chips, ist in dieser Hinsicht anderer Meinung. Der Blitter des Amiga kann auch wirklich einiges mehr, als nur Daten hin- und herzuschieben. Jay nennt ihn deshalb Bimmer für Bit Image Manipulator.

Der Blitter hat in vielen grafikintensiven Programmen eine ganze Reihe von Aufgaben zu übernehmen. Die erste davon ist das schnelle Füllen von Flächen. Der Blitter kann Flächen mit einer Geschwindigkeit von einer Million Bildpunkten pro Sekunde füllen. Mit derselben Geschwindigkeit kann er auch gerade Linien ziehen. Beide Fähigkeiten verknüpft er übrigens auch sehr geschickt. Um eine bestimmte Fläche zu füllen, muss diese durch dünne Linien begrenzt sein. Man kann jetzt den Blitter blitzschnell die Ränder ziehen lassen und dann den umrahmten Bereich füllen.

Wichtigste Aufgabe des Blitters ist aber die Bewegung von Objekten auf dem Bildschirm. Sinnigerweise heißen diese Objekte dann auch Blitter Objects (BOBs) Der Blitter kann extrem schnell (so schnell es die Speicherchips überhaupt nur können) Daten im Speicher von einem Ort zum anderen bewegen. Um BOBs als eine Art eigenständiger Bilder "über der Hintergrundgrafik" zu bewegen, werden diese mit Hilfe des Blitters direkt in die Bitmap des Hintergrundbildes hineinkopiert. Vorher wird (ebenfalls mit dem Blitter) der alte Inhalt der Bitmap in einem Puffer gesichert. Wird das BOB dann bewegt, so wird diese gesicherte Kopie des alten Inhalts in die Bitmap zurückkopiert, der Inhalt des Hintergrundbildes an der neuen Position des BOBs gesichert und dann das BOB an der neuen Stelle gezeichnet. Für diese Aktionen wird zwar auch viel geschickt programmierte Software benötigt, den Löwenanteil der Arbeit erledigt jedoch der Blitter - weshalb die BOBs ihren Namen zu Recht tragen.

Und weil der Blitter das Datenschaufeln so viel besser kann als die CPU, kann er dabei die CPU und alle anderen Chips auch vom Speicher "abschneiden". Das führt dazu, dass alle anderen Chips warten müssen, bis der Blitter fertig ist, bringt aber auch einen massiven Geschwindigkeitsgewinn. Deswegen sollte man das Feature auch einsetzen, denn immer, wenn der Blitter die CPU vom Speicher abschneidet erledigt er aufgaben, die die CPU nicht annähernd so blitzschnell schaffen würde.

Das "blitzschnell" ist auch relativ, denn ein 68030er oder höher würde diese Aufgaben schon schneller erledigen. Trotzdem hat der Blitter seine Berechtigung, denn es ist nicht nur einfaches verschieben oder zeichnen möglich, man kann auch bis zu drei verschiedene Quellen beliebig miteinander verknüpfen, Masken setzen und Bereiche scrollen.

Der Blitter kann wie jeder Custom-Chip natürlich nur im Chip-RAM arbeiten. Neben der offensichtlichen Benachteiligung in Sachen Flexibilität gibt es auch einen Vorteil: sofern die CPU gerade im Fast-RAM arbeitet kann der Blitter völlig ungestört und parallel zur CPU im Chip-RAM arbeiten.

Modellübersicht

Verwendet in
Name Teilenummer Chip-RAM Eingesetzt in Amiga-Modell
8361 ? 512 KByte NTSC Big-Agnus für Ur-Amiga 1000, A2000-A
8367 ? 512 KByte Wie 8361, aber für PAL-Norm (Europa)
8370 318070-01 512 KByte NTSC Fat-Agnus für erste A500 und A2000 ab Rev.4
Zusätzlich 512KByte ab Adresse $C00000 Slow-RAM möglich
8371 318071-01 512 KByte PAL-Version des 8370
8372 318069-01 1024 KByte Offenbar Nachrüst-Agnus für Amiga 2000
8372-A 318069-01 1024 KByte Big-Agnus für ECS-Amigas (neuere A500, A2000 ab Rev. 6)
Für beide Normen (PAL/NTSC, Umschaltbar)
8372-B 318069-03 2048 KByte Super-Big-Agnus für Amiga 3000 (ECS)
8375 318069-11 2048 KByte wie 8372-B etwas verbessert und andere Pinbelegung.
Für A500+ und A600
8374 391010-01 2048 KByte Alice, verwendet bei A1200, A4000 und CD³²