- Joined
- Jul 21, 2007
- Messages
- 3,388
- Solutions
- 4
- Reaction score
- 1,072
- Trophies
- 2
- Location
- somewhere
- Website
- www.google.com
- XP
- 4,597
- Country

A Quick question... Has anyone here had any experience with coding for the 3in1?
I am trying to use the following code to backup and restore the sram, but when I start the actual gba games, I am told that the saves are corrupt.
As far as I know, the games are supposed to use sram, so it shouldn't be causing a problem from that angle.
Anyone able to help?
CODEvoid writeSRAMToFile(char* filename)
{
ÂÂÂÂu8 pages = 0;
ÂÂÂÂFILE* saver = fopen(filename, "rb+");
ÂÂÂÂu8* buf = (u8*)malloc(sramBufferSize);
ÂÂÂÂint i = 0; // the setup for which page to start dumping from if it is a prototype
ÂÂÂÂ
ÂÂ pages = TOT_SRAM_PAGES;
ÂÂÂÂOpenNorWrite();
ÂÂÂÂfor (; i < pages; i ++)
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂmemset(buf, 0, sramBufferSize);
ÂÂÂÂÂÂÂÂSetRampage(i);
ÂÂÂÂÂÂÂÂReadSram(0x0A000000, buf, sramBufferSize);
ÂÂÂÂÂÂÂÂfwrite(buf, sramBufferSize, 1, saver);
ÂÂÂÂ}
ÂÂÂÂfree(buf);
ÂÂÂÂfclose(saver);
ÂÂÂÂSetRampage(0);
ÂÂÂÂCloseNorWrite();
}
void writeFileToSRAM(char* filename)
{
ÂÂÂÂFILE* saveFile = fopen(filename, "rb");
ÂÂ
ÂÂÂÂu8* saveBuf;
ÂÂÂÂsaveBuf = (u8*)malloc(sramBufferSize);
ÂÂÂÂblankSRAM((64+256)/4);
ÂÂÂÂint ret = 1;
ÂÂÂÂÂÂ
ÂÂ int i = 16;
ÂÂÂÂfor (i = getStartpage(); i < MAX_SRAM_PAGES && ret == 1; i ++)
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂmemset(saveBuf, 0, sramBufferSize);
ÂÂÂÂÂÂÂÂSetRampage(i);
ÂÂÂÂÂÂÂÂret = fread(saveBuf, sramBufferSize, 1, saveFile);
ÂÂÂÂÂÂÂÂif (ret == 1) WriteSram(0x0A000000, (u8*)saveBuf, sramBufferSize);
ÂÂÂÂ}
ÂÂÂÂfclose(saveFile);
ÂÂÂÂfree(saveBuf);
ÂÂÂÂSetRampage(0);
}
void writeSAV(void) {
ÂÂ PA_OutputText(0,0,ln,"Backing up save file.\n"); ln++;
ÂÂ
ÂÂ char* saveLocation = calloc(1, 512);
ÂÂ FILE* configFile;
ÂÂ FILE* saveTest;
ÂÂ
ÂÂ configFile = fopen("/gba.cfg", "a");
ÂÂ fclose(configFile);
ÂÂ configFile = fopen("/gba.cfg", "r");
ÂÂ fgets(saveLocation, 512, configFile);
ÂÂ fclose(configFile);
ÂÂ saveTest = fopen(saveLocation, "w");
ÂÂ if(saveTest){
ÂÂÂÂÂÂfclose(saveTest);
ÂÂÂÂÂÂwriteSRAMToFile(saveLocation);
ÂÂ }
ÂÂ
ÂÂ free(saveLocation);
ÂÂ
}
void readSAV(void) {
ÂÂ PA_OutputText(0,0,ln,"Writing save file.\n"); ln++;
ÂÂ char savename[256] = "";
ÂÂ FILE* saveConfig;
ÂÂ
ÂÂ strncpy(savename, GBA_Game, strlen(GBA_Game)-3);
ÂÂ strcat(savename, "sav");
ÂÂ PA_OutputText(0,0,ln,"copying %s", savename); ln++;
ÂÂ writeFileToSRAM(savename);ÂÂ
ÂÂ saveConfig = fopen("/gba.cfg", "wb");
ÂÂ fwrite(savename, strlen(savename), 1, saveConfig);
ÂÂ
ÂÂ fclose(saveConfig);
ÂÂ
}
I am trying to use the following code to backup and restore the sram, but when I start the actual gba games, I am told that the saves are corrupt.
As far as I know, the games are supposed to use sram, so it shouldn't be causing a problem from that angle.
Anyone able to help?
CODEvoid writeSRAMToFile(char* filename)
{
ÂÂÂÂu8 pages = 0;
ÂÂÂÂFILE* saver = fopen(filename, "rb+");
ÂÂÂÂu8* buf = (u8*)malloc(sramBufferSize);
ÂÂÂÂint i = 0; // the setup for which page to start dumping from if it is a prototype
ÂÂÂÂ
ÂÂ pages = TOT_SRAM_PAGES;
ÂÂÂÂOpenNorWrite();
ÂÂÂÂfor (; i < pages; i ++)
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂmemset(buf, 0, sramBufferSize);
ÂÂÂÂÂÂÂÂSetRampage(i);
ÂÂÂÂÂÂÂÂReadSram(0x0A000000, buf, sramBufferSize);
ÂÂÂÂÂÂÂÂfwrite(buf, sramBufferSize, 1, saver);
ÂÂÂÂ}
ÂÂÂÂfree(buf);
ÂÂÂÂfclose(saver);
ÂÂÂÂSetRampage(0);
ÂÂÂÂCloseNorWrite();
}
void writeFileToSRAM(char* filename)
{
ÂÂÂÂFILE* saveFile = fopen(filename, "rb");
ÂÂ
ÂÂÂÂu8* saveBuf;
ÂÂÂÂsaveBuf = (u8*)malloc(sramBufferSize);
ÂÂÂÂblankSRAM((64+256)/4);
ÂÂÂÂint ret = 1;
ÂÂÂÂÂÂ
ÂÂ int i = 16;
ÂÂÂÂfor (i = getStartpage(); i < MAX_SRAM_PAGES && ret == 1; i ++)
ÂÂÂÂ{
ÂÂÂÂÂÂÂÂmemset(saveBuf, 0, sramBufferSize);
ÂÂÂÂÂÂÂÂSetRampage(i);
ÂÂÂÂÂÂÂÂret = fread(saveBuf, sramBufferSize, 1, saveFile);
ÂÂÂÂÂÂÂÂif (ret == 1) WriteSram(0x0A000000, (u8*)saveBuf, sramBufferSize);
ÂÂÂÂ}
ÂÂÂÂfclose(saveFile);
ÂÂÂÂfree(saveBuf);
ÂÂÂÂSetRampage(0);
}
void writeSAV(void) {
ÂÂ PA_OutputText(0,0,ln,"Backing up save file.\n"); ln++;
ÂÂ
ÂÂ char* saveLocation = calloc(1, 512);
ÂÂ FILE* configFile;
ÂÂ FILE* saveTest;
ÂÂ
ÂÂ configFile = fopen("/gba.cfg", "a");
ÂÂ fclose(configFile);
ÂÂ configFile = fopen("/gba.cfg", "r");
ÂÂ fgets(saveLocation, 512, configFile);
ÂÂ fclose(configFile);
ÂÂ saveTest = fopen(saveLocation, "w");
ÂÂ if(saveTest){
ÂÂÂÂÂÂfclose(saveTest);
ÂÂÂÂÂÂwriteSRAMToFile(saveLocation);
ÂÂ }
ÂÂ
ÂÂ free(saveLocation);
ÂÂ
}
void readSAV(void) {
ÂÂ PA_OutputText(0,0,ln,"Writing save file.\n"); ln++;
ÂÂ char savename[256] = "";
ÂÂ FILE* saveConfig;
ÂÂ
ÂÂ strncpy(savename, GBA_Game, strlen(GBA_Game)-3);
ÂÂ strcat(savename, "sav");
ÂÂ PA_OutputText(0,0,ln,"copying %s", savename); ln++;
ÂÂ writeFileToSRAM(savename);ÂÂ
ÂÂ saveConfig = fopen("/gba.cfg", "wb");
ÂÂ fwrite(savename, strlen(savename), 1, saveConfig);
ÂÂ
ÂÂ fclose(saveConfig);
ÂÂ
}





