Obligement - L'Amiga au maximum

Jeudi 22 juin 2017 - 14:07  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


Programmation : Assembleur - 16 millions de couleurs (HAM8) en AGA
(Article écrit par Lionel Guillang et extrait d'Amiga News - juin 1994)


Me revoici après une petite absence, due à une surcharge professionnelle ! Votre patience est récompensée puisque nous allons aujourd'hui lever le voile sur le superbe (et controversé) HAM8, seul nouveau mode graphique spécial du jeu de composants AGA. Si son principe est assez simple, sa mise en oeuvre, elle, est déjà moins évidente...

HAM8

Sans plus attendre, voyons ce qu'est le HAM8 : 8 comme les 8 bitplanes nécessaires à son activation, mais aussi pour le distinguer de son ancêtre le HAM, aussi appelé à posteriori HAM6 pour éviter les confusions. Si l'idée du HAM8 est la même que celle du HAM6, il n'en est pas pour autant le clone exact, nouvelle version : pour expliquer tout ça de façon simple, revenons au fonctionnement du HAM6. Le HAM6 nécessite obligatoirement 6 bitplanes qui codent une information que l'on peut décomposer ainsi :

Assembleur

De ce tableau on peut déduire que le HAM6 permet d'accéder à l'ensemble de la palette 12 bits (3x4), soit 4096 (2^12) couleurs simultanément. Faisons maintenant le parallèle avec le HAM8 :

Assembleur

Première différence qui saute aux yeux (n'empêche que...), les bits de contrôle sont désormais dans les deux premiers plans. Seconde différence, on n'a plus accès directement à toute la palette (24 bits en AGA) : les composantes des pixels dérivés ne sont codées que sur 6 bits et on a donc une palette de 18 bits (3x6), soit 262 144 (2^18) couleurs simultanées pour chaque dérivation (bits "x" dans le tableau). Mais on a 64 registres de base, donc 64 dérivations possibles, et on peut, pour chacune des 64 couleurs de base, définir une combinaison différente des deux bits de poids faible de chaque composante (bits "y" dans le tableau ci-dessus), soit 64 combinaisons possibles (2^6).

De tout ça, on peut déduire qu'il est possible d'obtenir 64 dérivations de 262 144 couleurs, toutes différentes, et donc d'afficher 16,7 millions de couleurs simultanément. Ouf, c'est clair, non ? Je tiens à rendre hommage à Philippe Rivaillon qui s'est exorbité les yeux pour pouvoir saisir les variations de teintes dues aux différentes valeurs prises par les deux LSB des pixels dérivés (essayez, vous verrez que ça n'est vraiment pas évident de faire la différence à l'oeil nu entre par exemple un rouge $F0 et un rouge $F3 !).

Il semblerait qu'une fois de plus, les gens de Commodore soient un peu dépassés par leur propre machine parce que toutes les docs techniques que j'ai eues entre les mains (et ça en fait !) se bornent à dire que le nombre maximum de couleurs disponibles simultanément en AGA est de 262 144 ; ça rappelle le bon vieux temps du C64 !

Dernière chose avant de passer à la pratique : à défaut de pixel pris dans la palette de base, les lignes commencent avec les valeurs RGB de la couleur 0, tout comme pour l'ancien HAM. Ultime chose (!), le mode HAM8 s'active très simplement en initialisant 8 bitplanes et en mettant à 1 le bit HAM (11) du registre BPLCON0 ($0100).

Le programme

Comme je l'ai dit en introduction, la mise en oeuvre du HAM8 n'est pas vraiment simple, pour ne pas dire même un peu tordue : donc si vous ne comprenez pas tout ce qui va suivre du premier coup, n'ayez pas honte de relire jusqu'à ce que ce soit vraiment clair... Et ne m'en veuillez pas trop, ça n'est pas plus facile d'expliquer !

Autant vous le dire tout de suite, le source de ce mois-ci ne va pas afficher 16,7 millions de couleurs sur votre écran, pour des raisons de résolution, mais seulement (?) 262 404, le tout en n'utilisant que quatre registres de base ; les pixels sont dessinés sur un écran super haute résolution 1280x256, dans une fenêtre de 1026x256 : je sais, ça fait 262 656 pixels et non 262 404, mais c'est parce que l'image contiendra 4 groupes de 64 pixels identiques, vous allez comprendre pourquoi.

Le but de la manoeuvre est d'obtenir à partir des 256 rouges de la palette AGA un dégradé de 1025 couleurs, sur chacune des 256 lignes : pour obtenir ces 256 rouges de départ, on a besoin de dessiner deux pixels : le premier définit les deux bits de poids faible et fait donc appel à la palette de base, le second définit les six autres bits en modifiant la composante rouge : on a donc (2+1024)x256=262 656 pixels affichés, mais les pixels définissant les bits de poids faible du rouge sont répétés toutes les 4 lignes (2^2=4) ; les 6 bits de poids fort du rouge sont, eux, fixes durant les 4 lignes où les bits de poids faible varient ; le second pixel de chacune des 256 lignes représente donc toujours un rouge pur différent. Faites le calcul, tout ceci donne bien 262 656-252=262 404 couleurs différentes !

Le dégradé calculé avec les composantes vertes et bleues est réparti sur 4 lignes : cette fois on n'utilise que les 6 bits de poids fort, ce qui donne une résolution de 12 bits donc 4096 couleurs : étant limités par la largeur de l'écran, le dégradé est donc découpé sur 4 lignes de 1024 pixels. On passe en revue à chaque ligne le spectre complet (sur 6 bits) des verts, tout en incrémentant et décrémentant de 4 la composante bleue, que l'on décalera d'une unité à chacune des 4 lignes, obtenant ainsi le spectre complet des bleus (toujours sur 6 bits !) sur les 4 lignes.

Voilà, si vous avez bien suivi ce qui précède, il doit vous apparaître clairement qu'on est très loin d'avoir exploité toutes les combinaisons possibles : tout d'abord on a laissé de côté les 2 bits de poids faible des composantes vertes et bleues (pour les utiliser, il suffit d'initialiser en conséquence les 60 registres de base inutilisés ici), ensuite les dégradés sur 4096 couleurs ne sont pas faits avec une composante rouge constante puisque que celle-ci change à chaque ligne, et on aurait donc pu obtenir 4 fois plus de couleurs (un peu plus d'un million !), sans pour autant toucher aux bits de poids faible des composantes vertes et bleues.

Comme vous pouvez le constater, le seul frein au fait de développer un visualisateur quasi parfait d'images 24 bits en HAM8, ne tient que dans la difficulté de programmer un convertisseur HAM8 de qualité, qui exploite à fond ses possibilités : on peut d'ailleurs l'observer dans les différents programmes s'acquittant de cette tâche qui donnent des résultats très variables : le nec plus ultra en la matière est, pour moi, Deluxe Paint 4.5 qui fait bien mieux qu'ADPro, ce qui est un peu étonnant vu que ce dernier est en théorie plus axé sur ce genre d'opérations. Reste que Deluxe Paint lui-même n'est pas encore parfait et qu'il est certainement possible de faire mieux : pourquoi pas par vous ?

Assembleur
Assembleur
Assembleur
Assembleur
Assembleur
Assembleur

Je vous retrouve le mois prochain pour vous parler d'un sujet qui devrait en intéresser plus d'un : la commutation des fréquences de balayage ! A plus...


[Retour en haut] / [Retour aux articles]