Merge pull request #4733 from leoetlino/expose-wad-tmd
VolumeWad: Implement GetTMD()
This commit is contained in:
commit
86b758d7ca
|
@ -25,19 +25,17 @@ namespace DiscIO
|
||||||
CVolumeWAD::CVolumeWAD(std::unique_ptr<IBlobReader> reader) : m_reader(std::move(reader))
|
CVolumeWAD::CVolumeWAD(std::unique_ptr<IBlobReader> reader) : m_reader(std::move(reader))
|
||||||
{
|
{
|
||||||
// Source: http://wiibrew.org/wiki/WAD_files
|
// Source: http://wiibrew.org/wiki/WAD_files
|
||||||
Read(0x00, 4, (u8*)&m_hdr_size);
|
ReadSwapped(0x00, &m_hdr_size, false);
|
||||||
Read(0x08, 4, (u8*)&m_cert_size);
|
ReadSwapped(0x08, &m_cert_size, false);
|
||||||
Read(0x10, 4, (u8*)&m_tick_size);
|
ReadSwapped(0x10, &m_tick_size, false);
|
||||||
Read(0x14, 4, (u8*)&m_tmd_size);
|
ReadSwapped(0x14, &m_tmd_size, false);
|
||||||
Read(0x18, 4, (u8*)&m_data_size);
|
ReadSwapped(0x18, &m_data_size, false);
|
||||||
|
|
||||||
m_offset = Common::AlignUp(Common::swap32(m_hdr_size), 0x40) +
|
m_offset = Common::AlignUp(m_hdr_size, 0x40) + Common::AlignUp(m_cert_size, 0x40);
|
||||||
Common::AlignUp(Common::swap32(m_cert_size), 0x40);
|
m_tmd_offset = Common::AlignUp(m_hdr_size, 0x40) + Common::AlignUp(m_cert_size, 0x40) +
|
||||||
m_tmd_offset = Common::AlignUp(Common::swap32(m_hdr_size), 0x40) +
|
Common::AlignUp(m_tick_size, 0x40);
|
||||||
Common::AlignUp(Common::swap32(m_cert_size), 0x40) +
|
m_opening_bnr_offset =
|
||||||
Common::AlignUp(Common::swap32(m_tick_size), 0x40);
|
m_tmd_offset + Common::AlignUp(m_tmd_size, 0x40) + Common::AlignUp(m_data_size, 0x40);
|
||||||
m_opening_bnr_offset = m_tmd_offset + Common::AlignUp(Common::swap32(m_tmd_size), 0x40) +
|
|
||||||
Common::AlignUp(Common::swap32(m_data_size), 0x40);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CVolumeWAD::~CVolumeWAD()
|
CVolumeWAD::~CVolumeWAD()
|
||||||
|
@ -81,6 +79,18 @@ Country CVolumeWAD::GetCountry() const
|
||||||
return CountrySwitch(country_code);
|
return CountrySwitch(country_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<u8> CVolumeWAD::GetTMD() const
|
||||||
|
{
|
||||||
|
if (m_tmd_size > 1024 * 1024 * 4)
|
||||||
|
{
|
||||||
|
ERROR_LOG(DISCIO, "TMD is too large: %u bytes", m_tmd_size);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
std::vector<u8> buffer(m_tmd_size);
|
||||||
|
Read(m_tmd_offset, m_tmd_size, buffer.data(), false);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
std::string CVolumeWAD::GetGameID() const
|
std::string CVolumeWAD::GetGameID() const
|
||||||
{
|
{
|
||||||
char GameCode[6];
|
char GameCode[6];
|
||||||
|
|
|
@ -32,6 +32,7 @@ public:
|
||||||
~CVolumeWAD();
|
~CVolumeWAD();
|
||||||
bool Read(u64 offset, u64 length, u8* buffer, bool decrypt = false) const override;
|
bool Read(u64 offset, u64 length, u8* buffer, bool decrypt = false) const override;
|
||||||
bool GetTitleID(u64* buffer) const override;
|
bool GetTitleID(u64* buffer) const override;
|
||||||
|
std::vector<u8> GetTMD() const override;
|
||||||
std::string GetGameID() const override;
|
std::string GetGameID() const override;
|
||||||
std::string GetMakerID() const override;
|
std::string GetMakerID() const override;
|
||||||
u16 GetRevision() const override;
|
u16 GetRevision() const override;
|
||||||
|
|
Loading…
Reference in New Issue