diff options
| author | Tilka <tilkax@gmail.com> | 2020-06-25 16:10:04 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-25 16:10:04 +0100 |
| commit | 98de22a1e629495f386764defd80cb90135cd371 (patch) | |
| tree | 0acb04026256ca07c8b1a0f530baabdf7c1cf2ac /Source/Core/DiscIO/VolumeDisc.cpp | |
| parent | 4ddd4ff8357a30133a985159681052c733d0f61d (diff) | |
| parent | d17b8015188e290756fe1842636e33e35b50cea8 (diff) | |
Merge pull request #8900 from JosJuice/disc-deduplicate
DiscIO: Deduplicate some VolumeGC/VolumeWii code
Diffstat (limited to 'Source/Core/DiscIO/VolumeDisc.cpp')
| -rw-r--r-- | Source/Core/DiscIO/VolumeDisc.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/Source/Core/DiscIO/VolumeDisc.cpp b/Source/Core/DiscIO/VolumeDisc.cpp new file mode 100644 index 0000000000..bf622bb8fb --- /dev/null +++ b/Source/Core/DiscIO/VolumeDisc.cpp @@ -0,0 +1,87 @@ +// Copyright 2020 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "DiscIO/VolumeDisc.h" + +#include <optional> +#include <string> + +#include "Common/CommonTypes.h" +#include "DiscIO/Enums.h" + +namespace DiscIO +{ +std::string VolumeDisc::GetGameID(const Partition& partition) const +{ + char id[6]; + + if (!Read(0, sizeof(id), reinterpret_cast<u8*>(id), partition)) + return std::string(); + + return DecodeString(id); +} + +Country VolumeDisc::GetCountry(const Partition& partition) const +{ + // The 0 that we use as a default value is mapped to Country::Unknown and Region::Unknown + const u8 country_byte = ReadSwapped<u8>(3, partition).value_or(0); + const Region region = GetRegion(); + const std::optional<u16> revision = GetRevision(); + + if (CountryCodeToRegion(country_byte, GetVolumeType(), region, revision) != region) + return TypicalCountryForRegion(region); + + return CountryCodeToCountry(country_byte, GetVolumeType(), region, revision); +} + +Region VolumeDisc::RegionCodeToRegion(std::optional<u32> region_code) const +{ + if (!region_code) + return Region::Unknown; + + const Region region = static_cast<Region>(*region_code); + return region <= Region::NTSC_K ? region : Region::Unknown; +} + +std::string VolumeDisc::GetMakerID(const Partition& partition) const +{ + char maker_id[2]; + + if (!Read(0x4, sizeof(maker_id), reinterpret_cast<u8*>(&maker_id), partition)) + return std::string(); + + return DecodeString(maker_id); +} + +std::optional<u16> VolumeDisc::GetRevision(const Partition& partition) const +{ + std::optional<u8> revision = ReadSwapped<u8>(7, partition); + return revision ? *revision : std::optional<u16>(); +} + +std::string VolumeDisc::GetInternalName(const Partition& partition) const +{ + char name[0x60]; + if (!Read(0x20, sizeof(name), reinterpret_cast<u8*>(&name), partition)) + return std::string(); + + return DecodeString(name); +} + +std::string VolumeDisc::GetApploaderDate(const Partition& partition) const +{ + char date[16]; + + if (!Read(0x2440, sizeof(date), reinterpret_cast<u8*>(&date), partition)) + return std::string(); + + return DecodeString(date); +} + +std::optional<u8> VolumeDisc::GetDiscNumber(const Partition& partition) const +{ + return ReadSwapped<u8>(6, partition); +} + +} // namespace DiscIO |
