π
<-
Chat plein-écran
[^]

[ARM926EJ-S]Damier

C, C++, ASM...

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 10 Aoû 2017, 13:25

J'ai totalement refait la routine d'affichage, et maintenant ça marche.
Mais je ne sais toujours pas pourquoi la routine waitkey empêche le rafraichissement de l'écran quand le programme est fini :(
Voilà le code:
Code: Tout sélectionner
main
    stmfd sp!, {lr}
    mov r0, #0xC0000000
    ldr r0, [r0, #0x10]
    mvn r1, #0b0000000000000000
    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
    add r6, r6, #1
    mov r5, #0
    cmp r9, #20
    blt xloop
    mov r9, #0
    bl changecolor
    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

Mon prochain projet, un snake.
Je vais déjà tenter une routine d'affichage de sprite et pour cela j'aurais une petite question:
Que fait la commande ADR?
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 » 10 Aoû 2017, 17:05

Ti64CLi++ a écrit:(...) je ne sais toujours pas pourquoi la routine waitkey empêche le rafraichissement de l'écran quand le programme est fini :(

Qu'entends-tu par là ?.. C'est-à-dire que tu ne vois pas du tout le damier ?..
Ta routine WaitKey me paraît un peu courte.
N'oublies pas qu'il faut tout d'abord scruter le clavier dans l'attente que plus aucune touche ne soit pressée :idea:
Je pense que ta routine WaitKey prends en compte la touche [enter] que tu viens à l'instant de presser pour lancer l'exécution de ton programme ;) Voilà pourquoi tout cela se passe en un éclair :)

Pour en savoir plus, tu peux jeter un oeil sur ma routine WaitKey ;)
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++ » 10 Aoû 2017, 17:58

Bah, j'ai repris cette routine de ton programme bpp24 ;)
Si, mais après le damier, lorsque l'on appuie sur une touche, j'appelle une routine qui efface l'écran, mais l'écran reste blanc, comme si la calculatrice oubliait de recharger l'explorateur de fichier :(
Et sinon, que fait la commande ADR et comment marche-t-elle?
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 » 10 Aoû 2017, 18:14

ADR te permets d'affecter l'adresse d'une zone-mémoire dans un registre.
Par exemple...
Code: Tout sélectionner
adr         r0,V900e0010     ; r0 = adresse où "pointe" le label/étiquette V900e0010
ldr          r0,[r0]            ; mets dans r0 la valeur 32bits contenue à l'adresse r0

(...)

V900e0010 dcd        0x900e0010   



à part ça, regarde bien en lignes 2 & 12 ... T'as pas préservé les registres :p
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++ » 10 Aoû 2017, 19:00

Ok, merci.
Donc mon but pour ma routine d'affichage de sprite, je défini un sprite de façon suivante:
Code: Tout sélectionner
nomdusprite ;label
    dcd 8, 8 ;les deux premiers 32 bits sont la longueur et la largeur du sprite
    dcd 0,1,1,1,1,1,1,0 ;ici 1 et 0 sont des valeurs symboliques que l'on pourrait remplacer par 0b1111100000000000 et par 0b0000000000011111
    dcd 1,0,0,0,0,0,0,1 ;0b1111100000000000 serait donc du rouge pour le 1 et 0b0000000000011111 du bleu pour le 0
    dcd 1,0,1,0,0,1,0,1
    dcd 1,0,1,0,0,1,0,1
    dcd 1,0,0,0,0,0,0,1
    dcd 1,0,1,1,1,1,0,1
    dcd 1,0,0,0,0,0,0,1
    dcd 0,1,1,1,1,1,1,0

Et pour la routine d'affichage il faudrait donc donner l'adresse du sprite dans donc il faudrait faire:
Code: Tout sélectionner
ADR r0,nomdusprite

C'est ça?
Et pour obtenir le deuxième 8 il me suffirait de faire:
Code: Tout sélectionner
LDR r0,[r0, #4]

Ai-je bon?
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 » 10 Aoû 2017, 21:02

C'est presque ça :p
Si je ne me trompe, ta routine tournera en mode 16bpp ( = 1 pixel codé sur 2 octets)
Il est donc conseillé d'utiliser des valeurs 16bits pour les données constituant ton sprite, donc oublie DCD , utilise DCW ;)
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

Précédente

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.
972 utilisateurs:
>960 invités
>8 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)