give firmware database and UI ability to track ok/notok/bad state of an option/firmwarefile. apply tons of research to study PSX bios files situation

This commit is contained in:
zeromus 2014-06-21 06:40:07 +00:00
parent 3cdc9d7c25
commit f43859f421
12 changed files with 696 additions and 168 deletions

View File

@ -128,7 +128,7 @@ namespace BizHawk.Client.Common
var fr1 = fr;
var options =
from fo in FirmwareDatabase.FirmwareOptions
where fo.systemId == fr1.systemId && fo.firmwareId == fr1.firmwareId
where fo.systemId == fr1.systemId && fo.firmwareId == fr1.firmwareId && fo.IsAcceptableOrIdeal
select fo;
// try each option

View File

@ -1489,6 +1489,7 @@
<None Include="config\ControllerImages\GENController.png" />
</ItemGroup>
<ItemGroup>
<None Include="images\thumbsdown.png" />
<None Include="images\monitor.png" />
<None Include="images\ppsspp.png" />
<None Include="images\meteor.png" />
@ -1604,6 +1605,7 @@
<None Include="images\gambatte.png" />
<None Include="images\dual.png" />
<None Include="config\ControllerImages\WonderSwanColor.png" />
<None Include="images\alt_about_image.png" />
<Content Include="images\logo.ico" />
<None Include="images\Paste.png" />
<None Include="images\reboot.png" />

File diff suppressed because it is too large Load Diff

View File

@ -298,9 +298,6 @@
<data name="undo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="alt_about_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\alt_about_image.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="whiteTriLeft" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\whiteTriLeft.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -936,4 +933,10 @@
<data name="WonderSwanColor" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\config\ControllerImages\WonderSwanColor.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="alt_about_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\alt_about_image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="thumbsdown" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\images\thumbsdown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -357,21 +357,33 @@ namespace BizHawk.Client.EmuHawk
ListViewItem olvi = new ListViewItem();
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;
if (o.status == FirmwareDatabase.FirmwareOptionStatus.Acceptable)
olvi.ImageIndex = FirmwaresConfigInfo.idAcceptable;
if (o.status == FirmwareDatabase.FirmwareOptionStatus.Unacceptable)
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[2].Font = this.Font; //why doesnt this work?
olvi.SubItems[3].Text = ff.info;
olvi.SubItems[3].Font = this.Font; //why doesnt this work?
fciDialog.lvOptions.Items.Add(olvi);
}
fciDialog.lvOptions.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.ColumnContent);
fciDialog.lvOptions.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent);
fciDialog.lvOptions.AutoResizeColumn(2, ColumnHeaderAutoResizeStyle.ColumnContent);
fciDialog.lvOptions.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.ColumnContent);
fciDialog.ShowDialog();
fciDialog.ShowDialog(this);
}
private void lvFirmwaresContextMenuStrip_Opening(object sender, CancelEventArgs e)

View File

