mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-06-27 17:39:34 -06:00
Merge pull request #13631 from LillyJadeKatrin/retroachievements-mem2
AchievementManager: MEM2 Support
This commit is contained in:
@ -329,10 +329,11 @@ void AchievementManager::DoFrame()
|
||||
if (!system)
|
||||
return;
|
||||
Core::CPUThreadGuard thread_guard(*system);
|
||||
u32 ram_size = system->GetMemory().GetRamSizeReal();
|
||||
if (m_cloned_memory.size() != ram_size)
|
||||
m_cloned_memory.resize(ram_size);
|
||||
system->GetMemory().CopyFromEmu(m_cloned_memory.data(), 0, m_cloned_memory.size());
|
||||
u32 mem2_size = system->GetMemory().GetExRamSizeReal();
|
||||
if (m_cloned_memory.size() != MEM1_SIZE + mem2_size)
|
||||
m_cloned_memory.resize(MEM1_SIZE + mem2_size);
|
||||
system->GetMemory().CopyFromEmu(m_cloned_memory.data(), 0, MEM1_SIZE);
|
||||
system->GetMemory().CopyFromEmu(m_cloned_memory.data() + MEM1_SIZE, MEM2_START, mem2_size);
|
||||
}
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
std::lock_guard lg{m_lock};
|
||||
@ -1316,10 +1317,10 @@ void AchievementManager::Request(const rc_api_request_t* request,
|
||||
u32 AchievementManager::MemoryVerifier(u32 address, u8* buffer, u32 num_bytes, rc_client_t* client)
|
||||
{
|
||||
auto& system = Core::System::GetInstance();
|
||||
u32 ram_size = system.GetMemory().GetRamSizeReal();
|
||||
if (address >= ram_size)
|
||||
return 0;
|
||||
return std::min(ram_size - address, num_bytes);
|
||||
u32 mem2_size = system.GetMemory().GetExRamSizeReal();
|
||||
if (address < MEM1_SIZE + mem2_size)
|
||||
return std::min(MEM1_SIZE + mem2_size - address, num_bytes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 AchievementManager::MemoryPeeker(u32 address, u8* buffer, u32 num_bytes, rc_client_t* client)
|
||||
@ -1350,6 +1351,8 @@ u32 AchievementManager::MemoryPeeker(u32 address, u8* buffer, u32 num_bytes, rc_
|
||||
return 0;
|
||||
}
|
||||
Core::CPUThreadGuard thread_guard(system);
|
||||
if (address > MEM1_SIZE)
|
||||
address += (MEM2_START - MEM1_SIZE);
|
||||
for (u32 num_read = 0; num_read < num_bytes; num_read++)
|
||||
{
|
||||
auto value = system.GetMMU().HostTryReadU8(thread_guard, address + num_read,
|
||||
@ -1590,7 +1593,10 @@ void AchievementManager::MemoryPoker(u32 address, u8* buffer, u32 num_bytes, rc_
|
||||
return;
|
||||
Core::CPUThreadGuard thread_guard(*system);
|
||||
std::lock_guard lg{instance.m_memory_lock};
|
||||
system->GetMemory().CopyToEmu(address, buffer, num_bytes);
|
||||
if (address < MEM1_SIZE)
|
||||
system->GetMemory().CopyToEmu(address, buffer, num_bytes);
|
||||
else
|
||||
system->GetMemory().CopyToEmu(address - MEM1_SIZE + MEM2_START, buffer, num_bytes);
|
||||
std::copy(buffer, buffer + num_bytes, instance.m_cloned_memory.begin() + address);
|
||||
}
|
||||
void AchievementManager::GameTitleEstimateHandler(char* buffer, u32 buffer_size,
|
||||
|
@ -76,6 +76,9 @@ public:
|
||||
using RichPresence = std::array<char, RP_SIZE>;
|
||||
using Badge = VideoCommon::CustomTextureData::ArraySlice::Level;
|
||||
static constexpr size_t MAX_DISPLAYED_LBOARDS = 4;
|
||||
// This is hardcoded to 24MiB because rcheevos currently hardcodes it to 24MiB.
|
||||
static constexpr u32 MEM1_SIZE = 0x01800000;
|
||||
static constexpr u32 MEM2_START = 0x10000000;
|
||||
|
||||
static constexpr std::string_view DEFAULT_PLAYER_BADGE_FILENAME = "achievements_player.png";
|
||||
static constexpr std::string_view DEFAULT_GAME_BADGE_FILENAME = "achievements_game.png";
|
||||
|
Reference in New Issue
Block a user