Categories: Technologie

Halten-und-ändern

Hold-And-Modify, normalerweise abgekürzt als HAM, ist ein Anzeigemodus des Commodore Amiga-Computers. Es verwendet eine sehr ungewöhnliche Technik, um die Farbe von Pixeln auszudrücken, so dass viel mehr Farben auf dem Bildschirm erscheinen, als dies sonst möglich wäre. Der HAM-Modus wurde häufig verwendet, um digitalisierte Fotos oder Videobilder, Bitmap-Grafiken und gelegentlich Animationen anzuzeigen. Zum Zeitpunkt der Markteinführung des Amiga im Jahr 1985 war diese nahezu fotorealistische Anzeige für einen Heimcomputer beispiellos und wurde weitverbreitet verwendet, um die grafischen Fähigkeiten des Amiga zu demonstrieren. HAM weist jedoch erhebliche technische Einschränkungen auf, die verhindern, dass es als allgemeiner Anzeigemodus verwendet wird.

Hintergrund
Der ursprüngliche Amiga-Chipsatz verwendet ein planares Display mit einem 12-Bit-RGB-Farbraum, der 4096 mögliche Farben erzeugt.

Die Bitmap des Spielfeldes wurde in einem Abschnitt des Hauptspeichers gehalten, der als Chip-RAM bekannt ist, der zwischen dem Anzeigesystem und der Haupt-CPU geteilt wurde. Aufgrund von Timing-Überlegungen hatte der Chipsatz nur Zeit, 6 Bits pro Pixel zu lesen, bevor es Zeit war, das nächste Pixel auf dem Bildschirm zu zeichnen. Um die Menge an Daten zu reduzieren, die zum Beschreiben eines Bildes benötigt werden und somit in diese Begrenzung passen, verwendete das Anzeigesystem ein indiziertes Farbsystem mit einer Farbpalette.

Die Hardware enthielt 32 Register, die auf irgendeine der 4096 möglichen Farben eingestellt werden konnten, und das Bild konnte unter Verwendung von 5 Bits pro Pixel auf jeden dieser 32 Werte zugreifen. Das sechste verfügbare Bit wurde von einem als Extra Half-Brite bekannten Anzeigemodus verwendet, der die Leuchtkraft dieses Pixels um die Hälfte reduzierte und damit eine einfache Möglichkeit zur Erzeugung von Schatteneffekten bot.

Halten-und-ändern-Modus
Als der Amiga-Chipsatz zuerst entworfen wurde, arbeitete er direkt in den Chroma-, Farbton- und Luminanzwerten des NTSC-Signals, wie es für frühe Heimcomputer üblich war, für die Fernsehgeräte zur Anzeige verwendet wurden. Dies führte zu der Möglichkeit, die Menge an Speicher, die zum Anzeigen eines einfarbigen Bildes wie Schwarz-Weiß-Fernsehen benötigt wird, stark zu reduzieren, indem der Farbwert am Anfang einer Abtastzeile eingestellt wird und dann die Bitmap-Werte nur den Luminanzwert modifizieren. Da analoge Fernsehbilder nur über eine Anzahl von Pixeln von Schwarz zu Weiß wechseln können, nicht sofort von einem zum nächsten, würden vier Pixel ausreichen, um ein glaubwürdiges „Schwarz-Weiß“ -Bild zu liefern, das die zum Speichern eines Speichers benötigte Speichermenge halbiert Bild.

Als das Amiga-Design von einer Spielekonsole auf einen Heimcomputer migrierte, wechselte der Chipsatz ebenfalls vom HSL-Farbmodell zum modernen RGB-Farbmodell. Um Jay Miner zu zitieren:

“ Hold and Modify kam von einer Reise, um Flugsimulatoren in Aktion zu sehen, und ich hatte eine Art Vorstellung von einer primitiven Art von virtueller Realität. NTSC auf dem Chip bedeutete, dass Sie den Farbton beibehalten und die Luminanz ändern konnten, indem Sie nur vier Bits änderten. Als wir auf RGB umgestiegen sind, sagte ich, dass das nicht mehr benötigt wird, da es nicht nützlich war und ich bat den Chip-Layout-Typen, es auszuziehen. Er kam zurück und sagte, dass dies entweder ein großes Loch in der Mitte des Chips hinterlassen würde oder eine dreimonatige Neugestaltung und wir könnten das nicht tun. Ich dachte nicht, dass irgendjemand es benutzen würde. Ich habe mich wieder geirrt, da dies dem Amiga seinen Vorsprung in Bezug auf die Farbpalette wirklich gegeben hat. “
Hold-And-Modify war im Wesentlichen eine Modifikation des ursprünglichen Luminanz-Only-Konzepts, wobei dieses Mal die Modifikation einer der drei Farbkomponenten Rot, Grün oder Blau ermöglicht wurde. HAM kann als eine verlustreiche Komprimierungstechnik betrachtet werden; Im HAM6-Modus wird das Spielfeld in der Hälfte des für einen 12-Bit-Farbraum erforderlichen Speicherplatzes kodiert. Die größere Gesamtfarbtreue wird auf Kosten der horizontalen Chrominanzauflösung erreicht. Der HAM-codierte Farbraum wird von der Anzeige-Hardware in Echtzeit „dekomprimiert“, während der Grafikpuffer angezeigt wird.