@ -28,160 +28,175 @@
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lvOptions = new System.Windows.Forms.ListView();
this.colHash = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colStandardFilename = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.colDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.btnClose = new System.Windows.Forms.Button();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.label2 = new System.Windows.Forms.Label();
this.lblFirmware = new System.Windows.Forms.Label();
this.lvmiOptionsContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiOptionsCopy = new System.Windows.Forms.ToolStripMenuItem();
this.tableLayoutPanel1.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.lvmiOptionsContextMenuStrip.SuspendLayout();
this.SuspendLayout();
//
// lvOptions
//
this.lvOptions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.components = new System.ComponentModel.Container();
this.lvOptions = new System.Windows.Forms.ListView();
this.colHash = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
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.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.btnClose = new System.Windows.Forms.Button();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.label2 = new System.Windows.Forms.Label();
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.tableLayoutPanel1.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.lvmiOptionsContextMenuStrip.SuspendLayout();
this.SuspendLayout();
//
// lvOptions
//
this.lvOptions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colHash,
this.colStandardFilename,
this.colDescription});
this.lvOptions.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvOptions.FullRowSelect = true;
this.lvOptions.GridLines = true;
this.lvOptions.Location = new System.Drawing.Point(3, 29);
this.lvOptions.Name = "lvOptions";
this.lvOptions.Size = new System.Drawing.Size(648, 402);
this.lvOptions.TabIndex = 0;
this.lvOptions.UseCompatibleStateImageBehavior = false;
this.lvOptions.View = System.Windows.Forms.View.Details;
this.lvOptions.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvOptions_KeyDown);
this.lvOptions.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvOptions_MouseClick);
//
// colHash
//
this.colHash.Text = "Hash";
this.colHash.Width = 251;
//
// colStandardFilename
//
this.colStandardFilename.Text = "Standard Filename";
this.colStandardFilename.Width = 175;
//
// colDescription
//
this.colDescription.Text = "Description";
this.colDescription.Width = 214;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.lvOptions, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.btnClose, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
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(654, 469);
this.tableLayoutPanel1.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(122, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Options for this firmware:";
//
// btnClose
//
this.btnClose.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.btnClose.AutoSize = true;
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Location = new System.Drawing.Point(595, 440);
this.btnClose.Margin = new System.Windows.Forms.Padding(6);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(53, 23);
this.btnClose.TabIndex = 2;
this.btnClose.Text = "Close";
this.btnClose.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.flowLayoutPanel1.Controls.Add(this.label2);
this.flowLayoutPanel1.Controls.Add(this.lblFirmware);
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(99, 13);
this.flowLayoutPanel1.TabIndex = 3;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(52, 13);
this.label2.TabIndex = 0;
this.label2.Text = "Firmware:";
//
// lblFirmware
//
this.lblFirmware.AutoSize = true;
this.lblFirmware.Location = new System.Drawing.Point(61, 0);
this.lblFirmware.Name = "lblFirmware";
this.lblFirmware.Size = new System.Drawing.Size(35, 13);
this.lblFirmware.TabIndex = 1;
this.lblFirmware.Text = "label3";
//
// lvmiOptionsContextMenuStrip
//
this.lvmiOptionsContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.colDescription,
this.colInfo});
this.lvOptions.Dock = System.Windows.Forms.DockStyle.Fill;
this.lvOptions.FullRowSelect = true;
this.lvOptions.GridLines = true;
this.lvOptions.Location = new System.Drawing.Point(3, 29);
this.lvOptions.Name = "lvOptions";
this.lvOptions.Size = new System.Drawing.Size(722, 402);
this.lvOptions.SmallImageList = this.imageList1;
this.lvOptions.TabIndex = 0;
this.lvOptions.UseCompatibleStateImageBehavior = false;
this.lvOptions.View = System.Windows.Forms.View.Details;
this.lvOptions.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvOptions_KeyDown);
this.lvOptions.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lvOptions_MouseClick);
//
// colHash
//
this.colHash.Text = "Hash";
this.colHash.Width = 251;
//
// colStandardFilename
//
this.colStandardFilename.Text = "Standard Filename";
this.colStandardFilename.Width = 175;
//
// colDescription
//
this.colDescription.Text = "Description";
this.colDescription.Width = 214;
//
// colInfo
//
this.colInfo.Text = "Info";
this.colInfo.Width = 165;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.lvOptions, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.btnClose, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
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(728, 469);
this.tableLayoutPanel1.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(3, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(122, 13);
this.label1.TabIndex = 1;
this.label1.Text = "Options for this firmware:";
//
// btnClose
//
this.btnClose.Anchor = System.Windows.Forms.AnchorStyles.Right;
this.btnClose.AutoSize = true;
this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnClose.Location = new System.Drawing.Point(669, 440);
this.btnClose.Margin = new System.Windows.Forms.Padding(6);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(53, 23);
this.btnClose.TabIndex = 2;
this.btnClose.Text = "Close";
this.btnClose.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
this.flowLayoutPanel1.AutoSize = true;
this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.flowLayoutPanel1.Controls.Add(this.label2);
this.flowLayoutPanel1.Controls.Add(this.lblFirmware);
this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
this.flowLayoutPanel1.Size = new System.Drawing.Size(99, 13);
this.flowLayoutPanel1.TabIndex = 3;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(52, 13);
this.label2.TabIndex = 0;
this.label2.Text = "Firmware:";
//
// lblFirmware
//
this.lblFirmware.AutoSize = true;
this.lblFirmware.Location = new System.Drawing.Point(61, 0);
this.lblFirmware.Name = "lblFirmware";
this.lblFirmware.Size = new System.Drawing.Size(35, 13);
this.lblFirmware.TabIndex = 1;
this.lblFirmware.Text = "label3";
//
// lvmiOptionsContextMenuStrip
//
this.lvmiOptionsContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsmiOptionsCopy});
this.lvmiOptionsContextMenuStrip.Name = "lvmiOptionsContextMenuStrip";
this.lvmiOptionsContextMenuStrip.Size = new System.Drawing.Size(100, 26);
//
// tsmiOptionsCopy
//
this.tsmiOptionsCopy.Name = "tsmiOptionsCopy";
this.tsmiOptionsCopy.Size = new System.Drawing.Size(152, 22);
this.tsmiOptionsCopy.Text = "&Copy";
this.tsmiOptionsCopy.Click += new System.EventHandler(this.tsmiOptionsCopy_Click);
//
// FirmwaresConfigInfo
//
this.AcceptButton = this.btnClose;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.ClientSize = new System.Drawing.Size(654, 469);
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "FirmwaresConfigInfo";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Firmware Info";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.lvmiOptionsContextMenuStrip.ResumeLayout(false);
this.ResumeLayout(false);
this.lvmiOptionsContextMenuStrip.Name = "lvmiOptionsContextMenuStrip";
this.lvmiOptionsContextMenuStrip.Size = new System.Drawing.Size(100, 26);
//
// tsmiOptionsCopy
//
this.tsmiOptionsCopy.Name = "tsmiOptionsCopy";
this.tsmiOptionsCopy.Size = new System.Drawing.Size(99, 22);
this.tsmiOptionsCopy.Text = "&Copy";
this.tsmiOptionsCopy.Click += new System.EventHandler(this.tsmiOptionsCopy_Click);
//
// 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;
//
// FirmwaresConfigInfo
//
this.AcceptButton = this.btnClose;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnClose;
this.ClientSize = new System.Drawing.Size(728, 469);
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "FirmwaresConfigInfo";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Firmware Info";
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.lvmiOptionsContextMenuStrip.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -199,5 +214,7 @@
public System.Windows.Forms.Label lblFirmware;
private System.Windows.Forms.ContextMenuStrip lvmiOptionsContextMenuStrip;
private System.Windows.Forms.ToolStripMenuItem tsmiOptionsCopy;
private System.Windows.Forms.ColumnHeader colInfo;
private System.Windows.Forms.ImageList imageList1;
}
}

