Categories: Technologie

Tenez-et-Modifiez

Hold-And-Modify, généralement abrégé en HAM, est un mode d’affichage de l’ordinateur Commodore Amiga. Il utilise une technique très inhabituelle pour exprimer la couleur des pixels, permettant à beaucoup plus de couleurs d’apparaître à l’écran que ce qui serait autrement possible. Le mode HAM était couramment utilisé pour afficher des photographies numérisées ou des cadres vidéo, des images bitmap et parfois des animations. Au moment du lancement de l’Amiga en 1985, cet affichage quasi photoréaliste était sans précédent pour un ordinateur à la maison et il était largement utilisé pour démontrer la capacité graphique de l’Amiga. Cependant, HAM présente des limitations techniques importantes qui l’empêchent d’être utilisé comme mode d’affichage général.

Contexte
Le chipset Amiga original utilise un affichage planaire avec un espace colorimétrique RVB 12 bits qui produit 4 096 couleurs possibles.

Le bitmap du champ de jeu était maintenu dans une section de la mémoire principale connue sous le nom de RAM de la puce, qui était partagée entre le système d’affichage et la CPU principale. En raison de considérations de synchronisation, le chipset avait seulement le temps de lire 6 bits par pixel avant qu’il soit temps de dessiner le prochain pixel sur l’écran. Pour réduire la quantité de données nécessaires pour décrire une image et ainsi s’adapter à cette limitation, le système d’affichage utilisait un système de couleurs indexé avec une palette de couleurs.

Le matériel contenait 32 registres qui pouvaient être réglés sur l’une des 4096 couleurs possibles, et l’image pouvait accéder à l’une de ces 32 valeurs en utilisant 5 bits par pixel. Le sixième bit disponible était utilisé par un mode d’affichage connu sous le nom de Extra Half-Brite qui réduisait de moitié la luminosité de ce pixel, fournissant ainsi un moyen facile de produire des effets d’ombrage.

Mode Hold-And-Modify
Lorsque le chipset Amiga a été conçu pour la première fois, il fonctionnait directement dans les valeurs de chrominance, de teinte et de luminance du signal NTSC, comme c’était le cas pour les premiers ordinateurs personnels pour lesquels les téléviseurs étaient utilisés. Cela a permis de réduire considérablement la quantité de mémoire nécessaire pour afficher une image monochrome comme la télévision en noir et blanc en définissant la valeur de couleur au début d’une ligne de balayage, puis en modifiant uniquement la valeur de luminance. Puisque les images de télévision analogique ne peuvent passer du noir au blanc que sur un certain nombre de pixels, pas immédiatement de l’un à l’autre, quatre pixels suffiraient pour fournir une image «noir et blanc» crédible, réduisant de moitié la mémoire nécessaire image.

Lorsque le design Amiga a migré d’une console de jeux vers un ordinateur personnel, le chipset est également passé du modèle couleur HSL au modèle couleur RVB moderne. Pour citer Jay Miner:

 » Hold and Modify est venu d’un voyage pour voir des simulateurs de vol en action et j’ai eu une sorte d’idée sur un type primitif de réalité virtuelle. NTSC sur la puce signifiait que vous pouviez conserver la teinte et modifier la luminance en modifiant seulement quatre bits. Quand nous avons changé pour RGB, j’ai dit que ce n’était plus nécessaire car ce n’était pas utile et j’ai demandé au gars de la puce de l’enlever. Il est revenu et a dit que cela laisserait un gros trou au milieu de la puce ou qu’il faudrait une refonte de trois mois et nous ne pourrions pas faire cela. Je ne pensais pas que quelqu’un l’utiliserait. Je me suis trompé car cela a vraiment donné à l’Amiga son avantage sur la palette de couleurs.  »
