|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Dans article sur l'AmigaOS 3.0, les nouvelles fonctions des bibliothèques du système 3.0 étaient décrites. Dans la lignée, voici des descriptions très "matérielles" pour programmer tous les nouveaux modes graphiques que nous offre le jeu de composants AGA. Utilisation du mode super hires (super haute résolution) Ce mode graphique permettant d'utiliser un écran de 1280 pixels de large existait déjà sur les Amiga 600 et 3000 (puces ECS). Bien entendu, il a été conservé sur les nouveaux Amiga. Pour déclencher ce mode graphique, il suffit de fixer à 1 le bit 6 de BPLCON0 ($dff100). Bit 6 de BPLCON0 : 1 -> Super Hires sélectionné Tout ce qui suit est spécifique au nouveau jeu de composants AGA (ne concerne pas les Amiga 600 et 3000). De 0 à 8 plans de bits On peut utiliser jusqu'à 256 couleurs dans tous les modes de résolution. Cela nécessite donc jusqu'à 8 plans de bits (2^8=256). De 0 à 7 plans de bits, rien n'a changé par rapport à l'ECS : la sélection s'effectue grâce aux bits 14 à 12 de BPLCON0 ($dff100). Pour accéder à 8 plans de bits, il suffira de fixer à 1 le bit 4 de ce même registre (BPLCON0). Dans ce cas, les bits 14 à 12 ne seront pas pris en compte (il est tout de même conseillé de les fixer à 0 afin de prévoir la compatibilité avec de futures machines). Bit 4 de BPLCON0 : 1 -> 8 plans de bits sélectionnés 16 millions de couleurs Les nouveaux Amiga ont une palette de 16 millions de couleurs. Elles sont donc codées sur 24 bits. Pour assurer la compatibilité avec les anciennes machines, les anciens registres de couleurs ont été conservés (registres 16 bits). En fait, ils sont maintenant double : la même adresse permet d'accéder à deux registres différents :
Bit 9 de BPLCON3 ($DFF006) : 0 -> bits de poids forts de la couleur 1 -> bits de poids faibles de la couleur Ce bit est remis à 0 à chaque "vertical blank" (temps mort vertical). Exemple : mettre $00123456 dans la couleur0.
Si vous voulez travailler en couleurs 12 bits (4096 couleurs comme sur les anciens Amiga), il vous suffira d'initialiser que le registre de poids forts des couleurs. 256 registres de couleurs Comme précédemment, il n'existe pas 256 registres différents. Seuls les anciens 32 registres de couleurs existent. Le système est le même que pour les couleurs en 24 bits : un même registre permet d'accéder à 8 registres (doubles) différents de couleurs. Le découpage des 256 couleurs se fait donc en 8 palettes de 32 couleurs chacune. Pour accéder à un registre donné, il faut donc spécifier la palette à laquelle il appartient à l'aide des bits 15 à 13 de BPLCON3 (&DFF106). Voici un tableau qui vous permettra de définir facilement la palette à laquelle appartient un registre donné : BPLCON3 : $DFF006
La commutation de palette (palette switch) La commutation de palette permet d'inverser des blocs de registres dans la palette lors de l'affichage : cette opération ne modifie aucunement la valeur des registres de couleurs (l'inversion n'est que virtuelle). L'inversion s'effectue de la manière suivante : échange des blocs 1 et 2, échange des blocs 3 et 4, etc. Le contrôle de la taille des blocs à inverser se fait à l'aide des 8 bits de poids fort du registre $DFF10C (que j'appellerai BPLCON4) : BPLCON4 : $DFF10C
Notez qu'il est possible de sélectionner plusieurs tailles de commutations en même temps (ils s'effectueront alors simultanément). Plus que de longs discours, un bon exemple vous aidera à comprendre le processus. Exemple : on fait une commutation de taille 1 et 4 :
On aura :
Puis, avec le résultat obtenu :
Notez qu'une valeur de $00 dans $DFF10C correspondra à une palette normale et $ff à une palette totalement inversée. Le mode HAM8 (ou HAM+) Le mode HAM8 n'est qu'une extension du précédent HAM (ou HAM6). Pour déclencher l'un ou l'autre des HAM, il suffit de mettre le bit 11 de BPLCON0 à 1 et de fixer le nombre de plans de bits à 6 (HAM6) ou à 8 (HAM8). Ensuite, les plans de bits sont divisés en deux groupes : les deux derniers et les autres. Le décodage du premier bloc se fait de la manière suivante (ordre : avant-dernier plan/dernier plan) :
La grande nouveauté est que l'on peut utiliser le HAM et le HAM8 dans tous les modes de résolution (320, 640 et 1280 par 200 ou 400). Ce sont les infographistes qui vont être contents... La saga des sprites Au sujet des sprites, il y a beaucoup à dire. Tout d'abord, on peut maintenant passer les sprites en haute résolution ou en super haute résolution. Le choix du mode de résolution des sprites se fait à l'aide des bits 7 et 6 de BPLCON3 ($DFF106). BPLCON3 : $DFF106
NB :
En 16 pixels, rien ne change :
En 32 pixels :
Seuls les 16 bits de poids forts de chaque registre de contrôle est apparemment pris en compte (ce seront les mêmes que les mots de contrôle d'un sprite normal en 16 pixels). Il existe deux types de sprites 32 bits : les normaux et les spéciaux. Pour les normaux, les longs mots définissant les plans de bits sont entièrement pris en compte. Pour les spéciaux, seul le premier mot de 16 bits de chaque long mot de plan de bits est pris en compte : il sera répété deux fois à l'écran pour faire un sprite de 32 pixels de large. En 64 pixels :
Comme pour les sprites en 32 pixels, seuls les 16 bits de poids fort de chaque registre de contrôle sont apparemment pris en compte (ce seront les mêmes que les mots de contrôle d'un sprite normal en 16 pixels). Toujours en ce qui concerne les sprites, on peut maintenant les placer à l'écran avec une précision d'un quart de pixel en largeur. J'en vois qui doutent très fortement (comme moi à la première lecture de l'article). Ceci s'expliquerait de la manière suivante : tout écran, quelle que soit sa résolution, serait converti avant l'affichage par le coprocesseur graphique de l'Amiga en un écran d'une résolution de 1280 pixels en largeur (cette conversion restant transparente pour utilisateur). Cela permet donc de placer les sprites ou de faire défiler l'écran avec une précision correspondant à un écran de 1280 pixels de large. Pour placer les sprites en horizontal, nous disposons donc de 11 bits dans HSTART au lieu de 9 :
BPLCON4 : $DFF10C
Quelques astuces Pour tous les créateurs de jeux et de démos, il est intéressant d'avoir un truc pour détecter les puces AGA. Pour cela, il suffit de lire $DFF07C (permet de connaître le numéro d'identification de Denise). Si on y trouve $F8, c'est qu'il s'agit des puces AGA. Attention : cette méthode est bien pratique mais ne survivra sûrement pas à une modification éventuelle des puces AGA. Pour changer le mode d'affichage on utilisera le registre &DFF1DC. Voici quelques valeurs intéressantes :
|