summaryrefslogtreecommitdiffstats
path: root/src/core/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r--src/core/core.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 48233d7c8..2f67e60a9 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -12,6 +12,7 @@
#include "common/logging/log.h"
#include "common/microprofile.h"
#include "common/settings.h"
+#include "common/settings_enums.h"
#include "common/string_util.h"
#include "core/arm/exclusive_monitor.h"
#include "core/core.h"
@@ -140,16 +141,13 @@ struct System::Impl {
device_memory = std::make_unique<Core::DeviceMemory>();
is_multicore = Settings::values.use_multi_core.GetValue();
- extended_memory_layout = Settings::values.use_unsafe_extended_memory_layout.GetValue();
+ extended_memory_layout =
+ Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
core_timing.SetMulticore(is_multicore);
core_timing.Initialize([&system]() { system.RegisterHostThread(); });
- const auto posix_time = std::chrono::system_clock::now().time_since_epoch();
- const auto current_time =
- std::chrono::duration_cast<std::chrono::seconds>(posix_time).count();
- Settings::values.custom_rtc_differential =
- Settings::values.custom_rtc.value_or(current_time) - current_time;
+ RefreshTime();
// Create a default fs if one doesn't already exist.
if (virtual_filesystem == nullptr) {
@@ -172,7 +170,8 @@ struct System::Impl {
void ReinitializeIfNecessary(System& system) {
const bool must_reinitialize =
is_multicore != Settings::values.use_multi_core.GetValue() ||
- extended_memory_layout != Settings::values.use_unsafe_extended_memory_layout.GetValue();
+ extended_memory_layout != (Settings::values.memory_layout_mode.GetValue() !=
+ Settings::MemoryLayout::Memory_4Gb);
if (!must_reinitialize) {
return;
@@ -181,11 +180,22 @@ struct System::Impl {
LOG_DEBUG(Kernel, "Re-initializing");
is_multicore = Settings::values.use_multi_core.GetValue();
- extended_memory_layout = Settings::values.use_unsafe_extended_memory_layout.GetValue();
+ extended_memory_layout =
+ Settings::values.memory_layout_mode.GetValue() != Settings::MemoryLayout::Memory_4Gb;
Initialize(system);
}
+ void RefreshTime() {
+ const auto posix_time = std::chrono::system_clock::now().time_since_epoch();
+ const auto current_time =
+ std::chrono::duration_cast<std::chrono::seconds>(posix_time).count();
+ Settings::values.custom_rtc_differential =
+ (Settings::values.custom_rtc_enabled ? Settings::values.custom_rtc.GetValue()
+ : current_time) -
+ current_time;
+ }
+
void Run() {
std::unique_lock<std::mutex> lk(suspend_guard);
@@ -1028,6 +1038,8 @@ void System::Exit() {
}
void System::ApplySettings() {
+ impl->RefreshTime();
+
if (IsPoweredOn()) {
Renderer().RefreshBaseSettings();
}