Le Forum de TI-BANK.fr
Le forum de la banque de programmes pour calculatrices graphiques Texas Instruments (aide débutants, résolution problèmes...).
AccueilPortailCalendrierFAQRechercherS’enregistrerConnexion
Poster un nouveau sujet   Répondre au sujet
 

[ASM][ARM] Coding de : hline

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
kurapix
Elite
Elite


Sexe:MasculinViergeSerpent
Age : 18
Inscrit le : 10 Juil 2007
Messages : 374
Calculatrice : Ti 89 Titanium
Classe : 1 iere annee de Prepa Integree (2007-2008)


Impureté:
65/450  (65/450)
Dernière note en maths: xx/20

MessageSujet: [ASM][ARM] Coding de : hline   Dim 27 Avr - 19:19

Bonjour les forumeurs!!!

Je voulais poster dans la section ARM mais y'en a pas ><.

Bon je sais pas si y'en a qui font de l'ASM ARM ici mais je sollicite votre aide tout de même, j'arrive pas à trouver ce qui cloche dans mon code ASM (vline est good, je code hline là).
hline est une procédure qui trace un trait horizontal à l'écran.

Bon c'est du code pour GBA mais ça reste de l'ASM ARM (ARM 7 TDMI plus précisement).

Voilà le code :

Code:

@ void asm_draw_hline (int y, int x1, int x2, int color);
@ trace une ligne horizontale a la hauteur y et de longueur x2 - x1
.arm

   @.section .iwram,"ax",%progbits

   .align

   .global  asm_draw_hline

   .type    asm_draw_hline, function
@ adress = base + (y * w - (w - x)) * s
asm_draw_hline :
    push {r4, lr}                    @ sauvegarde du contexte (pile r2, puis rn)
    sub r6, r2, r1                  @ r4 = x2 - x1 (longueur de la ligne tracee)
    @ mov r2, r0                    @ temp = y
    @ mov r0, r1                    @ x = x
    @ mov r1, r2                    @ y = y
    @ mov r2, #240                  @ w = 240
    @ mov r3, #2                    @ s = 2
    @ bl asm_compute_pixel_adress    @ r0 = vram + (y * w - (w - x)) * 2
    ldr r7, =0x06000000              @ vram
    mov r4, #240                    @ r4 = w = 240
    sub r1, r4, r1                  @ r0 = w - x
    mul r5, r0, r4                  @ r5 = y * w
    sub r5, r5, r1                  @ r5 = y * w - (w - x)
    mov r0, r5, lsl #1              @ r0 = (y1 * w - (w - x)) * 2
    add r0, r0, r7                  @ r0 = adresseBase + (y1 * w - (w - x)) * 2

    eor r5, r5, r5
    drawing_hline :
        strh r3, [r0], #2            @ on ecrit le pixel puis on incremente de 2
        add r5, #1
        cmp r6, r5                  @ si on atteint la longueur de la ligne     
    bne drawing_hline                @ alors on a trace notre ligne verticale
    pop {r4, lr}                    @ on restaure le contexte
    bx lr                            @ on retourne a l'appelant


Bon je ne fais aucunes vérification des bords.

Voilà ce que je fais dans mon code :
0 - Sauvegarde du contexte (normal)
1 - Calcul de la longueur du segment en pixels
2 - Calcul de l'adresse où écrire (compute_adress était fais pour ça mais je l'ai recoder en inline dans hline)
3 - tant qu'on a pas dessiner la longueur de pixel on boucle
4 - On retourne à l'appelant (normal)

Pour info, 0x06000000 correspond au début de la mémoire vidéo, si on écrit dans la mémoire vidéo bah on affiche un pixel à l'écran ;) .

Voilà

Merci de votre aide d'avance.

Kurapix
Revenir en haut Aller en bas
tama
Animateur
Animateur