Verwendung
Als der Amiga 1985 auf den Markt kam, bot der HAM-Modus einen erheblichen Vorteil gegenüber konkurrierenden Systemen. HAM ermöglicht die gleichzeitige Anzeige aller 4096 Farben, jedoch mit den oben genannten Einschränkungen. Diese pseudophotorealistische Darstellung war für einen Heimcomputer der damaligen Zeit beispiellos und ermöglichte die Anzeige von digitalisierten Fotografien und gerenderten 3D-Bildern. Im Vergleich dazu erlaubte der damalige IBM-PC-Standard EGA 16 Bildschirmfarben aus einer Palette von 64. Der 1987 eingeführte EGA-Nachfolger VGA mit seinem Flaggschiff-Modus Mode 13h erlaubte 256 Bildschirmfarben von 262.144. Der HAM-Modus wurde häufig verwendet, um die Fähigkeit des Amigas in Verkaufsdisplays und Fachpräsentationen zu demonstrieren, da konkurrierende Hardware die Farbtiefe nicht erreichen konnte. Aufgrund der oben beschriebenen Einschränkungen wurde HAM hauptsächlich für die Anzeige von statischen Bildern verwendet und Entwickler vermieden weitgehend die Verwendung mit Spielen oder Anwendungen, die eine Animation benötigen.

Mit der Einführung der Advanced Graphics Architecture könnte ein herkömmliches planares Bild eine Palette von 256 Farben haben, die eine wesentlich höhere Farbtreue bieten. Der ursprüngliche HAM-Modus mit seiner begrenzten Farbauflösung wurde für Benutzer einer AGA-Maschine weit weniger attraktiv, obwohl er aus Gründen der Abwärtskompatibilität noch enthalten war. Der neue HAM8-Modus war für den AGA-Chipsatz weitaus weniger nützlich als der HAM-Modus für den ursprünglichen Chipsatz, da eine planare 256-Farben-Palette die Optionen für den Künstler erheblich verbesserte, ohne die Nachteile des HAM-Modus zu erleiden. Ein gut programmierter Sliced-Planar-Modus könnte sich als nützlicher erweisen als HAM8. Der ursprüngliche Zweck von HAM, der trotz begrenzter Videopuffergröße und begrenzter Speicherbandbreite eine höhere Farbauflösung ermöglichen sollte, war nicht mehr so ​​relevant.

Da moderne Computer hochauflösende TrueColor-Displays ermöglichen, sind Anzeigetechniken wie HAM nicht mehr erforderlich. Planare Graphiken sind nun auch für das allgemeine Rechnen veraltet, da moderne Grafikhardware über genügend Speicherbandbreite verfügt, um gepackte Pixel zu verwenden.

Einschränkungen
Der HAM-Modus beschränkt den Wert benachbarter Pixel auf jeder horizontalen Linie des Spielfeldes. Um zwei beliebige Farben nebeneinander darzustellen, kann es bis zu zwei Zwischenpixel erfordern, um zu der beabsichtigten Farbe zu wechseln (wenn die roten, grünen und blauen Komponenten alle modifiziert werden müssen). Im schlimmsten Fall reduziert dies die horizontale Chrominanzauflösung von 704 Pixeln auf so niedrig wie 240 (zum Vergleich hatten moderne Technologien wie VHS eine Chrominanzauflösung von 40 bei 0,4 MHz). Dieses Problem ist besonders in Bereichen mit scharfem Kontrast (starken horizontalen Bildgradienten) bemerkbar, bei denen ein unerwünschtes mehrfarbiges Artefakt oder „Fransen“ auftreten kann. Verschiedene Rendering-Techniken wurden verwendet, um die Auswirkungen von „Fransen“ zu minimieren, und HAM-Displays wurden oft so entworfen, dass sie subtile horizontale Farbverläufe beinhalten, wobei vertikale Kanten und Kontraste vermieden werden.

