π
<-
Chat plein-écran
[^]

[eZ80] Algorithme de Bresenham : optimisation

Assembleur, Axe, C/C++, ICE...

[eZ80] Algorithme de Bresenham : optimisation

Message non lude grosged » 12 Avr 2016, 17:43

Comme prévu, j'adapte en assembleur ce que j'avais commencé à élaborer en Basic ;)

Pour l'instant, je me borne à tracer un segment [(x1,y1),(x2,y2)] dans ce cas de figure:
x1 < x2
y1 < y2
(x2 - x1) > (y2 - y1) c'est-à-dire: Δx > Δy

En guise de test, je fais un Line(0,0)-(300,19) ... et ça marche !!! =D

Cela n'est qu'une première ébauche (il manque, en début de programme les calculs nécessaires pour obtenir Δx et Δy , etc...)
Code: Tout sélectionner
.nolist
#include "ti84pce.inc"
.list
.org userMem-2
.db tExtTok,tAsm84CeCmp
.assume ADL=1
           
            di                ; Interdit les interruptions

            ld a,$27          ; Passe en mode graphique 8bpp
            ld ($e30018),a       ; Idéal car dans ce mode,
            ld hl,$e40000       ; 1 pixel = 1 octet
            ld de,$d40000       ; efface l'écran
            ld bc,76800       ; (méthode rapide)
            ldir             
                           ; On va maintenant effectué comme un Line(0,0)-(300,19)
            exx             ; Pour l'instant, j'inscris des  valeurs précalculées
            push bc    ; (Dans la version à venir, le prog effectuera les calculs)   
            push de          ; (j'avais trop hâte de vérifier son bon fonctionnement !)
            push hl          ; On préserve les registres'
            or a             ; on met le drapeau "carry" à zéro
            sbc hl,hl         ; HL' = variable d'erreur E (pour démarrer, à zéro)
            ld bc,-600          ; BC' = -2Δx
            ld de,300          ; DE' = Δx
            exx      ; on revient vers les registres classiques
            ld (OldSP+1),sp       ; on préserve la pile
            ld sp,262          ; SP = Δx-2Δy
            ld hl,$d40000       ; HL = pointeur en zone-écran correspondant au point(x1,y1)
            ld bc,320         ; BC = largeur de l'écran (en octets)
            ld de,300          ; nb de points à afficher

            jr Debut          ; Comme on commence par afficher le point (x1,y1)
                           ; part directement dans le coeur de la boucle principale
B_Boucle:   dec de             ; décremente le nb de point à afficher
         exx             ; bascule dans les registres '
         sbc hl,sp          ; E < Δx-2Δy   ?
         jr nc,Evite         ; Oui?..Alors
         exx             ; on rebascule en registres classiques
         add hl,bc          ; descend d'1 cran le pointeur en mémoire-écran
         exx             ; on revient vers les registres'
         add hl,bc          ; E = E - 2Δx
Evite:      add hl,de    ; E = E + 2Δy + Δx-2Δy  (par rapport au test effectué plus haut!)
         exx             ; revient vers les registres classiques
         inc hl       ; décale le pointeur en mémoire-écran d'1 octet (=1 pixel) vers la droite
Debut:      ld (hl),5          ; pour y afficher un point
         ld a,d             ; Avons-nous affiché tous les points du segment ?
         or e             ; Si on n'est pas à zéro
         jr nz,B_Boucle       ; Alors on boucle

OldSP:      ld sp,0          ; rétablit la pile
         exx             ; ainsi que les registres'
         pop hl             ; ...
         pop de
         pop bc
         exx
         ei                ; autorise de nouveau les interruptions
         ret               ; Terminé!
                        ; Volontairement , je reste en mode 8bpp, afin de voir le résultat.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 17 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
"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.
Offre de test des nouveautés de rentrée 2024 par Casio. Enseignant(e), reçois gratuitement 1 exemplaire, à ton choix, de la Graph Light ou bien de la Graph Math+
14€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 31 Octobre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 90+E d'ici le 31 Décembre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 25 d'ici le 31 Décembre 2024
8€ remboursés par Casio sur l'achat de ta calculatrice Graph Math+ d'ici le 31 Octobre 2024
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2024
5€ de remise immédiate sur l'achat de ta calculatrice TI-83 Premium CE Edition Python chez les revendeurs partenaires
4€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced Edition Python chez les revendeurs partenaires
3€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced chez les revendeurs partenaires
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234567891011121314
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1527 utilisateurs:
>1514 invités
>9 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)