firmwaremanager now tracks filesizes, and filesizes of known firmwares are used to restrict scope of scanning

This commit is contained in:
zeromus 2014-11-13 00:09:16 +00:00
parent 2e88a279bb
commit a7432a1e52
5 changed files with 138 additions and 105 deletions
BizHawk.Client.Common
BizHawk.Client.EmuHawk/config
BizHawk.Emulation.Common/Database

View File

@ -6,9 +6,6 @@ using System.Linq;
using BizHawk.Common.BufferExtensions;
using BizHawk.Emulation.Common;
// IDEA: put filesizes in DB too. then scans can go real quick by only scanning filesizes that match (and then scanning filesizes that dont match, in case of an emergency)
// this would be adviseable if we end up with a very large firmware file
namespace BizHawk.Client.Common
{
public class FirmwareManager
@ -28,6 +25,7 @@ namespace BizHawk.Client.Common
public FirmwareDatabase.FirmwareFile KnownFirmwareFile { get; set; }
public string FilePath { get; set; }
public string Hash { get; set; }
public long Size { get; set; }
}
private readonly Dictionary<FirmwareDatabase.FirmwareRecord, ResolutionInfo> _resolutionDictionary = new Dictionary<FirmwareDatabase.FirmwareRecord, ResolutionInfo>();
@ -98,6 +96,11 @@ namespace BizHawk.Client.Common
public void DoScanAndResolve()
{
//build a list of file sizes. Only those will be checked during scanning
HashSet<long> sizes = new HashSet<long>();
foreach (var ff in FirmwareDatabase.FirmwareFiles)
sizes.Add(ff.size);
using(var reader = new RealFirmwareReader())
{
// build a list of files under the global firmwares path, and build a hash for each of them while we're at it
@ -119,7 +122,8 @@ namespace BizHawk.Client.Common
foreach (var fi in di.GetFiles())
{
reader.Read(fi);
if(sizes.Contains(fi.Length))
reader.Read(fi);
}
}
@ -149,7 +153,8 @@ namespace BizHawk.Client.Common
{
FilePath = reader.dict[hash].FileInfo.FullName,
KnownFirmwareFile = FirmwareDatabase.FirmwareFilesByHash[hash],
Hash = hash
Hash = hash,
Size = fo.size
};
_resolutionDictionary[fr] = ri;
goto DONE_FIRMWARE;
@ -190,6 +195,7 @@ namespace BizHawk.Client.Common
// compute its hash
var rff = reader.Read(fi);
ri.Size = fi.Length;
ri.Hash = rff.Hash;
// check whether it was a known file anyway, and go ahead and bind to the known file, as a perk (the firmwares config doesnt really use this information right now)

View File

@ -56,6 +56,7 @@
this.linkBasePath = new System.Windows.Forms.LinkLabel();
this.label1 = new System.Windows.Forms.Label();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.columnHeader8 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.lvFirmwaresContextMenuStrip.SuspendLayout();
this.panel1.SuspendLayout();
this.toolStrip1.SuspendLayout();
@ -79,6 +80,7 @@
this.columnHeader4,
this.columnHeader2,
this.columnHeader3,
this.columnHeader8,
this.columnHeader7});
this.lvFirmwares.ContextMenuStrip = this.lvFirmwaresContextMenuStrip;
this.lvFirmwares.Dock = System.Windows.Forms.DockStyle.Fill;
@ -86,7 +88,7 @@
this.lvFirmwares.GridLines = true;
this.lvFirmwares.Location = new System.Drawing.Point(0, 25);
this.lvFirmwares.Name = "lvFirmwares";
this.lvFirmwares.Size = new System.Drawing.Size(773, 424);
this.lvFirmwares.Size = new System.Drawing.Size(824, 424);
this.lvFirmwares.SmallImageList = this.imageList1;
this.lvFirmwares.TabIndex = 24;
this.lvFirmwares.UseCompatibleStateImageBehavior = false;
@ -128,7 +130,7 @@
// columnHeader7
//
this.columnHeader7.Text = "Hash";
this.columnHeader7.Width = 340;
this.columnHeader7.Width = 250;
//
// lvFirmwaresContextMenuStrip
//
@ -176,7 +178,7 @@
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(3, 3);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(773, 449);
this.panel1.Size = new System.Drawing.Size(824, 449);
this.panel1.TabIndex = 24;
//
// toolStrip1
@ -190,7 +192,7 @@
this.tbbImport});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(773, 25);
this.toolStrip1.Size = new System.Drawing.Size(824, 25);
this.toolStrip1.TabIndex = 23;
this.toolStrip1.Text = "toolStrip1";
//
@ -254,7 +256,7 @@
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.Size = new System.Drawing.Size(779, 478);
this.tableLayoutPanel1.Size = new System.Drawing.Size(830, 478);
this.tableLayoutPanel1.TabIndex = 25;
//
// panel2
@ -267,7 +269,7 @@
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(3, 458);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(773, 17);
this.panel2.Size = new System.Drawing.Size(824, 17);
this.panel2.TabIndex = 26;
//
// linkBasePath
@ -290,11 +292,15 @@
this.label1.TabIndex = 25;
this.label1.Text = "Firmwares Search Path:";
//
// columnHeader8
//
this.columnHeader8.Text = "Size";
//
// FirmwaresConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(779, 478);
this.ClientSize = new System.Drawing.Size(830, 478);
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "FirmwaresConfig";
this.ShowIcon = false;
@ -343,5 +349,6 @@
private System.Windows.Forms.LinkLabel linkBasePath;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ToolStripButton tbbImport;
private System.Windows.Forms.ColumnHeader columnHeader8;
}
}

View File

