summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/DirectoryBlob.cpp
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2017-06-10 17:31:03 +0200
committerJosJuice <josjuice@gmail.com>2017-08-01 11:36:40 +0200
commita3ee61e1a97899a0d29f15cdebf6a6589aa444dd (patch)
tree95db5a3b52bbc45edf6429464738cd988ba74416 /Source/Core/DiscIO/DirectoryBlob.cpp
parentfb09874f79eedf4b2cd0c5d49d2a42ecc5b21f18 (diff)
DirectoryBlob: Let DirectoryBlob force GC/Wii for partition
Diffstat (limited to 'Source/Core/DiscIO/DirectoryBlob.cpp')
-rw-r--r--Source/Core/DiscIO/DirectoryBlob.cpp24
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;
}