Copper (Amiga)
Der Copper ist einer der Koprozessoren im Chipsatz des Amiga-Computers von Commodore.[1] Seine grundlegendste Aufgabe ist, bei Beginn eines Bildaufbaus die Videologik des Chipsatzes zu initialisieren, damit bei jedem Bildaufbau die gleichen Speicherbereiche (für ein Standbild) dargestellt werden.[2] Der Copper ist so konstruiert, dass an bestimmten Stellen des Bildschirms dynamische Umkonfigurationen der Videologik vorgenommen werden können und so die Anzeige flexibler gestaltet werden kann.
Das Betriebssystem nutzt diese Möglichkeiten intensiv bei der Verwaltung sogenannter Screens – der Copper ermöglicht, dass verschiedene Screens der Amiga-Grafik gleichzeitig höhenversetzt dargestellt werden können. Dabei kann jeder Screen in einem völlig anderen Darstellungsmodus arbeiten. Das wird erreicht, indem in einer bestimmten Bildschirmzeile die Konfiguration der Videologik komplett geändert wird, so dass ein anderer Darstellungsmodus wirksam wird und auch die Anzeigedaten aus anderen Bereichen des Videospeichers (im Chip-RAM) geholt werden. Bei anderen Computersystemen nennt man so etwas auch Split Screen.
Weitere Effekte, die auf Umkonfigurationen der Videologik an einer bestimmten Bildschirmkoordinate zurückzuführen sind, werden in Spielprogrammen verwendet.
Funktionsweise
BearbeitenDer Copper arbeitet eigene Programme, die sogenannten Copperlisten, synchron zum Elektronenstrahl des angeschlossenen Monitors ab. Diese Programme sind aus nur drei verschiedenen Grundbefehlen aufgebaut:
- ein WAIT-Befehl, der den Copper passiv auf Erreichen einer bestimmten Bildschirmkoordinate (bei Vorgabe der Werte von und ) warten lässt; weiterhin kann auf die Fertigstellung eines Blits gewartet werden;
- ein MOVE-Befehl, der ein wählbares Register im Chipsatz auf einen neuen, vorgebbaren 16-Bit-Wert setzt;
- ein SKIP-Befehl, der den folgenden Befehl überspringt, wenn der Elektronenstrahl bereits eine gewisse Position passiert hat. Damit kann man Schleifen in Copperlisten programmieren.
Durch Manipulation von speziellen Adressregistern können Sprünge implementiert werden. Weiterhin kann dem Copper erlaubt werden, den Blitter zu steuern und damit mittelbar auch beliebige Adressen im Chip-RAM manipulieren. Auch ist es möglich, bildsynchrone Interruptanforderungen an die CPU abzusetzen.
Die Auflösung der horizontalen Warteposition beträgt beim Original Chip Set vier Low-Resolution- bzw. acht High-Resolution-Pixel. Wenn die Video-Elektronik im Amiga-Chipsatz die Ausgabe eines neuen Bildes links oben beginnt, wird auch die Copperliste gestartet, in der Regel mit einem Warte-Befehl. Wird die im Wartebefehl angegebene Bildschirmkoordinate erreicht, kann der folgende Befehl abgearbeitet werden, in der Regel ein Move-Befehl, mit dem eines der Konfigurationsregister geändert wird. Typischerweise wird es mit der Änderung eines einzigen Registerinhalts nicht getan sein, so dass mehrere solcher Move-Befehle ohne weitere Wartebefehle hintereinander folgen werden.
Es kann allerdings nur ein Copper-Befehl pro Pixel abgearbeitet werden, so dass sich eine Umkonfiguration über eine ganze Reihe von Pixeln hinziehen kann. Das Betriebssystem fügt daher in seine eigenen Copperlisten beim Original Chip Set zwischen zwei vertikal aufeinander folgenden Screens eine schwarze Zeile ein; beim AGA-Chipsatz müssen es sogar drei sein. Einfachere Umkonfigurierungen als Screen-Umschaltungen lassen sich natürlich auch ohne Schwarzschaltungen direkt erledigen.
Wenn mehr als zwei Screens gleichzeitig anzuzeigen sind, müssen entsprechend viele Wartebefehle mit folgenden Move-Befehlen zur Umkonfigurierung in der Copperliste angeordnet sein. Erst ganz am Schluss aller dieser Teile folgt ein Wartebefehl auf eine Position, die niemals erreicht wird. Dies ist das Programmende, wobei der Copper so lange wartet, bis durch einen neuen Bildaufbau die Copperliste neu gestartet wird.
Das Betriebssystem stellt Funktionen zur Verfügung, um Copperlisten zu mischen und aus zu den einzelnen Screens gehörenden Copperlisten eine finale Copperliste zu erzeugen, die dem Copper zum Abarbeiten übergeben wird.
Copper-Tricks
BearbeitenDie Programmierbarkeit durch den Copper erlaubte diverse Tricks im Display:
- „Wiederverwendung“ von Sprites: Die Amiga-Hardware bietet nur 8 Sprites, aber mit Unterstützung durch den Copper kann sie den Eindruck von sehr viel mehr erwecken. Jeder Sprite wird an einer bestimmten Position dargestellt, bis der Rasterstrahl ihn passiert hat; der Copper kann dann augenblicklich dessen Position und sein Aussehen ändern, bevor der Rasterstrahl diese neue Position erreicht. Ein einzelner Hardware-Sprite kann so mehrere auf dem Schirm sichtbare Objekte abdecken. Es braucht zwar CPU-Zeit, um die Copperlisten zu aktualisieren, aber die eigentliche Versetzung der Sprites zur richtigen Zeit an die richtigen Positionen wird komplett durch den Chipsatz vorgenommen.
- Anzeige-Auflösungen und Farbpaletten mitten im Bild ändern: Eine der ungewöhnlichsten Eigenschaften des Amiga – der Computer kann die Auflösung von einer Zeile zur nächsten wechseln, also verschiedene horizontale Auflösungen auf demselben Schirm gleichzeitig anzeigen. Das ähnelt von weitem der Möglichkeit von Windows, mit den Tasten Alt-Tab zwischen verschiedenen bildschirmfüllenden Programmen umzuschalten, aber auf dem Amiga zieht der Benutzer den vordersten Schirm einfach wie ein Rollo herunter, um zu sehen, was sich dahinter verbirgt – beide sind gleichzeitig sichtbar. Malprogramme benutzen dies, um den Benutzer direkt in einen HAM-Schirm (in niedriger Auflösung) zeichnen zu lassen, gleichzeitig aber am oberen oder unteren Schirmrand eine hochaufgelöste, detaillierte Werkzeugleiste anzuzeigen. Bei Spielprogrammen hat man oft im oberen Anzeigenteil eine bewegte Szenerie in niedriger Auflösung und am unteren Rand ebenfalls eine hochaufgelöste Leiste mit Daten und Aktionsknöpfen.
- Sogenanntes „Sliced HAM“, oder S-HAM. Dies wurde 1989 von Rhett Anderson erfunden; es besteht aus einer Copperliste, die die Farbpalette vor jeder Zeile einer HAM-Anzeige umbelegt, um so fast alle Farbeinschränkungen dieses Modus zu umgehen.
- Grafik mit 12 Bit Farbtiefe, ohne den HAM-Modus zu benutzen: der Grafikmodus wird auf 0 Bit Farbtiefe geschaltet – also nur Hintergrund – die Farbe wird aber durch den Copper so schnell variiert, dass ein niedriger aufgelöstes „Highcolor“ Bild entsteht.
Besonders in der Programmierer-Demoszene wurden solche Tricks zu immer beachtlicheren Effekten gesteigert. Es gab z. B. in Frankreich eine Programmierergruppe, die sich Wild Copper nannte und deren Erzeugnisse eine gewisse Berühmtheit erlangten.
Hardware-Organisation
BearbeitenDer Copper ist im Agnus-Chip des Chipsatzes enthalten. Die Copperliste muss im Chip-RAM liegen, denn nur hierauf hat der Chipsatz Zugriff. Den Zugriff erledigt der Agnus-Chip mittels seiner DMA-Maschine. Die aktuelle Bildschirmposition erhält der Copper vom Denise-Chip, der die Videoausgabe steuert. Ebenfalls im Denise-Chip liegen die Videokonfigurationsregister, die üblicherweise über die Copperliste modifiziert werden.
Siehe auch: Commodore-Produktübersicht
Literatur
Bearbeiten- Commodore Business Machines, Inc.: Amiga Hardware Reference Manual. 4. Print. Addison-Wesley Publishing Company Inc., Reading MA u. a. 1987, ISBN 0-201-11077-6 (Amiga technical reference series).
Weblinks
Bearbeiten- Copper Chunky Programmierung eines Copper-Tricks, Dutch Retro Guy 2021
- Grade my waterbear[3] by Scoopex, Tokyo Demofest 2016
- Grizzlybear by Damones, Simulaatio 2016. 256x256 Rotozoom in 50 fps in 12 Bit Farbtiefe
- Coppershade Anleitungen zur Programmierung mit dem Copper
Einzelnachweise
Bearbeiten- ↑ Der Copper im Agnus 8370 auf cbmmuseum.kuto.de
- ↑ General purpose of coprocessor Copper auf amigadev.elowar.com
- ↑ To establish a generally usable Copperchunky mode on A500 presents a substantially trickier challenge, with the first limit to overcome is a width of 31 x 4 = 124px (with 31 colors stealing 25% of the CPU time). The trick is to change 50 colors per line without completely choking the CPU into uselessness for anything, let alone a zoomrot. ScoopexUS