From 02c0a272d1f937780060089cb52b4e219334e8ec Mon Sep 17 00:00:00 2001 From: Snesrev Date: Mon, 6 Mar 2023 23:07:49 +0100 Subject: [PATCH] The reset in replay code didn't work --- src/main.c | 2 +- src/sm_rtl.c | 9 +++++---- src/sm_rtl.h | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 95050c2..d8f1763 100644 --- a/src/main.c +++ b/src/main.c @@ -623,7 +623,7 @@ static void HandleCommand(uint32 j, bool pressed) { SDL_ShowCursor(g_cursor); break; case kKeys_Reset: - RtlReset(true); + RtlReset(1); break; case kKeys_Pause: g_paused = !g_paused; break; case kKeys_PauseDimmed: diff --git a/src/sm_rtl.c b/src/sm_rtl.c index 1907554..692ce30 100644 --- a/src/sm_rtl.c +++ b/src/sm_rtl.c @@ -151,10 +151,10 @@ void ReadFromFile(FILE *f, void *data, size_t n) { Die("fread failed\n"); } -void RtlReset(bool preserve_sram) { +void RtlReset(int mode) { snes_frame_counter = 0; snes_reset(g_snes, true); - if (!preserve_sram) + if (!(mode & 1)) memset(g_sram, 0, 0x2000); coroutine_state_0 = 1; @@ -165,7 +165,8 @@ void RtlReset(bool preserve_sram) { RtlSynchronizeWholeState(); - StateRecorder_Init(&state_recorder); + if ((mode & 2) == 0) + StateRecorder_Init(&state_recorder); } int GetFileSize(FILE *f) { @@ -216,7 +217,7 @@ void StateRecorder_Load(StateRecorder *sr, FILE *f, bool replay_mode) { LoadSnesState(&loadFunc, &state); assert(state.p == state.pend); } else { - RtlReset(false); + RtlReset(2); if (sr->base_snapshot.size == 8192) memcpy(g_sram, sr->base_snapshot.data, 8192); is_reset = true; diff --git a/src/sm_rtl.h b/src/sm_rtl.h index 061a946..d13b4c4 100644 --- a/src/sm_rtl.h +++ b/src/sm_rtl.h @@ -154,7 +154,7 @@ uint8 ReadReg(uint16 reg); typedef void RunFrameFunc(uint16 input, int run_what); typedef void SyncAllFunc(); -void RtlReset(bool preserve_sram); +void RtlReset(int mode); void RtlSetupEmuCallbacks(uint8 *emu_ram, RunFrameFunc *func, SyncAllFunc *sync_all); void RtlClearKeyLog(); void RtlStopReplay();