View File

@ -15,9 +15,18 @@ namespace BizHawk.Client.EmuHawk
{
public partial class FirmwaresConfigInfo : Form
{
public const int idIdeal = 0;
public const int idAcceptable = 1;
public const int idUnacceptable = 2;
public const int idBad = 3;
public FirmwaresConfigInfo()
{
InitializeComponent();
//prep imagelist for listview with 4 item states for (ideal, acceptable, unacceptable, bad)
imageList1.Images.AddRange(new[] { EmuHawk.Properties.Resources.GreenCheck, EmuHawk.Properties.Resources.Freeze, EmuHawk.Properties.Resources.thumbsdown, EmuHawk.Properties.Resources.ExclamationRed });
}
private void lvOptions_KeyDown(object sender, KeyEventArgs e)

View File

@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>215, 17</value>
</metadata>
<metadata name="lvmiOptionsContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 991 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

View File

@ -114,10 +114,69 @@ namespace BizHawk.Emulation.Common
Option("SMS", "Japan", sms_jp_21);
//PSX
//http://forum.fobby.net/index.php?t=msg&goto=2763&
FirmwareAndOption("0555C6FAE8906F3F09BAF5988F00E55F88E9F30B", "PSX", "U", "scph5501.bin", "BIOS (U)");
FirmwareAndOption("B05DEF971D8EC59F346F2D9AC21FB742E3EB6917", "PSX", "J", "scph5500.bin", "BIOS (J)");
FirmwareAndOption("F8DE9325FC36FCFA4B29124D291C9251094F2E54", "PSX", "E", "scph5502.bin", "BIOS (E)");
//http://forum.fobby.net/index.php?t=msg&goto=2763 [f]
//http://www.psxdev.net/forum/viewtopic.php?f=69&t=56 [p]
//https://en.wikipedia.org/wiki/PlayStation_models#Comparison_of_models [w]
//https://github.com/petrockblog/RetroPie-Setup/wiki/PCSX-Core-Playstation-1 [g]
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_20j = File("649895EFD79D14790EABB362E94EB0622093DFB9", "ps-20j.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].");
ps_22j_bad.bad = ps_30e_bad.bad = true;
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);
//in general, alternates arent allowed.. their quality isnt 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 entrypoints 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", "J", ps_20j, 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", "U", ps_22a, FirmwareOptionStatus.Unacceptable);
Option("PSX", "E", ps_22e, 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", "U", psone_45a, FirmwareOptionStatus.Unacceptable);
Option("PSX", "E", psone_r5e, FirmwareOptionStatus.Unacceptable);
Option("PSX", "J", ps2_50j, FirmwareOptionStatus.Unacceptable);
}
//adds a defined firmware ID to the database
@ -134,26 +193,36 @@ namespace BizHawk.Emulation.Common
}
//adds an acceptable option for a firmware ID to the database
static void Option(string hash, string systemId, string id)
static FirmwareOption Option(string hash, string systemId, string id, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable)
{
var fo = new FirmwareOption
{
systemId = systemId,
firmwareId = id,
hash = hash
hash = hash,
status = status,
};
FirmwareOptions.Add(fo);
//first option is automatically ideal
if (FirmwareOptions.Count == 1 && fo.status == FirmwareOptionStatus.Acceptable)
fo.status = FirmwareOptionStatus.Ideal;
return fo;
}
//adds an acceptable option for a firmware ID to the database
static void Option(string systemId, string id, FirmwareFile ff)
static FirmwareOption Option(string systemId, string id, FirmwareFile ff, FirmwareOptionStatus status = FirmwareOptionStatus.Acceptable)
{
Option(ff.hash, systemId, id);
var fo = Option(ff.hash, 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)
static FirmwareFile File(string hash, string recommendedName, string descr, string additionalInfo = "")
{
string hashfix = hash.ToUpperInvariant();
@ -161,7 +230,8 @@ namespace BizHawk.Emulation.Common
{
hash = hashfix,
recommendedName = recommendedName,
descr = descr
descr = descr,
info = additionalInfo
};
FirmwareFiles.Add(ff);
FirmwareFilesByHash[hashfix] = ff;
@ -172,7 +242,7 @@ namespace BizHawk.Emulation.Common
static void FirmwareAndOption(string hash, string systemId, string id, string name, string descr)
{
Firmware(systemId, id, descr);
File(hash, name, descr);
File(hash, name, descr, "");
Option(hash, systemId, id);
}
@ -188,6 +258,8 @@ namespace BizHawk.Emulation.Common
public string hash;
public string recommendedName;
public string descr;
public string info;
public bool bad;
}
public class FirmwareRecord
@ -198,11 +270,18 @@ namespace BizHawk.Emulation.Common
public string ConfigKey { get { return string.Format("{0}+{1}", systemId, firmwareId); } }
}
public enum FirmwareOptionStatus
{
Ideal, Acceptable, Unacceptable, Bad
}
public class FirmwareOption
{
public string systemId;
public string firmwareId;
public string hash;
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); } }
}