π
<-

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

Regroupement de tous les tutoriaux z80 (82/83/84)

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

Unread postby nikitouzz » 22 Oct 2012, 23:03

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
Last edited by nikitouzz on 23 Jan 2013, 16:16, edited 3 times in total.
Mes records personnels :
2x2x2 : 2.18 secondes / 2x2x2 une main : 21.15 secondes / 2x2x2 yeux bandés : 47.59
3x3x3 : 5.97 secondes / 3x3x3 une main : 49.86 secondes
4x4x4 : 1.49 minutes / 4x4x4 une main : 6.50 minutes
5x5x5 : 4.10 minutes / 5x5x5 une main : 18.02 minutes
6x6x6 : 8.10 minutes
7x7x7 : 16.03 minutes
9x9x9 : 58.26 minutes

megaminx : 5.59 minutes / pyraminx : 7.91 secondes / square-one : 1.07 minutes

Image
User avatar
nikitouzzModo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 42.7%
 
Posts: 1016
Images: 1
Joined: 16 Feb 2012, 18:39
Gender: Male
Calculator(s):
MyCalcs profile
Class: Fac de maths

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

Unread postby Bisam » 23 Oct 2012, 11:52

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.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

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

Unread postby nikitouzz » 23 Oct 2012, 12:00

:) 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 :)
User avatar
nikitouzzModo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 42.7%
 
Posts: 1016
Images: 1
Joined: 16 Feb 2012, 18:39
Gender: Male
Calculator(s):
MyCalcs profile
Class: Fac de maths

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

Unread postby Persalteas » 07 May 2013, 08:38

à 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*
User avatar
PersalteasMembre UPECS
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 6.2%
 
Posts: 2337
Images: 113
Joined: 04 Feb 2010, 00:00
Location: Evry (France)
Gender: Male
Calculator(s):
MyCalcs profile
Class: PhD candidate, Bioinformatics


Return to Tutoriaux

Who is online

Users browsing this forum: ClaudeBot [spider] and 5 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
872 utilisateurs:
>848 invités
>17 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)