#1126 Le 10/04/2011, à 17:44
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Mais quelle idée !
Bah j'ai pas le choix en fait... C'est un TP à faire pour demain... et je ne l'ai pas encore commencé (je rattrape la première partie...=> j'suis trop à la bourre!)
Hors ligne
#1127 Le 10/04/2011, à 21:59
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Ouep, ben pas encore finit ce pong... déjà rien que pour dessiner les formes géométriques...
Hors ligne
#1128 Le 10/04/2011, à 22:27
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Ha ça !
Je m'en rappelle encore (bon moi j'avais pas fait un jeu entier vu qu'on avait peu de cours et peu de TP d'assembleur, juste du graphique de base).
La ligne droite c'est triviale, la diagonale c'est du Bresenham (voir du Xiaolin Wu si tu fait dans l'anti-crénelage) et le cercle c'est encore du Bresenham (ou de l'Andres).
Pas des algo très complexes, mais en assembleur ça peut occuper un petit peu
Dernière modification par grim7reaper (Le 10/04/2011, à 22:27)
Hors ligne
#1129 Le 10/04/2011, à 22:33
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
ouep, pour l'instant j'au fait un rectangle rempli (coloré) et je suis en train de faire un cercle avec Bresenham
Comme je débute, je suis lent et j'over-comment.
Le rectangle:
.macro drawPixelM x y color
@body of drawPixel
stmfd sp!,{r4-r5}
mov r4, #480
mul r5,r4,\y
add r5,r5,\x ,lsl #1
add r5,r5,#0x6000000
strh \color,[r5]
ldmfd sp!,{r4-r5}
.endm
.GLOBL fillRect
fillRect:
stmfd sp!,{r0-r12,lr}
@ r0: x origin
@ r1: y origin
@ r2: width
@ r3: height
@ r4: counter 1
@ r5: counter 2
@ r6: x position
@ r7: y position
@ r8: color
@ init counters
mov r4,#0
mov r5,#0
@ load color (get it from the top of the stack)
ldr r8,[sp,#56]
@ in order to fill in a rectangle, we need to browse each row and column
@ so first iteration is the loop for the columns
Y:
add r5, r5, #1 @ counter incrementation (r5++)
@inside this loop, we have a second one to draw the lines
X:
add r4, r4, #1 @ counter incrementation (r4++)
add r6, r0, r4 @ add r0 and r4 and put it into r6 => move one to the right on the x axis
add r7, r1, r5 @ add r1 and r5 and put it into r7 => move one down on the y axis
drawPixelM r6, r7, r8 @ draw a pixel, color r10, at position (r6,r7)
cmp r4, r2 @ compare the witdh and the counter to know if we reached the end of the line
bne X @ goto X if they are different
mov r4, #0 @ re-init r4 (new line)
cmp r5, r3 @ compare height and the counter to know if we reached the end of a row
bne Y @ goto Y if they are different
ldmfd sp!,{r0-r12,pc}
Hors ligne
#1130 Le 10/04/2011, à 22:43
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Je sais pas à quel point l'assembleur que tu utilises optimise (les compilo pas trop con le font en général, les assembleurs je ne sais pas trop), mais ton code contient pas mal de dépendance RAW ce qui à tendance à pourrir le pipeline (et je ne crois pas que les ARM pratique l'OoOE donc tu ne peux pas non plus compter sur ça)…
Sinon, il me semble que
eor r4, r4, r4
est meilleur que
mov r4,#0
(j'en suis quasi‑sûr sur du CISC, sur du RISC beaucoup moins donc à voir…).
Dernière modification par grim7reaper (Le 10/04/2011, à 22:45)
Hors ligne
#1131 Le 10/04/2011, à 22:48
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Alors là, je dois te dire que je n'en sais fichtre rien.
Pour l'instant, je m'applique à avoir un résultat.Je m'occuperais des performances quand j'aurais bien compris le fonctionnement.
Hors ligne
#1132 Le 10/04/2011, à 22:50
- :!pakman
Re : /* Topic des codeurs couche-tard [4] */
Et dire qu'en C il suffit de charger un .png !
Ahlala, un peu d'assembleur et le C semble tout de suite de haut niveau j'imagine ?
Dernière modification par :!pakman (Le 10/04/2011, à 22:50)
...
Hors ligne
#1133 Le 10/04/2011, à 22:50
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
^^
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1134 Le 10/04/2011, à 22:52
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
@Rolinh : oui bien sûr, l'optimisation ne doit être faite qu'à la fin. Comme le dit ce cher Donald Knuth : « […]premature optimization is the root of all evil.[…] »
Et dire qu'en C il suffit de charger un .png !
Pas forcément, on peut aussi tracer les cercles à la main en C (mais ça reste un peu plus simple qu'en assembleur) pour diverses raisons.
Ahlala, un peu d'assembleur et le C semble tout de suite de haut niveau j'imagine ?
Oui. Comme quoi tout est relatif
Dernière modification par grim7reaper (Le 10/04/2011, à 23:06)
Hors ligne
#1135 Le 10/04/2011, à 23:05
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Ahlala, un peu d'assembleur et le C semble tout de suite de haut niveau j'imagine ?
Exact ^^
Arf, j'ai fini de coder mon cercle... mais c'est un carré...
Et pour débugger de l'assembleur, faut s'accrocher!
Hors ligne
#1136 Le 10/04/2011, à 23:20
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
FIXED
j'avais inversé deux registres. Vl'a un cercle ^^
.macro drawPixelM x y color
@body of drawPixel
stmfd sp!,{r4-r5}
mov r4, #480
mul r5,r4,\y
add r5,r5,\x ,lsl #1
add r5,r5,#0x6000000
strh \color,[r5]
ldmfd sp!,{r4-r5}
.endm
.GLOBL drawCircle
drawCircle:
stmfd sp!,{r0-r12,lr}
@ r0: x origin
@ r1: y origin
@ r2: radius
@ r3: color
@ r4: current x coordinate
@ r5: current y coordinate
@ r6: m from the Bresenham algorithm (cf wikipedia)
@ r7: x+center in x
@ r8: y + center in y
@ r10: variable used as a "buffer variable"
mov r4,#0 @ init the current x
mov r5,r2 @ set current y to the radius
mov r10,#4
mul r6,r10,r2 @ did so because we cannot do mul r6,#2,r2
mov r10,#5
sub r6,r10,r6 @ now, m is 5-4*radius
@ now that the variables are init, we start the loop
loop:
add r7,r0,r4 @ x is x + x center
add r8,r1,r5 @ y is y + y center
drawPixelM r7 r8 r3 @ draw pixel at (x,y)
drawPixelM r8 r7 r3 @ draw a pixel which is symetric
sub r7,r0,r4
add r8,r1,r5
drawPixelM r7 r8 r3
drawPixelM r8 r7 r3
add r7,r0,r4
sub r8,r1,r5
drawPixelM r7 r8 r3
drawPixelM r8 r7 r3
sub r7,r0,r4
sub r8,r1,r5
drawPixelM r7 r8 r3
drawPixelM r8 r7 r3
cmp r6,#0 @ check if m > 0
bmi negm @ goto ngem ( m < 0 )
mov r10,#1
subs r5,r5,r10 @ y = y - 1
mov r10,#8
mul r10,r10,r5 @ 8*y
subs r6,r6,r10 @ m = m - 8*y
@ case m < 0
negm:
add r4,r4, #1 @ x++
mov r10, #8
mul r10, r10, r4 @ x*8
add r6, r6, r10 @ m + 8*x
add r6, r6, #4 @ m+ 8*x + 4
cmp r4, r5
beq loop @ if x == y
bmi loop @ if x < y
ldmfd sp!,{r0-r12,pc}
Hors ligne
#1137 Le 10/04/2011, à 23:20
- tshirtman
Re : /* Topic des codeurs couche-tard [4] */
sérieusement, pourquoi ne pas coder en C et demander à gcc de faire l'asm? ^^
Hors ligne
#1138 Le 10/04/2011, à 23:21
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
sérieusement, pourquoi ne pas coder en C et demander à gcc de faire l'asm? ^^
Le pire c'est que je peux ^^
Mais l'intérêt c'est de comprendre l'assembleur, pas de faire du C...
Hors ligne
#1139 Le 11/04/2011, à 00:04
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
Bon, j'ai toutes les formes qu'il me faut pour mon pong. Reste plus qu'à animer ça. Mais là... dodo...
@plouch les codeurs
Hors ligne
#1140 Le 11/04/2011, à 00:19
- Кຼزດ
Re : /* Topic des codeurs couche-tard [4] */
c
dou
Hors ligne
#1141 Le 11/04/2011, à 00:25
- \\Ouranos//
Re : /* Topic des codeurs couche-tard [4] */
Ubuntu facile, c'est :
- Dire "Bonjour"
- Lire la doc et les règles du forum avant de poster. Savoir poser une question intelligemment.
- Mettre des balises url autour des liens et un tiret à su.
Hors ligne
#1142 Le 11/04/2011, à 00:34
- kamui57
Re : /* Topic des codeurs couche-tard [4] */
Bon, j'ai toutes les formes qu'il me faut pour mon pong. Reste plus qu'à animer ça. Mais là... dodo...
@plouch les codeurs
un pong en assembleur ? whaouh...t'as du courage.
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#1143 Le 11/04/2011, à 01:00
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#1144 Le 11/04/2011, à 01:02
- Sir Na Kraïou
Re : /* Topic des codeurs couche-tard [4] */
…
Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.
Hors ligne
#1145 Le 11/04/2011, à 02:12
- nesthib
Re : /* Topic des codeurs couche-tard [4] */
plop
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#1146 Le 11/04/2011, à 03:05
- samυncle
Re : /* Topic des codeurs couche-tard [4] */
.
Hello world
Hors ligne
#1147 Le 11/04/2011, à 07:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores totaux, depuis le début :
1) 3004 nesthib
2) 2762 samuncle
3) 2386 Pylade
4) 1936 Кຼزດ
5) 1664+5 grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
6) 1453 cm-t
7) 1058 :mad: ✰ :бешеный: ✰ :mad:
8) 855 helly
9) 816 \\Ouranos//
10) 659 gnuuat
11) 559 Lagierl
12) 506 tshirtman
13) 328 Rolinh
14) 272 The Uploader
15) 231 Kanor
16) 196 Askelon
17) 172 nathéo
18) 128 :!pakman
19) 121 ǤƦƯƝƬ
20) 93 petifrancais
21) 90 kamui57
22) 78 edge_one
22) 78 pierguiard
24) 70 gulp
25) 39 Le Rouge
26) 37 ilagas
27) 30 keny
27) 30 xapantu
29) 26 gustare
29) 26 d10g3n
31) 25 GentooUser
31) 25 Morgiver
33) 24 ไ୦บเઢ'
33) 24 Steap
35) 20 CROWD
36) 18 Ph3nix_
37) 16 kouskous
38) 15 timsy
39) 12 stratoboy
39) 12 sailing
39) 12 sakul
42) 11 alexises
42) 11 Crocoii
44) 10 Toineo
44) 10 NutMotion
44) 10 pseudovingtcinqcaracteres
44) 10 pfriedZ
44) 10 CasseTaTele
44) 10 Zeibux
50) 8 Mornagest
51) 7 Vista
52) 6 ubuntlin
52) 6 asma.geek
54) 5 tendances-tdct
54) 5 kinouchou
56) 4 danychou56
56) 4 Neros
56) 4 Biaise
56) 4 totoflute
56) 4 pinballyoda ㋛
56) 4 NLS le pingouin
56) 4 ceric
63) 3 Revan26914
64) 2 SoJaS
65) 1 geenux
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#1148 Le 11/04/2011, à 07:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores de la période en cours :
1) 84 nesthib
2) 61 samuncle
3) 55 Pylade
4) 44 Кຼزດ
5) 38 cm-t
6) 33 :mad: ✰ :бешеный: ✰ :mad:
7) 21 Rolinh
8) 18 tshirtman
9) 16 :!pakman
10) 15 The Uploader
11) 12 grim7reaper
12) 7 helly
13) 4 kamui57
13) 4 \\Ouranos//
15) 2 kouskous
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#1149 Le 11/04/2011, à 14:56
- Rolinh
Re : /* Topic des codeurs couche-tard [4] */
@ grim7reaper:
j'ai réfléchi à ce que tu as dis ici. En fait, je pense que c'est kifkif en RISC étant donné que dans tous les cas, l'instruction ne prend qu'un cycle.
Hors ligne
#1150 Le 11/04/2011, à 18:13
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Ouais c'est bien ce qu'il me semblait (c'est pour ça que j'y suis allé avec des pincettes en disant ça).
Hors ligne