Hold-And-Modify était essentiellement une modification du concept original de luminance seule, mais cette fois permettant la modification de l’un des trois composants de couleur, rouge, vert ou bleu. HAM peut être considéré comme une technique de compression avec perte; En mode HAM6, le champ de jeu est codé dans la moitié de la mémoire normalement requise pour un espace de couleur de 12 bits. La plus grande fidélité de couleur globale est obtenue au détriment de la résolution de chrominance horizontale. L’espace couleur codé HAM est «décompressé» par le matériel d’affichage en temps réel lorsque le tampon graphique est affiché.

Usage
Lorsque l’Amiga a été lancé en 1985, le mode HAM offrait un avantage significatif par rapport aux systèmes concurrents. HAM permet l’affichage de toutes les couleurs 4096 simultanément, mais avec les limitations mentionnées ci-dessus. Cet affichage pseudo-photoréaliste était sans précédent pour un ordinateur personnel de l’époque et permettait l’affichage de photographies numérisées et d’images 3D rendues. En comparaison, le standard IBM-PC EGA permettait 16 couleurs à l’écran à partir d’une palette de 64. Le successeur VGA d’EGA sorti en 1987 avec son mode de jeu phare, Mode 13h, permettait 256 couleurs à l’écran de 262.144. Le mode HAM était fréquemment utilisé pour démontrer la capacité de l’Amiga dans les présentations en magasin et les présentations commerciales, car le matériel concurrent ne pouvait pas correspondre à la profondeur de couleur. En raison des limitations décrites ci-dessus, HAM était principalement utilisé pour l’affichage d’images statiques et les développeurs évitaient largement son utilisation avec des jeux ou des applications nécessitant une animation.

Avec l’introduction de l’architecture graphique avancée, une image planaire conventionnelle peut avoir une palette de 256 couleurs, offrant une fidélité des couleurs nettement supérieure. Le mode HAM original avec sa résolution de couleur limitée est devenu beaucoup moins attrayant pour les utilisateurs d’une machine AGA, bien qu’il soit toujours inclus pour la rétrocompatibilité. Le nouveau mode HAM8 était beaucoup moins utile pour le chipset AGA que le mode HAM pour le chipset d’origine, car une palette planaire de 256 couleurs augmentait considérablement les options pour l’artiste sans souffrir des inconvénients du mode HAM. Un mode planaire en tranches bien programmé pourrait s’avérer plus utile que HAM8. Le but initial de HAM, qui était de permettre plus de résolution des couleurs malgré une taille de mémoire vidéo limitée et une bande passante de mémoire limitée, n’était plus aussi pertinent.

Comme les ordinateurs modernes sont capables d’afficher des truecolors à haute résolution, il n’y a plus besoin de techniques d’affichage comme HAM. Les graphiques planaires sont maintenant également obsolètes pour l’informatique générale, car le matériel graphique moderne a suffisamment de bande passante mémoire pour utiliser des pixels compressés.

Limites
Le mode HAM impose des restrictions sur la valeur des pixels adjacents sur chaque ligne horizontale du champ de jeu. Afin de rendre deux couleurs arbitraires de manière adjacente, il peut prendre jusqu’à deux pixels intermédiaires pour passer à la couleur voulue (si les composants rouge, vert et bleu doivent tous être modifiés). Dans le pire des cas, cela réduit la résolution de chrominance horizontale de 704 pixels à 240 (à titre de comparaison, les technologies contemporaines telles que VHS avaient une résolution chromatique de 40 à 0,4 MHz). Ce problème est particulièrement visible dans les zones de fort contraste (forts gradients d’image horizontaux), où un artefact ou une frange multicolore indésirable peut apparaître. Diverses techniques de rendu ont été utilisées pour minimiser l’impact des «franges» et les écrans HAM étaient souvent conçus pour incorporer de subtils dégradés de couleurs horizontales, évitant les bords verticaux et les contrastes.

