|
|
@ -102,7 +102,7 @@ bool LZSS_Decompress(u8* compressed, u32 compressed_size, u8* decompressed, u32
|
|
|
|
// AppLoader_NCCH class
|
|
|
|
// AppLoader_NCCH class
|
|
|
|
|
|
|
|
|
|
|
|
/// AppLoader_NCCH constructor
|
|
|
|
/// AppLoader_NCCH constructor
|
|
|
|
AppLoader_NCCH::AppLoader_NCCH(std::string& filename) {
|
|
|
|
AppLoader_NCCH::AppLoader_NCCH(const std::string& filename) {
|
|
|
|
this->filename = filename;
|
|
|
|
this->filename = filename;
|
|
|
|
is_loaded = false;
|
|
|
|
is_loaded = false;
|
|
|
|
is_compressed = false;
|
|
|
|
is_compressed = false;
|
|
|
@ -119,7 +119,7 @@ AppLoader_NCCH::~AppLoader_NCCH() {
|
|
|
|
* Loads .code section into memory for booting
|
|
|
|
* Loads .code section into memory for booting
|
|
|
|
* @return ResultStatus result of function
|
|
|
|
* @return ResultStatus result of function
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const ResultStatus AppLoader_NCCH::LoadExec() const {
|
|
|
|
ResultStatus AppLoader_NCCH::LoadExec() const {
|
|
|
|
if (!is_loaded)
|
|
|
|
if (!is_loaded)
|
|
|
|
return ResultStatus::ErrorNotLoaded;
|
|
|
|
return ResultStatus::ErrorNotLoaded;
|
|
|
|
|
|
|
|
|
|
|
@ -137,7 +137,7 @@ const ResultStatus AppLoader_NCCH::LoadExec() const {
|
|
|
|
* @param name Name of section to read out of NCCH file
|
|
|
|
* @param name Name of section to read out of NCCH file
|
|
|
|
* @param buffer Buffer to read section into.
|
|
|
|
* @param buffer Buffer to read section into.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const ResultStatus AppLoader_NCCH::LoadSectionExeFS(File::IOFile& file, const char* name,
|
|
|
|
ResultStatus AppLoader_NCCH::LoadSectionExeFS(File::IOFile& file, const char* name,
|
|
|
|
std::vector<u8>& buffer) {
|
|
|
|
std::vector<u8>& buffer) {
|
|
|
|
|
|
|
|
|
|
|
|
// Iterate through the ExeFs archive until we find the .code file...
|
|
|
|
// Iterate through the ExeFs archive until we find the .code file...
|
|
|
@ -183,7 +183,7 @@ const ResultStatus AppLoader_NCCH::LoadSectionExeFS(File::IOFile& file, const ch
|
|
|
|
* @param file Handle to file to read from
|
|
|
|
* @param file Handle to file to read from
|
|
|
|
* @return ResultStatus result of function
|
|
|
|
* @return ResultStatus result of function
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const ResultStatus AppLoader_NCCH::LoadRomFS(File::IOFile& file) {
|
|
|
|
ResultStatus AppLoader_NCCH::LoadRomFS(File::IOFile& file) {
|
|
|
|
// Check if the NCCH has a RomFS...
|
|
|
|
// Check if the NCCH has a RomFS...
|
|
|
|
if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) {
|
|
|
|
if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) {
|
|
|
|
u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000;
|
|
|
|
u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000;
|
|
|
@ -210,7 +210,7 @@ const ResultStatus AppLoader_NCCH::LoadRomFS(File::IOFile& file) {
|
|
|
|
* @todo Move NCSD parsing out of here and create a separate function for loading these
|
|
|
|
* @todo Move NCSD parsing out of here and create a separate function for loading these
|
|
|
|
* @return True on success, otherwise false
|
|
|
|
* @return True on success, otherwise false
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
const ResultStatus AppLoader_NCCH::Load() {
|
|
|
|
ResultStatus AppLoader_NCCH::Load() {
|
|
|
|
INFO_LOG(LOADER, "Loading NCCH file %s...", filename.c_str());
|
|
|
|
INFO_LOG(LOADER, "Loading NCCH file %s...", filename.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
if (is_loaded)
|
|
|
|
if (is_loaded)
|
|
|
|