@ -124,8 +124,10 @@ namespace BizHawk.Client.EmuHawk
lvi.SubItems.Add(fr.descr);
lvi.SubItems.Add(""); //resolved with
lvi.SubItems.Add(""); //location
lvi.SubItems.Add(""); //size
lvi.SubItems.Add(""); //hash
lvi.SubItems[6].Font = fixedFont; //would be used for hash
lvi.SubItems[6].Font = fixedFont; //would be used for hash and size
lvi.SubItems[7].Font = fixedFont; //would be used for hash and size
lvFirmwares.Items.Add(lvi);
//build the groups in the listview as we go:
@ -198,7 +200,7 @@ namespace BizHawk.Client.EmuHawk
{
var fr = lvi.Tag as FirmwareDatabase.FirmwareRecord;
var ri = Manager.Resolve(fr, true);
for(int i=4;i<=6;i++)
for(int i=4;i<=7;i++)
lvi.SubItems[i].Text = "";
if (ri == null)
@ -248,8 +250,11 @@ namespace BizHawk.Client.EmuHawk
lvi.ImageIndex = idUnsure;
lvi.SubItems[5].Text = path;
if (ri.Hash != null) lvi.SubItems[6].Text = "sha1:" + ri.Hash;
else lvi.SubItems[6].Text = "";
lvi.SubItems[6].Text = ri.Size.ToString();
if (ri.Hash != null) lvi.SubItems[7].Text = "sha1:" + ri.Hash;
else lvi.SubItems[7].Text = "";
}
}
@ -362,6 +367,7 @@ namespace BizHawk.Client.EmuHawk
olvi.SubItems.Add(new ListViewItem.ListViewSubItem());
olvi.SubItems.Add(new ListViewItem.ListViewSubItem());
olvi.SubItems.Add(new ListViewItem.ListViewSubItem());
olvi.SubItems.Add(new ListViewItem.ListViewSubItem());
var ff = FirmwareDatabase.FirmwareFilesByHash[o.hash];
if (o.status == FirmwareDatabase.FirmwareOptionStatus.Ideal)
olvi.ImageIndex = FirmwaresConfigInfo.idIdeal;
@ -371,14 +377,16 @@ namespace BizHawk.Client.EmuHawk
olvi.ImageIndex = FirmwaresConfigInfo.idUnacceptable;
if (o.status == FirmwareDatabase.FirmwareOptionStatus.Bad)
olvi.ImageIndex = FirmwaresConfigInfo.idBad;
olvi.SubItems[0].Text = o.hash;
olvi.SubItems[0].Font = fixedFont;
olvi.SubItems[1].Text = ff.recommendedName;
olvi.SubItems[1].Font = this.Font; //why doesnt this work?
olvi.SubItems[2].Text = ff.descr;
olvi.SubItems[0].Text = ff.size.ToString();
olvi.SubItems[0].Font = this.Font; //why doesnt this work?
olvi.SubItems[1].Text = o.hash;
olvi.SubItems[1].Font = fixedFont;
olvi.SubItems[2].Text = ff.recommendedName;
olvi.SubItems[2].Font = this.Font; //why doesnt this work?
olvi.SubItems[3].Text = ff.info;
olvi.SubItems[3].Text = ff.descr;
olvi.SubItems[3].Font = this.Font; //why doesnt this work?
olvi.SubItems[4].Text = ff.info;
olvi.SubItems[4].Font = this.Font; //why doesnt this work?
fciDialog.lvOptions.Items.Add(olvi);
}

View File

@ -34,6 +34,7 @@
this.colStandardFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colInfo = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.btnClose = new System.Windows.Forms.Button();
@ -42,7 +43,7 @@
this.lblFirmware = new System.Windows.Forms.Label();
this.lvmiOptionsContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiOptionsCopy = new System.Windows.Forms.ToolStripMenuItem();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.colSize = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.tableLayoutPanel1.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.lvmiOptionsContextMenuStrip.SuspendLayout();
@ -51,6 +52,7 @@
// lvOptions
//
this.lvOptions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colSize,
this.colHash,
this.colStandardFilename,
this.colDescription,
@ -88,6 +90,12 @@
this.colInfo.Text = "Info";
this.colInfo.Width = 165;
//
// imageList1
//
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
@ -173,11 +181,10 @@
this.tsmiOptionsCopy.Text = "&Copy";
this.tsmiOptionsCopy.Click += new System.EventHandler(this.tsmiOptionsCopy_Click);
//
// imageList1
// colSize
//
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.colSize.Text = "Size";
this.colSize.Width = 74;
//
// FirmwaresConfigInfo
//
@ -216,5 +223,6 @@
private System.Windows.Forms.ToolStripMenuItem tsmiOptionsCopy;
private System.Windows.Forms.ColumnHeader colInfo;
private System.Windows.Forms.ImageList imageList1;
private System.Windows.Forms.ColumnHeader colSize;
}
}

View File

