aboutsummaryrefslogtreecommitdiff
path: root/src/core/loader/deconstructed_rom_directory.cpp
diff options
context:
space:
mode:
authorDjihads <76681596+Djihads80@users.noreply.github.com>2026-10-29 02:25:36 +0100
committerGitHub <noreply@github.com>2026-10-29 02:25:36 +0100
commit0bb5055b6541c74f47603a8dff0569a509cbaf18 (patch)
treeda827ff9c4f2f9a5309ee2804ee689f608c0ac2f /src/core/loader/deconstructed_rom_directory.cpp
parent1af7fe72927af9fc64aa4af117bc9b30043c4dc7 (diff)
parent535b6769709eb22333af26269f1b16f37adce4db (diff)
Merge pull request #1 from Djihads80/yumekiru/ns2-progress-v2
Experimental NS2 support and accumulated GPU fixes
Diffstat (limited to 'src/core/loader/deconstructed_rom_directory.cpp')
-rw-r--r--src/core/loader/deconstructed_rom_directory.cpp39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp
index 5e2ec7e0b9..1dce245f7f 100644
--- a/src/core/loader/deconstructed_rom_directory.cpp
+++ b/src/core/loader/deconstructed_rom_directory.cpp
@@ -13,6 +13,7 @@
#include "core/file_sys/control_metadata.h"
#include "core/file_sys/patch_manager.h"
#include "core/file_sys/romfs_factory.h"
+#include "core/file_sys/romfs.h"
#include "core/hle/kernel/k_page_table.h"
#include "core/hle/kernel/k_process.h"
#include "core/hle/service/filesystem/filesystem.h"
@@ -129,10 +130,14 @@ AppLoader_DeconstructedRomDirectory::AppLoader_DeconstructedRomDirectory(
: AppLoader(directory->GetFile("main"))
, dir(std::move(directory))
, override_update(override_update_)
+ , standalone(false)
{}
FileType AppLoader_DeconstructedRomDirectory::IdentifyType(const FileSys::VirtualFile& dir_file) {
- if (FileSys::IsDirectoryExeFS(dir_file->GetContainingDirectory())) {
+ const auto directory = dir_file->GetContainingDirectory();
+ if (dir_file->GetName() == "main" && directory &&
+ AppLoader_NSO::IdentifyType(dir_file) == FileType::NSO &&
+ FileSys::IsDirectoryExeFS(directory)) {
return FileType::DeconstructedRomDirectory;
}
@@ -182,11 +187,11 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
}
metadata.Print();
- // Enable NCE only for applications with 39-bit address space.
+ // Extended ACID programs currently require the Dynarmic compatibility path.
const bool is_39bit =
metadata.GetAddressSpaceType() == FileSys::ProgramAddressSpaceType::Is39Bit;
const bool is_application = metadata.GetPoolPartition() == FileSys::PoolPartition::Application;
- Settings::SetNceEnabled(is_39bit);
+ Settings::SetNceEnabled(is_39bit && !metadata.UsesExtendedAcid());
const std::array static_modules = {"rtld", "main", "subsdk0", "subsdk1", "subsdk2",
"subsdk3", "subsdk4", "subsdk5", "subsdk6", "subsdk7",
@@ -267,11 +272,39 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
}
is_loaded = true;
+ if (standalone) {
+ title_id = metadata.GetTitleID();
+ system.GetFileSystemController().RegisterProcess(
+ process.GetProcessId(), {},
+ std::make_shared<FileSys::RomFSFactory>(*this, system.GetContentProvider(),
+ system.GetFileSystemController()));
+ }
return {ResultStatus::Success,
LoadParameters{metadata.GetMainThreadPriority(), metadata.GetMainThreadStackSize()}};
}
ResultStatus AppLoader_DeconstructedRomDirectory::ReadRomFS(FileSys::VirtualFile& out_dir) {
+ if (romfs == nullptr && standalone) {
+ const auto directory = file->GetContainingDirectory();
+ for (const auto& entry : directory->GetFiles()) {
+ if (entry->GetExtension() == "romfs") {
+ romfs = entry;
+ break;
+ }
+ }
+ if (romfs == nullptr) {
+ auto loose = directory->GetSubdirectory("romfs");
+ if (!loose && directory->GetName() == "exefs") {
+ const auto parent = directory->GetParentDirectory();
+ if (parent) {
+ loose = parent->GetSubdirectory("romfs");
+ }
+ }
+ if (loose) {
+ romfs = FileSys::CreateRomFS(std::move(loose));
+ }
+ }
+ }
if (romfs == nullptr) {
return ResultStatus::ErrorNoRomFS;
}