Convert FirmwareFile to a readonly struct

This commit is contained in:
YoshiRulz 2021-02-12 16:57:39 +10:00
parent 10ed0872a4
commit af7ed156e9
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
4 changed files with 109 additions and 95 deletions

View File

@ -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; }

View File

@ -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

View File

@ -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"));

View File

@ -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;
}
}
}