Afficher une image en quatre niveaux de gris
07/08/2001

Voici une routine simple qui vous permettra d'afficher une image 131*64 en quatre niveaux de gris et en double hauteur (donc la taille du grob sera 131*128).
Pour que ce programme fonctionne, l'image doit être placée sur le niveau 1 de la pile, mais cette routine peut être facilement changée pour être intégrée dans un programme.
Je n'i pas trop détaillé les explications; s'il y a un truc que vous ne comprenez pas, ou si vous remarquez une erreur, vous pouvez m'écrire à superbebert2000@yahoo.fr ; vous pouvez également demander de l'aide sur le forum ou le chat de www.hp-network.com .

GOSBVL 0679B
ST=0 15
On sauve les registres
D0= 0010B
C=0 B
DAT0=C B
On éteint tous les indicateurs
D0-10
LC D
DAT0=C B
On règle le contraste
C=DAT1 A
D1=C
D1 pointe vers l'adresse de l'objet sur la pile (l'objet est supposé un être un grob de la taille de l'écran en 2 niveaux de gris, et en double hauteur: 131*128)
D1+20 D1 pointe sur les données de l'objet (pas de prologue, ni de taille, ni de largeur, ni de hauteur)
AD1EX
B=A A
On met l'adresse des données du grob en A
Et dans B
LC 00880
A=A+C A
A contient l'adresse de la "deuxième" partie du grob en niveau de gris alors que B contient l'adresse de la "première" partie
D0= 00128
LC 3F
DAT0=C B
On "enlève" la barre de menu
D0= 00
C=DAT0 1
R0=C A
On sauvegarde la marge à gauche dans R0
?ABIT=0 0
GOYES ABC
Si le grob est en adresse paire, on va au label ABC
LC C
DAT0=C 1
D0= 25
LC FFF
DAT0=C X
Si le grob est en adresse impaire, on met les marges comme il faut pour que l'affichage du grob soit pas décalé
*ABC
D0= 20
D1= 00129
D0 pointe sur l'adresse de la bitmap écran,
et D1 sur "l'adresse de balayage" (cf RamIO de Yoann Désir, disponible sur www.lebebert.fr.st)
*BCL
DAT0=A A
GOSUB VBL
On écrit l'adresse de la partie 1 du grob en 00120 => elle s'affiche
On va au abel VBL
*D'OU_ON_VIENT
ABEX A
DAT0=A A
GOSUB VBL
GOSUB VBL
On copie B en 00120, et on attend deux fois plus longtemps
ABEX A On remet tout en place, pour poursuivre la boucle
GOSBVL 00212
?CBIT=0 15
GOYES BCL
On teste les touches
Si on appuie sur aucune touche, alors on retourne à BCL
D1= 00
C=R0 A
DAT1=C 1
Si on appuie sur une touche, alors, on restaure la marge à gauche
D0= 8068D
C=DAT0 8
On récupère l'adresse de la "vraie" bitmap écran, et de la marge à droite
D1= 20
DAT1=C 8
GOTO END
On la restaure, et on va à END
*VBL
C=DAT1 1
?CBIT=1 1
GOYES VBL
Si la valeur de balayage est toujours à 1, alors on attend, sinon, on va à VBL2
*VBL2
C=DAT1 1
?CBIT=0 1
GOYES VBL2
RTN
Si la valeur de balayage est toujours à 0, alors on attend, sinon, on retourne "d'où on vient"
(label D'OU_ON_VIENT)
*END
ST=1 15
GOVLNG 05143
@
On ré autorise les interruptions, on restaure au registre, et on revient au RPL .... c'est la fin des haricots ......... ..............        ..........  ...        ... .. .

Bebert