# Mode HAM

Le mode HAM tiré de l'anglais Hold-and-Modify est un mode graphique des ordinateurs Amiga. Utilisant comme le mode Halfbrite 6 plans de bits, les couleurs sont codées soit directement d'après une couleur tirée d'une palette, soit par une modification de la couleur du dernier pixel affiché dont on a modifié une des composantes rouge, verte ou bleue. Cette astuce permet sur les premiers ordinateurs Amiga d'afficher 4096 couleurs simultanément et a beaucoup contribué à la réputation graphique de l'Amiga.

## Principe de fonctionnement

Sur les premiers Amiga qui utilisaient le chipset OCS 6 bits pouvaient au maximum être utilisés pour indiquer une couleur. La plupart des modes graphiques utilisaient des couleurs indexées mais celles-ci étaient limitées à 32 couleurs (5bits). C'est pourquoi différentes astuces étaient nécessaires lorsqu'on voulait afficher plus de couleurs. Le mode Halfbrite utilise une de ces astuces. Avec l'apparition des nouveaux chipset Amiga AGA, il est devenu possible d'utiliser 8 plans de bits et le mode HAM a également évolué pour prendre en compte 2 bits supplémentaires pour permettre le HAM-8.
Le mode HAM original utilise 6 bits, dont 2 sont des bits particuliers de contrôle. Les 4 autres bits indiquent soit un index dans la palette graphique de 16 couleurs, soit la nouvelle valeur d'une des composantes RVB du pixel par rapport au pixel affiché juste avant. Le mode HAM-6 permet l'affichage de 4096 simultanément avec quelques contraintes de proximité parce qu'au total 12 bits indiquaient la couleur avec 4 bits par composante. D'où le nom Hold And Modify car on conserve le pixel précédent tout en le modifiant.

### Fonctionnement du HAM-6

Le codage général d'un pixel du HAM-6 est le suivant :
* 00 .... : utilise la couleur de la palette .... (la palette est de 16 couleurs) ;
* 01 bbbb : conserve les composantes rouges et vertes du précédent pixel, utilise bbbb comme composante bleue ;
* 10 rrrr : conserve les composantes vertes et bleues du précédent pixel, utilise rrrr comme composante rouge ;
* 11 gggg : conserve les composantes rouges et bleues du précédent pixel, utilise gggg comme composante verte.
Une ligne de l'image doit obligatoirement commencer par une couleur de la palette.

### Fonctionnement du HAM-8

Le codage général d'un pixel du HAM-8 est le suivant :
* 00 ...... : utilise la couleur de la palette ...... (la palette est de 64 couleurs) ;
* 01 bbbbbb : conserve les composantes rouges et vertes du précédent pixel, utilise bbbbbb comme composante bleue ;
* 10 rrrrrr : conserve les composantes vertes et bleues du précédent pixel, utilise rrrrrr comme composante rouge ;
* 11 gggggg : conserve les composantes rouges et bleues du précédent pixel, utilise gggggg comme composante verte.
En théorie 262144 couleurs sont possibles dans ce mode avec 18 bits indiquant la couleur et 64 couleurs pour la palette.

### Implementation du mode HAM

Le mode HAM fut d'abord créé pour les Amiga comme mode expérimental.
Pour citer Jay Miner : « Hold and Modify came from a trip to see flight simulators in action and I had a kind of idea about a primitive type of virtual reality. NTSC on the chip meant you could hold the hue and change the luminance by only altering four bits. When we changed to RGB I said that wasn't needed any more as it wasn't useful and I asked the chip layout guy to take it off. He came back and said that this would either leave a big hole in the middle of the chip or take a three-month redesign and we couldn't do that. I didn't think anyone would use it. I was wrong again as that has really given the Amiga its edge in terms of the color palette. »
   «  Le mode HAM vient d'une visite pour voir des simulateurs de vol en action et j'avais une certaine idée à propos d'un type primitif de réalité virtuelle. Le mode NTSC étant disponible sur la puce, cela signifiait que l'on pouvait conserver la teinte et changer la luminance en altérant seulement 4 bits. Quand nous sommes passés au RVB, j'ai dit que ce mode n'était plus nécessaire désormais car sans utilité et j'ai demandé au responsable du circuit intégré de l'enlever. Il revint en disant que soit cela créerait un grand trou au milieu de la puce soit cela prendrait 3 mois pour redessiner le circuit et nous ne pouvions pas prendre ce temps. Je ne pensais pas que quiconque l'utiliserait. J'avais tort encore car cela a vraiment donné à l'Amiga son avance en termes de palette de couleurs. »
Le mode HAM n'est pas supporté sous AmigaOS version 4 de l'AmigaOne. Cela peut être à l'origine d'incompatibilités.

## Avantages et inconvénients

Le désavantage le plus évident est qu'il faut 3 pixels pour changer complètement la couleur courante sans utiliser les couleurs de la palette. De sorte que si les couleurs de la palette sont mal choisies, les artéfacts graphiques peuvent devenir très visibles et gênant par exemple dans les dégradés de gris, sensibles au problème car les trois composantes doivent être changées. Un autre désavantage est le ralentissement de la machine dû à l'utilisation de tant de plans de bits ce qui faisait que ce mode était difficile à utiliser en gardant toutes les ressources notamment en raison de la saturation du bus graphique, souvent partagé avec d'autres ressources. Enfin, en raison des contraintes de proximité des pixels, l'utilisation de ce mode était très difficile pour les jeux vidéo et pour les images animées.
Ces inconvénients n'existaient plus pour des images précalculées et au début de l'ère du multimedia, le mode HAM donna à l'Amiga un avantage graphique sur les systèmes concurrents, car il permettait l'affichage de photographies numériques et d'images de synthèse à un niveau considéré comme photoréaliste à l'époque.