ZuperIndex
SOMMAIRE
Où manger
SUIVANTE
Où manger
PRECEDENTE
GRAY7LIB 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 GRAY7LIB est la contraction de GRAYscale LIBrary in 7 colours.

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

puce Au lieu d'un seul buffer écran, nous allons en utiliser trois, voilà pourquoi il faut 2*(240*128)=7680 octets libres pour utiliser cette bibliothèque.

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

Nouvelle palette

puce Chaque écran est appelé bitplane en anglais.

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

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

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

include	"gray7lib.h"
xdef	_main
xdef	_comment
Puis appeler une fonction par JSR gray7lib::<nom fonction> ou JSR gray7lib@<mot hexadécimal>.

Barre



Monter Retour Index des fonctions

@0000on
active le gris
@0002plane0
adresse du premier nouvel écran
@0004plane2
adresse de l'écran principal
@0001off
désactive le gris
@0003plane1
adresse du deuxième nouvel écran

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	gray7lib::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	gray7lib::off	; appelle la fonction

Barre



Icone programme source Retour plane0 Monter Descendre@0002
adresse du premier 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	gray7lib::plane0,A0	; charge dans A0 l'adresse du nouvel écran

Barre



Icone programme source Retour plane1 Monter Descendre@0003
adresse du deuxième 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	gray7lib::plane1,A1	; charge dans A1 l'adresse du deuxième nouvel écran

Barre



Icone programme source Retour plane2 Monter Descendre@0004
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	gray7lib::plane2,A2	; charge dans A2 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 huit 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 :

puce Voici ce que nous sauvegardons dans le premier buffer écran créé par la fonction on, attention j'ai volontairement grisé les pixels armés :

puce Voici ce que nous sauvegardons dans le deuxième buffer mémoire écran créé par la fonction on, attention j'ai volontairement grisé les pixels armés :

puce Pour obtenir l'image finale, imaginez tout d'abord que la valeur des pixels du premier écran sont les bits 2 d'octets fictifs donc ont comme valeur 0 ou 4, imaginez ensuite que la valeur des pixels du deuxième écran sont les bits 1 des mêmes octets donc ont comme valeur 0 ou 2, puis imaginez que la valeur des pixels du troisième écran sont les bits 2 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 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
76543plane 2plane 1plane 0
000

Pour avoir la couleur grise très claire
76543plane 2plane 1plane 0
001

Pour avoir la couleur grise clair
76543plane 2plane 1plane 0
010

Pour avoir la couleur grise (premier cas)
76543plane 2plane 1plane 0
011

Pour avoir la couleur grise (deuxième cas)
76543plane 2plane 1plane 0
111

Pour avoir la couleur grise foncée
76543210
101

Pour avoir la couleur grise très foncée
76543210
110

Pour avoir la couleur noire
76543210
111

puce Pour terminer, additionnons trois octets qui seraient à la même position, respectivement dans la mémoire vidéo et dans les écrans créés par la fonction on et cherchons les couleurs finales :

Octet au hasard du deuxième écran (plane2)
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 (plane1)
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

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

Couleurs de l'image final / addition
76543210
0+0+0 = 01+0+0 = 10+2+0 = 21+2+0 = 30+0+4 = 31+0+4 = 50+2+4 = 61+2+4 = 7

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