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 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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user