π
<-

[ARM926EJ-S]Damier

C, C++, ASM...

Re: [ARM926EJ-S]Damier

Unread postby Ti64CLi++ » 10 Aug 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: Select all
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
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.5%
 
Posts: 3446
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Unread postby grosged » 10 Aug 2017, 17:05

Ti64CLi++ wrote:(...) 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 ;)
User avatar
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 30.2%
 
Posts: 770
Images: 75
Joined: 14 Sep 2011, 12:29
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: [ARM926EJ-S]Damier

Unread postby Ti64CLi++ » 10 Aug 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
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.5%
 
Posts: 3446
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Unread postby grosged » 10 Aug 2017, 18:14

ADR te permets d'affecter l'adresse d'une zone-mémoire dans un registre.
Par exemple...
Code: Select all
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
User avatar
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 30.2%
 
Posts: 770
Images: 75
Joined: 14 Sep 2011, 12:29
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: [ARM926EJ-S]Damier

Unread postby Ti64CLi++ » 10 Aug 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: Select all
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: Select all
ADR r0,nomdusprite

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

Ai-je bon?
Image
User avatar
Ti64CLi++Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 32.5%
 
Posts: 3446
Images: 75
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENS Rennes
GitHub: Ti64CLi

Re: [ARM926EJ-S]Damier

Unread postby grosged » 10 Aug 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 ;)
User avatar
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 30.2%
 
Posts: 770
Images: 75
Joined: 14 Sep 2011, 12:29
Gender: Not specified
Calculator(s):
MyCalcs profile

Previous

Return to Native: Ndless, Linux, ...

Who is online

Users browsing this forum: ClaudeBot [spider] and 11 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1500 utilisateurs:
>1483 invités
>10 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)