Die Anzeige eines Vollfarbbildes im HAM-Modus erfordert eine sorgfältige Vorverarbeitung. Da HAM nur eine der RGB-Komponenten gleichzeitig ändern kann, können schnelle Farbübergänge entlang einer Scan-Linie am besten durch Verwendung eines der voreingestellten Farbregister für diese Übergänge erreicht werden. Um ein beliebiges Bild zu rendern, kann ein Programmierer wählen, zuerst das Originalbild auf den am meisten wahrnehmbaren dieser Übergänge zu untersuchen und dann diese Farben einem der Register zuzuordnen, eine Technik, die als adaptive Paletten bekannt ist. Mit nur 16 verfügbaren Registern im ursprünglichen HAM-Modus ist jedoch ein gewisser Verlust an Farbtreue üblich.

Außerdem erlaubt der HAM-Modus keine einfache Animation der Anzeige. Wenn zum Beispiel ein beliebiger Teil des Spielfeldes zu einer anderen Bildschirmposition bewegt werden soll, müssen die Hold-and-Modify-Werte möglicherweise auf allen Quellen- und Ziellinien neu berechnet werden, um das Bild korrekt anzuzeigen (eine Operation nicht gut geeignet für Animation). Insbesondere wenn der linke Rand des animierten Objekts irgendwelche „Modify“ -Pixel enthält oder wenn das Bild unmittelbar rechts von dem Objekt irgendwelche „Modify“ -Pixel enthält, müssen diese Hold-and-Modify-Werte neu berechnet werden. Ein Versuch, ein Objekt um den Bildschirm zu bewegen (z. B. bei Verwendung des Blitters), erzeugt merkliche Ränder an den linken und rechten Rändern dieses Bildes, es sei denn, die Grafiken sind speziell dafür entworfen, dies zu vermeiden. Um Neuberechnung von Hold-and-Modify-Werten zu vermeiden und Umrandungen zu umgehen, müsste der Programmierer sicherstellen, dass das Pixel ganz links von jedem Blitter-Objekt und das Pixel ganz links jeder Zeile eines Scroll-Spielfeldes ein „Set“ -Pixel ist. Die Palette müsste so entworfen werden, dass sie jedes Pixel ganz links enthält. Alternativ kann eine HAM-Anzeige animiert werden, indem Pixelwerte durch prozedurale Erzeugung erzeugt werden, obwohl dies im Allgemeinen nur für synthetische Bilder nützlich ist, z. B. die „Regenbogen“ -Effekte, die in Demos verwendet werden.

Beachten Sie jedoch, dass Hold-and-Modify nur für Spielfeldpixel gilt. 128 Pixel Sprite-Daten (im DMA-Modus) pro Scanlinie stehen weiterhin für die Platzierung auf dem HAM-Spielfeld zur Verfügung.

Implementierungen
Original-Chipsatz-HAM-Modus (HAM6)
Der HAM6-Modus, der nach den 6 Datenbits pro Pixel benannt wurde, wurde mit dem Originalchipsatz eingeführt und wurde im späteren verbesserten Chipsatz und der erweiterten Grafikarchitektur beibehalten. Mit HAM6 können bis zu 4096 Farben gleichzeitig bei Auflösungen von 320 × 200 bis 360 × 576 angezeigt werden.

Related Post

Die HAM6-Codierung verwendet sechs Bits pro Pixel: zwei Bits für die Steuerung und vier Bits für die Daten. Wenn die zwei Steuerbits beide auf Null gesetzt sind, werden die vier verbleibenden Bits zum Indizieren eines der 16 voreingestellten Farbregister verwendet, die in der Art einer normalen indizierten Bitmap arbeiten. Die anderen drei möglichen Steuerbitmuster zeigen an, dass die Farbe des vorherigen Pixels (nach links) auf der Abtastzeile verwendet werden sollte und die Datenbits stattdessen verwendet werden sollten, um den Wert der roten, grünen oder blauen Komponente zu modifizieren. Folglich gibt es vier Möglichkeiten:

Festlegen: Verwenden Sie die 4 Datenbits zum Indizieren einer Farbe aus der 16-Farben-Palette. Verwenden Sie diese Farbe für dieses Pixel.
Rot ändern: Halten Sie die grünen und blauen Farbkomponenten des vorherigen Pixels. Verwenden Sie die 4 Datenbits als die neue rote Farbkomponente dieses Pixels.
Grün ändern: Halten Sie die roten und blauen Farbkomponenten des vorherigen Pixels. Verwenden Sie die 4 Datenbits als die neue grüne Farbkomponente dieses Pixels.
Blau ändern: Halten Sie die roten und grünen Farbkomponenten des vorherigen Pixels. Verwenden Sie die 4 Datenbits als die neue blaue Farbkomponente dieses Pixels.
Ein ähnlicher Modus, HAM5, ist ebenfalls verfügbar, aber er ist ziemlich nutzlos. In HAM5 ist das sechste Bit immer Null, daher kann nur die blaue Farbkomponente modifiziert werden.

