diff options
| author | LillyJadeKatrin <lilly.kitty.1988@gmail.com> | 2024-03-14 19:08:01 -0400 |
|---|---|---|
| committer | LillyJadeKatrin <lilly.kitty.1988@gmail.com> | 2024-05-01 06:43:18 -0400 |
| commit | 4ec662bcdfd9bcdeb1481f6e2634f5ddbbc6192b (patch) | |
| tree | c2fb085a63bb7f2a722205ac6b91bfa76834332c /Source/Core | |
| parent | 05136ee099a3384e1a0783cf7a7fd588a22f1e32 (diff) | |
Add rc_client MemoryPeekerV2 to AchievementManager
Has a more traditional read-x-bytes structure; for passing into rc_client in the constructor.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/AchievementManager.cpp | 17 | ||||
| -rw-r--r-- | Source/Core/Core/AchievementManager.h | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index c0f45d3c21..86f65a716a 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -1749,4 +1749,21 @@ void AchievementManager::RequestV2(const rc_api_request_t* request, }); } +u32 AchievementManager::MemoryPeekerV2(u32 address, u8* buffer, u32 num_bytes, rc_client_t* client) +{ + if (buffer == nullptr) + return 0u; + auto& system = Core::System::GetInstance(); + Core::CPUThreadGuard threadguard(system); + for (u32 num_read = 0; num_read < num_bytes; num_read++) + { + auto value = system.GetMMU().HostTryReadU8(threadguard, address + num_read, + PowerPC::RequestedAddressSpace::Physical); + if (!value.has_value()) + return num_read; + buffer[num_read] = value.value().value; + } + return num_bytes; +} + #endif // USE_RETRO_ACHIEVEMENTS diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 81ffd44be6..4429b07bff 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -204,8 +204,10 @@ private: const std::function<int(rc_api_request_t*, const RcRequest*)>& init_request, const std::function<int(RcResponse*, const char*)>& process_response); ResponseType RequestImage(rc_api_fetch_image_request_t rc_request, Badge* rc_response); + static void RequestV2(const rc_api_request_t* request, rc_client_server_callback_t callback, void* callback_data, rc_client_t* client); + static u32 MemoryPeekerV2(u32 address, u8* buffer, u32 num_bytes, rc_client_t* client); rc_runtime_t m_runtime{}; Core::System* m_system{}; |
