diff options
| author | JosJuice <josjuice@gmail.com> | 2017-06-10 17:31:03 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2017-08-01 11:36:40 +0200 |
| commit | a3ee61e1a97899a0d29f15cdebf6a6589aa444dd (patch) | |
| tree | 95db5a3b52bbc45edf6429464738cd988ba74416 /Source/Core/DiscIO/DirectoryBlob.cpp | |
| parent | fb09874f79eedf4b2cd0c5d49d2a42ecc5b21f18 (diff) | |
DirectoryBlob: Let DirectoryBlob force GC/Wii for partition
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
| -rw-r--r-- | Source/Core/DiscIO/DirectoryBlob.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/Source/Core/DiscIO/DirectoryBlob.cpp b/Source/Core/DiscIO/DirectoryBlob.cpp index 74e9682860..e8db47d29a 100644 --- a/Source/Core/DiscIO/DirectoryBlob.cpp +++ b/Source/Core/DiscIO/DirectoryBlob.cpp @@ -156,7 +156,7 @@ std::unique_ptr<DirectoryBlobReader> DirectoryBlobReader::Create(const std::stri } DirectoryBlobReader::DirectoryBlobReader(const std::string& root_directory) - : m_root_directory(root_directory), m_game_partition(root_directory) + : m_root_directory(root_directory), m_game_partition(root_directory, {}) { m_is_wii = m_game_partition.IsWii(); @@ -311,15 +311,16 @@ void DirectoryBlobReader::SetTMDAndTicket() reinterpret_cast<const u8*>(&m_tmd_header)); } -DirectoryBlobPartition::DirectoryBlobPartition(const std::string& root_directory) +DirectoryBlobPartition::DirectoryBlobPartition(const std::string& root_directory, + std::optional<bool> is_wii) : m_root_directory(root_directory) { - SetDiscHeaderAndDiscType(); + SetDiscHeaderAndDiscType(is_wii); SetBI2(); BuildFST(SetDOL(SetApploader())); } -void DirectoryBlobPartition::SetDiscHeaderAndDiscType() +void DirectoryBlobPartition::SetDiscHeaderAndDiscType(std::optional<bool> is_wii) { constexpr u64 DISKHEADER_ADDRESS = 0; constexpr u64 DISKHEADER_SIZE = 0x440; @@ -331,10 +332,17 @@ void DirectoryBlobPartition::SetDiscHeaderAndDiscType() m_contents.emplace(DISKHEADER_ADDRESS, DISKHEADER_SIZE, m_disk_header.data()); - m_is_wii = Common::swap32(&m_disk_header[0x18]) == 0x5d1c9ea3; - const bool is_gc = Common::swap32(&m_disk_header[0x1c]) == 0xc2339f3d; - if (m_is_wii == is_gc) - ERROR_LOG(DISCIO, "Couldn't detect disc type based on %s", boot_bin_path.c_str()); + if (is_wii.has_value()) + { + m_is_wii = *is_wii; + } + else + { + m_is_wii = Common::swap32(&m_disk_header[0x18]) == 0x5d1c9ea3; + const bool is_gc = Common::swap32(&m_disk_header[0x1c]) == 0xc2339f3d; + if (m_is_wii == is_gc) + ERROR_LOG(DISCIO, "Couldn't detect disc type based on %s", boot_bin_path.c_str()); + } m_address_shift = m_is_wii ? 2 : 0; } |