Geschnittener HAM-Modus (SHAM)
Der Original-Amiga-Chipsatz enthielt einen als „Copper“ bekannten Support-Chip, der Interrupts und andere Timing- und Housekeeping-Aufgaben unabhängig von der CPU und dem Videosystem abwickelte. Mit dem Copper war es möglich, in die CPU zurückzurufen, um kurze Aufgaben auszuführen, während die Videoanzeige den vertikalen oder horizontalen Leerunterbrechungs-Interrupt (HBI) behandelte. Dies ermöglichte es Programmierern, Maschinencode an das Display zu binden, ohne visuelle Artefakte zu verursachen, wodurch viele Videoeffekte viel einfacher zu implementieren sind.

Mit dieser Technik entwickelten Programmierer den Sliced ​​HAM- oder SHAM-Modus, auch bekannt als dynamischer HAM. SHAM verwendete einen Computercode, der für ausgewählte Scanzeilen oder für alle aufgerufen wurde, die die Palette während der HBI änderten. Dies bedeutete, dass jede Abtastzeile ihren eigenen Satz von 16 Grundfarben haben konnte. Dies machte es viel einfacher, die Palette zu wählen, was nun pro Zeile statt pro Bild gemacht werden konnte. Der einzige Nachteil dieses Ansatzes besteht darin, dass das Bild nicht mehr nur im Chip-RAM gehalten wurde, da das Steuerungsprogramm mehrere Paletten halten musste und der Aufbau des SHAM-Modus etwas komplex war.

Diese Technik war nicht auf HAM beschränkt und wurde weit verbreitet mit den herkömmlicheren Grafikmodi der Maschine verwendet. Dynamic HiRes verwendet eine ähnliche Palettenwechseltechnik, um in den hochauflösenden Modellen 16 Farben pro Zeile zu erzeugen, während HAM auf eine niedrige Auflösung beschränkt ist, aber sowohl 16 indizierte Farben als auch Modifikationen davon erlaubt.

Die SHAM-Idee war veraltet, als HAM8 eingeführt wurde, da sogar ein ungeschnittenes HAM8-Bild viel mehr Farbauflösung hat als ein geschnittenes HAM6-Bild. Jedoch bleibt SHAM der beste verfügbare HAM-Modus auf diesen Amigas mit dem ursprünglichen Chipsatz.

Erweiterter Grafikarchitektur-HAM-Modus (HAM8)
Mit der Veröffentlichung der Advanced Graphics Architecture (AGA) im Jahr 1992 wurde der ursprüngliche HAM-Modus in „HAM6“ umbenannt und ein neuer „HAM8“ -Modus eingeführt (das nummerierte Suffix repräsentiert die vom jeweiligen HAM-Modus verwendeten Bitebenen). Bei AGA hatte der Amiga anstelle von 4 Bit pro Farbkomponente nun bis zu 8 Bit pro Farbkomponente, was zu 16.777.216 möglichen Farben (24 Bit Farbraum) führte.

HAM8 arbeitet auf die gleiche Weise wie HAM6 und verwendet zwei „Steuer“ -Bits pro Pixel, aber mit sechs Datenbits pro Pixel anstelle von vier. Die Setzoperation wählt aus einer Palette von 64 Farben anstelle von 16 aus. Die Modifizierungsoperation modifiziert die sechs höchstwertigen Bits der roten, grünen oder blauen Farbkomponente – die zwei niedrigstwertigen Bits der Farbe können durch diese Operation nicht verändert werden und verbleiben wie von der zuletzt eingestellten Operation festgelegt. Im Vergleich zu HAM6 kann HAM8 viel mehr Bildschirmfarben anzeigen. Es wurde berichtet, dass die maximale Anzahl der Farben auf dem Bildschirm unter Verwendung von HAM8 262.144 Farben (18-Bit-RGB-Farbraum) beträgt. Tatsächlich kann die maximale Anzahl von einzigartigen Bildschirmfarben größer als 262.144 sein, abhängig von den zwei niedrigstwertigen Bits jeder Farbkomponente in der 64-Farben-Palette. Theoretisch könnten alle 16,7 Millionen Farben mit einem ausreichend großen Bildschirm und einer geeigneten Basispalette angezeigt werden, aber in der Praxis bedeuten die Einschränkungen beim Erzielen der vollen Genauigkeit, dass die zwei niedrigstwertigen Bits typischerweise ignoriert werden. Im Allgemeinen entspricht die wahrgenommene HAM8-Farbtiefe in etwa einer hohen Farbanzeige.

Die vertikale Bildschirmauflösung für HAM8 ist dieselbe wie für HAM6. Die horizontale Auflösung kann wie bisher 320 (360 mit Overscan), verdoppelt auf 640 (720 mit Overscan) oder sogar auf 1280 Pixel (1440 mit Overscan) vervierfacht werden. Der AGA-Chipsatz führte auch zu noch höheren Auflösungen für die herkömmlichen planaren Anzeigemodi. Die Gesamtzahl der Pixel in einem HAM8-Bild darf 829.440 (1440 × 576) bei Verwendung von PAL-Modi nicht überschreiten, kann jedoch 1.310.720 (1280 × 1024) überschreiten, wenn Hardware von Drittanbietern verwendet wird (Indivision AGA Flicker-Fixierer).

Wie im ursprünglichen HAM-Modus kann ein HAM8-Bildschirm an keiner beliebigen Position beliebige Farben anzeigen, da jedes Pixel entweder auf eine begrenzte Palette oder auf bis zu zwei Farbkomponenten des vorherigen Pixels angewiesen ist. Wie beim ursprünglichen HAM-Modus können Designer auch die Anzeige „in Scheiben schneiden“ (siehe unten), um einige dieser Einschränkungen zu umgehen. Ein HAM7-Modus ist ebenfalls verfügbar, aber nicht weit verbreitet.

HAM-Emulation
HAM ist einzigartig für den Amiga und seine verschiedenen Chipsätze. Um das direkte Rendern von Legacy-Bildern zu ermöglichen, die im HAM-Format codiert sind, wurden softwarebasierte HAM-Emulatoren entwickelt, die nicht die ursprüngliche Anzeige-Hardware benötigen. Vor 4.0-Versionen von AmigaOS können den HAM-Modus in Gegenwart des nativen Amiga-Chipsatzes verwenden. AmigaOS 4.0 und höher, entwickelt für radikal unterschiedliche Hardware, bietet HAM-Emulation für den Einsatz auf moderner Chunky-Grafikhardware. Dedizierte Amiga-Emulatoren, die auf nicht-nativer Hardware laufen, können den HAM-Modus durch Emulation der Display-Hardware anzeigen. Da jedoch keine andere Computerarchitektur die HAM-Technik verwendet, erfordert das Anzeigen eines HAM-Bildes auf einer anderen Architektur eine programmatische Interpretation der Bilddatei. Durch die zuverlässige softwarebasierte Decodierung werden identische Ergebnisse erzielt, wobei Abweichungen in der Farbtreue zwischen den Display-Setups unberücksichtigt bleiben.

Wenn das Ziel jedoch lediglich darin besteht, ein SHAM-Bild auf einer Nicht-Amiga-Plattform anzuzeigen, können die erforderlichen Farbwerte basierend auf den Paletteneinträgen, die über die Kupferliste programmiert werden, vorberechnet werden, unabhängig davon, ob die Palette geändert wird die Mitte einer Scanlinie. Es ist immer möglich, ein HAM- oder SHAM-Bild verlustfrei in eine 32-Bit-Palette hoch zu konvertieren.

HAM-Implementierungen von Drittanbietern
Ein von Black Belt produziertes Gerät, bekannt als HAM-E, konnte Bilder mit HAM8-Farbtiefe bei geringer horizontaler Auflösung von einem Amiga mit einem Original-Chipsatz erzeugen.

Der Amiga würde eingerichtet werden, um hochauflösende Bilder zu erzeugen (640 Pixel breit, 720 mit Overscan). Dies erforderte die Verwendung von vier Bitebenen mit 70 ns pro Pixel. Die ersten paar Zeilen der bildcodierten Informationen zur Konfiguration der HAM-E-Einheit. Dann wurde jedes Paar von Pixeln mit Informationen für die HAM-E-Einheit codiert, die die Information in ein 140 ns Pixel (Erzeugen eines 320 Pixel breiten Bildes oder 360 mit Overscan bei einer Farbtiefe von acht Bitebenen) umwandelte. Die Qualität von HAM-E war somit mit einem niedrig auflösenden HAM8-Bild vergleichbar. Die HAM-E-Technik nutzte die Tatsache aus, dass ein Bild mit hoher Auflösung mit vier Bitebenen eine dritte Speicherbandbreite und daher ein Drittel mehr Daten liefert als ein Bild mit niedriger Auflösung mit sechs Bitebenen.

Share