Page 1 of 1

[TUTO][AXE] la façon la plus rapide de dessiner des pixels

Unread postPosted: 22 Oct 2012, 23:03
by nikitouzz
Vous vous êtes souvent demandé comment dessiner des pixels d'une façon particulièrement rapide :) Voici la solution :

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.

  1. 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. )
  2. 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}
    :)

    :O :O mais d'où vient ce GDB0 ??? :O :O.

    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


    :)
  3. 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

Re: [AXE] la façon la plus rapide de dessiner des pixels en

Unread postPosted: 23 Oct 2012, 11:52
by Bisam
Bel article, nikitouzz.
Je me suis permis de modifier un peu tes phrases (en plus de corriger les fautes d'orthographe). J'espère que j'ai bien respecté ce que tu voulais dire et que tu ne m'en voudras.

Re: [AXE] la façon la plus rapide de dessiner des pixels en

Unread postPosted: 23 Oct 2012, 12:00
by nikitouzz
:) Je t'en remercie fortement :)

Et j’espère que tu en as appris un peu plus sur l'axe en même temps :)

Mais non il y a un passage où tu t'es trompé ( écriture des bits avec "or" ) je le corrige :)

Re: [AXE] la façon la plus rapide de dessiner des pixels en

Unread postPosted: 07 May 2013, 08:38
by Persalteas
à déplacer dans la section tutoriels :bj:
Show/Hide spoilerAfficher/Masquer le spoiler
(Et sinon nommez moi modérateur du forum z80, que je le fasse tout seul :P )

*sifflote*