kurapix Elite

   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) Dernière note en maths: xx/20
| Sujet: [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 |
|
tama Animateur


   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) Dernière note en maths: 13/20
| Sujet: 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> |
|
kurapix Elite

   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) Dernière note en maths: xx/20
| Sujet: 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. |
|
Ver2guerre Légende


   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) Dernière note en maths: 20/20
| Sujet: Re: [ASM][ARM] Coding de : hline Dim 27 Avr - 23:20 | |
| | ça ressemble aussi à l'ASM x86 (mais pas trop quand même !) |
|
kurapix Elite

   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) Dernière note en maths: xx/20
| Sujet: 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 |
|
Bisam Elite


   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) Dernière note en maths: 14.8/20 à la 2ème épreuve de l'agreg 2000
| Sujet: 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. |
|