|
|
|
@ -86,11 +86,6 @@ struct THREEloadinfo |
|
|
|
u32 seg_sizes[3]; |
|
|
|
}; |
|
|
|
|
|
|
|
class THREEDSXReader { |
|
|
|
public: |
|
|
|
static int Load3DSXFile(const std::string& filename, u32 base_addr); |
|
|
|
}; |
|
|
|
|
|
|
|
static u32 TranslateAddr(u32 addr, THREEloadinfo *loadinfo, u32* offsets) |
|
|
|
{ |
|
|
|
if (addr < offsets[0]) |
|
|
|
@ -100,12 +95,11 @@ static u32 TranslateAddr(u32 addr, THREEloadinfo *loadinfo, u32* offsets) |
|
|
|
return loadinfo->seg_addrs[2] + addr - offsets[1]; |
|
|
|
} |
|
|
|
|
|
|
|
int THREEDSXReader::Load3DSXFile(const std::string& filename, u32 base_addr) |
|
|
|
static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr) |
|
|
|
{ |
|
|
|
FileUtil::IOFile file(filename, "rb"); |
|
|
|
if (!file.IsOpen()) { |
|
|
|
if (!file.IsOpen()) |
|
|
|
return ERROR_FILE; |
|
|
|
} |
|
|
|
|
|
|
|
THREEDSX_Header hdr; |
|
|
|
if (file.ReadBytes(&hdr, sizeof(hdr)) != sizeof(hdr)) |
|
|
|
return ERROR_READ; |
|
|
|
@ -222,7 +216,7 @@ ResultStatus AppLoader_THREEDSX::Load() { |
|
|
|
FileUtil::IOFile file(filename, "rb"); |
|
|
|
|
|
|
|
if (file.IsOpen()) { |
|
|
|
THREEDSXReader::Load3DSXFile(filename, 0x00100000); |
|
|
|
Load3DSXFile(file, 0x00100000); |
|
|
|
Kernel::LoadExec(0x00100000); |
|
|
|
} else { |
|
|
|
return ResultStatus::Error; |
|
|
|
|