Afficher plus de 16 couleurs

Matériellement, c'est évidemment impossible, la couleur étant gérée sur un système de 16 registres, on ne peut alors pas demander une 17ième couleur !

Par programme, le principe sera de modifier le plus rapidement possible la couleur d'un ou plusieurs registres de couleur pendant le temps d'affichage d'une image à l'écran.

Je ne vous rappellerai pas le principe d'affichage d'une image sur une télévision...

Mais par contre que ce passe-t-il au niveau de la vidéo du ST:

Les registres de couleurs sont modifiables à tout moment, et la nouvelle valeur est immédiatement prise en compte sur le moniteur pour tous les nouveaux points qui seront affichés utilisant ce registre lors du déplacement du faisceau. Evidemment, pendant la phase de balayage, les points qui seront déjà dessinés pour ce registre de couleur ne seront pas quant à eux modifiés (le faisceau ne fait pas de marche arrière, ce qui est dessiné est définitivement dessiné avec la couleur qui était indiquée au moment du passage du faisceau !)

On peut donc afficher des points de plusieurs couleurs différentes avec un même registre de couleur dans une image. Il suffit de changer la valeur de ce registre le plus rapidement possible pendant le balayage.

Il faudra quand même résoudre différents problèmes:

- Changer rapidement la valeur des registres de couleurs (il y a une limite, la vitesse d'exécution du CPU !)

- Et bien entendu, synchroniser le changement de couleurs par rapport à la position du faisceau dans l'image !

Heureusement, il est possible de savoir où on en est au niveau de l'affichage que ce soit pour le balayage vertical ou horizontal.

Un petit exemple rapide en GFA BASIC:

FOR j=1 TO 500
   VSYNC
   DPOKE &HFF8240,&H77
   FOR i=1 TO 100
   NEXT i
   DPOKE &HFF8240,&H7
NEXT j


La commande vsync nous permettant de savoir si le balayage vertical recommence, car elle nous rendra la main à ce moment là.

On change alors la couleur du fond en jaune.

Puis on attend un peu avant de modifier de nouveau la couleur du fond en vert cette fois-ci.

Les inconvenients dans cette exemple:

La commande VSYNC nous bloque alors que l'on pourrait en profiter pour faire autre chose en attendant le retour du balayage vertical...
La souris consomme du temps CPU, ce qui provoque des changements en retard de la couleur. D'où un affichage pas joli ! En effet, la lecteure de la souris se fait durant le VSYNC. Ce qui retardera l'envoi de l'invoi du VSYNC à notre programme.

Le GFA BASIC prend enfin du temps pour exécuter ses commandes. Si on doit gérer des sprites (pour un jeu) et gérer la couleur, cela fera beaucoup. Conclusion, la maitrise de l'assembleur 68000 et du fonctionnement de la machine sera importante pour parvenir à un fonctionnement correct !

Cependant, avec ce petit exemple, vous aurez compris le principe de fonctionnement. On imagine déjà un peu la solution utilisée par Spectrum ou GFA Raytrace par exemple, ou encore les jolies démos avec pleins de couleurs partout...bien plus que les pauvres 16 couleurs officielles.

Image non trouvée ! Si vous utilisez l'émulateur ST, celui-ci ne donne pas tout à fait le même résultat qu'un vrai ST: tout fonctionne bien mieux que sur un vrai ST.