L’affichage d’une image en couleur dans le mode HAM nécessite un prétraitement minutieux. Étant donné que HAM ne peut modifier qu’un seul des composants RVB à la fois, les transitions de couleur rapides le long d’une ligne de balayage peuvent être mieux réalisées en utilisant l’un des registres de couleurs prédéfinis pour ces transitions. Pour rendre une image arbitraire, un programmeur peut choisir d’examiner d’abord l’image originale pour la plus notable de ces transitions, puis d’attribuer ces couleurs à l’un des registres, une technique connue sous le nom de palettes adaptatives. Cependant, avec seulement 16 registres disponibles dans le mode HAM d’origine, une certaine perte de fidélité des couleurs est courante.

De plus, le mode HAM ne permet pas facilement l’animation arbitraire de l’affichage. Par exemple, si une partie arbitraire du champ de jeu doit être déplacée vers une autre position à l’écran, les valeurs de maintien et de modification peuvent devoir être recalculées sur toutes les lignes source et cible afin d’afficher correctement l’image (une opération non bien adapté à l’animation). Plus précisément, si le bord le plus à gauche de l’objet animé contient des pixels ‘modify’, ou si l’image immédiatement à droite de l’objet contient des pixels ‘modify’, ces valeurs Hold-and-Modify doivent être recalculées. Une tentative de déplacement d’un objet autour de l’écran (comme avec l’utilisation du blitter) créera des franges visibles sur les bords gauche et droit de cette image, à moins que les graphiques ne soient spécialement conçus pour éviter cela. Afin d’éviter de recomputer les valeurs Hold-and-Modify et de contourner les fringing, le programmeur devra s’assurer que le pixel le plus à gauche de chaque objet blitter et le pixel le plus à gauche de chaque ligne d’un playfield défilant est un pixel ‘set’. La palette devrait être conçue de manière à incorporer chaque pixel le plus à gauche. Alternativement, un affichage HAM peut être animé en générant des valeurs de pixels par génération procédurale, bien que cela soit généralement utile pour les images synthétiques seulement, par exemple, les effets «arc-en-ciel» utilisés dans les démos.

Notez cependant que Hold-and-Modify s’applique uniquement aux pixels du champ de jeu. 128 pixels de données d’image-objet (en mode DMA) par ligne de balayage sont toujours disponibles pour être placés au-dessus du champ de jeu HAM.

Implémentations
Mode HAM du mode Chip original (HAM6)
Le mode HAM6, nommé pour les 6 bits de données par pixel, a été introduit avec l’Original Chip Set et a été conservé dans les derniers Enhanced Chip Set et Advanced Graphics Architecture. HAM6 permet jusqu’à 4096 couleurs d’être affichées simultanément à des résolutions de 320 × 200 à 360 × 576.

Related Post

Le codage HAM6 utilise six bits par pixel: deux bits pour le contrôle et quatre bits pour les données. Si les deux bits de contrôle sont tous deux mis à zéro, les quatre bits restants sont utilisés pour indexer l’un des 16 registres de couleurs prédéfinis, fonctionnant à la manière d’un bitmap indexé normal. Les trois autres configurations de bits de commande possibles indiquent que la couleur du pixel précédent (à gauche) sur la ligne de balayage doit être utilisée et que les bits de données doivent être utilisés pour modifier la valeur de la composante rouge, verte ou bleue. Par conséquent, il y a quatre possibilités:

Set: Utilisez les 4 bits de données pour indexer une couleur de la palette de 16 couleurs. Utilisez cette couleur pour ce pixel.
Modifier Rouge: Maintenez les composants de couleur verte et bleue du pixel précédent. Utilisez les 4 bits de données comme nouveau composant de couleur rouge de ce pixel.
Modifier vert: Maintenez les composants de couleur rouge et bleu du pixel précédent. Utilisez les 4 bits de données comme nouveau composant de couleur verte de ce pixel.
Modifier bleu: Maintenez les composants de couleur rouge et vert du pixel précédent. Utilisez les 4 bits de données comme nouveau composant de couleur bleue de ce pixel.
Un mode similaire, HAM5, est également disponible mais c’est plutôt inutile. Dans HAM5, le sixième bit est toujours zéro, donc seul le composant de couleur bleue peut être modifié.

