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