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

View File

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