diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-06-12 17:56:09 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-12 23:56:09 +0200 |
commit | 391ad8c95e9b942ff39705f2c3cd5359aef633b3 (patch) | |
tree | 7718e0b201ebddf66ec1ca74f0866fe9adbeb32c /src/NDS.cpp | |
parent | ca7fb4f55e8fdad53993ba279b073f97f453c13c (diff) |
Implement in-memory savestates (#1693)
* Refactor Savestate::Var{8,16,32,64}
- They now delegate to VarArray
- They're declared in the class header so they're likely to be inlined
* First crack at refactoring Savestate to work in-memory
- Well, third, but who's counting?
* Implement Savestate::Finish
* Remove the VersionMajor and VersionMinor fields
- Instead, pull their values directly from the savestate buffer
* Mark a new constructor as explicit
* Rename Reset to Rewind
* Fix a linebreak
* Implement Savestate::Rewind
* Add ROMManager::ClearBackupState
* Refactor ROMManager to use the refactored Savestate
* Capitalize "Least"
- It was driving me nuts
* Add a log call
* Increase default Savestate buffer length to 32MB
* Use C-style file I/O instead of C++-style
- Dumping bytes to a file with C++'s standard library is a MONSTROUS PAIN IN THE ASS
* Quote the savestate's file path for clarity
* Write the savestate's length into the header
* Add some extra logging calls
* Fix section-loading
* Remove the deprecated Savestate constructor
* Convert a char* to a u32 with memcpy, not a cast
* Fix section-handling in loads
* Include <cstring> in Savestate.h
- This was causing a build error on Linux
Diffstat (limited to 'src/NDS.cpp')
-rw-r--r-- | src/NDS.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/NDS.cpp b/src/NDS.cpp index b5c00db..e37a194 100644 --- a/src/NDS.cpp +++ b/src/NDS.cpp @@ -815,7 +815,10 @@ bool DoSavestate(Savestate* file) u32 console; file->Var32(&console); if (console != ConsoleType) + { + Log(LogLevel::Error, "savestate: Expected console type %d, got console type %d. cannot load.\n", ConsoleType, console); return false; + } } file->VarArray(MainRAM, MainRAMMaxSize); @@ -870,7 +873,11 @@ bool DoSavestate(Savestate* file) file->VarArray(DMA9Fill, 4*sizeof(u32)); - if (!DoSavestate_Scheduler(file)) return false; + if (!DoSavestate_Scheduler(file)) + { + Platform::Log(Platform::LogLevel::Error, "savestate: failed to %s scheduler state\n", file->Saving ? "save" : "load"); + return false; + } file->Var32(&SchedListMask); file->Var64(&ARM9Timestamp); file->Var64(&ARM9Target); @@ -937,6 +944,8 @@ bool DoSavestate(Savestate* file) } #endif + file->Finish(); + return true; } |