π
<-
Chat plein-écran
[^]

[ARM926EJ-S]Damier

C, C++, ASM...

[ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 08 Aoû 2017, 15:52

Je me suis remis a la programmation en asm sur la TI Nspire CX CAS, en utilisant nAssembly de lkj, et pour m'entrainer, j'ai voulu créer un damier de case noire et blanche alternée. Lors de la compilation, le fichier nAssembler.py.tns ne me renvoie aucune erreur, mais lorsque je lance le fichier .tns compilé, la calculatrice reboot.
Si quelqu'un pouvait m'aider à trouver la(les) erreur(s) qui font crasher la calculatrice, je lui en serait reconnaissant :)
Voilà le code en ASM:
Code: Tout sélectionner
;clears the screen and waits some seconds
main
    stmfd sp!, {lr}
    mov r0, #0xC0000000
    ldr r0, [r0, #0x10]
    mov r1, #0b0000000000000000
    bl clrscrCX
    bl wait
    ldmfd sp!, {pc}

wait
    mvn r0, #0
    mov r0, r0, lsr #3
waitloop
    sub r0, r0, #1
    cmp r0, #0
    bgt waitloop
    bx lr

clrscrCX ;base, color
    stmfd sp!, {r4-r7,lr}
    mov r4, r0;base
    mov r5, #1;x
    mov r6, #0;y
    mov r7, r1;color
xloop
    mov r0, r4 ;pointeur
    mov r1, r5 ;coord x
    mov r2, r6 ;coord y
    mov r3, r7 ;couleur
    mov r8, #0 ;debut du carre en x
    mov r9, #0 ;debut du carre en y
loop
    bl setPixelColorCX
    add r8, r8, #1 ;augmente le repere en x
    add r1, r1, #1 ;augmente x
    cmp r8, #29 ;regarde si l'on est arrive a la fin du carre en x
    blt loop ;si non, on continue a afficher sur la ligne
    mov r1, r5 ;si non, on repart a l'abscisse d'origine
    add r9, r9, #1 ;et on augmente le repere d'ordonne
    add r2, r2, #1 ;tout en augmentant y
    cmp r9, #29 ;on teste si l'on arrive a la fin du carre en y
    blt loop ;si non en recommence a afficher sur la ligne suivant
    cmp r7, #0 ;changement de couleur si tout le carre precedant et affiche
    mvneq r7, #0 ;blanc si noir
    movne r7, #0 ;noir si blanc
    add r5, r5, #29 ;on augmente le point d'abscisse d'origine de 29 (un carre du damier fait 29*29)
    cmp r5, #320 ;on regarde si on a dessine le dernier carre de la ligne
    bne xloop ;si non on recommence avec le carre suivant
    add r6, r6, #29 ;on augmente le point d'ordonne d'origine de 29
    mov r5, #0 ;on met x a 0
    cmp r6, #231 ;on teste si on a fini
    bne xloop ;si non on recommence
    ldmfd sp!, {r4-r7,pc}

setPixelColorCX ;base, x, y, color
    add r0, r0, r1, lsl #1
    add r0, r0, r2, lsl #9
    add r0, r0, r2, lsl #7
    strh r3, [r0]
    bx lr

Et en plus le code est bien commenté
Merci d'avance
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Message non lude grosged » 08 Aoû 2017, 16:50

ça y est ! Tu t'y mets sérieusement, félicitations ;)
Je viens de jeter un rapide coup d'oeil... et je te conseille fortement (en tout début/toute fin) de préserver tous les registres (ça peut être une cause de Reset)

Donc en ligne 3 ...
Code: Tout sélectionner
stmfd       sp!,{r0-r12,lr}

Et en ligne 9...
Code: Tout sélectionner
ldmfd       sp!,{r0-r12,pc}


Ensuite, qu'est-ce que ça donne?..Toujours le Reset ou pas ?
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

Re: [ARM926EJ-S]Damier

Message non lude Vogtinator » 08 Aoû 2017, 17:41

I gave it a quick run in firebird: setPixelColorCX modifies r0 to get the target address but the caller does not take that into account.
Avatar de l’utilisateur
VogtinatorPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 1.6%
 
Messages: 217
Inscription: 29 Mar 2014, 15:55
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 08 Aoû 2017, 18:08

@grosged j'ai essayé mais toujours ce fameux reboot après le lancement de damier.tns :(
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 08 Aoû 2017, 18:10

@Vogtinator so, what can I do?
I not change r0 in my loop 'loop' :(
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Message non lude Vogtinator » 08 Aoû 2017, 18:15

Ti64CLi++ a écrit:@Vogtinator so, what can I do?


Code: Tout sélectionner
setPixelColorCX:
push {r0, lr}
<code>
pop {r0, pc}


for example. Then it gets further and actually draws something, but it looks nothing like it should and crashes after a while.
I won't help you with that though, otherwise there's no challenge ;)
Avatar de l’utilisateur
VogtinatorPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 1.6%
 
Messages: 217
Inscription: 29 Mar 2014, 15:55
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 08 Aoû 2017, 18:27

I add stmfd sp!, {r0,lr} and ldmfd sp!, {r0,pc} and I can see a differance.
Before reboot, the calculator display things, during some millisecond,but I can't see what :(
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Message non lude grosged » 08 Aoû 2017, 18:33

Afin de faire plus simple, tu pourrais opter pour des carrés de 20x20, ce qui ferait un damier de 16x12 cases ;)
Ainsi, ça simplifierait pas mal l'affichage (et du coup beaucoup moins de loop , si tu vois ce que je veux dire ?.. ;) )
Désolé, je te laisse (je reçois du monde à la maison :) )
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

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 08 Aoû 2017, 18:34

