1
0
mirror of https://git.code.sf.net/p/fuse-emulator/fuse synced 2026-01-27 01:41:34 +03:00

Reset rzx_instructions_offset on rollback to fix replay of rolled back

recordings (and some refactoring).

Legacy-ID: 2669
This commit is contained in:
Philip Kendall
2006-12-17 22:00:13 +00:00
parent a1b6045e81
commit f6eab900bb
4 changed files with 63 additions and 27 deletions

View File

@@ -1481,3 +1481,5 @@
Stuart Brady)
20061217 machine.c: load rom into correct memory bank (fixes If1 ROM paging)
(Fred).
20061217 menu.c,rzx.[ch]: reset rzx_instructions_offset on rollback to fix
replay of rolled back recordings (and some refactoring).

26
menu.c
View File

@@ -97,7 +97,6 @@ MENU_CALLBACK( menu_file_recording_insertsnapshot )
MENU_CALLBACK( menu_file_recording_rollback )
{
libspectrum_snap *snap;
libspectrum_error error;
if( !rzx_recording ) return;
@@ -106,13 +105,7 @@ MENU_CALLBACK( menu_file_recording_rollback )
fuse_emulation_pause();
error = libspectrum_rzx_rollback( rzx, &snap );
if( error ) { fuse_emulation_unpause(); return; }
error = snapshot_copy_from( snap );
if( error ) { fuse_emulation_unpause(); return; }
error = libspectrum_rzx_start_input( rzx, tstates );
error = rzx_rollback();
if( error ) { fuse_emulation_unpause(); return; }
fuse_emulation_unpause();
@@ -120,9 +113,6 @@ MENU_CALLBACK( menu_file_recording_rollback )
MENU_CALLBACK( menu_file_recording_rollbackto )
{
GSList *rollback_points;
libspectrum_snap *snap;
int which;
libspectrum_error error;
if( !rzx_recording ) return;
@@ -131,19 +121,7 @@ MENU_CALLBACK( menu_file_recording_rollbackto )
fuse_emulation_pause();
rollback_points = rzx_get_rollback_list( rzx );
which = ui_get_rollback_point( rollback_points );
if( which == -1 ) { fuse_emulation_unpause(); return; }
error = libspectrum_rzx_rollback_to( rzx, &snap, which );
if( error ) { fuse_emulation_unpause(); return; }
error = snapshot_copy_from( snap );
if( error ) { fuse_emulation_unpause(); return; }
error = libspectrum_rzx_start_input( rzx, tstates );
error = rzx_rollback_to();
if( error ) { fuse_emulation_unpause(); return; }
fuse_emulation_unpause();

58
rzx.c
View File

@@ -423,8 +423,8 @@ int rzx_end( void )
return 0;
}
GSList*
rzx_get_rollback_list( libspectrum_rzx *rzx )
static GSList*
get_rollback_list( libspectrum_rzx *rzx )
{
libspectrum_rzx_iterator it;
GSList *rollback_points;
@@ -461,3 +461,57 @@ rzx_get_rollback_list( libspectrum_rzx *rzx )
return rollback_points;
}
static int
start_after_rollback( libspectrum_snap *snap )
{
int error;
error = snapshot_copy_from( snap );
if( error ) return error;
error = libspectrum_rzx_start_input( rzx, tstates );
if( error ) return error;
error = counter_reset();
if( error ) return error;
return 0;
}
int
rzx_rollback( void )
{
libspectrum_snap *snap;
int error;
error = libspectrum_rzx_rollback( rzx, &snap );
if( error ) return error;
error = start_after_rollback( snap );
if( error ) return error;
return 0;
}
int
rzx_rollback_to( void )
{
GSList *rollback_points;
libspectrum_snap *snap;
int which, error;
rollback_points = get_rollback_list( rzx );
which = ui_get_rollback_point( rollback_points );
if( which == -1 ) return 1;
error = libspectrum_rzx_rollback_to( rzx, &snap, which );
if( error ) return error;
error = start_after_rollback( snap );
if( error ) return error;
return 0;
}

4
rzx.h
View File

@@ -77,6 +77,8 @@ int rzx_store_byte( libspectrum_byte value );
int rzx_end( void );
GSList* rzx_get_rollback_list( libspectrum_rzx *rzx );
int rzx_rollback( void );
int rzx_rollback_to( void );
#endif /* #ifndef FUSE_RZX_H */