j'essaye d'écrire directement dans la mémoire flash de la calculatrice mais je me prends plein de "Address Error" dans la figure. Ils ont lieu au niveau du premier EM_write.
J'ai essayé en écrivant les headers à partir de flash_fp au lieu de flash_fp - 22 mais ça change rien.
voici le code que j'utilise:
char save_game_to_flash(void){
unsigned long game_size = get_game_size();//get file size
void *flash_fp;
//unsigned long offset;
char c;
char *str;
clrscr();
printf("\n\nwriting to flash\nEXPERIMENTAL\npress ENTER to proceed\n");
if(ngetchx()!=KEY_ENTER) return 0;
flash_fp = EM_findEmptySlot(game_size);
if(flash_fp == NULL){
EM_GC(FALSE); //garbadge collect without confirmation dialog
if(flash_fp == NULL){
return 0;//FAILURE
}
}
str = (char *)malloc(9 * sizeof(char));
c = -32;
EM_write(&c, flash_fp - 22, sizeof(char));
sprintf(str,"main%c",0);
EM_write(str, flash_fp + FLASH_HEADER_SIZE - 21, 8*sizeof(char));
sprintf(str,"filename%c",0);
EM_write(str, flash_fp + FLASH_HEADER_SIZE - 13, 8*sizeof(char));
c = 0;
EM_write(&c, flash_fp + FLASH_HEADER_SIZE - 5, sizeof(char));
game_size = (unsigned long)1<<31 | (game_size + 1);
EM_write(&game_size, flash_fp + FLASH_HEADER_SIZE - 1, sizeof(unsigned long));
game_size = get_game_size(); //restore value
//do your stuff
free(str);
return 1;
}
si quelqu'un a une idée...