CDROM: Add option to choose emulated mechacon version

This commit is contained in:
Stenzek
2023-11-05 14:43:38 +10:00
parent 8f1d724f4c
commit 38bc2bd057
5 changed files with 91 additions and 7 deletions

View File

@ -259,6 +259,10 @@ void Settings::Load(SettingsInterface& si)
cdrom_readahead_sectors =
static_cast<u8>(si.GetIntValue("CDROM", "ReadaheadSectors", DEFAULT_CDROM_READAHEAD_SECTORS));
cdrom_mechacon_version =
ParseCDROMMechVersionName(
si.GetStringValue("CDROM", "MechaconVersion", GetCDROMMechVersionName(DEFAULT_CDROM_MECHACON_VERSION)).c_str())
.value_or(DEFAULT_CDROM_MECHACON_VERSION);
cdrom_region_check = si.GetBoolValue("CDROM", "RegionCheck", false);
cdrom_load_image_to_ram = si.GetBoolValue("CDROM", "LoadImageToRAM", false);
cdrom_load_image_patches = si.GetBoolValue("CDROM", "LoadImagePatches", false);
@ -489,6 +493,7 @@ void Settings::Save(SettingsInterface& si) const
si.SetFloatValue("Display", "OSDScale", display_osd_scale);
si.SetIntValue("CDROM", "ReadaheadSectors", cdrom_readahead_sectors);
si.SetStringValue("CDROM", "MechaconVersion", GetCDROMMechVersionName(cdrom_mechacon_version));
si.SetBoolValue("CDROM", "RegionCheck", cdrom_region_check);
si.SetBoolValue("CDROM", "LoadImageToRAM", cdrom_load_image_to_ram);
si.SetBoolValue("CDROM", "LoadImagePatches", cdrom_load_image_patches);
@ -1403,6 +1408,37 @@ const char* Settings::GetMultitapModeDisplayName(MultitapMode mode)
return Host::TranslateToCString("MultitapMode", s_multitap_enable_mode_display_names[static_cast<size_t>(mode)]);
}
static constexpr const std::array s_mechacon_version_names = {"VC0A", "VC0B", "VC1A", "VC1B", "VD1", "VC2", "VC1",
"VC2J", "VC2A", "VC2B", "VC3A", "VC3B", "VC3C"};
static constexpr const std::array s_mechacon_version_display_names = {
"94/09/19 (VC0A)", "94/11/18 (VC0B)", "95/05/16 (VC1A)", "95/07/24 (VC1B)", "95/07/24 (VD1)",
"96/08/15 (VC2)", "96/08/18 (VC1)", "96/09/12 (VC2J)", "97/01/10 (VC2A)", "97/08/14 (VC2B)",
"98/06/10 (VC3A)", "99/02/01 (VC3B)", "01/03/06 (VC3C)"};
std::optional<CDROMMechaconVersion> Settings::ParseCDROMMechVersionName(const char* str)
{
u32 index = 0;
for (const char* name : s_mechacon_version_names)
{
if (StringUtil::Strcasecmp(name, str) == 0)
return static_cast<CDROMMechaconVersion>(index);
index++;
}
return std::nullopt;
}
const char* Settings::GetCDROMMechVersionName(CDROMMechaconVersion mode)
{
return s_mechacon_version_names[static_cast<u32>(mode)];
}
const char* Settings::GetCDROMMechVersionDisplayName(CDROMMechaconVersion mode)
{
return s_mechacon_version_display_names[static_cast<size_t>(mode)];
}
std::string EmuFolders::AppRoot;
std::string EmuFolders::DataRoot;
std::string EmuFolders::Bios;