@ -9,53 +9,53 @@ namespace BizHawk.Emulation.Common
static FirmwareDatabase()
{
//FDS has two OK variants (http://tcrf.net/Family_Computer_Disk_System)
var fds_nintendo = File("57FE1BDEE955BB48D357E463CCBF129496930B62", "disksys-nintendo.rom", "Bios (Nintendo)");
var fds_twinfc = File("E4E41472C454F928E53EB10E0509BF7D1146ECC1", "disksys-nintendo.rom", "Bios (TwinFC)");
var fds_nintendo = File("57FE1BDEE955BB48D357E463CCBF129496930B62", 8192, "disksys-nintendo.rom", "Bios (Nintendo)");
var fds_twinfc = File("E4E41472C454F928E53EB10E0509BF7D1146ECC1", 8192, "disksys-nintendo.rom", "Bios (TwinFC)");
Firmware("NES", "Bios_FDS", "Bios");
Option("NES", "Bios_FDS", fds_nintendo);
Option("NES", "Bios_FDS", fds_twinfc);
FirmwareAndOption("973E10840DB683CF3FAF61BD443090786B3A9F04", "SNES", "Rom_SGB", "sgb.sfc", "Super GameBoy Rom"); //World (Rev B) ?
FirmwareAndOption("A002F4EFBA42775A31185D443F3ED1790B0E949A", "SNES", "CX4", "cx4.rom", "CX4 Rom");
FirmwareAndOption("188D471FEFEA71EB53F0EE7064697FF0971B1014", "SNES", "DSP1", "dsp1.rom", "DSP1 Rom");
FirmwareAndOption("78B724811F5F18D8C67669D9390397EB1A47A5E2", "SNES", "DSP1b", "dsp1b.rom", "DSP1b Rom");
FirmwareAndOption("198C4B1C3BFC6D69E734C5957AF3DBFA26238DFB", "SNES", "DSP2", "dsp2.rom", "DSP2 Rom");
FirmwareAndOption("558DA7CB3BD3876A6CA693661FFC6C110E948CF9", "SNES", "DSP3", "dsp3.rom", "DSP3 Rom");
FirmwareAndOption("AF6478AECB6F1B67177E79C82CA04C56250A8C72", "SNES", "DSP4", "dsp4.rom", "DSP4 Rom");
FirmwareAndOption("6472828403DE3589433A906E2C3F3D274C0FF008", "SNES", "ST010", "st010.rom", "ST010 Rom");
FirmwareAndOption("FECBAE2CEC76C710422486BAA186FFA7CA1CF925", "SNES", "ST011", "st011.rom", "ST011 Rom");
FirmwareAndOption("91383B92745CC7CC4F15409AC5BC2C2F699A43F1", "SNES", "ST018", "st018.rom", "ST018 Rom");
FirmwareAndOption("79F5FF55DD10187C7FD7B8DAAB0B3FFBD1F56A2C", "PCECD", "Bios", "pcecd-3.0-(J).pce", "Super CD Bios (J)");
FirmwareAndOption("D9D134BB6B36907C615A594CC7688F7BFCEF5B43", "A78", "Bios_NTSC", "7800NTSCBIOS.bin", "NTSC Bios");
FirmwareAndOption("5A140136A16D1D83E4FF32A19409CA376A8DF874", "A78", "Bios_PAL", "7800PALBIOS.bin", "PAL Bios");
FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios");
FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", "Coleco", "Bios", "ColecoBios.bin", "Bios");
FirmwareAndOption("973E10840DB683CF3FAF61BD443090786B3A9F04", 262144, "SNES", "Rom_SGB", "sgb.sfc", "Super GameBoy Rom"); //World (Rev B) ?
FirmwareAndOption("A002F4EFBA42775A31185D443F3ED1790B0E949A", 3072, "SNES", "CX4", "cx4.rom", "CX4 Rom");
FirmwareAndOption("188D471FEFEA71EB53F0EE7064697FF0971B1014", 8192, "SNES", "DSP1", "dsp1.rom", "DSP1 Rom");
FirmwareAndOption("78B724811F5F18D8C67669D9390397EB1A47A5E2", 8192, "SNES", "DSP1b", "dsp1b.rom", "DSP1b Rom");
FirmwareAndOption("198C4B1C3BFC6D69E734C5957AF3DBFA26238DFB", 8192, "SNES", "DSP2", "dsp2.rom", "DSP2 Rom");
FirmwareAndOption("558DA7CB3BD3876A6CA693661FFC6C110E948CF9", 8192, "SNES", "DSP3", "dsp3.rom", "DSP3 Rom");
FirmwareAndOption("AF6478AECB6F1B67177E79C82CA04C56250A8C72", 8192, "SNES", "DSP4", "dsp4.rom", "DSP4 Rom");
FirmwareAndOption("6472828403DE3589433A906E2C3F3D274C0FF008", 53248, "SNES", "ST010", "st010.rom", "ST010 Rom");
FirmwareAndOption("FECBAE2CEC76C710422486BAA186FFA7CA1CF925", 53248, "SNES", "ST011", "st011.rom", "ST011 Rom");
FirmwareAndOption("91383B92745CC7CC4F15409AC5BC2C2F699A43F1", 163840, "SNES", "ST018", "st018.rom", "ST018 Rom");
FirmwareAndOption("79F5FF55DD10187C7FD7B8DAAB0B3FFBD1F56A2C", 262144, "PCECD", "Bios", "pcecd-3.0-(J).pce", "Super CD Bios (J)");
FirmwareAndOption("D9D134BB6B36907C615A594CC7688F7BFCEF5B43", 4096, "A78", "Bios_NTSC", "7800NTSCBIOS.bin", "NTSC Bios");
FirmwareAndOption("5A140136A16D1D83E4FF32A19409CA376A8DF874", 16384, "A78", "Bios_PAL", "7800PALBIOS.bin", "PAL Bios");
FirmwareAndOption("A3AF676991391A6DD716C79022D4947206B78164", 4096, "A78", "Bios_HSC", "7800highscore.bin", "Highscore Bios");
FirmwareAndOption("45BEDC4CBDEAC66C7DF59E9E599195C778D86A92", 8192, "Coleco", "Bios", "ColecoBios.bin", "Bios");
{
var GBA_JDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", "gbabios.rom", "Bios (J Debug)");
var GBA_Normal = File("300C20DF6731A33952DED8C436F7F186D25D3492", "gbabios.rom", "Bios (World)");
var GBA_JDebug = File("AA98A2AD32B86106340665D1222D7D973A1361C7", 16384, "gbabios.rom", "Bios (J Debug)"); //?? is this size correct?
var GBA_Normal = File("300C20DF6731A33952DED8C436F7F186D25D3492", 16384, "gbabios.rom", "Bios (World)");
Firmware("GBA", "Bios", "Bios");
Option("GBA", "Bios", GBA_Normal);
Option("GBA", "Bios", GBA_JDebug);
}
FirmwareAndOption("E4ED47FAE31693E016B081C6BDA48DA5B70D7CCB", "LYNX", "Boot", "lynxboot.img", "Boot Rom");
FirmwareAndOption("E4ED47FAE31693E016B081C6BDA48DA5B70D7CCB", 512, "LYNX", "Boot", "lynxboot.img", "Boot Rom");
//FirmwareAndOption("24F67BDEA115A2C847C8813A262502EE1607B7DF", "NDS", "Bios_Arm7", "biosnds7.rom", "ARM7 Bios");
//FirmwareAndOption("BFAAC75F101C135E32E2AAF541DE6B1BE4C8C62D", "NDS", "Bios_Arm9", "biosnds9.rom", "ARM9 Bios");
FirmwareAndOption("5A65B922B562CB1F57DAB51B73151283F0E20C7A", "INTV", "EROM", "erom.bin", "Executive Rom");
FirmwareAndOption("F9608BB4AD1CFE3640D02844C7AD8E0BCD974917", "INTV", "GROM", "grom.bin", "Graphics Rom");
FirmwareAndOption("1D503E56DF85A62FEE696E7618DC5B4E781DF1BB", "C64", "Kernal", "c64-kernal.bin", "Kernal Rom");
FirmwareAndOption("79015323128650C742A3694C9429AA91F355905E", "C64", "Basic", "c64-basic.bin", "Basic Rom");
FirmwareAndOption("ADC7C31E18C7C7413D54802EF2F4193DA14711AA", "C64", "Chargen", "c64-chargen.bin", "Chargen Rom");
FirmwareAndOption("5A65B922B562CB1F57DAB51B73151283F0E20C7A", 8192, "INTV", "EROM", "erom.bin", "Executive Rom");
FirmwareAndOption("F9608BB4AD1CFE3640D02844C7AD8E0BCD974917", 2048, "INTV", "GROM", "grom.bin", "Graphics Rom");
FirmwareAndOption("1D503E56DF85A62FEE696E7618DC5B4E781DF1BB", 8192, "C64", "Kernal", "c64-kernal.bin", "Kernal Rom");
FirmwareAndOption("79015323128650C742A3694C9429AA91F355905E", 8192, "C64", "Basic", "c64-basic.bin", "Basic Rom");
FirmwareAndOption("ADC7C31E18C7C7413D54802EF2F4193DA14711AA", 4096, "C64", "Chargen", "c64-chargen.bin", "Chargen Rom");
//for saturn, we think any bios region can pretty much run any iso
//so, we're going to lay this out carefully so that we choose things in a sensible order, but prefer the correct region
var ss_100_j = File("2B8CB4F87580683EB4D760E4ED210813D667F0A2", "saturn-1.00-(J).bin", "Bios v1.00 (J)");
var ss_100_ue = File("FAA8EA183A6D7BBE5D4E03BB1332519800D3FBC3", "saturn-1.00-(U+E).bin", "Bios v1.00 (U+E)");
var ss_100a_ue = File("3BB41FEB82838AB9A35601AC666DE5AACFD17A58", "saturn-1.00a-(U+E).bin", "Bios v1.00a (U+E)");
var ss_101_j = File("DF94C5B4D47EB3CC404D88B33A8FDA237EAF4720", "saturn-1.01-(J).bin", "Bios v1.01 (J)");
var ss_100_j = File("2B8CB4F87580683EB4D760E4ED210813D667F0A2", 524288, "saturn-1.00-(J).bin", "Bios v1.00 (J)");
var ss_100_ue = File("FAA8EA183A6D7BBE5D4E03BB1332519800D3FBC3", 524288, "saturn-1.00-(U+E).bin", "Bios v1.00 (U+E)");
var ss_100a_ue = File("3BB41FEB82838AB9A35601AC666DE5AACFD17A58", 524288, "saturn-1.00a-(U+E).bin", "Bios v1.00a (U+E)"); //?? is this size correct?
var ss_101_j = File("DF94C5B4D47EB3CC404D88B33A8FDA237EAF4720", 524288, "saturn-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);
@ -72,14 +72,14 @@ namespace BizHawk.Emulation.Common
Option("SAT", "E", ss_100_j);
Option("SAT", "E", ss_101_j);
var ti83_102 = File("CE08F6A808701FC6672230A790167EE485157561", "ti83_102.rom", "TI-83 Rom v1.02");
var ti83_103 = File("8399E384804D8D29866CAA4C8763D7A61946A467", "ti83_103.rom", "TI-83 Rom v1.03");
var ti83_104 = File("33877FF637DC5F4C5388799FD7E2159B48E72893", "ti83_104.rom", "TI-83 Rom v1.04");
var ti83_106 = File("3D65C2A1B771CE8E5E5A0476EC1AA9C9CDC0E833", "ti83_106.rom", "TI-83 Rom v1.06");
var ti83_107 = File("EF66DAD3E7B2B6A86F326765E7DFD7D1A308AD8F", "ti83_107.rom", "TI-83 Rom v1.07"); //formerly the 1.?? recommended one
var ti83_108 = File("9C74F0B61655E9E160E92164DB472AD7EE02B0F8", "ti83_108.rom", "TI-83 Rom v1.08");
var ti83p_103 = File("37EAEEB9FB5C18FB494E322B75070E80CC4D858E", "ti83p_103b.rom", "TI-83 Plus Rom v1.03");
var ti83p_112 = File("6615DF5554076B6B81BD128BF847D2FF046E556B", "ti83p_112.rom", "TI-83 Plus Rom v1.12");
var ti83_102 = File("CE08F6A808701FC6672230A790167EE485157561", 262144, "ti83_102.rom", "TI-83 Rom v1.02"); //?? is this size correct?
var ti83_103 = File("8399E384804D8D29866CAA4C8763D7A61946A467", 262144, "ti83_103.rom", "TI-83 Rom v1.03"); //?? is this size correct?
var ti83_104 = File("33877FF637DC5F4C5388799FD7E2159B48E72893", 262144, "ti83_104.rom", "TI-83 Rom v1.04"); //?? is this size correct?
var ti83_106 = File("3D65C2A1B771CE8E5E5A0476EC1AA9C9CDC0E833", 262144, "ti83_106.rom", "TI-83 Rom v1.06"); //?? is this size correct?
var ti83_107 = File("EF66DAD3E7B2B6A86F326765E7DFD7D1A308AD8F", 262144, "ti83_107.rom", "TI-83 Rom v1.07"); //formerly the 1.?? recommended one
var ti83_108 = File("9C74F0B61655E9E160E92164DB472AD7EE02B0F8", 262144, "ti83_108.rom", "TI-83 Rom v1.08"); //?? is this size correct?
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);
@ -92,13 +92,13 @@ namespace BizHawk.Emulation.Common
Option("TI83", "Rom", ti83p_112);
// mega cd
var eu_mcd1_9210 = File("f891e0ea651e2232af0c5c4cb46a0cae2ee8f356", "eu_mcd1_9210.bin", "Mega CD EU (9210)");
var eu_mcd2_9303 = File("7063192ae9f6b696c5b81bc8f0a9fe6f0c400e58", "eu_mcd2_9303.bin", "Mega CD EU (9303)");
var eu_mcd2_9306 = File("523b3125fb0ac094e16aa072bc6ccdca22e520e5", "eu_mcd2_9306.bin", "Mega CD EU (9310)");
var jp_mcd1_9111 = File("4846f448160059a7da0215a5df12ca160f26dd69", "jp_mcd1_9111.bin", "Mega CD JP (9111)");
var jp_mcd1_9112 = File("e4193c6ae44c3cea002707d2a88f1fbcced664de", "jp_mcd1_9112.bin", "Mega CD JP (9112)");
var us_scd1_9210 = File("f4f315adcef9b8feb0364c21ab7f0eaf5457f3ed", "us_scd1_9210.bin", "Sega CD US (9210)");
var us_scd2_9303 = File("bd3ee0c8ab732468748bf98953603ce772612704", "us_scd2_9303.bin", "Sega CD US (9303)");
var eu_mcd1_9210 = File("f891e0ea651e2232af0c5c4cb46a0cae2ee8f356", 131072, "eu_mcd1_9210.bin", "Mega CD EU (9210)"); //?? is this size correct?
var eu_mcd2_9303 = File("7063192ae9f6b696c5b81bc8f0a9fe6f0c400e58", 131072, "eu_mcd2_9303.bin", "Mega CD EU (9303)"); //?? is this size correct?
var eu_mcd2_9306 = File("523b3125fb0ac094e16aa072bc6ccdca22e520e5", 131072, "eu_mcd2_9306.bin", "Mega CD EU (9310)"); //?? is this size correct?
var jp_mcd1_9111 = File("4846f448160059a7da0215a5df12ca160f26dd69", 131072, "jp_mcd1_9111.bin", "Mega CD JP (9111)"); //?? is this size correct?
var jp_mcd1_9112 = File("e4193c6ae44c3cea002707d2a88f1fbcced664de", 131072, "jp_mcd1_9112.bin", "Mega CD JP (9112)"); //?? is this size correct?
var us_scd1_9210 = File("f4f315adcef9b8feb0364c21ab7f0eaf5457f3ed", 131072, "us_scd1_9210.bin", "Sega CD US (9210)"); //?? is this size correct?
var us_scd2_9303 = File("bd3ee0c8ab732468748bf98953603ce772612704", 131072, "us_scd2_9303.bin", "Sega CD US (9303)"); //?? is this size correct?
Firmware("GEN", "CD_BIOS_EU", "Mega CD Bios (Europe)");
Firmware("GEN", "CD_BIOS_JP", "Mega CD Bios (Japan)");
@ -112,10 +112,10 @@ namespace BizHawk.Emulation.Common
Option("GEN", "CD_BIOS_US", us_scd2_9303);
// SMS
var sms_us_13 = File("C315672807D8DDB8D91443729405C766DD95CAE7", "sms_us_1.3.sms", "SMS BIOS 1.3 (USA, Europe)");
var sms_jp_21 = File("A8C1B39A2E41137835EDA6A5DE6D46DD9FADBAF2", "sms_jp_2.1.sms", "SMS BIOS 2.1 (Japan)");
var sms_us_1b = File("29091FF60EF4C22B1EE17AA21E0E75BAC6B36474", "sms_us_1.0b.sms", "SMS BIOS 1.0 (USA) (Proto)");
var sms_m404 = File("4A06C8E66261611DCE0305217C42138B71331701", "sms_m404.sms", "SMS BIOS (USA) (M404) (Proto)");
var sms_us_13 = File("C315672807D8DDB8D91443729405C766DD95CAE7", 8192, "sms_us_1.3.sms", "SMS BIOS 1.3 (USA, Europe)");
var sms_jp_21 = File("A8C1B39A2E41137835EDA6A5DE6D46DD9FADBAF2", 8192, "sms_jp_2.1.sms", "SMS BIOS 2.1 (Japan)");
var sms_us_1b = File("29091FF60EF4C22B1EE17AA21E0E75BAC6B36474", 8192, "sms_us_1.0b.sms", "SMS BIOS 1.0 (USA) (Proto)"); //?? is this size correct?
var sms_m404 = File("4A06C8E66261611DCE0305217C42138B71331701", 8192, "sms_m404.sms", "SMS BIOS (USA) (M404) (Proto)"); //?? is this size correct?
Firmware("SMS", "Export", "SMS Bios (USA/Export)");
Firmware("SMS", "Japan", "SMS Bios (Japan)");
@ -130,30 +130,30 @@ namespace BizHawk.Emulation.Common
//https://en.wikipedia.org/wiki/PlayStation_models#Comparison_of_models [w]
//https://github.com/petrockblog/RetroPie-Setup/wiki/PCSX-Core-Playstation-1 [g]
//http://redump.org/datfile/psx-bios/ also
var ps_10j = File("343883A7B555646DA8CEE54AADD2795B6E7DD070", "ps-10j.bin", "PSX BIOS (Version 1.0 J)", "Used on SCPH-1000, DTL-H1000 [g]. This is Rev for A hardware [w].");
var ps_11j = File("B06F4A861F74270BE819AA2A07DB8D0563A7CC4E", "ps-11j.bin", "PSX BIOS (Version 1.1 01/22/95)", "Used on SCPH-3000, DTL-H1000H [g]. This is for Rev B hardware [w].");
var ps_20a = File("649895EFD79D14790EABB362E94EB0622093DFB9", "ps-20a.bin", "PSX BIOS (Version 2.0 05/07/95 A)", "Used on DTL-H1001 [g]. This is for Rev B hardware [w].");
var ps_20e = File("20B98F3D80F11CBF5A7BFD0779B0E63760ECC62C", "ps-20e.bin", "PSX BIOS (Version 2.0 05/10/95 E)", "Used on DTL-H1002, SCPH-1002 [g]. This is for Rev B hardware [w].");
var ps_21j = File("E38466A4BA8005FBA7E9E3C7B9EFEBA7205BEE3F", "ps-21j.bin", "PSX BIOS (Version 2.1 07/17/95 J)", "Used on SCPH-3500 [g]. This is for Rev B hardware [w].");
var ps_21a = File("CA7AF30B50D9756CBD764640126C454CFF658479", "ps-21a.bin", "PSX BIOS (Version 2.1 07/17/95 A)", "Used on DTL-H1101 [g]. This is for Rev B hardware, presumably.");
var ps_21e = File("76CF6B1B2A7C571A6AD07F2BAC0DB6CD8F71E2CC", "ps-21e.bin", "PSX BIOS (Version 2.1 07/17/95 E)", "Used on SCPH-1002, DTL-H1102 [g]. This is for Rev B hardware [w].");
var ps_22j = File("FFA7F9A7FB19D773A0C3985A541C8E5623D2C30D", "ps-22j.bin", "PSX BIOS (Version 2.2 12/04/95 J)", "Used on SCPH-5000, DTL-H1200, DTL-H3000 [g]. This is for Rev C hardware [w].");
var ps_22j_bad = File("E340DB2696274DDA5FDC25E434A914DB71E8B02B", "ps-22j-bad.bin", "BAD DUMP OF SCPH-5000. Found on [p]."); //BAD!!
var ps_22a = File("10155D8D6E6E832D6EA66DB9BC098321FB5E8EBF", "ps-22a.bin", "PSX BIOS (Version 2.2 12/04/95 A)", "Used on SCPH-1001, DTL-H1201, DTL-H3001 [g]. This is for Rev C hardware [w].");
var ps_22e = File("B6A11579CAEF3875504FCF3831B8E3922746DF2C", "ps-22e.bin", "PSX BIOS (Version 2.2 12/04/95 E)", "Used on SCPH-1002, DTL-H1202, DTL-H3002 [g]. This is for Rev C hardware [w].");
var ps_22d = File("73107D468FC7CB1D2C5B18B269715DD889ECEF06", "ps-22d.bin", "PSX BIOS (Version 2.2 03/06/96 D)", "Used on DTL-H1100 [g]. This is for Rev C hardware, presumably.");
var ps_30j = File("B05DEF971D8EC59F346F2D9AC21FB742E3EB6917", "ps-30j.bin", "PSX BIOS (Version 3.0 09/09/96 J)", "Used on SCPH-5500 [g]. This is for Rev C hardware [w]. Recommended for (J) [f].");
var ps_30a = File("0555C6FAE8906F3F09BAF5988F00E55F88E9F30B", "ps-30a.bin", "PSX BIOS (Version 3.0 11/18/96 A)", "Used on SCPH-5501, SCPH-5503, SCPH-7003 [g]. This is for Rev C hardware [w]. Recommended for (U) [f].");
var ps_30e = File("F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3F0", "ps-30e.bin", "PSX BIOS (Version 3.0 01/06/97 E)", "Used on SCPH-5502, SCPH-5552 [g]. This is for Rev C hardware [w]. Recommended for (E) [f].");
var ps_30e_bad = File("F8DE9325FC36FCFA4B29124D291C9251094F2E54", "ps-30e-bad.bin", "BAD DUMP OF SCPH-5502. Found on [p]."); //BAD!
var ps_40j = File("77B10118D21AC7FFA9B35F9C4FD814DA240EB3E9", "ps-40j.bin", "PSX BIOS (Version 4.0 08/18/97 J)", "Used on SCPH-7000, SCPH-7500, SCPH-9000 [g]. This is for Rev C hardware [w].");
var ps_41a = File("14DF4F6C1E367CE097C11DEAE21566B4FE5647A9", "ps-41a.bin", "PSX BIOS (Version 4.1 12/16/97 A)", "Used on SCPH-7001, SCPH-7501, SCPH-7503, SCPH-9001, SCPH-9003, SCPH-9903 [g]. This is for Rev C hardware [w].");
var ps_41e = File("8D5DE56A79954F29E9006929BA3FED9B6A418C1D", "ps-41e.bin", "PSX BIOS (Version 4.1 12/16/97 E)", "Used on SCPH-7002, SCPH-7502, SCPH-9002 [g]. This is for Rev C hardware [w].");
var psone_43j = File("339A48F4FCF63E10B5B867B8C93CFD40945FAF6C", "psone-43j.bin", "PSX BIOS (Version 4.3 03/11/00 J)", "Used on PSone SCPH-100 [g]. This is for Rev C PSone hardware [w].");
var psone_44e = File("BEB0AC693C0DC26DAF5665B3314DB81480FA5C7C", "psone-44e.bin", "PSX BIOS (Version 4.4 03/24/00 E)", "Used on PSone SCPH-102 [g]. This is for Rev C PSone hardware [w].");
var psone_45a = File("DCFFE16BD90A723499AD46C641424981338D8378", "psone-45a.bin", "PSX BIOS (Version 4.5 05/25/00 A)", "Used on PSone SCPH-101 [g]. This is for Rev C PSone hardware [w].");
var psone_r5e = File("DBC7339E5D85827C095764FC077B41F78FD2ECAE", "psone-45e.bin", "PSX BIOS (Version 4.5 05/25/00 E)", "Used on PSone SCPH-102 [g]. This is for Rev C PSone hardware [w].");
var ps2_50j = File("D7D6BE084F51354BC951D8FA2D8D912AA70ABC5E", "ps2-50j.bin", "PSX BIOS (Version 5.0 10/27/00 J)", "Found on a PS2 [p].");
var ps_10j = File("343883A7B555646DA8CEE54AADD2795B6E7DD070", 524288, "ps-10j.bin", "PSX BIOS (Version 1.0 J)", "Used on SCPH-1000, DTL-H1000 [g]. This is Rev for A hardware [w].");
var ps_11j = File("B06F4A861F74270BE819AA2A07DB8D0563A7CC4E", 524288, "ps-11j.bin", "PSX BIOS (Version 1.1 01/22/95)", "Used on SCPH-3000, DTL-H1000H [g]. This is for Rev B hardware [w].");
var ps_20a = File("649895EFD79D14790EABB362E94EB0622093DFB9", 524288, "ps-20a.bin", "PSX BIOS (Version 2.0 05/07/95 A)", "Used on DTL-H1001 [g]. This is for Rev B hardware [w].");
var ps_20e = File("20B98F3D80F11CBF5A7BFD0779B0E63760ECC62C", 524288, "ps-20e.bin", "PSX BIOS (Version 2.0 05/10/95 E)", "Used on DTL-H1002, SCPH-1002 [g]. This is for Rev B hardware [w].");
var ps_21j = File("E38466A4BA8005FBA7E9E3C7B9EFEBA7205BEE3F", 524288, "ps-21j.bin", "PSX BIOS (Version 2.1 07/17/95 J)", "Used on SCPH-3500 [g]. This is for Rev B hardware [w].");
var ps_21a = File("CA7AF30B50D9756CBD764640126C454CFF658479", 524288, "ps-21a.bin", "PSX BIOS (Version 2.1 07/17/95 A)", "Used on DTL-H1101 [g]. This is for Rev B hardware, presumably.");
var ps_21e = File("76CF6B1B2A7C571A6AD07F2BAC0DB6CD8F71E2CC", 524288, "ps-21e.bin", "PSX BIOS (Version 2.1 07/17/95 E)", "Used on SCPH-1002, DTL-H1102 [g]. This is for Rev B hardware [w].");
var ps_22j = File("FFA7F9A7FB19D773A0C3985A541C8E5623D2C30D", 524288, "ps-22j.bin", "PSX BIOS (Version 2.2 12/04/95 J)", "Used on SCPH-5000, DTL-H1200, DTL-H3000 [g]. This is for Rev C hardware [w].");
var ps_22j_bad = File("E340DB2696274DDA5FDC25E434A914DB71E8B02B", 524288, "ps-22j-bad.bin", "BAD DUMP OF SCPH-5000. Found on [p]."); //BAD!!
var ps_22a = File("10155D8D6E6E832D6EA66DB9BC098321FB5E8EBF", 524288, "ps-22a.bin", "PSX BIOS (Version 2.2 12/04/95 A)", "Used on SCPH-1001, DTL-H1201, DTL-H3001 [g]. This is for Rev C hardware [w].");
var ps_22e = File("B6A11579CAEF3875504FCF3831B8E3922746DF2C", 524288, "ps-22e.bin", "PSX BIOS (Version 2.2 12/04/95 E)", "Used on SCPH-1002, DTL-H1202, DTL-H3002 [g]. This is for Rev C hardware [w].");
var ps_22d = File("73107D468FC7CB1D2C5B18B269715DD889ECEF06", 524288, "ps-22d.bin", "PSX BIOS (Version 2.2 03/06/96 D)", "Used on DTL-H1100 [g]. This is for Rev C hardware, presumably.");
var ps_30j = File("B05DEF971D8EC59F346F2D9AC21FB742E3EB6917", 524288, "ps-30j.bin", "PSX BIOS (Version 3.0 09/09/96 J)", "Used on SCPH-5500 [g]. This is for Rev C hardware [w]. Recommended for (J) [f].");
var ps_30a = File("0555C6FAE8906F3F09BAF5988F00E55F88E9F30B", 524288, "ps-30a.bin", "PSX BIOS (Version 3.0 11/18/96 A)", "Used on SCPH-5501, SCPH-5503, SCPH-7003 [g]. This is for Rev C hardware [w]. Recommended for (U) [f].");
var ps_30e = File("F6BC2D1F5EB6593DE7D089C425AC681D6FFFD3F0", 524288, "ps-30e.bin", "PSX BIOS (Version 3.0 01/06/97 E)", "Used on SCPH-5502, SCPH-5552 [g]. This is for Rev C hardware [w]. Recommended for (E) [f].");
var ps_30e_bad = File("F8DE9325FC36FCFA4B29124D291C9251094F2E54", 524288, "ps-30e-bad.bin", "BAD DUMP OF SCPH-5502. Found on [p]."); //BAD!
var ps_40j = File("77B10118D21AC7FFA9B35F9C4FD814DA240EB3E9", 524288, "ps-40j.bin", "PSX BIOS (Version 4.0 08/18/97 J)", "Used on SCPH-7000, SCPH-7500, SCPH-9000 [g]. This is for Rev C hardware [w].");
var ps_41a = File("14DF4F6C1E367CE097C11DEAE21566B4FE5647A9", 524288, "ps-41a.bin", "PSX BIOS (Version 4.1 12/16/97 A)", "Used on SCPH-7001, SCPH-7501, SCPH-7503, SCPH-9001, SCPH-9003, SCPH-9903 [g]. This is for Rev C hardware [w].");
var ps_41e = File("8D5DE56A79954F29E9006929BA3FED9B6A418C1D", 524288, "ps-41e.bin", "PSX BIOS (Version 4.1 12/16/97 E)", "Used on SCPH-7002, SCPH-7502, SCPH-9002 [g]. This is for Rev C hardware [w].");
var psone_43j = File("339A48F4FCF63E10B5B867B8C93CFD40945FAF6C", 524288, "psone-43j.bin", "PSX BIOS (Version 4.3 03/11/00 J)", "Used on PSone SCPH-100 [g]. This is for Rev C PSone hardware [w].");
var psone_44e = File("BEB0AC693C0DC26DAF5665B3314DB81480FA5C7C", 524288, "psone-44e.bin", "PSX BIOS (Version 4.4 03/24/00 E)", "Used on PSone SCPH-102 [g]. This is for Rev C PSone hardware [w].");
var psone_45a = File("DCFFE16BD90A723499AD46C641424981338D8378", 524288, "psone-45a.bin", "PSX BIOS (Version 4.5 05/25/00 A)", "Used on PSone SCPH-101 [g]. This is for Rev C PSone hardware [w].");
var psone_r5e = File("DBC7339E5D85827C095764FC077B41F78FD2ECAE", 524288, "psone-45e.bin", "PSX BIOS (Version 4.5 05/25/00 E)", "Used on PSone SCPH-102 [g]. This is for Rev C PSone hardware [w].");
var ps2_50j = File("D7D6BE084F51354BC951D8FA2D8D912AA70ABC5E", 99999, "ps2-50j.bin", "PSX BIOS (Version 5.0 10/27/00 J)", "Found on a PS2 [p]."); //not sure about this size
ps_22j_bad.bad = ps_30e_bad.bad = true;
@ -205,7 +205,7 @@ namespace BizHawk.Emulation.Common
}
//adds an acceptable option for a firmware ID to the database
static FirmwareOption Option(string hash, string systemId, string id, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable)
static FirmwareOption Option(string hash, long size, string systemId, string id, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable)
{
var fo = new FirmwareOption
{
@ -213,6 +213,7 @@ namespace BizHawk.Emulation.Common
firmwareId = id,
hash = hash,
status = status,
size = size
};
FirmwareOptions.Add(fo);
@ -227,20 +228,21 @@ namespace BizHawk.Emulation.Common
//adds an acceptable option for a firmware ID to the database
static FirmwareOption Option(string systemId, string id, FirmwareFile ff, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable)
{
var fo = Option(ff.hash, systemId, id, status);
var fo = Option(ff.hash, ff.size, systemId, id, status);
//make sure this goes in as bad
if(ff.bad) fo.status = FirmwareOptionStatus.Bad;
return fo;
}
//defines a firmware file
static FirmwareFile File(string hash, string recommendedName, string descr, string additionalInfo = "")
static FirmwareFile File(string hash, long size, string recommendedName, string descr, string additionalInfo = "")
{
string hashfix = hash.ToUpperInvariant();
var ff = new FirmwareFile
{
hash = hashfix,
size = size,
recommendedName = recommendedName,
descr = descr,
info = additionalInfo
@ -251,11 +253,11 @@ namespace BizHawk.Emulation.Common
}
//adds a defined firmware ID and one file and option
static void FirmwareAndOption(string hash, string systemId, string id, string name, string descr)
static void FirmwareAndOption(string hash, long size, string systemId, string id, string name, string descr)
{
Firmware(systemId, id, descr);
File(hash, name, descr, "");
Option(hash, systemId, id);
File(hash, size, name, descr, "");
Option(hash, size, systemId, id);
}
@ -268,6 +270,7 @@ namespace BizHawk.Emulation.Common
public class FirmwareFile
{
public string hash;
public long size;
public string recommendedName;
public string descr;
public string info;
@ -292,6 +295,7 @@ namespace BizHawk.Emulation.Common
public string systemId;
public string firmwareId;
public string hash;
public long size;
public FirmwareOptionStatus status;
public bool IsAcceptableOrIdeal { get { return status == FirmwareOptionStatus.Ideal || status == FirmwareOptionStatus.Acceptable; } }
public string ConfigKey { get { return string.Format("{0}+{1}", systemId, firmwareId); } }