Fermer2
dionoeaLe 22/01/2004 à 18:16
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...