further functions modified
(still needs testing)
This commit is contained in:
parent
cada1f7375
commit
c2260e7535
176
src/main.c
176
src/main.c
@ -1074,12 +1074,15 @@ sprite_t *loadPng(u8 *png_filename)
|
|||||||
|
|
||||||
void loadgbrom(display_context_t disp, u8 *buff)
|
void loadgbrom(display_context_t disp, u8 *buff)
|
||||||
{
|
{
|
||||||
FatRecord rec_tmpf;
|
FRESULT fr;
|
||||||
|
FILINFO fno;
|
||||||
|
|
||||||
if (fatFindRecord("/ED64/gblite.z64", &rec_tmpf, 0) == 0) //filename already exists?
|
fr = f_stat("/ED64/gblite.z64", &fno);
|
||||||
|
if (fr == FR_OK)
|
||||||
{
|
{
|
||||||
u8 gb_sram_file[64];
|
u8 gb_sram_file[64];
|
||||||
|
|
||||||
|
FatRecord rec_tmpf;
|
||||||
u8 resp = 0;
|
u8 resp = 0;
|
||||||
|
|
||||||
sprintf(gb_sram_file, "/ED64/%s/gblite.SRM", save_path);
|
sprintf(gb_sram_file, "/ED64/%s/gblite.SRM", save_path);
|
||||||
@ -1097,8 +1100,8 @@ void loadgbrom(display_context_t disp, u8 *buff)
|
|||||||
|
|
||||||
resp = fatWriteFile(&sram_buffer, 32768 / 512);
|
resp = fatWriteFile(&sram_buffer, 32768 / 512);
|
||||||
|
|
||||||
while (!(disp = display_lock()))
|
// while (!(disp = display_lock()))
|
||||||
;
|
// ;
|
||||||
|
|
||||||
sprintf(rom_filename, "gblite");
|
sprintf(rom_filename, "gblite");
|
||||||
gbload = 1;
|
gbload = 1;
|
||||||
@ -1257,14 +1260,16 @@ void loadggrom(display_context_t disp, u8 *rom_path) //TODO: this could be merge
|
|||||||
|
|
||||||
void rom_load_y(void)
|
void rom_load_y(void)
|
||||||
{
|
{
|
||||||
FatRecord rec_tmpf;
|
FRESULT fr;
|
||||||
|
FILINFO fno;
|
||||||
|
|
||||||
u8 gb_sram_file[64];
|
u8 gb_sram_file[64];
|
||||||
u8 gb_sram_file2[64];
|
u8 gb_sram_file2[64];
|
||||||
sprintf(gb_sram_file, "%c%c%c%c%c%c%c", 'O', 'S', '6', '4', 'P', '/', 'O');
|
sprintf(gb_sram_file, "%c%c%c%c%c%c%c", 'O', 'S', '6', '4', 'P', '/', 'O');
|
||||||
sprintf(gb_sram_file2, "%s%c%c%c%c%c%c%c%c", gb_sram_file, 'S', '6', '4', 'P', '.', 'v', '6', '4');
|
sprintf(gb_sram_file2, "%s%c%c%c%c%c%c%c%c", gb_sram_file, 'S', '6', '4', 'P', '.', 'v', '6', '4');
|
||||||
|
|
||||||
if (fatFindRecord(gb_sram_file2, &rec_tmpf, 0) == 0) //filename already exists?
|
fr = f_stat(gb_sram_file2, &fno);
|
||||||
|
if (fr == FR_OK)
|
||||||
{
|
{
|
||||||
gb_load_y = 1;
|
gb_load_y = 1;
|
||||||
}
|
}
|
||||||
@ -1535,16 +1540,26 @@ int backupSaveData(display_context_t disp)
|
|||||||
int save_format;
|
int save_format;
|
||||||
uint8_t cfg_data[512]; //TODO: this should be a strut?
|
uint8_t cfg_data[512]; //TODO: this should be a strut?
|
||||||
|
|
||||||
FatRecord rec_tmpf;
|
|
||||||
|
|
||||||
if (fatFindRecord(config_file_path, &rec_tmpf, 0) == 0) //file exists?
|
FRESULT result;
|
||||||
|
FIL file;
|
||||||
|
UINT bytesread;
|
||||||
|
result = f_open(&file, config_file_path, FA_OPEN_ALWAYS);
|
||||||
|
|
||||||
|
if (result == FR_OK)
|
||||||
{
|
{
|
||||||
printText("updating last played game record...", 3, 4, disp);
|
printText("updating last played game record...", 3, 4, disp);
|
||||||
|
|
||||||
//file to cfg_data buffer
|
int fsize = f_size(&file);
|
||||||
u8 resp = 0;
|
|
||||||
fatOpenFileByName(config_file_path, 0);
|
|
||||||
fatReadFile(&cfg_data, 1);
|
result =
|
||||||
|
f_read (
|
||||||
|
&file, /* [IN] File object */
|
||||||
|
&cfg_data, /* [OUT] Buffer to store read data */
|
||||||
|
fsize, /* [IN] Number of bytes to read */
|
||||||
|
&bytesread /* [OUT] Number of bytes read */
|
||||||
|
);
|
||||||
|
|
||||||
//split in save type and cart-id
|
//split in save type and cart-id
|
||||||
save_format = cfg_data[0];
|
save_format = cfg_data[0];
|
||||||
@ -1557,14 +1572,21 @@ int backupSaveData(display_context_t disp)
|
|||||||
//set savetype to off
|
//set savetype to off
|
||||||
cfg_data[0] = 0;
|
cfg_data[0] = 0;
|
||||||
|
|
||||||
resp = fatOpenFileByName(config_file_path, 1); //if sector is set filemode=WR writeable
|
|
||||||
|
|
||||||
TRACEF(disp, "FAT_OpenFileByName returned: %i", resp);
|
result = f_lseek(&file, 0);
|
||||||
|
|
||||||
resp = fatWriteFile(&cfg_data, 1); //filemode must be wr
|
UINT* bw;
|
||||||
|
result = f_write (
|
||||||
|
&file, /* [IN] Pointer to the file object structure */
|
||||||
|
&cfg_data, /* [IN] Pointer to the data to be written */
|
||||||
|
1, /* [IN] Number of bytes to write */ //only override the first byte!!!
|
||||||
|
bw /* [OUT] Pointer to the variable to return number of bytes written */
|
||||||
|
);
|
||||||
|
|
||||||
|
result = f_close(&file);
|
||||||
|
|
||||||
TRACE(disp, "Disabling save for subsequent system reboots");
|
TRACE(disp, "Disabling save for subsequent system reboots");
|
||||||
TRACEF(disp, "FAT_WriteFile returned: %i", resp);
|
TRACEF(disp, "FAT_WriteFile returned: %i", result);
|
||||||
|
|
||||||
volatile u8 save_config_state = 0;
|
volatile u8 save_config_state = 0;
|
||||||
evd_readReg(0);
|
evd_readReg(0);
|
||||||
@ -1578,18 +1600,19 @@ int backupSaveData(display_context_t disp)
|
|||||||
}
|
}
|
||||||
save_after_reboot = 1;
|
save_after_reboot = 1;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
result = f_close(&file);
|
||||||
TRACE(disp, "Save not required.");
|
TRACE(disp, "Save not required.");
|
||||||
printText("...ready", 3, -1, disp);
|
printText("...ready", 3, -1, disp);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
sleep(200);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else //TODO: check required! I am pretty sure it is not!
|
||||||
{
|
{
|
||||||
TRACE(disp, "No previous ROM loaded - the file 'last.crt' was not found!");
|
TRACE(disp, "No previous ROM loaded - the file 'last.crt' was not found!");
|
||||||
printText("...ready", 3, -1, disp);
|
printText("...ready", 3, -1, disp);
|
||||||
@ -1597,10 +1620,6 @@ int backupSaveData(display_context_t disp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (debug) {
|
|
||||||
// sleep(5000);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//reset with save request
|
//reset with save request
|
||||||
if (save_after_reboot)
|
if (save_after_reboot)
|
||||||
{
|
{
|
||||||
@ -1618,8 +1637,6 @@ int backupSaveData(display_context_t disp)
|
|||||||
{
|
{
|
||||||
TRACE(disp, "no reset - save request");
|
TRACE(disp, "no reset - save request");
|
||||||
printText("...done", 3, -1, disp);
|
printText("...done", 3, -1, disp);
|
||||||
|
|
||||||
sleep(300);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -1685,67 +1702,52 @@ int saveTypeToSd(display_context_t disp, char *rom_name, int stype)
|
|||||||
rom_load_y();
|
rom_load_y();
|
||||||
|
|
||||||
//after reset create new savefile
|
//after reset create new savefile
|
||||||
u8 tmp[32];
|
u8 fname[128]; //TODO: change filename buffers to 256!!!
|
||||||
u8 fname[128]; //filename buffer to small :D
|
|
||||||
u8 found = 0;
|
|
||||||
|
|
||||||
int size;
|
|
||||||
size = saveTypeToSize(stype); // int byte
|
|
||||||
|
|
||||||
TRACEF(disp, "size for save=%i", size);
|
|
||||||
|
|
||||||
sprintf(fname, "/ED64/%s/%s.%s", save_path, rom_name, saveTypeToExtension(stype, ext_type));
|
sprintf(fname, "/ED64/%s/%s.%s", save_path, rom_name, saveTypeToExtension(stype, ext_type));
|
||||||
|
|
||||||
FatRecord rec_tmpf;
|
int size = saveTypeToSize(stype); // int byte
|
||||||
found = fatFindRecord(fname, &rec_tmpf, 0);
|
TRACEF(disp, "size for save=%i", size);
|
||||||
|
|
||||||
TRACEF(disp, "found=%i", found);
|
FRESULT result;
|
||||||
|
FIL file;
|
||||||
|
UINT bytesread;
|
||||||
|
result = f_open(&file, fname, FA_OPEN_ALWAYS); //Could use FA_CREATE_ALWAYS but this could lead to the posibility of the file being emptied
|
||||||
|
|
||||||
u8 resp = 0;
|
if (result == FR_OK)
|
||||||
|
|
||||||
//FAT_ERR_NOT_EXIST 100
|
|
||||||
if (found != 0)
|
|
||||||
{
|
{
|
||||||
//create before save
|
//for savegame
|
||||||
printText("try fatCreateRecIfNotExist", 3, -1, disp);
|
uint8_t cartsave_data[size];
|
||||||
resp = fatCreateRecIfNotExist(fname, 0);
|
|
||||||
|
for (int zero = 0; zero < size; zero++) //TODO: why set all to zero when it should be already?
|
||||||
TRACEF(disp, "fatCreateRecIfNotExist returned: %i", resp); //0 means try to create
|
cartsave_data[zero] = 0;
|
||||||
}
|
|
||||||
|
TRACEF(disp, "cartsave_data=%p", &cartsave_data);
|
||||||
//open file with stype size
|
|
||||||
resp = fatOpenFileByName(fname, size / 512);
|
printText("Transfering save data...", 3, -1, disp);
|
||||||
|
if (getSaveFromCart(stype, cartsave_data))
|
||||||
TRACEF(disp, "fatOpenFileByName returned: %i", resp); //100 not exist
|
{
|
||||||
|
//write to file
|
||||||
//for savegame
|
if (gb_load_y != 1)
|
||||||
uint8_t cartsave_data[size];
|
{
|
||||||
|
UINT* bw;
|
||||||
for (int zero = 0; zero < size; zero++)
|
result = f_write (
|
||||||
cartsave_data[zero] = 0;
|
&file, /* [IN] Pointer to the file object structure */
|
||||||
|
&cartsave_data, /* [IN] Pointer to the data to be written */
|
||||||
TRACEF(disp, "cartsave_data=%p", &cartsave_data);
|
size, /* [IN] Number of bytes to write */
|
||||||
|
bw /* [OUT] Pointer to the variable to return number of bytes written */
|
||||||
//universal dumpfunction
|
);
|
||||||
//returns data from fpga/cart to save on sd
|
result = f_close(&file);
|
||||||
|
}
|
||||||
if (getSaveFromCart(stype, cartsave_data))
|
|
||||||
{
|
printText("RAM area copied to SD card.", 3, -1, disp);
|
||||||
printText("got save from fpga", 3, -1, disp);
|
return 1;
|
||||||
//write to file
|
}
|
||||||
|
else
|
||||||
if (gb_load_y != 1)
|
{
|
||||||
fatWriteFile(&cartsave_data, size / 512);
|
result = f_close(&file);
|
||||||
|
printText("Error saving game to SD", 3, -1, disp);
|
||||||
printText("reset-save done...", 3, -1, disp);
|
return 0;
|
||||||
sleep(3000);
|
}
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printText("getSaveFromCart error", 3, -1, disp);
|
|
||||||
sleep(3000);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user