Pause for rewind and state load now work correctly.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user