|
|
@ -55,7 +55,7 @@ System::ResultStatus System::RunLoop(bool tight_loop) { |
|
|
// If we don't have a currently active thread then don't execute instructions,
|
|
|
// If we don't have a currently active thread then don't execute instructions,
|
|
|
// instead advance to the next event and try to yield to the next thread
|
|
|
// instead advance to the next event and try to yield to the next thread
|
|
|
if (Kernel::GetCurrentThread() == nullptr) { |
|
|
if (Kernel::GetCurrentThread() == nullptr) { |
|
|
LOG_TRACE(Core_ARM, "Idling"); |
|
|
|
|
|
|
|
|
NGLOG_TRACE(Core_ARM, "Idling"); |
|
|
CoreTiming::Idle(); |
|
|
CoreTiming::Idle(); |
|
|
CoreTiming::Advance(); |
|
|
CoreTiming::Advance(); |
|
|
PrepareReschedule(); |
|
|
PrepareReschedule(); |
|
|
@ -82,15 +82,15 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file |
|
|
app_loader = Loader::GetLoader(filepath); |
|
|
app_loader = Loader::GetLoader(filepath); |
|
|
|
|
|
|
|
|
if (!app_loader) { |
|
|
if (!app_loader) { |
|
|
LOG_CRITICAL(Core, "Failed to obtain loader for %s!", filepath.c_str()); |
|
|
|
|
|
|
|
|
NGLOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); |
|
|
return ResultStatus::ErrorGetLoader; |
|
|
return ResultStatus::ErrorGetLoader; |
|
|
} |
|
|
} |
|
|
std::pair<boost::optional<u32>, Loader::ResultStatus> system_mode = |
|
|
std::pair<boost::optional<u32>, Loader::ResultStatus> system_mode = |
|
|
app_loader->LoadKernelSystemMode(); |
|
|
app_loader->LoadKernelSystemMode(); |
|
|
|
|
|
|
|
|
if (system_mode.second != Loader::ResultStatus::Success) { |
|
|
if (system_mode.second != Loader::ResultStatus::Success) { |
|
|
LOG_CRITICAL(Core, "Failed to determine system mode (Error %i)!", |
|
|
|
|
|
static_cast<int>(system_mode.second)); |
|
|
|
|
|
|
|
|
NGLOG_CRITICAL(Core, "Failed to determine system mode (Error {})!", |
|
|
|
|
|
static_cast<int>(system_mode.second)); |
|
|
|
|
|
|
|
|
switch (system_mode.second) { |
|
|
switch (system_mode.second) { |
|
|
case Loader::ResultStatus::ErrorEncrypted: |
|
|
case Loader::ResultStatus::ErrorEncrypted: |
|
|
@ -106,15 +106,15 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file |
|
|
|
|
|
|
|
|
ResultStatus init_result{Init(emu_window, system_mode.first.get())}; |
|
|
ResultStatus init_result{Init(emu_window, system_mode.first.get())}; |
|
|
if (init_result != ResultStatus::Success) { |
|
|
if (init_result != ResultStatus::Success) { |
|
|
LOG_CRITICAL(Core, "Failed to initialize system (Error %i)!", |
|
|
|
|
|
static_cast<int>(init_result)); |
|
|
|
|
|
|
|
|
NGLOG_CRITICAL(Core, "Failed to initialize system (Error {})!", |
|
|
|
|
|
static_cast<int>(init_result)); |
|
|
System::Shutdown(); |
|
|
System::Shutdown(); |
|
|
return init_result; |
|
|
return init_result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const Loader::ResultStatus load_result{app_loader->Load(current_process)}; |
|
|
const Loader::ResultStatus load_result{app_loader->Load(current_process)}; |
|
|
if (Loader::ResultStatus::Success != load_result) { |
|
|
if (Loader::ResultStatus::Success != load_result) { |
|
|
LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", static_cast<int>(load_result)); |
|
|
|
|
|
|
|
|
NGLOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); |
|
|
System::Shutdown(); |
|
|
System::Shutdown(); |
|
|
|
|
|
|
|
|
switch (load_result) { |
|
|
switch (load_result) { |
|
|
@ -151,7 +151,7 @@ void System::Reschedule() { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
|
|
System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
|
|
LOG_DEBUG(HW_Memory, "initialized OK"); |
|
|
|
|
|
|
|
|
NGLOG_DEBUG(HW_Memory, "initialized OK"); |
|
|
|
|
|
|
|
|
CoreTiming::Init(); |
|
|
CoreTiming::Init(); |
|
|
|
|
|
|
|
|
@ -162,7 +162,7 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
|
|
cpu_core = std::make_shared<ARM_Dynarmic>(); |
|
|
cpu_core = std::make_shared<ARM_Dynarmic>(); |
|
|
#else
|
|
|
#else
|
|
|
cpu_core = std::make_shared<ARM_Unicorn>(); |
|
|
cpu_core = std::make_shared<ARM_Unicorn>(); |
|
|
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available"); |
|
|
|
|
|
|
|
|
NGLOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available"); |
|
|
#endif
|
|
|
#endif
|
|
|
} else { |
|
|
} else { |
|
|
cpu_core = std::make_shared<ARM_Unicorn>(); |
|
|
cpu_core = std::make_shared<ARM_Unicorn>(); |
|
|
@ -184,7 +184,7 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
|
|
return ResultStatus::ErrorVideoCore; |
|
|
return ResultStatus::ErrorVideoCore; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
LOG_DEBUG(Core, "Initialized OK"); |
|
|
|
|
|
|
|
|
NGLOG_DEBUG(Core, "Initialized OK"); |
|
|
|
|
|
|
|
|
// Reset counters and set time origin to current frame
|
|
|
// Reset counters and set time origin to current frame
|
|
|
GetAndResetPerfStats(); |
|
|
GetAndResetPerfStats(); |
|
|
@ -218,7 +218,7 @@ void System::Shutdown() { |
|
|
|
|
|
|
|
|
app_loader.reset(); |
|
|
app_loader.reset(); |
|
|
|
|
|
|
|
|
LOG_DEBUG(Core, "Shutdown OK"); |
|
|
|
|
|
|
|
|
NGLOG_DEBUG(Core, "Shutdown OK"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Service::SM::ServiceManager& System::ServiceManager() { |
|
|
Service::SM::ServiceManager& System::ServiceManager() { |
|
|
|