mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-26 15:45:42 +00:00
CDROM: Add option to choose emulated mechacon version
This commit is contained in:
parent
8f1d724f4c
commit
38bc2bd057
|
@ -2036,8 +2036,24 @@ void CDROM::ExecuteTestCommand(u8 subcommand)
|
||||||
{
|
{
|
||||||
Log_DebugPrintf("Get CDROM BIOS Date/Version");
|
Log_DebugPrintf("Get CDROM BIOS Date/Version");
|
||||||
|
|
||||||
static constexpr u8 response[] = {0x95, 0x05, 0x16, 0xC1};
|
static constexpr const u8 version_table[][4] = {
|
||||||
s_response_fifo.PushRange(response, countof(response));
|
{0x94, 0x09, 0x19, 0xC0}, // PSX (PU-7) 19 Sep 1994, version vC0 (a)
|
||||||
|
{0x94, 0x11, 0x18, 0xC0}, // PSX (PU-7) 18 Nov 1994, version vC0 (b)
|
||||||
|
{0x95, 0x05, 0x16, 0xC1}, // PSX (EARLY-PU-8) 16 May 1995, version vC1 (a)
|
||||||
|
{0x95, 0x07, 0x24, 0xC1}, // PSX (LATE-PU-8) 24 Jul 1995, version vC1 (b)
|
||||||
|
{0x95, 0x07, 0x24, 0xD1}, // PSX (LATE-PU-8,debug ver)24 Jul 1995, version vD1 (debug)
|
||||||
|
{0x96, 0x08, 0x15, 0xC2}, // PSX (PU-16, Video CD) 15 Aug 1996, version vC2 (VCD)
|
||||||
|
{0x96, 0x08, 0x18, 0xC1}, // PSX (LATE-PU-8,yaroze) 18 Aug 1996, version vC1 (yaroze)
|
||||||
|
{0x96, 0x09, 0x12, 0xC2}, // PSX (PU-18) (japan) 12 Sep 1996, version vC2 (a.jap)
|
||||||
|
{0x97, 0x01, 0x10, 0xC2}, // PSX (PU-18) (us/eur) 10 Jan 1997, version vC2 (a)
|
||||||
|
{0x97, 0x08, 0x14, 0xC2}, // PSX (PU-20) 14 Aug 1997, version vC2 (b)
|
||||||
|
{0x98, 0x06, 0x10, 0xC3}, // PSX (PU-22) 10 Jul 1998, version vC3 (a)
|
||||||
|
{0x99, 0x02, 0x01, 0xC3}, // PSX/PSone (PU-23, PM-41) 01 Feb 1999, version vC3 (b)
|
||||||
|
{0xA1, 0x03, 0x06, 0xC3}, // PSone/late (PM-41(2)) 06 Jun 2001, version vC3 (c)
|
||||||
|
};
|
||||||
|
|
||||||
|
s_response_fifo.PushRange(version_table[static_cast<u8>(g_settings.cdrom_mechacon_version)],
|
||||||
|
countof(version_table[0]));
|
||||||
SetInterrupt(Interrupt::ACK);
|
SetInterrupt(Interrupt::ACK);
|
||||||
EndCommand();
|
EndCommand();
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -259,6 +259,10 @@ void Settings::Load(SettingsInterface& si)
|
||||||
|
|
||||||
cdrom_readahead_sectors =
|
cdrom_readahead_sectors =
|
||||||
static_cast<u8>(si.GetIntValue("CDROM", "ReadaheadSectors", DEFAULT_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_region_check = si.GetBoolValue("CDROM", "RegionCheck", false);
|
||||||
cdrom_load_image_to_ram = si.GetBoolValue("CDROM", "LoadImageToRAM", false);
|
cdrom_load_image_to_ram = si.GetBoolValue("CDROM", "LoadImageToRAM", false);
|
||||||
cdrom_load_image_patches = si.GetBoolValue("CDROM", "LoadImagePatches", 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.SetFloatValue("Display", "OSDScale", display_osd_scale);
|
||||||
|
|
||||||
si.SetIntValue("CDROM", "ReadaheadSectors", cdrom_readahead_sectors);
|
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", "RegionCheck", cdrom_region_check);
|
||||||
si.SetBoolValue("CDROM", "LoadImageToRAM", cdrom_load_image_to_ram);
|
si.SetBoolValue("CDROM", "LoadImageToRAM", cdrom_load_image_to_ram);
|
||||||
si.SetBoolValue("CDROM", "LoadImagePatches", cdrom_load_image_patches);
|
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)]);
|
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::AppRoot;
|
||||||
std::string EmuFolders::DataRoot;
|
std::string EmuFolders::DataRoot;
|
||||||
std::string EmuFolders::Bios;
|
std::string EmuFolders::Bios;
|
||||||
|
|
|
@ -151,6 +151,7 @@ struct Settings
|
||||||
float gpu_pgxp_depth_clear_threshold = DEFAULT_GPU_PGXP_DEPTH_THRESHOLD / GPU_PGXP_DEPTH_THRESHOLD_SCALE;
|
float gpu_pgxp_depth_clear_threshold = DEFAULT_GPU_PGXP_DEPTH_THRESHOLD / GPU_PGXP_DEPTH_THRESHOLD_SCALE;
|
||||||
|
|
||||||
u8 cdrom_readahead_sectors = DEFAULT_CDROM_READAHEAD_SECTORS;
|
u8 cdrom_readahead_sectors = DEFAULT_CDROM_READAHEAD_SECTORS;
|
||||||
|
CDROMMechaconVersion cdrom_mechacon_version = DEFAULT_CDROM_MECHACON_VERSION;
|
||||||
bool cdrom_region_check = false;
|
bool cdrom_region_check = false;
|
||||||
bool cdrom_load_image_to_ram = false;
|
bool cdrom_load_image_to_ram = false;
|
||||||
bool cdrom_load_image_patches = false;
|
bool cdrom_load_image_patches = false;
|
||||||
|
@ -405,6 +406,10 @@ struct Settings
|
||||||
static const char* GetMultitapModeName(MultitapMode mode);
|
static const char* GetMultitapModeName(MultitapMode mode);
|
||||||
static const char* GetMultitapModeDisplayName(MultitapMode mode);
|
static const char* GetMultitapModeDisplayName(MultitapMode mode);
|
||||||
|
|
||||||
|
static std::optional<CDROMMechaconVersion> ParseCDROMMechVersionName(const char* str);
|
||||||
|
static const char* GetCDROMMechVersionName(CDROMMechaconVersion mode);
|
||||||
|
static const char* GetCDROMMechVersionDisplayName(CDROMMechaconVersion mode);
|
||||||
|
|
||||||
static constexpr GPURenderer DEFAULT_GPU_RENDERER = GPURenderer::Automatic;
|
static constexpr GPURenderer DEFAULT_GPU_RENDERER = GPURenderer::Automatic;
|
||||||
static constexpr GPUTextureFilter DEFAULT_GPU_TEXTURE_FILTER = GPUTextureFilter::Nearest;
|
static constexpr GPUTextureFilter DEFAULT_GPU_TEXTURE_FILTER = GPUTextureFilter::Nearest;
|
||||||
static constexpr GPUDownsampleMode DEFAULT_GPU_DOWNSAMPLE_MODE = GPUDownsampleMode::Disabled;
|
static constexpr GPUDownsampleMode DEFAULT_GPU_DOWNSAMPLE_MODE = GPUDownsampleMode::Disabled;
|
||||||
|
@ -447,6 +452,7 @@ struct Settings
|
||||||
static constexpr float DEFAULT_OSD_SCALE = 100.0f;
|
static constexpr float DEFAULT_OSD_SCALE = 100.0f;
|
||||||
|
|
||||||
static constexpr u8 DEFAULT_CDROM_READAHEAD_SECTORS = 8;
|
static constexpr u8 DEFAULT_CDROM_READAHEAD_SECTORS = 8;
|
||||||
|
static constexpr CDROMMechaconVersion DEFAULT_CDROM_MECHACON_VERSION = CDROMMechaconVersion::VC1A;
|
||||||
|
|
||||||
static constexpr ControllerType DEFAULT_CONTROLLER_1_TYPE = ControllerType::AnalogController;
|
static constexpr ControllerType DEFAULT_CONTROLLER_1_TYPE = ControllerType::AnalogController;
|
||||||
static constexpr ControllerType DEFAULT_CONTROLLER_2_TYPE = ControllerType::None;
|
static constexpr ControllerType DEFAULT_CONTROLLER_2_TYPE = ControllerType::None;
|
||||||
|
|
|
@ -204,3 +204,22 @@ enum class CPUFastmemMode
|
||||||
LUT,
|
LUT,
|
||||||
Count
|
Count
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class CDROMMechaconVersion : u8
|
||||||
|
{
|
||||||
|
VC0A,
|
||||||
|
VC0B,
|
||||||
|
VC1A,
|
||||||
|
VC1B,
|
||||||
|
VD1,
|
||||||
|
VC2,
|
||||||
|
VC1,
|
||||||
|
VC2J,
|
||||||
|
VC2A,
|
||||||
|
VC2B,
|
||||||
|
VC3A,
|
||||||
|
VC3B,
|
||||||
|
VC3C,
|
||||||
|
|
||||||
|
Count,
|
||||||
|
};
|
||||||
|
|
|
@ -347,6 +347,10 @@ void AdvancedSettingsWidget::addTweakOptions()
|
||||||
addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Increase Timer Resolution"), "Main",
|
addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Increase Timer Resolution"), "Main",
|
||||||
"IncreaseTimerResolution", true);
|
"IncreaseTimerResolution", true);
|
||||||
|
|
||||||
|
addChoiceTweakOption(m_dialog, m_ui.tweakOptionTable, tr("CD-ROM Mechacon Version"), "CDROM", "MechaconVersion",
|
||||||
|
Settings::ParseCDROMMechVersionName, Settings::GetCDROMMechVersionName,
|
||||||
|
Settings::GetCDROMMechVersionDisplayName, static_cast<u8>(CDROMMechaconVersion::Count),
|
||||||
|
Settings::DEFAULT_CDROM_MECHACON_VERSION);
|
||||||
addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM",
|
addBooleanTweakOption(m_dialog, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM",
|
||||||
"AllowBootingWithoutSBIFile", false);
|
"AllowBootingWithoutSBIFile", false);
|
||||||
|
|
||||||
|
@ -399,11 +403,13 @@ void AdvancedSettingsWidget::onResetToDefaultClicked()
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Disable Shader Cache
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Disable Shader Cache
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Stretch Display Vertically
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Stretch Display Vertically
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase Timer Resolution
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, true); // Increase Timer Resolution
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Allow booting without SBI file
|
setChoiceTweakOption(m_ui.tweakOptionTable, i++,
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Create save state backups
|
Settings::DEFAULT_CDROM_MECHACON_VERSION); // CDROM Mechacon Version
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Allow booting without SBI file
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV Writes
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Create save state backups
|
||||||
setDirectoryOption(m_ui.tweakOptionTable, i++, ""); // PCDrv Root Directory
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV
|
||||||
|
setBooleanTweakOption(m_ui.tweakOptionTable, i++, false); // Enable PCDRV Writes
|
||||||
|
setDirectoryOption(m_ui.tweakOptionTable, i++, ""); // PCDrv Root Directory
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -443,6 +449,7 @@ void AdvancedSettingsWidget::onResetToDefaultClicked()
|
||||||
sif->DeleteValue("GPU", "UseDebugDevice");
|
sif->DeleteValue("GPU", "UseDebugDevice");
|
||||||
sif->DeleteValue("Display", "StretchVertically");
|
sif->DeleteValue("Display", "StretchVertically");
|
||||||
sif->DeleteValue("Main", "IncreaseTimerResolution");
|
sif->DeleteValue("Main", "IncreaseTimerResolution");
|
||||||
|
sif->DeleteValue("CDROM", "MechaconVersion");
|
||||||
sif->DeleteValue("CDROM", "AllowBootingWithoutSBIFile");
|
sif->DeleteValue("CDROM", "AllowBootingWithoutSBIFile");
|
||||||
sif->DeleteValue("General", "CreateSaveStateBackups");
|
sif->DeleteValue("General", "CreateSaveStateBackups");
|
||||||
sif->DeleteValue("PCDrv", "Enabled");
|
sif->DeleteValue("PCDrv", "Enabled");
|
||||||
|
|
Loading…
Reference in a new issue