![]() ![]() ![]() |
Cette bibliothèque nous offre la possibilité d'afficher à l'écran des graphismes en 7 couleurs différentes !
C'est encore plus beau qu'avec la bibliothèque gray4lib, mais les concessions sont aussi plus lourdes :
Avec un seul buffer écran nous avons 2^1 soit 2 possibilités de 'couleurs' : noir et blanc.
Avec la bibliothèque gray4lib nous avons deux buffers écran donc 2^2 soit 4 possibilités de 'couleurs' : noir, 2 tons de gris et blanc.
Maintenant nous avons 2^3 mais seulement 7 possibilités de 'couleurs' au lieu de 8 : noir, 5 tons de gris, et blanc :
Le pointeur du nouveau buffer écran (appelé bitplane 0) est connue par gray7lib@0002.
Le pointeur du deuxième nouveau buffer écran (appelé bitplane 1) est connue par gray7lib@0003.
Le pointeur de l'écran habituel (appelé bitplane 2) reste inchangé et est connue soit par gray7lib@0004 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 trois écrans d'une manière successive.
Elle reste 4/7 du temps sur le premier écran (plane2), reste 2/7 du temps sur le premier nouvel écran (plane1) et reste 1/7 du temps sur le deuxième nouvel écran (plane0).
Pour avoir du noir il suffit d'allumer le pixel sur les trois écran car 4/7 + 2/7 + 1/7 = 7/7 = 1.
Pour l'utiliser dans un programme, il faut d'abord y faire référence grace à :
include "gray7lib.h" xdef _main xdef _commentPuis appeler une fonction par JSR gray7lib::<nom fonction> ou JSR gray7lib@<mot hexadécimal>.
![]() ![]() |
@0000 | on active le gris |
@0002 | plane0 adresse du premier nouvel écran |
@0004 | plane2 adresse de l'écran principal |
@0001 | off désactive le gris |
@0003 | plane1 adresse du deuxième nouvel écran |
![]() ![]() |
![]() ![]() 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 gray7lib::on ; appelle la fonction
![]() ![]() |
![]() ![]() desactive le gris |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Aucune.
PROGRAMMATION
JSR gray7lib::off ; appelle la fonction
![]() ![]() |
![]() ![]() adresse du premier nouvel écran |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Voir la description.
PROGRAMMATION
MOVE.l gray7lib::plane0,A0 ; charge dans A0 l'adresse du nouvel écran
![]() ![]() |
![]() ![]() adresse du deuxième nouvel écran |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Voir la description.
PROGRAMMATION
MOVE.l gray7lib::plane1,A1 ; charge dans A1 l'adresse du deuxième nouvel écran
![]() ![]() |
![]() ![]() adresse de l'écran principal |
INFORMATIONS FOURNIES
Aucune.
INFORMATIONS RETOURNEES
Voir la description.
PROGRAMMATION
MOVE.l gray7lib::plane2,A2 ; charge dans A2 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 trois pixels des trois écrans.
Pour vous en convaincre définitivement, utilisez Paint Shop Pro et additionnez les trois écran précédents avec la commande
Image/Arithmetic/Function:Darkest
Enfin en sachant que la couleur blanche vaut 0, le gris très clair vaut 1, le gris clair vaut 2, le gris vaut 3, le gris peu foncé vaut 4, le gris foncé vaut 5, le gris très foncé vaut 6 et que le noir vaut 7, 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 | plane 2 | plane 1 | plane 0 |
0 | 0 | 0 |
Pour avoir la couleur grise très claire | |||||||
7 | 6 | 5 | 4 | 3 | plane 2 | plane 1 | plane 0 |
0 | 0 | 1 |
Pour avoir la couleur grise clair | |||||||
7 | 6 | 5 | 4 | 3 | plane 2 | plane 1 | plane 0 |
0 | 1 | 0 |
Pour avoir la couleur grise (premier cas) | |||||||
7 | 6 | 5 | 4 | 3 | plane 2 | plane 1 | plane 0 |
0 | 1 | 1 |
Pour avoir la couleur grise (deuxième cas) | |||||||
7 | 6 | 5 | 4 | 3 | plane 2 | plane 1 | plane 0 |
1 | 1 | 1 |
Pour avoir la couleur grise foncée | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 0 | 1 |
Pour avoir la couleur grise très foncée | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 | 0 |
Pour avoir la couleur noire | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 1 | 1 |
Octet au hasard du deuxième écran (plane2) | |||||||
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 (plane1) | |||||||
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 |
Octet équivalent du premier écran (plane0) | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0*2^0 = 0 | 1*2^0 = 1 | 0*2^0 = 0 | 1*2^0 = 1 | 0*2^0 = 0 | 1*2^0 = 1 | 0*2^0 = 0 | 1*2^0 = 1 |
Couleurs de l'image final / addition | |||||||
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0+0+0 = 0 | 1+0+0 = 1 | 0+2+0 = 2 | 1+2+0 = 3 | 0+0+4 = 3 | 1+0+4 = 5 | 0+2+4 = 6 | 1+2+4 = 7 |
Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés