mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-28 12:11:50 +01:00
- moved savestate compression/decompression out of emulator core (continuing)
This commit is contained in:
parent
d66d747d98
commit
a77ee50ecd
@ -235,7 +235,7 @@ int slot_delete(int slot, int device)
|
|||||||
int slot_load(int slot, int device)
|
int slot_load(int slot, int device)
|
||||||
{
|
{
|
||||||
char filename[MAXPATHLEN];
|
char filename[MAXPATHLEN];
|
||||||
int filesize, done = 0;
|
unsigned long filesize, done = 0;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
u8 *savebuffer;
|
u8 *savebuffer;
|
||||||
|
|
||||||
@ -345,7 +345,9 @@ int slot_load(int slot, int device)
|
|||||||
/* Retrieve file size */
|
/* Retrieve file size */
|
||||||
filesize = CardFile.len;
|
filesize = CardFile.len;
|
||||||
if (filesize % SectorSize)
|
if (filesize % SectorSize)
|
||||||
filesize = ((filesize / SectorSize) + 1) * SectorSize;
|
{
|
||||||
|
filesize = ((filesize / SectorSize) + 1) * SectorSize;
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate buffer */
|
/* Allocate buffer */
|
||||||
savebuffer = (u8 *)memalign(32,filesize);
|
savebuffer = (u8 *)memalign(32,filesize);
|
||||||
@ -372,13 +374,28 @@ int slot_load(int slot, int device)
|
|||||||
|
|
||||||
if (slot > 0)
|
if (slot > 0)
|
||||||
{
|
{
|
||||||
/* Load state */
|
/* Uncompress state buffer */
|
||||||
if (state_load(&savebuffer[offset]) <= 0)
|
u8 *state = (u8 *)memalign(32, STATE_SIZE);
|
||||||
|
if (!state)
|
||||||
{
|
{
|
||||||
|
free(savebuffer);
|
||||||
|
GUI_WaitPrompt("Error","Unable to allocate memory !");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
done = STATE_SIZE;
|
||||||
|
memcpy(&filesize, savebuffer + offset, 4);
|
||||||
|
uncompress ((Bytef *)state, &done, (Bytef *)(savebuffer + offset + 4), filesize);
|
||||||
|
|
||||||
|
/* Load state */
|
||||||
|
if (state_load(state) <= 0)
|
||||||
|
{
|
||||||
|
free(state);
|
||||||
free(savebuffer);
|
free(savebuffer);
|
||||||
GUI_WaitPrompt("Error","Invalid state file !");
|
GUI_WaitPrompt("Error","Invalid state file !");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(state);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -396,22 +413,32 @@ int slot_load(int slot, int device)
|
|||||||
int slot_save(int slot, int device)
|
int slot_save(int slot, int device)
|
||||||
{
|
{
|
||||||
char filename[MAXPATHLEN];
|
char filename[MAXPATHLEN];
|
||||||
int filesize, done = 0;
|
unsigned long filesize, done = 0;
|
||||||
int offset = device ? 2112 : 0;
|
int offset = device ? 2112 : 0;
|
||||||
u8 *savebuffer;
|
u8 *savebuffer;
|
||||||
|
|
||||||
if (slot > 0)
|
if (slot > 0)
|
||||||
{
|
{
|
||||||
/* allocate buffer */
|
/* allocate buffers */
|
||||||
savebuffer = (u8 *)memalign(32,STATE_SIZE);
|
savebuffer = (u8 *)memalign(32,STATE_SIZE);
|
||||||
if (!savebuffer)
|
u8 *state = (u8 *)memalign(32,STATE_SIZE);
|
||||||
|
if (!savebuffer || !state)
|
||||||
{
|
{
|
||||||
GUI_WaitPrompt("Error","Unable to allocate memory !");
|
GUI_WaitPrompt("Error","Unable to allocate memory !");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* save state */
|
||||||
GUI_MsgBoxOpen("Information","Saving State ...",1);
|
GUI_MsgBoxOpen("Information","Saving State ...",1);
|
||||||
filesize = state_save(&savebuffer[offset]);
|
done = state_save(state);
|
||||||
|
|
||||||
|
/* compress state file */
|
||||||
|
filesize = STATE_SIZE;
|
||||||
|
compress2 ((Bytef *)(savebuffer + offset + 4), &filesize, (Bytef *)state, done, 9);
|
||||||
|
memcpy(savebuffer + offset, &filesize, 4);
|
||||||
|
filesize += 4;
|
||||||
|
done = 0;
|
||||||
|
free(state);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -510,7 +537,9 @@ int slot_save(int slot, int device)
|
|||||||
/* Adjust file size */
|
/* Adjust file size */
|
||||||
filesize += 2112;
|
filesize += 2112;
|
||||||
if (filesize % SectorSize)
|
if (filesize % SectorSize)
|
||||||
|
{
|
||||||
filesize = ((filesize / SectorSize) + 1) * SectorSize;
|
filesize = ((filesize / SectorSize) + 1) * SectorSize;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if file already exists */
|
/* Check if file already exists */
|
||||||
card_file CardFile;
|
card_file CardFile;
|
||||||
|
Loading…
Reference in New Issue
Block a user