// Copyright 2020 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #include "DiscIO/VolumeDisc.h" #include #include #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(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(3, partition).value_or(0); const Region region = GetRegion(); const std::optional 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 region_code) const { if (!region_code) return Region::Unknown; const Region region = static_cast(*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(&maker_id), partition)) return std::string(); return DecodeString(maker_id); } std::optional VolumeDisc::GetRevision(const Partition& partition) const { std::optional revision = ReadSwapped(7, partition); return revision ? *revision : std::optional(); } std::string VolumeDisc::GetInternalName(const Partition& partition) const { char name[0x60]; if (!Read(0x20, sizeof(name), reinterpret_cast(&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(&date), partition)) return std::string(); return DecodeString(date); } std::optional VolumeDisc::GetDiscNumber(const Partition& partition) const { return ReadSwapped(6, partition); } } // namespace DiscIO