HW/Memmap: Refactor Memory to class, move to Core::System.
This commit is contained in:
83 files changed
+2222
-1361
No files matched your search
@@ -19,6 +19,7 @@
|
||||
#include "Core/Core.h"
|
||||
#include "Core/HW/Memmap.h"
|
||||
#include "Core/Host.h"
|
||||
#include "Core/System.h"
|
||||
|
||||
namespace IOS::HLE
|
||||
{
|
||||
@@ -48,8 +49,10 @@ IPCReply GetVersion(const IOCtlVRequest& request)
|
||||
|
||||
const auto length = std::min(size_t(request.io_vectors[0].size), Common::GetScmDescStr().size());
|
||||
|
||||
Memory::Memset(request.io_vectors[0].address, 0, request.io_vectors[0].size);
|
||||
Memory::CopyToEmu(request.io_vectors[0].address, Common::GetScmDescStr().data(), length);
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
memory.Memset(request.io_vectors[0].address, 0, request.io_vectors[0].size);
|
||||
memory.CopyToEmu(request.io_vectors[0].address, Common::GetScmDescStr().data(), length);
|
||||
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
@@ -71,7 +74,9 @@ IPCReply GetCPUSpeed(const IOCtlVRequest& request)
|
||||
|
||||
const u32 core_clock = u32(float(SystemTimers::GetTicksPerSecond()) * oc);
|
||||
|
||||
Memory::Write_U32(core_clock, request.io_vectors[0].address);
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
memory.Write_U32(core_clock, request.io_vectors[0].address);
|
||||
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
@@ -90,7 +95,10 @@ IPCReply GetSpeedLimit(const IOCtlVRequest& request)
|
||||
}
|
||||
|
||||
const u32 speed_percent = Config::Get(Config::MAIN_EMULATION_SPEED) * 100;
|
||||
Memory::Write_U32(speed_percent, request.io_vectors[0].address);
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
memory.Write_U32(speed_percent, request.io_vectors[0].address);
|
||||
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
@@ -108,7 +116,9 @@ IPCReply SetSpeedLimit(const IOCtlVRequest& request)
|
||||
return IPCReply(IPC_EINVAL);
|
||||
}
|
||||
|
||||
const float speed = float(Memory::Read_U32(request.in_vectors[0].address)) / 100.0f;
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
const float speed = float(memory.Read_U32(request.in_vectors[0].address)) / 100.0f;
|
||||
Config::SetCurrent(Config::MAIN_EMULATION_SPEED, speed);
|
||||
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
@@ -140,8 +150,10 @@ IPCReply GetRealProductCode(const IOCtlVRequest& request)
|
||||
if (length == 0)
|
||||
return IPCReply(IPC_ENOENT);
|
||||
|
||||
Memory::Memset(request.io_vectors[0].address, 0, request.io_vectors[0].size);
|
||||
Memory::CopyToEmu(request.io_vectors[0].address, code.c_str(), length);
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
memory.Memset(request.io_vectors[0].address, 0, request.io_vectors[0].size);
|
||||
memory.CopyToEmu(request.io_vectors[0].address, code.c_str(), length);
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -153,8 +165,10 @@ IPCReply SetDiscordClient(const IOCtlVRequest& request)
|
||||
if (!request.HasNumberOfValidVectors(1, 0))
|
||||
return IPCReply(IPC_EINVAL);
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
std::string new_client_id =
|
||||
Memory::GetString(request.in_vectors[0].address, request.in_vectors[0].size);
|
||||
memory.GetString(request.in_vectors[0].address, request.in_vectors[0].size);
|
||||
|
||||
Host_UpdateDiscordClientID(new_client_id);
|
||||
|
||||
@@ -169,22 +183,24 @@ IPCReply SetDiscordPresence(const IOCtlVRequest& request)
|
||||
if (!request.HasNumberOfValidVectors(10, 0))
|
||||
return IPCReply(IPC_EINVAL);
|
||||
|
||||
std::string details =
|
||||
Memory::GetString(request.in_vectors[0].address, request.in_vectors[0].size);
|
||||
std::string state = Memory::GetString(request.in_vectors[1].address, request.in_vectors[1].size);
|
||||
std::string large_image_key =
|
||||
Memory::GetString(request.in_vectors[2].address, request.in_vectors[2].size);
|
||||
std::string large_image_text =
|
||||
Memory::GetString(request.in_vectors[3].address, request.in_vectors[3].size);
|
||||
std::string small_image_key =
|
||||
Memory::GetString(request.in_vectors[4].address, request.in_vectors[4].size);
|
||||
std::string small_image_text =
|
||||
Memory::GetString(request.in_vectors[5].address, request.in_vectors[5].size);
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
|
||||
int64_t start_timestamp = Memory::Read_U64(request.in_vectors[6].address);
|
||||
int64_t end_timestamp = Memory::Read_U64(request.in_vectors[7].address);
|
||||
int party_size = Memory::Read_U32(request.in_vectors[8].address);
|
||||
int party_max = Memory::Read_U32(request.in_vectors[9].address);
|
||||
std::string details = memory.GetString(request.in_vectors[0].address, request.in_vectors[0].size);
|
||||
std::string state = memory.GetString(request.in_vectors[1].address, request.in_vectors[1].size);
|
||||
std::string large_image_key =
|
||||
memory.GetString(request.in_vectors[2].address, request.in_vectors[2].size);
|
||||
std::string large_image_text =
|
||||
memory.GetString(request.in_vectors[3].address, request.in_vectors[3].size);
|
||||
std::string small_image_key =
|
||||
memory.GetString(request.in_vectors[4].address, request.in_vectors[4].size);
|
||||
std::string small_image_text =
|
||||
memory.GetString(request.in_vectors[5].address, request.in_vectors[5].size);
|
||||
|
||||
int64_t start_timestamp = memory.Read_U64(request.in_vectors[6].address);
|
||||
int64_t end_timestamp = memory.Read_U64(request.in_vectors[7].address);
|
||||
int party_size = memory.Read_U32(request.in_vectors[8].address);
|
||||
int party_max = memory.Read_U32(request.in_vectors[9].address);
|
||||
|
||||
bool ret = Host_UpdateDiscordPresenceRaw(details, state, large_image_key, large_image_text,
|
||||
small_image_key, small_image_text, start_timestamp,
|
||||
@@ -225,7 +241,11 @@ IPCReply DolphinDevice::GetElapsedTime(const IOCtlVRequest& request) const
|
||||
// Return elapsed time instead of current timestamp to make buggy emulated code less likely to
|
||||
// have issues.
|
||||
const u32 milliseconds = static_cast<u32>(m_timer.ElapsedMs());
|
||||
Memory::Write_U32(milliseconds, request.io_vectors[0].address);
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
memory.Write_U32(milliseconds, request.io_vectors[0].address);
|
||||
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -241,11 +261,14 @@ IPCReply DolphinDevice::GetSystemTime(const IOCtlVRequest& request) const
|
||||
return IPCReply(IPC_EINVAL);
|
||||
}
|
||||
|
||||
auto& system = Core::System::GetInstance();
|
||||
auto& memory = system.GetMemory();
|
||||
|
||||
// Write Unix timestamp in milliseconds to memory address
|
||||
const u64 milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch())
|
||||
.count();
|
||||
Memory::Write_U64(milliseconds, request.io_vectors[0].address);
|
||||
memory.Write_U64(milliseconds, request.io_vectors[0].address);
|
||||
return IPCReply(IPC_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user