GRAY4LIB Fonction Introduction
Fonction Index des fonctions
Fonction Exemple d'affichage

Page précédente Fonction prochaine bibliothèque
Fonction bibliothèque précédente



 

Monter Descendre Retour Introduction
puce GRAY4LIB est (je pense) la contraction de GRAYscale LIBrary in 4 colours.
puce 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 :
    puce pas question de couper les interruptions quand gray4lib est activée car l'auto-int 1 doit être activée (voir gray4lib.asm)
    puce les fonctions de communication sont inaccessibles pendant que gray4lib est activée
    puce il faut impérativement 3840 octets de libres pour pouvoir créer l'handle du nouvel écran
puce Au lieu d'un seul buffer écran, nous allons en utiliser deux, voilà pourquoi il faut 240*128=3840 octets libres pour utiliser cette bibliothèque.

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

puce Chaque écran sera appelé bitplane.

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

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

puce Pour l'utiliser dans un programme, il faut d'abord y faire référence grace à :

    include "gray4lib.h"
    xdef _main
    xdef _comment
Puis appeler une fonction par JSR gray4lib::? ou JSR gray4lib@????.




 
Monter Retour Index des fonctions
@0000on
active le gris
@0002plane0
adresse du nouvel écran
@0001off
désactive le gris
@0003plane1
adresse de l'écran principal




 

Retour on @0000
active le gris
Monter Descendre

DESCRIPTION
puce Active la graduation de gris.


INFORMATIONS FOURNIES
puce Aucune.


INFORMATIONS RETOURNEES
puce 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.

Taille : double mot
0graduation de gris activée avec succès
autremémoire insuffisante
Paramètre : registre de donnée D0


PROGRAMMATION
JSR gray4lib::on; on appelle la fonction





 

Retour off @0001
desactive le gris
Monter Descendre

DESCRIPTION
puce Désactive la graduation de gris.


INFORMATIONS FOURNIES
puce Aucune.


INFORMATIONS RETOURNEES
puce Aucune.


PROGRAMMATION
JSR gray4lib::off; on appelle la fonction





 

Retour plane0 @0002
adresse du nouvel écran
Monter Descendre

DESCRIPTION
puce Cette fonction est en faites une variable contenant le pointeur vers le nouvel écran créé par la fonction on.
Taille : double mot


INFORMATIONS FOURNIES
puce Aucune.


INFORMATIONS RETOURNEES
puce Voir la description.


PROGRAMMATION
MOVE.l gray4lib::plane0,A0; on charge dans A0 l'adresse du nouvel écran





 

Retour plane1 @0003
adresse de l'écran principal
Monter Descendre

DESCRIPTION
puce Cette fonction est en faites une variable contenant le pointeur de l'écran habituel.
Taille : double mot


INFORMATIONS FOURNIES
puce Aucune.


INFORMATIONS RETOURNEES
puce Voir la description.


PROGRAMMATION
MOVE.l gray4lib::plane1,A1; on charge dans A1 l'adresse de l'écran habituel





 

Monter Retour Exemple d'affichage
puce Cette partie a pour but de vous faire totalement comprendre comment marche cette bibliothèque car il n'est pas toujours facile de se faire une idée du fonctionnement, j'ai pris ici la photo d'un chalet en 240*128 et quatre tons de gris :

puce Et voici ce que nous sauvegardons dans le buffer écran habituel, là aussi j'ai volontairement grisé les pixels armés. Vous voyez que cet écran est constitué de la couleur grise foncée mais aussi de la couleur noir de l'image finale :

puce Voici ce que nous sauvegardons dans la deuxième mémoire écran créé par la fonction on, attention j'ai volontairement grisé les pixels armés. Vous voyez que cet écran est constitué de la couleur grise claire mais aussi de la couleur noir de l'image finale :

puce Voici ce que nous sauvegardons dans le buffer écran créé par la fonction on, attention j'ai volontairement grisé les pixels armés. Vous voyez que cet écran est constitué de la couleur grise claire et là encore de la couleur noir de l'image finale :

puce Pour obtenir l'image finale, imaginez tout d'abord que la valeur des pixels du premier écran sont les bits 1 d'octets fictifs donc ont comme valeur 0 ou 2. Imaginez ensuite que la valeur des pixels du deuxième écran sont les bits 0 des mêmes octets fictifs donc ont comme valeur 0 ou 1.

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
76543210
00

Pour avoir la couleur grise claire
76543210
01

Pour avoir la couleur grise foncée
76543210
10

Pour avoir la couleur noire
76543210
11

puce Pour terminer, additionnons deux octets qui seraient au même endroit 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 premier écran
76543210
0*2^1=00*2^1=01*2^1=20*2^1=0 1*2^1=21*2^1=20*2^1=00*2^1=0

Octet équivalent du deuxième écran
76543210
1*2^0=10*2^0=01*2^0=11*2^0=11*2^0=10*2^0=00*2^0=00*2^0=0

Couleurs de l'image final / addition
76543210
0+1=10+0=02+1=31+0=12+1=30+2=20+0=00+0=0




 

 

Lisez la section sur les droits d'auteur et la license d'utilisation avant de distribuer Zguide.

Zguide © 1998, Florian DREVET. Tous droits réservés à l'échelle mondiale