Amiga Patent Story
   Previous: Amiga Design    Up: Index    Next: Denise

II. Hardware

2. Amiga Hardware: Agnus (US-Patent 4,874,164)

 

 

Baustelle

 

Tipp: Der Ausdruck der Patentzeichnungen (TIF-Format) erspart nervtötende Scrollorgien.

 

***************************************

 

Blockschaltbild des Amiga

Bild 1: Blockschaltbild des Amiga

High Resolution TIF Image ( 32,9kB )

 

 

***************************************

 

Blockschaltbild des Custom-Chip Agnus

 

Bild 2 zeigt das Blockschaltbild des Custom-Chip Agnus. Der Agnus-Chip 410 nach Bild 1 fungiert als Adress-Generator. Er umfasst circa 21 000 Transistoren und belegt eine Chip-Fläche von 6,04 * 7,14 Quadratmillimeter. Untergebracht ist der Chip in einem 48-poligen DIL-Gehäuse. Seine Hauptaufgabe im Chip-Bereich sind die Bereitstellung eines RAM-Adressgenerators 45 und eines Register-Adresskodierers 43, die zuständig sind für die Erzeugung aller Register- und RAM-Adressen während eines DMA-Zyklus. Der Agnus-Chip beinhaltet die DMA-Kanal-Steuerlogik des gesamten Amiga-Systems. Außerdem enthält der Chip einen Bitmap Image Manipulator (Blitter) 67 und einen mit der Bildschirmanzeige synchronisierten Koprozessor (Copper) 47. Das Blockschaltbild nach Bild 2 zeigt die Einheiten der DMA-Steuerlogikschaltungen und die Treiber für den Register-Adressbus 405 und den RAM-Adressbus 406. Der Ausgang einer jeden DMA-Steuerlogikschaltung ist mit zwei nummerierte Pfeilen versehen. Diese stehen für die jeweilige Anzahl der DMA-Kanäle in Bezug auf den RAM-Adressgenerator 45 und den Register-Adresskodierer 43.

 

Blockschaltbild des Custom-Chip Agnus

Bild 2: Blockschaltbild des Custom-Chip Agnus

High Resolution TIF Image ( 44,7kB )

 

 

***************************************

 

Der RAM-Adressgenerator

 

Blockschaltbild des RAM-Adressgenerators

Bild 3: Blockschaltbild des RAM-Adressgenerators

High Resolution TIF Image ( 27,2kB )

 

 

***************************************

 

Der Koprozessor (Copper)

 

Blockschaltbild des Koprozessors (Copper)

Bild 3: Blockschaltbild des Koprozessors (Copper)

High Resolution TIF Image ( 23,2kB )

 

 

***************************************

 

Der Bitmap Image Manipulator (Blitter)

 

Für den folgenden Abschnitt erscheint es sinnvoll, eingangs einige Grundlagen aufzufrischen, da sich die Beschreibung auf die Chip-Ebene hinab begibt.

Digitalschaltungen basieren bekanntlich auf der Boolschen Algebra, die Georg Boole (1815-1864) im Jahre 1847 vorgestellt hat. Die Boolsche Algebra beschreibt Verknüpfungsregeln für binäre Zahlen. Sie kennt nur zwei Aussagen: WAHR und FALSCH. Für eine Logikschaltung bedeutet dies: Es fließt Strom (1) oder es fließt kein Strom (0). Es gibt drei logische Grundverknüpfungen:

  • UND - Die Aussage ist dann wahr, wenn beide Bedingungen erfüllt sind,
  • ODER - Die Aussage ist dann wahr, wenn genau eine von beiden Bedingungen erfüllt ist und
  • NICHT - Die Aussage ist dann wahr, wenn keine der beide Bedingungen erfüllt ist.

Auch komplexe Verknüpfungen können auf diese Grundverknüpfungen zurückgeführt werden.

Nachfolgend ein Beispiel für eine logische UND-Verknüpfung: Gegeben sei ein Stromkreis mit einer Stromquelle, einer Lampe X und zwei in Reihe (hintereinander) liegenden Schaltern A und B. Die Schalter kennen die Zustände "0" für "offen" und "1" für "geschlossen". Die Lampe die Zustände "1" für "an" und "0" für "aus". Es ist leicht nachvollziehbar, dass die Lampe X nur dann leuchtet, wenn beide Schalter A und B geschlossen sind. Dann ist die Aussage wahr, da beide Bedingungen erfüllt sind. Oder nach den Regeln der Boolschen Algebra: 1+1=1.

 

***************************************

 

Die Hardware für den Blitter 67 aus Bild 2 ist in einem Funktions-Blockschaltbild in Bild 4 gezeigt. Die Daten des Datenbus 404 werden in die Quelldatenregister A 77 und B 79 unter Steuerung durch den Register-Adress-Dekoder 27 in Bild 2 eingeschrieben. Die Quelldatenregister 79 und 77 besitzen jeweils zwei 16-Bit-Register. Die Quellregister 77a und 79a speichern das Datenwort, das zuvor in die Register 77 und 79 eingeschrieben wurde. Die Quelldatenregister A 77 und B 79 geben jeweils zwei 16-Bit-Worte in den sog. Barrel Shifter 81 aus.
   Register: Schaltung, die ein Datenwort taktgesteuert aufnehmen, speichern und wieder abgeben kann.
   Barrel Shifter: Schaltung zum Schieben oder Rotieren eines 32-Bit-Wortes um eine beliebige Distanz in einem einzigen Takt.

Daten vom Datenbus 404 werden ebenfalls in die Maskenregister 83 (erstes Datenwort) und 85 (zweites Datenwort) eingeschrieben. Die Ausgangsignale dieser Maskenregister werden in die Quellmaskenlogik A 90 geladen. Die Maskenlogik A 90 empfängt Steuersignale von der Blitter-DMA-Steuerung 65 aus Bild 2, wenn das Datenwort im Register 77 das erste und/oder das letzte im Blitter-Fenster für eine horizontale Zeile ist.

Funktionelles Blockschaltbild des Blitter

Bild 4: Funktionelles Blockschaltbild des Blitter

High Resolution TIF Image ( 36,0kB )

 

 

Der Datenbus 404 liegt ferner am Speicherregister C 89 an, wobei die Dateneinschreibung ebenfalls durch den Register-Adress-Dekoder 27 aus Bild 2 gesteuert wird. Die Daten des Speicherregisters C 89 werden in eine Logikeinheit 91 geladen, die aus einen Minterm Generator zur Ausführung Boolscher Operationen besteht. Die Logikeinheit 91 besitzt einen 8-Bit-Steuereingang (Multi Minterm Select), über den ihr mitgeteilt wird, welche der möglichen 256 Logikoperationen auf die in den Registern A 101, B 102 und C 89 gespeicherten Datenbits angewendet werden soll.
   Minterm: Bei Boolschen Funktionen mit n Eingangsvariablen (hier: A, B und C) bezeichnet man die konjunktive Verknüpfung (UND) aller Variablen als Minterm, wobei jede Eingangsvariable in negierter oder nichtnegierter Form vorkommen muss. Ein Minterm ist somit eine Boolsche Funktion, die für genau eine Eingangskombination den Ausgangswert "1", also WAHR und für alle anderen Kombinationen den Wert "0", d.h. FALSCH annimmt.

