From d2db451eba9b98a9383015eb70ba73b6f2172c62 Mon Sep 17 00:00:00 2001 From: Lobsterzelda Date: Thu, 6 Oct 2022 18:28:33 -0400 Subject: [PATCH] HW/MemoryInterface: Add data to savestates and initialize on boot. --- Source/Core/Core/HW/HW.cpp | 5 +++++ Source/Core/Core/HW/MemoryInterface.cpp | 13 +++++++++++++ Source/Core/Core/HW/MemoryInterface.h | 4 +++- Source/Core/Core/State.cpp | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/HW/HW.cpp b/Source/Core/Core/HW/HW.cpp index 0cecd485c5..41a8fd40b5 100644 --- a/Source/Core/Core/HW/HW.cpp +++ b/Source/Core/Core/HW/HW.cpp @@ -19,6 +19,7 @@ #include "Core/HW/GPFifo.h" #include "Core/HW/HSP/HSP.h" #include "Core/HW/Memmap.h" +#include "Core/HW/MemoryInterface.h" #include "Core/HW/ProcessorInterface.h" #include "Core/HW/SI/SI.h" #include "Core/HW/SystemTimers.h" @@ -45,6 +46,7 @@ void Init(const Sram* override_sram) HSP::Init(); Memory::Init(); // Needs to be initialized before AddressSpace AddressSpace::Init(); + MemoryInterface::Init(); DSP::Init(Config::Get(Config::MAIN_DSP_HLE)); DVDInterface::Init(); GPFifo::Init(); @@ -68,6 +70,7 @@ void Shutdown() CPU::Shutdown(); DVDInterface::Shutdown(); DSP::Shutdown(); + MemoryInterface::Shutdown(); AddressSpace::Shutdown(); Memory::Shutdown(); HSP::Shutdown(); @@ -83,6 +86,8 @@ void DoState(PointerWrap& p) { Memory::DoState(p); p.DoMarker("Memory"); + MemoryInterface::DoState(p); + p.DoMarker("MemoryInterface"); VideoInterface::DoState(p); p.DoMarker("VideoInterface"); SerialInterface::DoState(p); diff --git a/Source/Core/Core/HW/MemoryInterface.cpp b/Source/Core/Core/HW/MemoryInterface.cpp index 8f448c56df..1d1de23184 100644 --- a/Source/Core/Core/HW/MemoryInterface.cpp +++ b/Source/Core/Core/HW/MemoryInterface.cpp @@ -4,6 +4,8 @@ #include "Core/HW/MemoryInterface.h" #include +#include +#include #include "Common/BitField.h" #include "Common/ChunkFile.h" @@ -135,6 +137,17 @@ struct MIMemStruct // STATE_TO_SAVE static MIMemStruct g_mi_mem; +void Init() +{ + static_assert(std::is_trivially_copyable_v); + std::memset(&g_mi_mem, 0, sizeof(MIMemStruct)); +} + +void Shutdown() +{ + Init(); +} + void DoState(PointerWrap& p) { p.Do(g_mi_mem); diff --git a/Source/Core/Core/HW/MemoryInterface.h b/Source/Core/Core/HW/MemoryInterface.h index aeeed20ee6..3b1129a1b8 100644 --- a/Source/Core/Core/HW/MemoryInterface.h +++ b/Source/Core/Core/HW/MemoryInterface.h @@ -13,7 +13,9 @@ class PointerWrap; namespace MemoryInterface { -void DoState(PointerWrap& p); +void Init(); +void Shutdown(); +void DoState(PointerWrap& p); void RegisterMMIO(MMIO::Mapping* mmio, u32 base); } // namespace MemoryInterface diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index 314ae81ebe..1f38fe1e17 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -94,7 +94,7 @@ static size_t s_state_writes_in_queue; static std::condition_variable s_state_write_queue_is_empty; // Don't forget to increase this after doing changes on the savestate system -constexpr u32 STATE_VERSION = 150; // Last changed in PR 11124 +constexpr u32 STATE_VERSION = 151; // Last changed in PR 11125 // Maps savestate versions to Dolphin versions. // Versions after 42 don't need to be added to this list,