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.
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.