Bonjour,
Bon je me décide à demander de l'aide auprès de la communauté car je suis confronté à un problème dont je ne voit pas la dénouement
Je suis entrain de coder un interpréteur de chip-8 en C sous linux (gcc).
Dans mon kernel, j'interprete donc les opcode et j'ai fait ceci :
Lorsqu'il interprete l'opcode 0xF065, là ca devient vraiment bizarre. Normalement il devrait regarder ce qu'il y a dans le registre V0, ici il vaut 0x40 et boucler donc 0x40 fois...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 inline void kernel(unsigned char *memoire, unsigned char *registre, unsigned short *PC, SDL_Surface* memoire_video, unsigned char *SP, unsigned short *stack, unsigned int *I, unsigned char *etat_touches, unsigned char *delay, unsigned char *sound) { #define x (opcode&0xF00)>>8 #define y (opcode&0xF0)>>4 #define nnn (opcode&0xFFF) #define kk (opcode&0xFF) #define n (opcode&0xF) #define Vx *(registre+x) #define Vy *(registre+(y)) #define Vf *(registre+0xF) [....] case 0x65: printf("memoire : %#X, *I= %#X , i = %#X, Vx = %#X\n",memoire,*I,i,Vx); for(i=0; i<(unsigned char)(Vx); i++) { printf("i=%#X\n",i); *(registre+i) = *(memoire+*I+i);} #ifdef __DEBUGGER__ printf("De I dans V0 à V%i\n",x); #endif break; }
Or lors du debug avec le premier printf j'ai les bonnes valeurs... Lors du printf dans la boucle, celle ci s'emballe et ne s'arrete qu'a 0xA7 !!
J'avoue que je ne comprend pas.
Quelqu'un a t'il une piste? ??![]()
Partager