Sexe:MasculinLionChèvre
Age : 17
Inscrit le : 19 Déc 2005
Messages : 9402
Localisation : quelque part en France...
Calculatrice : TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:)
Classe : Terminale S spé maths


Impureté:
-9/500  (-9/500)
Dernière note en maths: 13/20

MessageSujet: Re: [ASM][ARM] Coding de : hline   Dim 27 Avr - 19:55

ça ressemble un peu à l'ASM 68k...mais j'peux pas t'aider parce que je connais pas l'ASM 68k ^^"
_________________
<embed src="http://www.mirari.fr/OVRh.swf" width="550" height="150" align="middle" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptAccess="always"></embed>
Revenir en haut Aller en bas
kurapix
Elite
Elite


Sexe:MasculinViergeSerpent
Age : 18
Inscrit le : 10 Juil 2007
Messages : 374
Calculatrice : Ti 89 Titanium
Classe : 1 iere annee de Prepa Integree (2007-2008)


Impureté:
65/450  (65/450)
Dernière note en maths: xx/20

MessageSujet: Re: [ASM][ARM] Coding de : hline   Dim 27 Avr - 20:04

Ah, ça ressemble à de l'ASM 68k? Intéressant ... lol

Ok, bon j'attendrais quelqu'un d'autre pour y répondre alors ;) .
De mon côté, je vais encore chercher ce qui cloche avec ma procédure.
Revenir en haut Aller en bas
Ver2guerre
Légende
Légende


Sexe:MasculinBalanceChèvre
Age : 16
Inscrit le : 29 Sep 2006
Messages : 2463
Localisation : Le plus loin possible des casio
Calculatrice : TI-89 tita x2 + TI 83 Plus
Classe : Vacances


Impureté:
-1/100  (-1/100)
Dernière note en maths: 20/20

MessageSujet: Re: [ASM][ARM] Coding de : hline   Dim 27 Avr - 23:20

ça ressemble aussi à l'ASM x86 (mais pas trop quand même !)
Revenir en haut Aller en bas
kurapix
Elite
Elite


Sexe:MasculinViergeSerpent
Age : 18
Inscrit le : 10 Juil 2007
Messages : 374
Calculatrice : Ti 89 Titanium
Classe : 1 iere annee de Prepa Integree (2007-2008)


Impureté:
65/450  (65/450)
Dernière note en maths: xx/20

MessageSujet: Re: [ASM][ARM] Coding de : hline   Lun 28 Avr - 2:40

J'ai trouvé le problème, en fait c'est vraiment tout bête.

Ma procédure pour hline était bonne.
Je poppais plus de valeur que je ne pushais dans la procédure appelée avant l'appel de hline donc la pile était corrompue (si je me trompe pas c'est ça).

La corruption de pile peut être provoquer par quoi d'autre?
Que se passe-t'il si on poppe la pile alors que rien n'a été pushé?


Merci d'avances pour les réponses.

Kurapix
Revenir en haut Aller en bas
Bisam
Elite
Elite


Sexe:MasculinBalanceSerpent
Age : 30
Inscrit le : 12 Mar 2008
Messages : 241
Localisation : Lyon
Calculatrice : Voyage 200 + TI 92 (vieille de 12 ans !)
Classe : Prof de Maths Sup


Impureté:
26/450  (26/450)
Dernière note en maths: 14.8/20 à la 2ème épreuve de l'agreg 2000

MessageSujet: Re: [ASM][ARM] Coding de : hline   Lun 28 Avr - 11:35

Je ne connais pas grand chose à l'assembleur mais je sais que lorsqu'on poppe une pile vide, le nouvel état de la pile pointe vers un emplacement mémoire inexistant ce qui provoque nécessairement une erreur souvent fatale lors de la prochaine écriture dans la pile.
Revenir en haut Aller en bas

[ASM][ARM] Coding de : hline

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Forum de TI-BANK.fr :: Forum TI68k :: Programmation-
Poster un nouveau sujet   Répondre au sujet