ok je vais essayer. Et sinon, pour la partie swi en asm, je n'ai pour l'instant pas réussi à les utiliser :(
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 09 Aoû 2017, 11:28

Alors voilà, comme promis, j'ai essayer de faire un damier avec des cases 20*20, j'y suis très bien arrivé, il se compile et se lance parfaitement. Seulement, les cases ne font pas toutes la même taille.
Voilà mon code:
Code: Tout sélectionner
main
    stmfd sp!, {lr}
    mov r0, #0xC0000000
    ldr r0, [r0, #0x10]
    mov r1, #0b0000000000011111
    bl damierCX
    bl waitkey
    mov r0, #0xC0000000
    ldr r0, [r0, #0x10]
    bl clrscrCX
;    bl wait
    ldmfd sp!, {pc}

waitkey
      mov r10,#0x90000000
    add r10,r10,#0xe0000
    add r10,r10,#0x10
wkloop
    ldmfd r10,{r1-r4}
    orr r1,r1,r2
    orr r2,r3,r4
    orrs r1,r1,r2
    beq wkloop
    bx lr

;wait
;    mvn r0, #0
;    mov r0, r0, lsr #3
;waitloop
;    sub r0, r0, #1
;    cmp r0, #0
;    bgt waitloop
;    bx lr

damierCX ;base, color
    stmfd sp!, {r0-r12, lr}
    mov r4, r0;base
    mov r5, #0;x
    mov r6, #0;y
    mov r7, r1;color
    mov r8, #0
    mov r9, #0
xloop
    mov r0, r4
    mov r1, r5
    mov r2, r6
    mov r3, r7
    bl setPixelColorCX
    add r5, r5, #1
    add r8, r8, #1
    cmp r8, #20
    blt xloop
    mov r8, #0
    bl changecolor
    cmp r5, #320
    blt xloop
    add r9, r9, #1
    cmp r9, #20
    moveq r9, #0
    beq changecolor
    mov r5, #0
    add r6, r6, #1
    cmp r6, #240
    blt xloop
    ldmfd sp!, {r0-r12, pc}

clrscrCX
    stmfd sp!, {r0-r12, lr}
    mov r4, r0;base
    mov r5, #0;x
    mov r6, #0;y
    mvn r7, #0;color
clrloop
    mov r0, r4
    mov r1, r5
    mov r2, r6
    mov r3, r7
    bl setPixelColorCX
    add r5, r5, #1
    cmp r5, #320
    blt clrloop
    add r6, r6, #1
    mov r5, #0
    cmp r6, #240
    blt clrloop
    ldmfd sp!, {r0-r12, pc}

changecolor
    cmp r7, #0
    mvneq r7, #0
    movne r7, #0
    bx lr

setPixelColorCX ;base, x, y, color
    add r0, r0, r1, lsl #1
    add r0, r0, r2, lsl #9
    add r0, r0, r2, lsl #7
    strh r3, [r0]
    bx lr

(Et j'ai remplacé la routine wait par la routine waitkey, et un écran blanc s'affiche à la fin. Je ne sais pas pourquoi, la routine waitkey empêche le rafraichissement de l'écran quand le programme est fini :( )
Je suis désolé je ne peux faire de screen car firebird ne marche pas sur mon ordi
Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 32.3%
 
Messages: 3441
Images: 75
Inscription: 04 Juil 2014, 14:40
Localisation: Clermont-Ferrand 63
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: ENS Rennes
GitHub: Ti64CLi

Suivante

Retourner vers Native: Ndless, Linux, ...

Qui est en ligne

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

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
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.
1434 utilisateurs:
>1394 invités
>35 membres
>5 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)