| |
| |
| |
|
|
| #pragma once |
|
|
| #include <memory> |
| #include "common/common_types.h" |
| #include "common/swap.h" |
| #include "core/file_sys/ncch_container.h" |
| #include "core/loader/loader.h" |
|
|
| namespace Loader { |
|
|
| |
| class AppLoader_NCCH final : public AppLoader { |
| public: |
| AppLoader_NCCH(Core::System& system_, FileUtil::IOFile&& file, const std::string& filepath) |
| : AppLoader(system_, std::move(file)), base_ncch(filepath), overlay_ncch(&base_ncch), |
| filepath(filepath) {} |
|
|
| |
| |
| |
| |
| |
| static FileType IdentifyType(FileUtil::IOFile& file); |
|
|
| FileType GetFileType() override { |
| return IdentifyType(file); |
| } |
|
|
| [[nodiscard]] std::span<const u32> GetPreferredRegions() const override { |
| return preferred_regions; |
| } |
|
|
| ResultStatus Load(std::shared_ptr<Kernel::Process>& process) override; |
|
|
| std::pair<std::optional<u32>, ResultStatus> LoadCoreVersion() override; |
|
|
| |
| |
| |
| |
| std::pair<std::optional<Kernel::MemoryMode>, ResultStatus> LoadKernelMemoryMode() override; |
|
|
| std::pair<std::optional<Kernel::New3dsHwCapabilities>, ResultStatus> LoadNew3dsHwCapabilities() |
| override; |
|
|
| ResultStatus IsExecutable(bool& out_executable) override; |
|
|
| ResultStatus ReadCode(std::vector<u8>& buffer) override; |
|
|
| ResultStatus ReadIcon(std::vector<u8>& buffer) override; |
|
|
| ResultStatus ReadBanner(std::vector<u8>& buffer) override; |
|
|
| ResultStatus ReadLogo(std::vector<u8>& buffer) override; |
|
|
| ResultStatus ReadProgramId(u64& out_program_id) override; |
|
|
| ResultStatus ReadExtdataId(u64& out_extdata_id) override; |
|
|
| ResultStatus ReadRomFS(std::shared_ptr<FileSys::RomFSReader>& romfs_file) override; |
|
|
| ResultStatus ReadUpdateRomFS(std::shared_ptr<FileSys::RomFSReader>& romfs_file) override; |
|
|
| ResultStatus DumpRomFS(const std::string& target_path) override; |
|
|
| ResultStatus DumpUpdateRomFS(const std::string& target_path) override; |
|
|
| ResultStatus ReadTitle(std::string& title) override; |
|
|
| private: |
| |
| |
| |
| |
| |
| ResultStatus LoadExec(std::shared_ptr<Kernel::Process>& process); |
|
|
| |
| |
| |
| void ParseRegionLockoutInfo(u64 program_id); |
|
|
| |
| bool IsGbaVirtualConsole(std::span<const u8> code); |
|
|
| FileSys::NCCHContainer base_ncch; |
| FileSys::NCCHContainer update_ncch; |
| FileSys::NCCHContainer* overlay_ncch; |
|
|
| std::vector<u32> preferred_regions; |
|
|
| std::string filepath; |
| }; |
|
|
| } |
|
|