diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp index 4ad47757f8..43d145f75e 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.cpp @@ -3,6 +3,7 @@ #include "Core/HW/DSPHLE/UCodes/CARD.h" +#include "Common/ChunkFile.h" #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" #include "Core/HW/DSP.h" @@ -44,4 +45,10 @@ void CARDUCode::HandleMail(u32 mail) m_mail_handler.PushMail(DSP_DONE); m_dsphle->SetUCode(UCODE_ROM); } + +void CARDUCode::DoState(PointerWrap& p) +{ + DoStateShared(p); + p.Do(m_state); +} } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.h b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.h index 4a071c4e29..f1790b98d4 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/CARD.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/CARD.h @@ -18,5 +18,17 @@ public: void Initialize() override; void HandleMail(u32 mail) override; void Update() override; + void DoState(PointerWrap& p) override; + +private: + enum class State + { + WaitingForRequest, + WaitingForAddress, + WaitingForNextTask, + }; + + // Currently unused, will be used in a later version + State m_state = State::WaitingForRequest; }; } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp index 767aeda2ba..6c1a46cadc 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.cpp @@ -4,6 +4,7 @@ #include "Core/HW/DSPHLE/UCodes/GBA.h" #include "Common/Align.h" +#include "Common/ChunkFile.h" #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" #include "Core/HW/DSP.h" @@ -142,4 +143,10 @@ void GBAUCode::HandleMail(u32 mail) } } } + +void GBAUCode::DoState(PointerWrap& p) +{ + DoStateShared(p); + p.Do(m_mail_state); +} } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.h b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.h index 842797ad72..a2cf96869a 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/GBA.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/GBA.h @@ -23,6 +23,7 @@ public: void Initialize() override; void HandleMail(u32 mail) override; void Update() override; + void DoState(PointerWrap& p) override; private: static constexpr u32 REQUEST_MAIL = 0xabba0000; diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/INIT.cpp b/Source/Core/Core/HW/DSPHLE/UCodes/INIT.cpp index 7869460bc1..cf5204df1c 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/INIT.cpp +++ b/Source/Core/Core/HW/DSPHLE/UCodes/INIT.cpp @@ -28,4 +28,9 @@ void INITUCode::Update() void INITUCode::HandleMail(u32 mail) { } + +void INITUCode::DoState(PointerWrap& p) +{ + // We don't need to call DoStateShared() as the init uCode doesn't support launching new uCode +} } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/INIT.h b/Source/Core/Core/HW/DSPHLE/UCodes/INIT.h index 9ea8a4174e..fb1bd7860d 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/INIT.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/INIT.h @@ -18,5 +18,6 @@ public: void Initialize() override; void HandleMail(u32 mail) override; void Update() override; + void DoState(PointerWrap& p) override; }; } // namespace DSP::HLE diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.h b/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.h index 408c1e1239..029713ca60 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/UCodes.h @@ -46,7 +46,7 @@ public: virtual void HandleMail(u32 mail) = 0; virtual void Update() = 0; - virtual void DoState(PointerWrap& p) { DoStateShared(p); } + virtual void DoState(PointerWrap& p) = 0; static u32 GetCRC(UCodeInterface* ucode) { return ucode ? ucode->m_crc : UCODE_NULL; } protected: diff --git a/Source/Core/Core/State.cpp b/Source/Core/Core/State.cpp index c7c2aee8dd..d4abf52bcd 100644 --- a/Source/Core/Core/State.cpp +++ b/Source/Core/Core/State.cpp @@ -74,7 +74,7 @@ static std::recursive_mutex g_save_thread_mutex; static std::thread g_save_thread; // Don't forget to increase this after doing changes on the savestate system -constexpr u32 STATE_VERSION = 147; // Last changed in PR 10935 +constexpr u32 STATE_VERSION = 148; // Last changed in PR 10768 // Maps savestate versions to Dolphin versions. // Versions after 42 don't need to be added to this list,