Pause for rewind and state load now work correctly.

This commit is contained in:
n-a-c-h
2005-05-15 13:24:19 +00:00
parent cb9eb9af31
commit 61046ac147
2 changed files with 44 additions and 23 deletions

View File

@@ -56,7 +56,7 @@ EXTSYM MovieSeekBehind,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
EXTSYM KeyInsrtChap,KeyNextChap,KeyPrevChap,MovieInsertChapter,MovieSeekAhead
EXTSYM ResetDuringMovie,EMUPauseKey,INCRFrameKey,MovieWaiting,NoInputRead
EXTSYM AllocatedRewindStates,SlowDownLock,FastForwardLock
EXTSYM PauseFrameMode,RestorePauseFrame
EXTSYM PauseFrameMode,RestorePauseFrame,BackupPauseFrame
%ifdef __MSDOS__
EXTSYM dssel
@@ -98,6 +98,13 @@ NEWSYM ProcessRewind
call RestoreCVFrame
popad
cmp byte[PauseFrameMode],1
jne .notpauserewind
pushad
call BackupPauseFrame
popad
.notpauserewind
mov esi,[tempesi]
mov edi,[tempedi]
mov ebp,[tempebp]
@@ -1426,12 +1433,16 @@ NEWSYM cpuover
.noinputread
;Pause and Frame increment
cmp byte[PauseFrameMode],2
jne .nopauseframemode2
cmp byte[PauseFrameMode],3
jne .nopauseframemode3
pushad
call RestorePauseFrame
popad
.nopauseframemode2
mov esi,[tempesi]
mov edi,[tempedi]
mov ebp,[tempebp]
mov edx,[tempedx]
.nopauseframemode3
cmp byte[EMUPause],1
jne .noemupause
@@ -1439,14 +1450,25 @@ NEWSYM cpuover
; prevents some random desyncs
mov byte[SlowDownLock],0
mov byte[FastForwardLock],0
call ProcessRewind
cmp byte[PauseFrameMode],1
jne .nopauseframemode1
mov byte[PauseFrameMode],2
jmp .noprocmovie
mov [tempedx],edx
mov [tempesi],esi
mov [tempedi],edi
mov [tempebp],ebp
pushad
call BackupPauseFrame
popad
.nopauseframemode1
call ProcessRewind
cmp byte[PauseFrameMode],2
jne .nopauseframemode2
mov byte[PauseFrameMode],3
jmp .noprocmovie
.nopauseframemode2
cmp byte[INCRFrame],1
jne .noframeincr

View File

@@ -225,8 +225,9 @@ unsigned char *SpecialPauseBackup = 0, PauseFrameMode = 0;
Pause frame modes
0 - no pause frame stored
1 - pause frame stored
2 - pause frame ready for reload
1 - pause frame ready to be stored
2 - pause frame stored
3 - pause frame ready for reload
*/
void *doMemAlloc(size_t);
@@ -234,7 +235,7 @@ void *doMemAlloc(size_t);
void BackupPauseFrame()
{
copy_state_data(SpecialPauseBackup, memcpyinc, csm_save_rewind);
PauseFrameMode = 1;
PauseFrameMode = 2;
}
void RestorePauseFrame()
@@ -295,16 +296,14 @@ void RestoreCVFrame()
zmv_rewind_load(LatestRewindPos, true);
}
EMUPause = PauseRewind;
if (PauseRewind)
{
PauseFrameMode = EMUPause = true;
}
}
copy_state_data(RewindBufferPos, memcpyrinc, csm_load_rewind);
if (EMUPause)
{
BackupPauseFrame();
}
ClearCacheCheck();
RewindTimer = ActualRewindFrames;
@@ -859,10 +858,10 @@ void stateloader (unsigned char *statename, unsigned char keycheck, unsigned cha
Msgptr = "RR STATE LOADED.";
MessageOn = MsgCount;
if ((EMUPause = PauseLoad)) //Yes this if supposed to have a single equal
if (PauseRewind)
{
BackupPauseFrame();
}
PauseFrameMode = EMUPause = true;
}
}
return;
case 2:
@@ -885,9 +884,9 @@ void stateloader (unsigned char *statename, unsigned char keycheck, unsigned cha
{
Msgptr = txtloadmsg; // 'STATE X LOADED.'
if ((EMUPause = PauseLoad)) //Yes this if supposed to have a single equal
if (PauseRewind)
{
BackupPauseFrame();
PauseFrameMode = EMUPause = true;
}
}
else