summaryrefslogtreecommitdiff
path: root/src/core/loader/ncch.cpp
diff options
context:
space:
mode:
authorGravatar wwylele2016-11-30 11:32:09 +0200
committerGravatar wwylele2016-12-07 20:52:42 +0200
commit84e78790ab3f3e8883493b18946e97328d921774 (patch)
tree31b000e21876310ccd91e1746c86b643908b5a27 /src/core/loader/ncch.cpp
parentMerge pull request #2232 from wwylele/other-save (diff)
downloadyuzu-84e78790ab3f3e8883493b18946e97328d921774.tar.gz
yuzu-84e78790ab3f3e8883493b18946e97328d921774.tar.xz
yuzu-84e78790ab3f3e8883493b18946e97328d921774.zip
Config: auto-select region and language
Diffstat (limited to 'src/core/loader/ncch.cpp')
-rw-r--r--src/core/loader/ncch.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index d4be61e0e..dce7f50f9 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -11,8 +11,10 @@
11#include "core/file_sys/archive_romfs.h" 11#include "core/file_sys/archive_romfs.h"
12#include "core/hle/kernel/process.h" 12#include "core/hle/kernel/process.h"
13#include "core/hle/kernel/resource_limit.h" 13#include "core/hle/kernel/resource_limit.h"
14#include "core/hle/service/cfg/cfg.h"
14#include "core/hle/service/fs/archive.h" 15#include "core/hle/service/fs/archive.h"
15#include "core/loader/ncch.h" 16#include "core/loader/ncch.h"
17#include "core/loader/smdh.h"
16#include "core/memory.h" 18#include "core/memory.h"
17 19
18//////////////////////////////////////////////////////////////////////////////////////////////////// 20////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -309,6 +311,23 @@ ResultStatus AppLoader_NCCH::LoadExeFS() {
309 return ResultStatus::Success; 311 return ResultStatus::Success;
310} 312}
311 313
314void AppLoader_NCCH::ParseRegionLockoutInfo() {
315 std::vector<u8> smdh_buffer;
316 if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) {
317 SMDH smdh;
318 memcpy(&smdh, smdh_buffer.data(), sizeof(SMDH));
319 u32 region_lockout = smdh.region_lockout;
320 constexpr u32 REGION_COUNT = 7;
321 for (u32 region = 0; region < REGION_COUNT; ++region) {
322 if (region_lockout & 1) {
323 Service::CFG::SetPreferredRegionCode(region);
324 break;
325 }
326 region_lockout >>= 1;
327 }
328 }
329}
330
312ResultStatus AppLoader_NCCH::Load() { 331ResultStatus AppLoader_NCCH::Load() {
313 if (is_loaded) 332 if (is_loaded)
314 return ResultStatus::ErrorAlreadyLoaded; 333 return ResultStatus::ErrorAlreadyLoaded;
@@ -325,6 +344,9 @@ ResultStatus AppLoader_NCCH::Load() {
325 344
326 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this), 345 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_RomFS>(*this),
327 Service::FS::ArchiveIdCode::RomFS); 346 Service::FS::ArchiveIdCode::RomFS);
347
348 ParseRegionLockoutInfo();
349
328 return ResultStatus::Success; 350 return ResultStatus::Success;
329} 351}
330 352