Mode HAM tranché (SHAM)
Le chipset Amiga original comprenait une puce de support connue sous le nom de « Copper » qui gérait les interruptions et autres tâches de synchronisation et d’entretien indépendant de la CPU et du système vidéo. En utilisant le cuivre, il était possible de rappeler dans la CPU pour exécuter des tâches courtes pendant que l’affichage vidéo traitait l’interruption de blanc ou horizontale (HBI). Cela a permis aux programmeurs de lier le code machine à l’affichage sans provoquer d’artefacts visuels, ce qui rend beaucoup plus simple la mise en œuvre de nombreux effets vidéo.

En utilisant cette technique, les programmeurs ont développé le mode Slam HAM ou SHAM, également connu sous le nom de HAM dynamique. SHAM utilisait du code informatique appelé sur les lignes de balayage sélectionnées, ou toutes, qui modifiait la palette pendant le HBI. Cela signifiait que chaque ligne de balayage pouvait avoir son propre ensemble de 16 couleurs de base. Cela rendait beaucoup plus simple le choix de la palette, qui pouvait maintenant être faite par ligne au lieu de par image. Le seul inconvénient de cette approche est que l’image ne se trouvait plus uniquement dans la RAM de la puce, car le programme de contrôle devait contenir plusieurs palettes, et la mise en place du mode SHAM était complexe.

Cette technique n’était pas limitée à HAM, et était largement utilisée avec les modes graphiques plus conventionnels de la machine. Dynamic HiRes utilise une technique de changement de palette similaire pour produire 16 couleurs par ligne dans les modèles à haute résolution, alors que HAM est limité à une faible résolution mais permet à la fois 16 couleurs indexées ainsi que des modifications de celles-ci.

L’idée SHAM a été déconseillée lors de l’introduction de HAM8, car même une image HAM8 non tranchée a une résolution couleur bien supérieure à celle d’une image HAM6 tranchée. Cependant, SHAM reste le meilleur mode HAM disponible sur ces Amigas avec le chipset d’origine.

Mode avancé de l’architecture graphique HAM (HAM8)
Avec la sortie de l’Advanced Graphics Architecture (AGA) en 1992, le mode HAM original a été renommé « HAM6 », et un nouveau mode « HAM8 » a été introduit (le suffixe numéroté représente les bitplanes utilisés par le mode HAM respectif). Avec AGA, au lieu de 4 bits par composant couleur, l’Amiga avait maintenant jusqu’à 8 bits par composant couleur, ce qui donnait 16 777 216 couleurs possibles (espace couleur 24 bits).

HAM8 fonctionne de la même manière que HAM6, en utilisant deux bits de « contrôle » par pixel, mais avec six bits de données par pixel au lieu de quatre. L’opération set sélectionne à partir d’une palette de 64 couleurs au lieu de 16. L’opération modify modifie les six bits les plus significatifs de la composante rouge, verte ou bleue – les deux bits les moins significatifs de la couleur ne peuvent pas être modifiés par cette opération. comme défini par l’opération de définition la plus récente. Comparé à HAM6, HAM8 peut afficher beaucoup plus de couleurs à l’écran. Le nombre maximal de couleurs à l’écran utilisant HAM8 a été largement signalé comme étant de 262 144 couleurs (espace colorimétrique RVB de 18 bits). En fait, le nombre maximal de couleurs uniques à l’écran peut être supérieur à 262 144, en fonction des deux bits les moins significatifs de chaque composant de couleur dans la palette de 64 couleurs. En théorie, toutes les 16,7 millions de couleurs peuvent être affichées avec un écran assez grand et une palette de base appropriée, mais en pratique, les limites de la précision absolue signifient que les deux bits les moins significatifs sont généralement ignorés. En général, la profondeur de couleur HAM8 perçue est à peu près équivalente à un affichage couleur élevé.

