diff options
Diffstat (limited to 'src/core/hle/service/time/time_sharedmemory.cpp')
-rw-r--r-- | src/core/hle/service/time/time_sharedmemory.cpp | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/src/core/hle/service/time/time_sharedmemory.cpp b/src/core/hle/service/time/time_sharedmemory.cpp index 650c9af7a..bfc81b83c 100644 --- a/src/core/hle/service/time/time_sharedmemory.cpp +++ b/src/core/hle/service/time/time_sharedmemory.cpp @@ -1,4 +1,4 @@ -// Copyright 2018 yuzu emulator team +// Copyright 2019 yuzu emulator team // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -6,15 +6,17 @@ #include "core/hle/service/time/time_sharedmemory.h" namespace Service::Time { +const std::size_t SHARED_MEMORY_SIZE = 0x1000; SharedMemory::SharedMemory(Core::System& system) : system(system) { shared_memory_holder = Kernel::SharedMemory::Create( system.Kernel(), nullptr, SHARED_MEMORY_SIZE, Kernel::MemoryPermission::ReadWrite, Kernel::MemoryPermission::Read, 0, Kernel::MemoryRegion::BASE, "Time:SharedMemory"); - shared_memory_format = reinterpret_cast<Format*>(shared_memory_holder->GetPointer()); - shared_memory_format->format_version = - 14; // Seems static from 1.0.0 -> 8.1.0. Specific games seem to check this value and crash - // if it's set to anything else + + // Seems static from 1.0.0 -> 8.1.0. Specific games seem to check this value and crash + // if it's set to anything else + shared_memory_format.format_version = 14; + std::memcpy(shared_memory_holder->GetPointer(), &shared_memory_format, sizeof(Format)); } SharedMemory::~SharedMemory() = default; @@ -24,36 +26,43 @@ Kernel::SharedPtr<Kernel::SharedMemory> SharedMemory::GetSharedMemoryHolder() co } void SharedMemory::SetStandardSteadyClockTimepoint(const SteadyClockTimePoint& timepoint) { - shared_memory_format->standard_steady_clock_timepoint.StoreData(timepoint); + shared_memory_format.standard_steady_clock_timepoint.StoreData( + shared_memory_holder->GetPointer(), timepoint); } void SharedMemory::SetStandardLocalSystemClockContext(const SystemClockContext& context) { - shared_memory_format->standard_local_system_clock_context.StoreData(context); + shared_memory_format.standard_local_system_clock_context.StoreData( + shared_memory_holder->GetPointer(), context); } void SharedMemory::SetStandardNetworkSystemClockContext(const SystemClockContext& context) { - shared_memory_format->standard_network_system_clock_context.StoreData(context); + shared_memory_format.standard_network_system_clock_context.StoreData( + shared_memory_holder->GetPointer(), context); } -void SharedMemory::SetStandardUserSystemClockAutomaticCorrectionEnabled(const bool enabled) { - shared_memory_format->standard_user_system_clock_automatic_correction.StoreData(enabled ? 1 - : 0); +void SharedMemory::SetStandardUserSystemClockAutomaticCorrectionEnabled(bool enabled) { + shared_memory_format.standard_user_system_clock_automatic_correction.StoreData( + shared_memory_holder->GetPointer(), enabled); } -SteadyClockTimePoint SharedMemory::GetStandardSteadyClockTimepoint() const { - return shared_memory_format->standard_steady_clock_timepoint.ReadData(); +SteadyClockTimePoint SharedMemory::GetStandardSteadyClockTimepoint() { + return shared_memory_format.standard_steady_clock_timepoint.ReadData( + shared_memory_holder->GetPointer()); } -SystemClockContext SharedMemory::GetStandardLocalSystemClockContext() const { - return shared_memory_format->standard_local_system_clock_context.ReadData(); +SystemClockContext SharedMemory::GetStandardLocalSystemClockContext() { + return shared_memory_format.standard_local_system_clock_context.ReadData( + shared_memory_holder->GetPointer()); } -SystemClockContext SharedMemory::GetStandardNetworkSystemClockContext() const { - return shared_memory_format->standard_network_system_clock_context.ReadData(); +SystemClockContext SharedMemory::GetStandardNetworkSystemClockContext() { + return shared_memory_format.standard_network_system_clock_context.ReadData( + shared_memory_holder->GetPointer()); } -bool SharedMemory::GetStandardUserSystemClockAutomaticCorrectionEnabled() const { - return shared_memory_format->standard_user_system_clock_automatic_correction.ReadData() > 0; +bool SharedMemory::GetStandardUserSystemClockAutomaticCorrectionEnabled() { + return shared_memory_format.standard_user_system_clock_automatic_correction.ReadData( + shared_memory_holder->GetPointer()); } } // namespace Service::Time |