Start of pause rewind code.

This commit is contained in:
n-a-c-h
2005-05-13 15:30:35 +00:00
parent 3099ada6d4
commit ba0827c482

View File

@@ -212,6 +212,13 @@ extern unsigned char MovieProcessing;
void zmv_rewind_save(size_t, bool); void zmv_rewind_save(size_t, bool);
void zmv_rewind_load(size_t, bool); void zmv_rewind_load(size_t, bool);
void ClearCacheCheck()
{
memset(vidmemch2, 1, sizeof(vidmemch2));
memset(vidmemch4, 1, sizeof(vidmemch4));
memset(vidmemch8, 1, sizeof(vidmemch8));
}
#define ActualRewindFrames (RewindFrames * (romispal ? 10 : 12)) #define ActualRewindFrames (RewindFrames * (romispal ? 10 : 12))
void BackupCVFrame() void BackupCVFrame()
@@ -267,16 +274,34 @@ void RestoreCVFrame()
copy_state_data(RewindBufferPos, memcpyrinc, csm_load_rewind); copy_state_data(RewindBufferPos, memcpyrinc, csm_load_rewind);
//Clear Cache Check ClearCacheCheck();
memset(vidmemch2, 1, sizeof(vidmemch2));
memset(vidmemch4, 1, sizeof(vidmemch4));
memset(vidmemch8, 1, sizeof(vidmemch8));
RewindTimer = ActualRewindFrames; RewindTimer = ActualRewindFrames;
} }
//Code to handle special frames for pausing, and desync checking
unsigned char *SpecialPauseBackup = 0;
void *doMemAlloc(size_t);
void BackupPauseFrame()
{
copy_state_data(SpecialPauseBackup, memcpyinc, csm_save_rewind);
}
void RestorePauseFrame()
{
copy_state_data(SpecialPauseBackup, memcpyrinc, csm_load_rewind);
ClearCacheCheck();
}
void SetupRewindBuffer() void SetupRewindBuffer()
{ {
//For special rewind case to help out pauses
if (SpecialPauseBackup){ free(SpecialPauseBackup); }
SpecialPauseBackup = doMemAlloc(rewind_state_size);
//For standard rewinds
if (StateBackup){ free(StateBackup); } if (StateBackup){ free(StateBackup); }
for (; RewindStates; RewindStates--) for (; RewindStates; RewindStates--)
{ {
@@ -308,7 +333,7 @@ void InitRewindVars()
RewindTimer = 1; RewindTimer = 1;
} }
//This is used to preserve system load state between loads //This is used to preserve system load state between game loads
static unsigned char *BackupSystemBuffer = 0; static unsigned char *BackupSystemBuffer = 0;
void BackupSystemVars() void BackupSystemVars()
@@ -317,7 +342,6 @@ void BackupSystemVars()
if (!BackupSystemBuffer) if (!BackupSystemBuffer)
{ {
void *doMemAlloc(size_t);
state_size = 0; state_size = 0;
copy_snes_data(&buffer, state_size_tally); copy_snes_data(&buffer, state_size_tally);
copy_spc_data(&buffer, state_size_tally); copy_spc_data(&buffer, state_size_tally);
@@ -701,9 +725,7 @@ bool zst_load(FILE *fp, size_t Compressed)
} }
//Clear cache check if state loaded //Clear cache check if state loaded
memset(vidmemch2, 1, sizeof(vidmemch2)); ClearCacheCheck();
memset(vidmemch4, 1, sizeof(vidmemch4));
memset(vidmemch8, 1, sizeof(vidmemch8));
if (zst_version < 143) //Set new vars which old states did not have if (zst_version < 143) //Set new vars which old states did not have
{ {