ZuperIndex
SOMMAIRE
Où manger
SUIVANTE
Où manger
PRECEDENTE
GRAY4LIB Fonction TI-92 Introduction
Fonction TI-92 Index des fonctions
Fonction TI-92 Exemple d'affichage Barre

Page précédente

Monter Descendre Retour Introduction

puce GRAY4LIB est 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 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 :

Nouvelle palette

puce Chaque écran est appelé bitplane en anglais.

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::<nom fonction> ou JSR gray4lib@<mot hexadécimal>.

Barre



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

Barre



Icone programme source Retour on Monter Descendre@0000
active le gris

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.

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

PROGRAMMATION

	JSR	gray4lib::on	; appelle la fonction

Barre



Icone programme source Retour off Monter Descendre@0001
desactive le gris

DESCRIPTION
puce Désactive la graduation de gris.

INFORMATIONS FOURNIES
puce Aucune.

INFORMATIONS RETOURNEES
puce Aucune.

PROGRAMMATION

	JSR	gray4lib::off	; appelle la fonction

Barre



Icone programme source Retour plane0 Monter Descendre@0002
adresse du nouvel écran

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

INFORMATIONS FOURNIES
puce Aucune.

INFORMATIONS RETOURNEES
puce Voir la description.

PROGRAMMATION

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

Barre



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

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

INFORMATIONS FOURNIES
puce Aucune.

INFORMATIONS RETOURNEES
puce Voir la description.

PROGRAMMATION

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

Barre



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 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
765432plane1plane0
00

Pour avoir la couleur grise claire
765432plane1plane0
01

Pour avoir la couleur grise foncée
765432plane1plane0
10

Pour avoir la couleur noire
76543210
11

puce 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)
76543210
0*2^1 = 00*2^1 = 00*2^1 = 00*2^1 = 0 1*2^1 = 21*2^1 = 21*2^1 = 21*2^1 = 2

Octet équivalent du premier écran (plane0)
76543210
0*2^0 = 00*2^0 = 01*2^0 = 11*2^0 = 10*2^0 = 00*2^0 = 01*2^0 = 11*2^0 = 1

Couleurs de l'image final / addition
76543210
0+0 = 00+0 = 01+0 = 11+0 = 10+2 = 00+2 = 21+2 = 31+2 = 3

Barre



 

 

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

Zguide © 1998 - 1999 par Florian DREVET. Tous droits réservés