Les résolutions d’affichage vertical pour HAM8 sont les mêmes que pour HAM6. La résolution horizontale peut être 320 (360 avec overscan) comme précédemment, doublée à 640 (720 avec overscan) ou même quadruplée à 1280 pixels (1440 avec overscan). Le chipset AGA a également introduit des résolutions encore plus élevées pour les modes d’affichage planaires traditionnels. Le nombre total de pixels dans une image HAM8 ne peut pas dépasser 829 440 (1440 × 576) en utilisant les modes PAL, mais peut dépasser 1 310 720 (1280 × 1024) en utilisant un matériel d’affichage tiers (Indivision AGA flicker-fixateur).

Comme le mode HAM d’origine, un écran HAM8 ne peut afficher aucune couleur arbitraire à n’importe quelle position arbitraire, puisque chaque pixel repose sur une palette limitée ou repose sur jusqu’à deux composants de couleur du pixel précédent. Comme avec le mode HAM d’origine, les concepteurs peuvent également choisir de «découper» l’affichage (voir ci-dessous) afin de contourner certaines de ces restrictions. Un mode HAM7 est également disponible mais pas très répandu.

Émulation HAM
HAM est unique à l’Amiga et à ses chipsets distincts. Pour permettre le rendu direct d’images héritées codées dans des émulateurs HAM basés sur un logiciel HAM, il a été développé qui ne nécessite pas le matériel d’affichage d’origine. Les versions antérieures à la version 4.0 d’AmigaOS peuvent utiliser le mode HAM en présence du chipset Amiga natif. AmigaOS 4.0 et plus, conçu pour le matériel radicalement différent, fournit l’émulation de HAM pour l’usage sur le matériel graphique chunky moderne. Les émulateurs Amiga dédiés fonctionnant sur du matériel non natif sont capables d’afficher le mode HAM par émulation du matériel d’affichage. Cependant, comme aucune autre architecture d’ordinateur n’utilise la technique HAM, l’affichage d’une image HAM sur une autre architecture nécessite une interprétation programmée du fichier image. Un décodage fidèle basé sur un logiciel produira des résultats identiques, mettant de côté les variations de fidélité des couleurs entre les configurations d’affichage.

Cependant, si le but est simplement d’afficher une image SHAM sur une plate-forme non-Amiga, les valeurs de couleur requises peuvent être pré-calculées en fonction des entrées de la palette qui sont programmées via la liste de cuivre, que la palette soit modifiée ou non. au milieu d’une ligne de balayage. Il est toujours possible de convertir une image HAM ou SHAM sans perte vers une palette 32 bits.

Implémentations HAM tierces
Un appareil produit par Black Belt, connu sous le nom de HAM-E, était capable de produire des images avec une profondeur de couleur HAM8 à basse résolution horizontale à partir d’un Amiga avec un chipset original.

L’Amiga serait mis en place pour produire des images haute résolution (640 pixels de large, 720 avec overscan). Cela a nécessité l’utilisation de quatre bitplanes à 70 ns par pixel. Les premières lignes de l’image ont encodé des informations pour configurer l’unité HAM-E. Ensuite, chaque paire de pixels était codée avec des informations pour l’unité HAM-E, qui convertissait l’information en un pixel de 140 ns (générant une image de 320 pixels de large ou 360 avec un surbalayage, à une profondeur de couleur de huit bitplanes). La qualité de HAM-E était donc comparable à une image HAM8 basse résolution. La technique HAM-E a exploité le fait qu’une image haute résolution avec quatre bitplanes fournit une troisième bande passante de mémoire supplémentaire, et donc un troisième plus de données, qu’une image basse résolution avec six bitplanes.

Share