|
|
|
@ -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,
|
|
|
|
|
// instead advance to the next event and try to yield to the next thread
|
|
|
|
|
if (Kernel::GetCurrentThread() == nullptr) {
|
|
|
|
|
LOG_TRACE(Core_ARM, "Idling");
|
|
|
|
|
NGLOG_TRACE(Core_ARM, "Idling");
|
|
|
|
|
CoreTiming::Idle();
|
|
|
|
|
CoreTiming::Advance();
|
|
|
|
|
PrepareReschedule();
|
|
|
|
@ -82,15 +82,15 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file
|
|
|
|
|
app_loader = Loader::GetLoader(filepath);
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
std::pair<boost::optional<u32>, Loader::ResultStatus> system_mode =
|
|
|
|
|
app_loader->LoadKernelSystemMode();
|
|
|
|
|
|
|
|
|
|
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) {
|
|
|
|
|
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())};
|
|
|
|
|
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();
|
|
|
|
|
return init_result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const Loader::ResultStatus load_result{app_loader->Load(current_process)};
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
switch (load_result) {
|
|
|
|
@ -151,7 +151,7 @@ void System::Reschedule() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
|
|
|
|
|
LOG_DEBUG(HW_Memory, "initialized OK");
|
|
|
|
|
NGLOG_DEBUG(HW_Memory, "initialized OK");
|
|
|
|
|
|
|
|
|
|
CoreTiming::Init();
|
|
|
|
|
|
|
|
|
@ -162,7 +162,7 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
|
|
|
|
|
cpu_core = std::make_shared<ARM_Dynarmic>();
|
|
|
|
|
#else
|
|
|
|
|
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
|
|
|
|
|
} else {
|
|
|
|
|
cpu_core = std::make_shared<ARM_Unicorn>();
|
|
|
|
@ -184,7 +184,7 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
|
|
|
|
|
return ResultStatus::ErrorVideoCore;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LOG_DEBUG(Core, "Initialized OK");
|
|
|
|
|
NGLOG_DEBUG(Core, "Initialized OK");
|
|
|
|
|
|
|
|
|
|
// Reset counters and set time origin to current frame
|
|
|
|
|
GetAndResetPerfStats();
|
|
|
|
@ -218,7 +218,7 @@ void System::Shutdown() {
|
|
|
|
|
|
|
|
|
|
app_loader.reset();
|
|
|
|
|
|
|
|
|
|
LOG_DEBUG(Core, "Shutdown OK");
|
|
|
|
|
NGLOG_DEBUG(Core, "Shutdown OK");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Service::SM::ServiceManager& System::ServiceManager() {
|
|
|
|
|