Start of pause rewind code.
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user