Ein Schieberegister A 93 und ein Schieberegister B 95 werden jeweils mit vier Datenbits vom Datenbus 404 geladen. Die Dateneinschreibung wird durch das Blitter-Steuerregister 63 aus Bild 2 gesteuert. Die 4-Bit-Worte der Schieberegister 93 und 95 liegen am Steuereingang des Barrel Shifter 81. Der Barrel Shifter 81 kann den Inhalt der Quelldatenregister A 77 und B 79 unabhängig voneinander um jeweils bis zu 15 Bit verschieben. Mit je einem 16-Bit-Datenwort sind die Speicherregister A 101 und B 102 geladen. Eines der Blitter-Steuerregister 63 nach Bild 2 wird mit Daten vom Datenbus 404 geladen. Acht Bit dieses Blitter-Steuerworts enthalten die Multi-Minterm-Auswahlbits, die die Logikeinheit 91 ansteuern. Damit wird bestimmt, welche der acht verfügbaren Minterms zu kombinieren sind, um eine von 256 möglichen Logikoperationen auf die in den Speicherregistern 101, 102 und 89 gespeicherten Daten anzuwenden.
   Schieberegister: Schaltung, die ein Datenwort taktgesteuert aufnehmen, speichern, verschieben und wieder abgeben kann. In einem Takt wird der Registerinhalt um eine Stelle nach rechts verschoben. Beispiel: Links im folgenden Bild der Inhalt eines 8-Bit Schieberegisters vor, rechts nach der Verschiebung um ein Binärstelle:


     0 1 0 1 1 1 0 0  -->  0 0 1 0 1 1 1 0
   

Der Blitter arbeitet beim Kopieren von Daten immer nach dem gleichen Muster: Bis zu drei verschiedene Quellbereiche (A, B, C) werden miteinander logisch verknüpft und das Ergebnis in einen Zielbereich D geschrieben. Die punktweise Verknüpfung auf den Quellbereichen erfolgt durch eine beliebige dreistellige boolesche Funktion, ausgewählt aus den verfügbaren Minterms des Minterm-Generators.

 

Ein Beispiel soll die Funktion des Blitter verdeutlichen: In Spielen wird der Blitter meist intensiv zur Darstellung bewegter Grafikobjekte, sogenannter BOBs (Blitter Objects), verwendet. Diese werden vor jedem Bildaufbau an den entsprechenden Stellen in das Playfield einkopiert. Dabei ist eine Bitplane des eigentlichen BOB einer der Quellbereiche (Datenregister A 77), in einem zweiten Quellbereich liegt eine Maske, welche die nicht-transparenten Pixel des BOBs ausmaskiert (Datenregister B 79), und der dritte Quell- und zugleich Zielbereich ist die entsprechende Bitplane des Playfield (Datenregister C 89).

Bildquelle und Beispiel: Niklas Matthies: Proseminar Computerspiele - Die Hardware des Commodore Amiga 500.

Funktionelles Blockschaltbild des Blitter

Bild 5: Beispiel für die Blit-Funktion
 

 

Die Logikeinheit 91 enthält auch eine Füll-Logikschaltung. Diese Fülllogik dient dazu, Bereiche zwischen den horizontalen Begrenzungslinien eines Objekts auszufüllen. Die Ausgabefunktion wird durch ein Register der Blitter-Steuerung 63 nach Bild 2 gesteuert. Die Füllfunktion für jedes Bit oder jedes Wort wird über ein Signal auf Leitung 107 aktiviert und wirkt auf das nächste Bit oder das erste Bit des nächsten Wortes, wenn die Blitteroperation für das aktuelle Wort abgeschlossen ist. Die EXCLUSIV ODER (XOR)-Schaltung 108 ersetzt, wenn sie eine erste logische "1" auf einer horizontalen Zeile findet, die folgenden Nullen durch "1", bis sie auf eine zweite "1" auf derselben Zeile stößt. Die Füllgeschwindigkeit beläuft sich auf circa 1 Million Bildpunkte pro Sekunde. Die Logikeinheit 91 gibt ihre Daten an ein Speicherregister 113 aus. Der Ausgangswert des Speicherregisters 113 kann an den Datenbus 404 übergeben und im RAM-Speicher 401 gespeichert werden.
   XOR: (eXclusive OR) ist ein Boolscher Operator. Wenn man WAHR als "1" und FALSCH als "0" auffasst, dann entspricht dem bitweisen XOR im binären Zahlraum die Addition ohne Überlauf, d.h. es gilt 0+0=0, 1+0=1, 0+1=1 und 1+1=0, was sich sehr effizient in Hardware implementieren lässt.

 

(Thomas Unger)


   Previous: Amiga Design    Up: Index    Next: Denise

Copyright © Thomas Unger 2000-2005. Alle Rechte vorbehalten. Hinweise an: kickstart@arcor.de

Letzte Veränderung: 11. November 2004