diff --git a/src/BizHawk.Client.Common/fwmanager/ResolutionInfo.cs b/src/BizHawk.Client.Common/fwmanager/ResolutionInfo.cs index 899fb8c9ba..7dd18abbc6 100644 --- a/src/BizHawk.Client.Common/fwmanager/ResolutionInfo.cs +++ b/src/BizHawk.Client.Common/fwmanager/ResolutionInfo.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.Common public string Hash { get; set; } - public FirmwareFile KnownFirmwareFile { get; set; } + public FirmwareFile? KnownFirmwareFile { get; set; } public bool KnownMismatching { get; set; } diff --git a/src/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs b/src/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs index 0d9f522b8b..88082e2b16 100644 --- a/src/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs +++ b/src/BizHawk.Client.EmuHawk/config/FirmwaresConfig.cs @@ -318,7 +318,7 @@ namespace BizHawk.Client.EmuHawk { lvi.ImageIndex = IdOk; lvi.ToolTipText = "Good! This file has been bound to some kind of a decent choice"; - lvi.SubItems[4].Text = ri.KnownFirmwareFile.Description; + lvi.SubItems[4].Text = ri.KnownFirmwareFile.Value.Description; } // bolden the item if necessary @@ -376,9 +376,7 @@ namespace BizHawk.Client.EmuHawk if (ri?.KnownFirmwareFile == null) continue; if (ri.UserSpecified) continue; - var fpTarget = Path.Combine( - _pathEntries.FirmwareAbsolutePath(), - ri.KnownFirmwareFile.RecommendedName); + var fpTarget = Path.Combine(_pathEntries.FirmwareAbsolutePath(), ri.KnownFirmwareFile.Value.RecommendedName); string fpSource = ri.FilePath; try diff --git a/src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs b/src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs index b789848227..e35d134ec3 100644 --- a/src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs +++ b/src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs @@ -28,22 +28,20 @@ namespace BizHawk.Emulation.Common string desc, string additionalInfo = "", bool isBad = false) - => filesByHash[hash] = new FirmwareFile - { - Hash = hash, - Size = size, - RecommendedName = recommendedName, - Description = desc, - Info = additionalInfo, - Bad = isBad, - }; + => filesByHash[hash] = new( + hash: hash, + size: size, + recommendedName: recommendedName, + desc: desc, + additionalInfo: additionalInfo, + isBad: isBad); - void Option(string systemId, string id, FirmwareFile ff, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable) + void Option(string systemId, string id, in FirmwareFile ff, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable) => options.Add(new FirmwareOption { ID = new(systemId, id), Hash = ff.Hash, - Status = ff.Bad ? FirmwareOptionStatus.Bad : status, + Status = ff.IsBad ? FirmwareOptionStatus.Bad : status, Size = ff.Size }); @@ -64,8 +62,8 @@ namespace BizHawk.Emulation.Common var fdsNintendo = File("57FE1BDEE955BB48D357E463CCBF129496930B62", 8192, "FDS_disksys-nintendo.rom", "Bios (Nintendo)"); var fdsTwinFc = File("E4E41472C454F928E53EB10E0509BF7D1146ECC1", 8192, "FDS_disksys-nintendo.rom", "Bios (TwinFC)"); Firmware("NES", "Bios_FDS", "Bios"); - Option("NES", "Bios_FDS", fdsNintendo, FirmwareOptionStatus.Ideal); - Option("NES", "Bios_FDS", fdsTwinFc); + Option("NES", "Bios_FDS", in fdsNintendo, FirmwareOptionStatus.Ideal); + Option("NES", "Bios_FDS", in fdsTwinFc); FirmwareAndOption("973E10840DB683CF3FAF61BD443090786B3A9F04", 262144, "SNES", "Rom_SGB", "SNES_sgb.sfc", "Super GameBoy Rom"); // World (Rev B) ? FirmwareAndOption("A002F4EFBA42775A31185D443F3ED1790B0E949A", 3072, "SNES", "CX4", "SNES_cx4.rom", "CX4 Rom"); @@ -97,8 +95,8 @@ namespace BizHawk.Emulation.Common var gbaNormal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "GBA_bios.rom", "Bios (World)"); var gbaJDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "GBA_bios_Debug-(J).rom", "Bios (J Debug)"); Firmware("GBA", "Bios", "Bios"); - Option("GBA", "Bios", gbaNormal); - Option("GBA", "Bios", gbaJDebug); + Option("GBA", "Bios", in gbaNormal); + Option("GBA", "Bios", in gbaJDebug); FirmwareAndOption("24F67BDEA115A2C847C8813A262502EE1607B7DF", 16384, "NDS", "bios7", "NDS_Bios7.bin", "ARM7 BIOS"); FirmwareAndOption("BFAAC75F101C135E32E2AAF541DE6B1BE4C8C62D", 4096, "NDS", "bios9", "NDS_Bios9.bin", "ARM9 BIOS"); @@ -137,20 +135,20 @@ namespace BizHawk.Emulation.Common var ss_100a_ue = File("3BB41FEB82838AB9A35601AC666DE5AACFD17A58", 524288, "SAT_1.00a-(U+E).bin", "Bios v1.00a (U+E)"); // ?? is this size correct? var ss_101_j = File("DF94C5B4D47EB3CC404D88B33A8FDA237EAF4720", 524288, "SAT_1.01-(J).bin", "Bios v1.01 (J)"); // ?? is this size correct? Firmware("SAT", "J", "Bios (J)"); - Option("SAT", "J", ss_100_j); - Option("SAT", "J", ss_101_j); - Option("SAT", "J", ss_100_ue); - Option("SAT", "J", ss_100a_ue); + Option("SAT", "J", in ss_100_j); + Option("SAT", "J", in ss_101_j); + Option("SAT", "J", in ss_100_ue); + Option("SAT", "J", in ss_100a_ue); Firmware("SAT", "U", "Bios (U)"); - Option("SAT", "U", ss_100_ue); - Option("SAT", "U", ss_100a_ue); - Option("SAT", "U", ss_100_j); - Option("SAT", "U", ss_101_j); + Option("SAT", "U", in ss_100_ue); + Option("SAT", "U", in ss_100a_ue); + Option("SAT", "U", in ss_100_j); + Option("SAT", "U", in ss_101_j); Firmware("SAT", "E", "Bios (E)"); - Option("SAT", "E", ss_100_ue); - Option("SAT", "E", ss_100a_ue); - Option("SAT", "E", ss_100_j); - Option("SAT", "E", ss_101_j); + Option("SAT", "E", in ss_100_ue); + Option("SAT", "E", in ss_100a_ue); + Option("SAT", "E", in ss_100_j); + Option("SAT", "E", in ss_101_j); FirmwareAndOption("A67CD4F550751F8B91DE2B8B74528AB4E0C11C77", 2 * 1024 * 1024, "SAT", "KOF95", "SAT_KoF95.bin", "King of Fighters cartridge"); //Firmware("SAT", "ULTRAMAN", "Ultraman cartridge"); FirmwareAndOption("56C1B93DA6B660BF393FBF48CA47569000EF4047", 2 * 1024 * 1024, "SAT", "ULTRAMAN", "SAT_Ultraman.bin", "Ultraman cartridge"); @@ -164,14 +162,14 @@ namespace BizHawk.Emulation.Common var ti83p_103 = File("37EAEEB9FB5C18FB494E322B75070E80CC4D858E", 262144, "TI83p_103b.rom", "TI-83 Plus Rom v1.03"); // ?? is this size correct? var ti83p_112 = File("6615DF5554076B6B81BD128BF847D2FF046E556B", 262144, "TI83p_112.rom", "TI-83 Plus Rom v1.12"); // ?? is this size correct? Firmware("TI83", "Rom", "TI-83 Rom"); - Option("TI83", "Rom", ti83_102); - Option("TI83", "Rom", ti83_103); - Option("TI83", "Rom", ti83_104); - Option("TI83", "Rom", ti83_106); - Option("TI83", "Rom", ti83_107); - Option("TI83", "Rom", ti83_108); - Option("TI83", "Rom", ti83p_103); - Option("TI83", "Rom", ti83p_112); + Option("TI83", "Rom", in ti83_102); + Option("TI83", "Rom", in ti83_103); + Option("TI83", "Rom", in ti83_104); + Option("TI83", "Rom", in ti83_106); + Option("TI83", "Rom", in ti83_107); + Option("TI83", "Rom", in ti83_108); + Option("TI83", "Rom", in ti83p_103); + Option("TI83", "Rom", in ti83p_112); // mega cd var eu_mcd1_9210 = File("F891E0EA651E2232AF0C5C4CB46A0CAE2EE8F356", 131072, "MCD_eu_9210.bin", "Mega CD EU (9210)"); @@ -184,13 +182,13 @@ namespace BizHawk.Emulation.Common Firmware("GEN", "CD_BIOS_EU", "Mega CD Bios (Europe)"); Firmware("GEN", "CD_BIOS_JP", "Mega CD Bios (Japan)"); Firmware("GEN", "CD_BIOS_US", "Sega CD Bios (USA)"); - Option("GEN", "CD_BIOS_EU", eu_mcd1_9210); - Option("GEN", "CD_BIOS_EU", eu_mcd2_9303); - Option("GEN", "CD_BIOS_EU", eu_mcd2_9306); - Option("GEN", "CD_BIOS_JP", jp_mcd1_9111); - Option("GEN", "CD_BIOS_JP", jp_mcd1_9112); - Option("GEN", "CD_BIOS_US", us_scd1_9210); - Option("GEN", "CD_BIOS_US", us_scd2_9303); + Option("GEN", "CD_BIOS_EU", in eu_mcd1_9210); + Option("GEN", "CD_BIOS_EU", in eu_mcd2_9303); + Option("GEN", "CD_BIOS_EU", in eu_mcd2_9306); + Option("GEN", "CD_BIOS_JP", in jp_mcd1_9111); + Option("GEN", "CD_BIOS_JP", in jp_mcd1_9112); + Option("GEN", "CD_BIOS_US", in us_scd1_9210); + Option("GEN", "CD_BIOS_US", in us_scd2_9303); FirmwareAndOption("DBEBD76A448447CB6E524AC3CB0FD19FC065D944", 256, "32X", "G", "32X_G_BIOS.BIN", "32x 68k BIOS"); FirmwareAndOption("1E5B0B2441A4979B6966D942B20CC76C413B8C5E", 2048, "32X", "M", "32X_M_BIOS.BIN", "32x SH2 MASTER BIOS"); FirmwareAndOption("4103668C1BBD66C5E24558E73D4F3F92061A109A", 1024, "32X", "S", "32X_S_BIOS.BIN", "32x SH2 SLAVE BIOS"); @@ -204,11 +202,11 @@ namespace BizHawk.Emulation.Common Firmware("SMS", "Export", "SMS Bios (USA/Export)"); Firmware("SMS", "Japan", "SMS Bios (Japan)"); Firmware("SMS", "Korea", "SMS Bios (Korea)"); - Option("SMS", "Export", sms_us_13); - Option("SMS", "Export", sms_us_1b); - Option("SMS", "Export", sms_m404); - Option("SMS", "Japan", sms_jp_21); - Option("SMS", "Korea", sms_kr); + Option("SMS", "Export", in sms_us_13); + Option("SMS", "Export", in sms_us_1b); + Option("SMS", "Export", in sms_m404); + Option("SMS", "Japan", in sms_jp_21); + Option("SMS", "Korea", in sms_kr); // PSX // http://forum.fobby.net/index.php?t=msg&goto=2763 [f] @@ -249,49 +247,49 @@ namespace BizHawk.Emulation.Common Firmware("PSX", "U", "BIOS (U)"); Firmware("PSX", "J", "BIOS (J)"); Firmware("PSX", "E", "BIOS (E)"); - Option("PSX", "U", ps_30a); - Option("PSX", "J", ps_30j); - Option("PSX", "E", ps_30e); + Option("PSX", "U", in ps_30a); + Option("PSX", "J", in ps_30j); + Option("PSX", "E", in ps_30e); // in general, alternates aren't allowed.. their quality isn't known. // we have this comment from fobby.net: "SCPH7502 works fine for European games" (TBD) // however, we're sticking with the 3.0 series. // please note: 2.1 or 2.2 would be a better choice, as the dates are the same and the bioses are more likely to matching in terms of entry points and such. // but 3.0 is what mednafen used - Option("PSX", "J", ps_10j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_11j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_20a, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", ps_20e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_21j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_21a, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", ps_21e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_22j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_22j_bad, FirmwareOptionStatus.Bad); - Option("PSX", "J", ps_22j_bad2, FirmwareOptionStatus.Bad); - Option("PSX", "U", ps_22a, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", ps_22e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_22d, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", ps_30e_bad, FirmwareOptionStatus.Bad); - Option("PSX", "J", ps_40j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_41a, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", ps_41e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", psone_43j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", psone_44e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", psone_45a, FirmwareOptionStatus.Unacceptable); - Option("PSX", "E", psone_r5e, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps2_50j, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_22jv, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_41aw, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_ps3, FirmwareOptionStatus.Unacceptable); - Option("PSX", "U", ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); //not really sure what to do with this one, let's just call it region free - Option("PSX", "E", ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); - Option("PSX", "J", ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_10j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_11j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_20a, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in ps_20e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_21j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_21a, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in ps_21e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_22j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_22j_bad, FirmwareOptionStatus.Bad); + Option("PSX", "J", in ps_22j_bad2, FirmwareOptionStatus.Bad); + Option("PSX", "U", in ps_22a, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in ps_22e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_22d, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in ps_30e_bad, FirmwareOptionStatus.Bad); + Option("PSX", "J", in ps_40j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_41a, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in ps_41e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in psone_43j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in psone_44e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in psone_45a, FirmwareOptionStatus.Unacceptable); + Option("PSX", "E", in psone_r5e, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps2_50j, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_22jv, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_41aw, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_ps3, FirmwareOptionStatus.Unacceptable); + Option("PSX", "U", in ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); //not really sure what to do with this one, let's just call it region free + Option("PSX", "E", in ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); + Option("PSX", "J", in ps_dtl_h2000, FirmwareOptionStatus.Unacceptable); Firmware("AppleII", "AppleIIe", "AppleIIe.rom"); var appleII_AppleIIe = File("B8EA90ABE135A0031065E01697C4A3A20D51198B", 16384, "AppleIIe.rom", "Apple II e"); - Option("AppleII", "AppleIIe", appleII_AppleIIe); + Option("AppleII", "AppleIIe", in appleII_AppleIIe); Firmware("AppleII", "DiskII", "DiskII.rom"); var appleII_DiskII = File("D4181C9F046AAFC3FB326B381BAAC809D9E38D16", 256, "AppleIIe_DiskII.rom", "Disk II"); - Option("AppleII", "DiskII", appleII_DiskII); + Option("AppleII", "DiskII", in appleII_DiskII); FirmwareAndOption("B2E1955D957A475DE2411770452EFF4EA19F4CEE", 1024, "O2", "BIOS", "O2_Odyssey2.bin", "Odyssey 2 Bios"); FirmwareAndOption("A6120AED50831C9C0D95DBDF707820F601D9452E", 1024, "O2", "BIOS-C52", "O2_PhillipsC52.bin", "Phillips C52 Bios"); @@ -313,11 +311,11 @@ namespace BizHawk.Emulation.Common Firmware("PCFX", "BIOS", "PCFX bios"); var pcfxbios = File("1A77FD83E337F906AECAB27A1604DB064CF10074", 1024 * 1024, "PCFX_bios.bin", "PCFX BIOS 1.00"); var pcfxv101 = File("8B662F7548078BE52A871565E19511CCCA28C5C8", 1024 * 1024, "PCFX_v101.bin", "PCFX BIOS 1.01"); - Option("PCFX", "BIOS", pcfxbios, FirmwareOptionStatus.Ideal); - Option("PCFX", "BIOS", pcfxv101, FirmwareOptionStatus.Acceptable); + Option("PCFX", "BIOS", in pcfxbios, FirmwareOptionStatus.Ideal); + Option("PCFX", "BIOS", in pcfxv101, FirmwareOptionStatus.Acceptable); Firmware("PCFX", "SCSIROM", "fx-scsi.rom"); var fxscsi = File("65482A23AC5C10A6095AEE1DB5824CCA54EAD6E5", 512 * 1024, "PCFX_fx-scsi.rom", "PCFX SCSI ROM"); - Option("PCFX", "SCSIROM", fxscsi); + Option("PCFX", "SCSIROM", in fxscsi); Firmware("PS2", "BIOS", "PS2 Bios"); Option("PS2", "BIOS", File("FBD54BFC020AF34008B317DCB80B812DD29B3759", 4 * 1024 * 1024, "ps2-0230j-20080220.bin", "PS2 Bios")); diff --git a/src/BizHawk.Emulation.Common/Database/FirmwareFile.cs b/src/BizHawk.Emulation.Common/Database/FirmwareFile.cs index fcaef0c4a9..34f91dca8a 100644 --- a/src/BizHawk.Emulation.Common/Database/FirmwareFile.cs +++ b/src/BizHawk.Emulation.Common/Database/FirmwareFile.cs @@ -1,17 +1,35 @@ +#nullable enable + namespace BizHawk.Emulation.Common { - public sealed class FirmwareFile + public readonly struct FirmwareFile { - public bool Bad { get; set; } + public readonly string Description; - public string Description { get; set; } + public readonly string Hash; - public string Hash { get; set; } + public readonly string Info; - public string Info { get; set; } + public readonly bool IsBad; - public string RecommendedName { get; set; } + public readonly string RecommendedName; - public long Size { get; set; } + public readonly long Size; + + public FirmwareFile( + string hash, + long size, + string recommendedName, + string desc, + string additionalInfo = "", + bool isBad = false) + { + Description = desc; + Hash = hash; + Info = additionalInfo; + IsBad = isBad; + RecommendedName = recommendedName; + Size = size; + } } }