π
<-
Chat plein-écran
[^]

[ARM926EJ-S]Damier

Langage C, C++, et Assembleur.
En ligne

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 10 Aoû 2017, 14: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?
Je suis actuellement en Irlande, et utilise donc un clavier anglais. Merci de ne pas prendre en compte le manque d'accent


Everyone who has never made a mistake has never tried anything new.
Une personne qui n'a jamais commis d'erreur n'a jamais rien essayé de nouveau.

Albert Einstein


Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 90.7%
 
Messages: 2613
Images: 49
Inscription: 04 Juil 2014, 15:40
Localisation: Valence 26
Genre: Homme
Calculatrice(s):
Classe: 1°S-SVT

Re: [ARM926EJ-S]Damier

Message non lude grosged » 10 Aoû 2017, 18: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
grosgedProg.
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 30.5%
 
Messages: 515
Images: 26
Inscription: 14 Sep 2011, 13:29
Genre: Homme
Calculatrice(s):
Classe: jadis

En ligne

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 10 Aoû 2017, 18: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?
Je suis actuellement en Irlande, et utilise donc un clavier anglais. Merci de ne pas prendre en compte le manque d'accent


Everyone who has never made a mistake has never tried anything new.
Une personne qui n'a jamais commis d'erreur n'a jamais rien essayé de nouveau.

Albert Einstein


Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 90.7%
 
Messages: 2613
Images: 49
Inscription: 04 Juil 2014, 15:40
Localisation: Valence 26
Genre: Homme
Calculatrice(s):
Classe: 1°S-SVT

Re: [ARM926EJ-S]Damier

Message non lude grosged » 10 Aoû 2017, 19: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
grosgedProg.
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 30.5%
 
Messages: 515
Images: 26
Inscription: 14 Sep 2011, 13:29
Genre: Homme
Calculatrice(s):
Classe: jadis

En ligne

Re: [ARM926EJ-S]Damier

Message non lude Ti64CLi++ » 10 Aoû 2017, 20: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?
Je suis actuellement en Irlande, et utilise donc un clavier anglais. Merci de ne pas prendre en compte le manque d'accent


Everyone who has never made a mistake has never tried anything new.
Une personne qui n'a jamais commis d'erreur n'a jamais rien essayé de nouveau.

Albert Einstein


Image
Avatar de l’utilisateur
Ti64CLi++Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 90.7%
 
Messages: 2613
Images: 49
Inscription: 04 Juil 2014, 15:40
Localisation: Valence 26
Genre: Homme
Calculatrice(s):
Classe: 1°S-SVT

Re: [ARM926EJ-S]Damier

Message non lude grosged » 10 Aoû 2017, 22: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
grosgedProg.
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 30.5%
 
Messages: 515
Images: 26
Inscription: 14 Sep 2011, 13:29
Genre: Homme
Calculatrice(s):
Classe: jadis

Précédente

Retourner vers Programmation native: Ndless & Linux

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Concours
Galactik, concours universel de rentrée 2017 : 1 défi, 4 constructeurs, 1400€ de lots !
-
Rechercher
-
Sujets à la une
Galactik, concours universel de rentrée 2017 : 1 défi, 4 constructeurs, 1400€ de lots !
"NumWorks++": Challenge de modification matérielle pour rajouter une puce de mémoire Flash !
Offre TI-Planet/Jarrety pour avoir la TI-83 Premium CE avec son chargeur pour 79,79€ port inclus !
Offre TI-Planet/Jarrety pour avoir la TI-Nspire CX CAS à seulement 130€ TTC port inclus!
Jailbreake ta TI-Nspire avec Ndless et profite des meilleurs jeux et applications !
Transforme ta TI-Nspire CX en console Game Boy Advance!
123456
-
Donations/Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
PayPal : paiement en ligne sécurisé - secure online payments
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 
-
Stats.
247 utilisateurs:
>233 invités
>9 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)