On sait que l’écran est composé de 96x64 pixels c'est-à-dire qu'il est partagé en 64 lignes de 12 octets chacun ( car un octet est égal à 8 bits et 8x12=96 )
Nous allons donc nous en servir
Pour cette technique, nous allons récupérer le numéro de l'octet en fonction des coordonnées (X,Y) du pixel que l'on veut dessiner.
- On sait qu'une ligne fait 12 octets de long donc Yx12 donnera le premier octet de la ligne Y. Si on y ajoute ensuite X/8, on obtient l'octet codant le point de coordonnées (X,Y).
On a donc le code :- Code: Select all
:(Yx12)+(X/8)+L6->P
(on stocke le résultat obtenu dans la variable P. ) - Il faut maintenant trouver le numéro du bit à allumer parmi les 8 bits de cet octet, et là, rien de plus simple : il suffit d'écrire :
- Code: Select all
{X^8+GDB0}
mais d'où vient ce GDB0 ??? .
C'est en faite le numéro du bit à dessiner contenu dans une chaîne hexadécimale qui est celle-ci :- Code: Select all
:[80402010080040201]->GDB0
Cette chaîne s'explique facilement car en binaire elle donne :- Code: Select all
-10000000
-01000000
-00100000
-00010000
-00001000
-00000100
-00000010
-00000001
- Maintenant, il suffit d’allumer le pixel correspondant en ajoutant ( fonction "or" ) la place de l'octet (stockée dans P) et le numéro du bit à allumer dans l'octet correspondant et de faire un petit "Dispgraph" :
- Code: Select all
:.TEST
:[8040201008040201]->GDB0
:Clrdraw
:0->A
:0->B
:B*12+(A/8)+L6->P
:{A^8+GDB0} or {P}->{P}
:Repeat Getkey
:Dispgraph
:End
Et en version optimisée :Show/Hide spoilerAfficher/Masquer le spoiler
- Code: Select all
:.TEST
:[8040201008040201]->GDB0
:Clrdraw
:0->A->B
:{A^8+GDB0} or {B*2*2*3+(A/2/2/2)+L6->r2}->{r2}
:While 1
:Dispgraph
:EndIf Getkey