![]() ![]() ![]() |
Cette bibliothèque nous offre la possibilité d'afficher à l'écran des graphismes en 4 couleurs différentes, voilà qui va nous changer du noir et blanc, mais il faudra faire quelques concessions :
Avec un seul buffer écran nous avions 2^1 soit 2 possibilités de 'couleurs' : noir et blanc.
Maintenant nous avons 2^2 soit 4 possibilités de 'couleurs' : noir, gris clair, gris foncé et blanc :
Le pointeur du nouveau buffer écran (appelé bitplane 0) est connue par gray4lib@0002.
Le pointeur de l'écran habituel (appelé bitplane 1) reste inchangé et est connue soit par gray4lib@0003 soit par la variable LCD_MEM de la bibliothèque TIOS.
Mais comment cette librairie arrive t'elle à émuler du gris à l'écran ?
C'est simple, elle redifige (donne une nouvelle valeur au vecteur de) l'interruption automatique n°1 (auto-int 1, à l'adresse $64) vers une nouvelle routine, celle-ci affiche deux écrans d'une manière successive.
Elle reste 2/3 du temps sur le premier écran (plane1) pour avoir du gris foncé et reste 1/3 du temps sur le nouvel écran (plane0) pour avoir du gris clair.
Pour avoir du noir il suffit d'allumer le pixel sur les deux écran car 2/3 + 1/3 = 3/3 = 1.
Pour l'utiliser dans un programme, il faut d'abord y faire référence grace à :
include "gray4lib.h" xdef _main xdef _commentPuis appeler une fonction par JSR gray4lib::<nom fonction> ou JSR gray4lib@<mot hexadécimal>.
![]() ![]() |
@0000 | on active le gris |
@0002 | plane0 adresse du nouvel écran |
||
@0001 | off désactive le gris |
@0003 | plane1 adresse de l'écran principal |
![]() ![]() |
![]() ![]() active le gris |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Résultat de la procédure, le seul élément pouvant stopper celle-ci serait un manque de mémoire pour créer l'handle du nouvel écran.
Type : mot long
Paramètre : registre de donnée D0
0 graduation de gris activée avec succès
autre mémoire insuffisante
PROGRAMMATION
JSR gray4lib::on ; appelle la fonction
![]() ![]() |
![]() ![]() desactive le gris |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Aucune.
PROGRAMMATION
JSR gray4lib::off ; appelle la fonction
![]() ![]() |
![]() ![]() adresse du nouvel écran |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Voir la description.
PROGRAMMATION
MOVE.l gray4lib::plane0,A0 ; charge dans A0 l'adresse du nouvel écran
![]() ![]() |
![]() ![]() adresse de l'écran principal |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Voir la description.
PROGRAMMATION
MOVE.l gray4lib::plane1,A1 ; charge dans A1 l'adresse de l'écran habituel
![]() ![]() |
Pour savoir quelle est la valeur d'un pixel de l'écran final, il faut ajouter la valeur des deux pixels des deux écrans.
Pour vous en convaincre définitivement, utilisez Paint Shop Pro et additionnez les deux écran précédents avec la commande
Image/Arithmetic/Function:Darkest
Enfin en sachant que la couleur blanche vaut 0, que le gris clair vaut 1, que le gris foncé vaut 2 et que le noir vaut 3, nous pouvons exprimer toute notre explication par l'octet fictif d'on nous avons parlé :
Pour avoir la couleur blanche | |||||||
7 | 6 | 5 | 4 | 3 | 2 | plane1 | plane0 |
0 | 0 |
Pour avoir la couleur grise claire | |||||||
7 | 6 | 5 | 4 | 3 | 2 | plane1 | plane0 |
0 | 1 |
Pour avoir la couleur grise foncée | |||||||
7 | 6 | 5 | 4 | 3 | 2 | plane1 | plane0 |
1 | 0 |
Pour avoir la couleur noire | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 |
Pour terminer, additionnons deux octets qui seraient à la même position, respectivement dans la mémoire vidéo et dans l'écran créé par la fonction on et cherchons les couleurs finales :
Octet au hasard du deuxième écran (plane1) | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0*2^1 = 0 | 0*2^1 = 0 | 0*2^1 = 0 | 0*2^1 = 0 | 1*2^1 = 2 | 1*2^1 = 2 | 1*2^1 = 2 | 1*2^1 = 2 |
Octet équivalent du premier écran (plane0) | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0*2^0 = 0 | 0*2^0 = 0 | 1*2^0 = 1 | 1*2^0 = 1 | 0*2^0 = 0 | 0*2^0 = 0 | 1*2^0 = 1 | 1*2^0 = 1 |
Couleurs de l'image final / addition | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0+0 = 0 | 0+0 = 0 | 1+0 = 1 | 1+0 = 1 | 0+2 = 0 | 0+2 = 2 | 1+2 = 3 | 1+2 = 3 |
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés