diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/BoardSystem.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/BoardSystem.cs
index bc8ca1923d..7846d0f19c 100644
--- a/BizHawk.Emulation/Consoles/Nintendo/NES/BoardSystem.cs
+++ b/BizHawk.Emulation/Consoles/Nintendo/NES/BoardSystem.cs
@@ -216,6 +216,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
public class CartInfo
{
public GameInfo game;
+ public BizHawk.GameInfo DB_GameInfo;
public short chr_size;
public short prg_size;
@@ -291,6 +292,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
//try generating a bootgod cart descriptor from the game database
var dict = gi.ParseOptionsDictionary();
game.name = gi.Name;
+ cart.DB_GameInfo = gi;
cart.game = game;
cart.board_type = dict["board"];
if (dict.ContainsKey("PRG"))
diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs
index 9b3c6d9d5c..1e59c457f9 100644
--- a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs
+++ b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs
@@ -349,10 +349,19 @@ namespace BizHawk.Emulation.Consoles.Nintendo
None, BootGodDB, GameDB, INES
}
+ StringWriter LoadReport;
+ void LoadWriteLine(string format, params object[] arg)
+ {
+ Console.WriteLine(format, arg);
+ LoadReport.WriteLine(format, arg);
+ }
+ void LoadWriteLine(object arg) { LoadWriteLine("{0}",arg); }
+
public unsafe void LoadGame(IGame game)
{
- Console.WriteLine("------");
- Console.WriteLine("BEGIN NES rom analysis:");
+ LoadReport = new StringWriter();
+ LoadWriteLine("------");
+ LoadWriteLine("BEGIN NES rom analysis:");
byte[] file = game.GetFileData();
if (file.Length < 16) throw new Exception("Alleged NES rom too small to be anything useful");
if (file.Take(4).SequenceEqual(System.Text.Encoding.ASCII.GetBytes("UNIF")))
@@ -379,12 +388,12 @@ namespace BizHawk.Emulation.Consoles.Nintendo
hash_md5 = "md5:" + Util.BytesToHexString(md5.Hash);
}
- Console.WriteLine("Found iNES header:");
+ LoadWriteLine("Found iNES header:");
CartInfo iNesHeaderInfo = header->Analyze();
- Console.WriteLine("Since this is iNES we can confidently parse PRG/CHR banks to hash.");
+ LoadWriteLine("Since this is iNES we can confidently parse PRG/CHR banks to hash.");
- Console.WriteLine("headerless rom hash: {0}", hash_sha1);
- Console.WriteLine("headerless rom hash: {0}", hash_md5);
+ LoadWriteLine("headerless rom hash: {0}", hash_sha1);
+ LoadWriteLine("headerless rom hash: {0}", hash_md5);
Type boardType = null;
CartInfo choice = null;
@@ -392,7 +401,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
choice = IdentifyFromBootGodDB(hash_sha1);
if (choice == null)
{
- Console.WriteLine("Could not locate game in nescartdb");
+ LoadWriteLine("Could not locate game in nescartdb");
if (USE_DATABASE)
{
choice = IdentifyFromGameDB(hash_md5);
@@ -403,8 +412,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo
}
if (choice == null)
{
- Console.WriteLine("Could not locate game in bizhawk gamedb");
- Console.WriteLine("Attempting inference from iNES header");
+ LoadWriteLine("Could not locate game in bizhawk gamedb");
+ LoadWriteLine("Attempting inference from iNES header");
choice = iNesHeaderInfo;
string iNES_board = iNESBoardDetector.Detect(choice);
if (iNES_board == null)
@@ -427,23 +436,23 @@ namespace BizHawk.Emulation.Consoles.Nintendo
}
catch { }
if (boardType != null)
- Console.WriteLine("Ambiguous iNES wram size resolved as {0}k", choice.wram_size);
+ LoadWriteLine("Ambiguous iNES wram size resolved as {0}k", choice.wram_size);
}
- Console.WriteLine("Chose board from iNES heuristics: " + iNES_board);
+ LoadWriteLine("Chose board from iNES heuristics: " + iNES_board);
choice.game.name = game.Name;
origin = EDetectionOrigin.INES;
}
else
{
origin = EDetectionOrigin.GameDB;
- Console.WriteLine("Chose board from bizhawk gamedb: " + choice.board_type);
+ LoadWriteLine("Chose board from bizhawk gamedb: " + choice.board_type);
}
}
else
{
- Console.WriteLine("Chose board from nescartdb:");
- Console.WriteLine(choice);
+ LoadWriteLine("Chose board from nescartdb:");
+ LoadWriteLine(choice);
origin = EDetectionOrigin.BootGodDB;
}
@@ -455,18 +464,22 @@ namespace BizHawk.Emulation.Consoles.Nintendo
if (boardType == null)
throw new Exception("No class implements the necessary board type: " + choice.board_type);
- Console.WriteLine("Final game detection results:");
- Console.WriteLine(choice);
- Console.WriteLine("\"" + game_name + "\"");
- Console.WriteLine("Implemented by: class " + boardType.Name);
+ if(choice.DB_GameInfo != null)
+ if(choice.DB_GameInfo.Status == RomStatus.BadDump)
+ choice.bad = true;
+
+ LoadWriteLine("Final game detection results:");
+ LoadWriteLine(choice);
+ LoadWriteLine("\"" + game_name + "\"");
+ LoadWriteLine("Implemented by: class " + boardType.Name);
if (choice.bad)
{
- Console.WriteLine("~~ ONE WAY OR ANOTHER, THIS DUMP IS KNOWN TO BE *BAD* ~~");
- Console.WriteLine("~~ YOU SHOULD FIND A BETTER FILE ~~");
+ LoadWriteLine("~~ ONE WAY OR ANOTHER, THIS DUMP IS KNOWN TO BE *BAD* ~~");
+ LoadWriteLine("~~ YOU SHOULD FIND A BETTER FILE ~~");
}
- Console.WriteLine("END NES rom analysis");
- Console.WriteLine("------");
+ LoadWriteLine("END NES rom analysis");
+ LoadWriteLine("------");
board = (INESBoard)Activator.CreateInstance(boardType);
@@ -474,6 +487,32 @@ namespace BizHawk.Emulation.Consoles.Nintendo
board.Create(this);
board.Configure(origin);
+ if (origin == EDetectionOrigin.BootGodDB)
+ {
+ CoreOutputComm.RomStatus = RomStatus.GoodDump;
+ CoreOutputComm.RomStatusAnnotation = "Identified from BootGod's database";
+ }
+ if (origin == EDetectionOrigin.INES)
+ {
+ CoreOutputComm.RomStatus = RomStatus.NotInDatabase;
+ CoreOutputComm.RomStatusAnnotation = "Inferred from iNES header; potentially wrong";
+ }
+ if (origin == EDetectionOrigin.GameDB)
+ {
+ if (choice.bad)
+ {
+ CoreOutputComm.RomStatus = RomStatus.BadDump;
+ }
+ else
+ {
+ CoreOutputComm.RomStatus = choice.DB_GameInfo.Status;
+ }
+ }
+
+ LoadReport.Flush();
+ CoreOutputComm.RomStatusDetails = LoadReport.ToString();
+
+
//create the board's rom and vrom
board.ROM = new byte[choice.prg_size * 1024];
Array.Copy(file, 16, board.ROM, 0, board.ROM.Length);
@@ -492,6 +531,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo
HardReset();
SetupMemoryDomains();
}
+
}
void SyncState(Serializer ser)
diff --git a/BizHawk.Emulation/Interfaces/CoreComms.cs b/BizHawk.Emulation/Interfaces/CoreComms.cs
index eb5e3d4a1c..535db1ee05 100644
--- a/BizHawk.Emulation/Interfaces/CoreComms.cs
+++ b/BizHawk.Emulation/Interfaces/CoreComms.cs
@@ -12,6 +12,9 @@ namespace BizHawk
public class CoreOutputComm
{
public double VsyncRate = 60;
+ public RomStatus RomStatus;
+ public string RomStatusAnnotation;
+ public string RomStatusDetails;
}
}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
index abce8bf0c2..f0c5979a84 100644
--- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj
+++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj
@@ -139,6 +139,12 @@
+
+ Form
+
+
+ LogWindow.cs
+
Form
@@ -420,6 +426,9 @@
+
+ LogWindow.cs
+
EditCommentsForm.cs
diff --git a/BizHawk.MultiClient/LogWindow.Designer.cs b/BizHawk.MultiClient/LogWindow.Designer.cs
new file mode 100644
index 0000000000..92b810a7ef
--- /dev/null
+++ b/BizHawk.MultiClient/LogWindow.Designer.cs
@@ -0,0 +1,109 @@
+namespace BizHawk.MultiClient
+{
+ partial class LogWindow
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.btnClose = new System.Windows.Forms.Button();
+ this.btnClear = new System.Windows.Forms.Button();
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // btnClose
+ //
+ this.btnClose.Location = new System.Drawing.Point(590, 3);
+ this.btnClose.Name = "btnClose";
+ this.btnClose.Size = new System.Drawing.Size(75, 23);
+ this.btnClose.TabIndex = 2;
+ this.btnClose.Text = "Close";
+ this.btnClose.UseVisualStyleBackColor = true;
+ this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+ //
+ // btnClear
+ //
+ this.btnClear.Location = new System.Drawing.Point(3, 3);
+ this.btnClear.Name = "btnClear";
+ this.btnClear.Size = new System.Drawing.Size(75, 23);
+ this.btnClear.TabIndex = 1;
+ this.btnClear.Text = "Clear";
+ this.btnClear.UseVisualStyleBackColor = true;
+ this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
+ //
+ // tableLayoutPanel1
+ //
+ this.tableLayoutPanel1.AutoSize = true;
+ this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.tableLayoutPanel1.ColumnCount = 3;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
+ this.tableLayoutPanel1.Controls.Add(this.btnClear, 0, 0);
+ this.tableLayoutPanel1.Controls.Add(this.btnClose, 2, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 273);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 1;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(668, 29);
+ this.tableLayoutPanel1.TabIndex = 5;
+ //
+ // textBox1
+ //
+ this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.textBox1.Location = new System.Drawing.Point(0, 0);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ReadOnly = true;
+ this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.textBox1.Size = new System.Drawing.Size(668, 273);
+ this.textBox1.TabIndex = 6;
+ //
+ // LogWindow
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(668, 302);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.Name = "LogWindow";
+ this.Text = "LogWindow";
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button btnClose;
+ private System.Windows.Forms.Button btnClear;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private System.Windows.Forms.TextBox textBox1;
+ }
+}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/LogWindow.cs b/BizHawk.MultiClient/LogWindow.cs
new file mode 100644
index 0000000000..1316a0405c
--- /dev/null
+++ b/BizHawk.MultiClient/LogWindow.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace BizHawk.MultiClient
+{
+ public partial class LogWindow : Form
+ {
+ public LogWindow()
+ {
+ InitializeComponent();
+ }
+
+ public void ShowReport(string title, string report)
+ {
+ Text = title;
+ textBox1.Text = report;
+ btnClear.Visible = false;
+ ShowDialog();
+ }
+
+ private void btnClear_Click(object sender, EventArgs e)
+ {
+
+ }
+
+ private void btnClose_Click(object sender, EventArgs e)
+ {
+ Close();
+ }
+
+ }
+}
diff --git a/BizHawk.MultiClient/LogWindow.resx b/BizHawk.MultiClient/LogWindow.resx
new file mode 100644
index 0000000000..ff31a6db56
--- /dev/null
+++ b/BizHawk.MultiClient/LogWindow.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizHawk.MultiClient/MainForm.Designer.cs b/BizHawk.MultiClient/MainForm.Designer.cs
index f2407440b1..0b69eb167d 100644
--- a/BizHawk.MultiClient/MainForm.Designer.cs
+++ b/BizHawk.MultiClient/MainForm.Designer.cs
@@ -202,7 +202,7 @@
this.helpToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.StatusSlot0 = new System.Windows.Forms.StatusStrip();
- this.DumpError = new System.Windows.Forms.ToolStripDropDownButton();
+ this.DumpStatus = new System.Windows.Forms.ToolStripDropDownButton();
this.EmuStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.PlayRecordStatus = new System.Windows.Forms.ToolStripDropDownButton();
this.PauseStrip = new System.Windows.Forms.ToolStripDropDownButton();
@@ -255,7 +255,7 @@
this.menuStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
- this.menuStrip1.Size = new System.Drawing.Size(470, 40);
+ this.menuStrip1.Size = new System.Drawing.Size(470, 21);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
this.menuStrip1.MenuDeactivate += new System.EventHandler(this.menuStrip1_MenuDeactivate);
@@ -285,7 +285,7 @@
//
this.openROMToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.OpenFile;
this.openROMToolStripMenuItem.Name = "openROMToolStripMenuItem";
- this.openROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.openROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.openROMToolStripMenuItem.Text = "Open ROM";
this.openROMToolStripMenuItem.Click += new System.EventHandler(this.openROMToolStripMenuItem_Click);
//
@@ -298,7 +298,7 @@
this.autoloadMostRecentToolStripMenuItem});
this.recentROMToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Recent;
this.recentROMToolStripMenuItem.Name = "recentROMToolStripMenuItem";
- this.recentROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.recentROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.recentROMToolStripMenuItem.Text = "Recent ROM";
this.recentROMToolStripMenuItem.DropDownOpened += new System.EventHandler(this.recentROMToolStripMenuItem_DropDownOpened);
//
@@ -331,14 +331,14 @@
//
this.closeROMToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Close;
this.closeROMToolStripMenuItem.Name = "closeROMToolStripMenuItem";
- this.closeROMToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.closeROMToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.closeROMToolStripMenuItem.Text = "&Close ROM";
this.closeROMToolStripMenuItem.Click += new System.EventHandler(this.closeROMToolStripMenuItem_Click);
//
// toolStripMenuItem1
//
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
- this.toolStripMenuItem1.Size = new System.Drawing.Size(149, 6);
+ this.toolStripMenuItem1.Size = new System.Drawing.Size(142, 6);
//
// saveStateToolStripMenuItem
//
@@ -356,7 +356,7 @@
this.toolStripSeparator6,
this.saveNamedStateToolStripMenuItem});
this.saveStateToolStripMenuItem.Name = "saveStateToolStripMenuItem";
- this.saveStateToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.saveStateToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.saveStateToolStripMenuItem.Text = "Save State";
this.saveStateToolStripMenuItem.DropDownOpened += new System.EventHandler(this.saveStateToolStripMenuItem_DropDownOpened);
//
@@ -458,7 +458,7 @@
this.toolStripSeparator7,
this.loadNamedStateToolStripMenuItem});
this.loadStateToolStripMenuItem.Name = "loadStateToolStripMenuItem";
- this.loadStateToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.loadStateToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.loadStateToolStripMenuItem.Text = "Load State";
this.loadStateToolStripMenuItem.DropDownOpened += new System.EventHandler(this.loadStateToolStripMenuItem_DropDownOpened);
//
@@ -563,7 +563,7 @@
this.saveToCurrentSlotToolStripMenuItem,
this.loadCurrentSlotToolStripMenuItem});
this.saveSlotToolStripMenuItem.Name = "saveSlotToolStripMenuItem";
- this.saveSlotToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.saveSlotToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.saveSlotToolStripMenuItem.Text = "SaveSlot";
this.saveSlotToolStripMenuItem.DropDownOpened += new System.EventHandler(this.saveSlotToolStripMenuItem_DropDownOpened);
//
@@ -673,7 +673,7 @@
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
- this.toolStripMenuItem2.Size = new System.Drawing.Size(149, 6);
+ this.toolStripMenuItem2.Size = new System.Drawing.Size(142, 6);
//
// movieToolStripMenuItem
//
@@ -689,7 +689,7 @@
this.bindSavestatesToMoviesToolStripMenuItem,
this.automaticallyBackupMoviesToolStripMenuItem});
this.movieToolStripMenuItem.Name = "movieToolStripMenuItem";
- this.movieToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.movieToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.movieToolStripMenuItem.Text = "Movie";
this.movieToolStripMenuItem.DropDownOpened += new System.EventHandler(this.movieToolStripMenuItem_DropDownOpened);
//
@@ -799,7 +799,7 @@
this.screenshotF12ToolStripMenuItem,
this.screenshotAsToolStripMenuItem});
this.screenshotToolStripMenuItem.Name = "screenshotToolStripMenuItem";
- this.screenshotToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.screenshotToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.screenshotToolStripMenuItem.Text = "Screenshot";
//
// screenshotF12ToolStripMenuItem
@@ -820,13 +820,13 @@
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
- this.toolStripSeparator4.Size = new System.Drawing.Size(149, 6);
+ this.toolStripSeparator4.Size = new System.Drawing.Size(142, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
- this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(145, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
@@ -1613,7 +1613,7 @@
// StatusSlot0
//
this.StatusSlot0.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.DumpError,
+ this.DumpStatus,
this.EmuStatus,
this.PlayRecordStatus,
this.PauseStrip,
@@ -1630,20 +1630,22 @@
this.StatusSlot10});
this.StatusSlot0.Location = new System.Drawing.Point(0, 386);
this.StatusSlot0.Name = "StatusSlot0";
+ this.StatusSlot0.ShowItemToolTips = true;
this.StatusSlot0.Size = new System.Drawing.Size(470, 22);
this.StatusSlot0.SizingGrip = false;
this.StatusSlot0.TabIndex = 1;
this.StatusSlot0.Text = "0";
//
- // DumpError
+ // DumpStatus
//
- this.DumpError.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.DumpError.Image = global::BizHawk.MultiClient.Properties.Resources.Blank;
- this.DumpError.ImageTransparentColor = System.Drawing.Color.Magenta;
- this.DumpError.Name = "DumpError";
- this.DumpError.ShowDropDownArrow = false;
- this.DumpError.Size = new System.Drawing.Size(20, 20);
- this.DumpError.Text = "No ROM loaded";
+ this.DumpStatus.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+ this.DumpStatus.Image = global::BizHawk.MultiClient.Properties.Resources.Blank;
+ this.DumpStatus.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.DumpStatus.Name = "DumpStatus";
+ this.DumpStatus.ShowDropDownArrow = false;
+ this.DumpStatus.Size = new System.Drawing.Size(20, 20);
+ this.DumpStatus.Text = "No ROM loaded";
+ this.DumpStatus.Click += new System.EventHandler(this.DumpStatus_Click);
//
// EmuStatus
//
@@ -2100,7 +2102,7 @@
private System.Windows.Forms.ToolStripMenuItem stopMovieToolStripMenuItem1;
private System.Windows.Forms.ToolStripDropDownButton PauseStrip;
private System.Windows.Forms.ToolStripDropDownButton PlayRecordStatus;
- private System.Windows.Forms.ToolStripDropDownButton DumpError;
+ private System.Windows.Forms.ToolStripDropDownButton DumpStatus;
private System.Windows.Forms.ToolStripMenuItem viewSubtitlesToolStripMenuItem;
private MenuStripEx menuStrip1;
private System.Windows.Forms.ToolStripMenuItem gBToolStripMenuItem;
diff --git a/BizHawk.MultiClient/MainForm.MenuItems.cs b/BizHawk.MultiClient/MainForm.MenuItems.cs
index 93d891925f..4137132abe 100644
--- a/BizHawk.MultiClient/MainForm.MenuItems.cs
+++ b/BizHawk.MultiClient/MainForm.MenuItems.cs
@@ -8,6 +8,14 @@ namespace BizHawk.MultiClient
{
partial class MainForm
{
+ private void DumpStatus_Click(object sender, EventArgs e)
+ {
+ string details = Global.Emulator.CoreOutputComm.RomStatusDetails;
+ if(string.IsNullOrEmpty(details)) return;
+ var lw = new LogWindow();
+ lw.ShowReport("Dump Status Report",details);
+ }
+
private void RAMPokeToolStripMenuItem_Click(object sender, EventArgs e)
{
RamPoke r = new RamPoke();
diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs
index 3bf2320f0d..4db23cab36 100644
--- a/BizHawk.MultiClient/MainForm.cs
+++ b/BizHawk.MultiClient/MainForm.cs
@@ -865,6 +865,10 @@ namespace BizHawk.MultiClient
try
{
nextEmulator.CoreInputComm = Global.CoreInputComm;
+
+ //this is a bit hacky, but many cores do not take responsibility for setting this, so we need to set it for them.
+ nextEmulator.CoreOutputComm.RomStatus = game.Status;
+
nextEmulator.LoadGame(game);
}
catch (Exception ex)
@@ -928,49 +932,52 @@ namespace BizHawk.MultiClient
private void UpdateDumpIcon()
{
- if (Global.Game != null)
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.Blank;
+ DumpStatus.ToolTipText = "";
+
+ if (Global.Emulator == null) return;
+
+ var status = Global.Emulator.CoreOutputComm.RomStatus;
+ string annotation = "";
+ if (status == RomStatus.BadDump)
{
- if (Global.Game.Status == RomStatus.BadDump)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.ExclamationRed;
- DumpError.ToolTipText = "Warning: Bad ROM Dump";
- }
- else if (Global.Game.Status == RomStatus.Overdump)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.ExclamationRed;
- DumpError.ToolTipText = "Warning: Overdump";
- }
- else if (Global.Game.Status == RomStatus.NotInDatabase)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.RetroQuestion;
- DumpError.ToolTipText = "Warning: Unknown ROM";
- }
- else if (Global.Game.Status == RomStatus.TranslatedRom)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.Translation;
- DumpError.ToolTipText = "Translated ROM";
- }
- else if (Global.Game.Status == RomStatus.Homebrew)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.HomeBrew;
- DumpError.ToolTipText = "Homebrew ROM";
- }
- else if (Global.Game.Status == RomStatus.Hack)
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.Hack;
- DumpError.ToolTipText = "Hacked ROM";
- }
- else
- {
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.GreenCheck;
- DumpError.ToolTipText = "Verified good dump";
- }
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.ExclamationRed;
+ annotation = "Warning: Bad ROM Dump";
+ }
+ else if (status == RomStatus.Overdump)
+ {
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.ExclamationRed;
+ annotation = "Warning: Overdump";
+ }
+ else if (status == RomStatus.NotInDatabase)
+ {
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.RetroQuestion;
+ annotation = "Warning: Unknown ROM";
+ }
+ else if (status == RomStatus.TranslatedRom)
+ {
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.Translation;
+ annotation = "Translated ROM";
+ }
+ else if (status == RomStatus.Homebrew)
+ {
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.HomeBrew;
+ annotation = "Homebrew ROM";
+ }
+ else if (Global.Game.Status == RomStatus.Hack)
+ {
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.Hack;
+ annotation = "Hacked ROM";
}
else
{
- DumpError.Image = BizHawk.MultiClient.Properties.Resources.Blank;
- DumpError.ToolTipText = "";
+ DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.GreenCheck;
+ annotation = "Verified good dump";
}
+ if (!string.IsNullOrEmpty(Global.Emulator.CoreOutputComm.RomStatusAnnotation))
+ annotation = Global.Emulator.CoreOutputComm.RomStatusAnnotation;
+
+ DumpStatus.ToolTipText = annotation;
}
private void LoadSaveRam()
@@ -2523,5 +2530,8 @@ namespace BizHawk.MultiClient
{
Global.Config.DisplaySubtitles ^= true;
}
+
+
+
}
}
\ No newline at end of file
diff --git a/BizHawk.MultiClient/output/gamedb.txt b/BizHawk.MultiClient/output/gamedb.txt
index 443ceb8a50..aeb2f4c38c 100644
--- a/BizHawk.MultiClient/output/gamedb.txt
+++ b/BizHawk.MultiClient/output/gamedb.txt
@@ -2325,21 +2325,21 @@ sha1:99C18C91F051BFBA6836A7B6B213C77569D83767 After Burner 2 (J) NES board=SUN
sha1:CF655333DCE649A3C7060E9989860F2FC74E473A Demon Sword (U) NES board=NES-SL1ROM;PRG=128;CHR=128
sha1:7786BA1FE8E7E9E542EEB13CF2A6E2A1AD7F696D Metal Gear (U) NES board=KONAMI-UNROM;PRG=128
sha1:894F20405286F5F75133CE4648300E2C67972B40 Solomon's Key (U) NES board=NES-CNROM;PRG=32;CHR=32
-sha1:0C53B06E1D13AE917536BB39010914EA3D111FF5 Thunder & Lightning (U) NES board=NES-GNROM;PRG=128;CHR=32;bad
+sha1:0C53B06E1D13AE917536BB39010914EA3D111FF5 B Thunder & Lightning (U) NES board=NES-GNROM;PRG=128;CHR=32
sha1:9BDFF9A19265D84979F43F0F6E925A735DDEB38B Wai Xing Zhan Shi (Ch) NES board=Mapper242;PRG=512;CHR=0;VRAM=8;WRAM=8
sha1:91CECCFCAC90E417E9AEE80E8F7B560A20EB33CC Ai Sensei No Oshiete - Watashi No Hoshi (J) NES board=IREM-G101;PRG=256;CHR=128;WRAM=8
sha1:B6F6BD9D78CDD264A117D4B647AEE3309993E9A9 Mike Tyson's Punch-Out!! (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
sha1:A0C4D4172A0037B7D9BA729A93E809978D0F10D2 Punch-Out!! (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
;and these are even labeled as bad in goodNES
-sha1:984ADAEB85403EEF1BA85CDCF310FAAECEB409A0 Adventures of Captain Comic, The (Bad Dump) (U) NES board=COLORDREAMS-74*377;PRG=64;CHR=64;WRAM=0;VRAM=0;bad
-sha1:869111A86FD46872AD8B1BA0ED31B858FA15681F Adventures of Lolo (Bad Dump) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0;bad
-sha1:41BD74F739E008D476989C8296BB789EE57658F0 Adventures of Lolo (Bad Dump 2) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0;bad
-sha1:10AF069B2AC5DB2FB10768349F4068CB3CDA0EC7 Airwolf (Bad Dump 1) (U) NES board=NES-SH1ROM;PRG=32;CHR=128;bad
-sha1:DAD9D1D66018DFB3C30F48741EF188FEFA2B2F68 Airwolf (Bad Dump 2) (U) NES board=NES-SH1ROM;PRG=32;CHR=128;bad
+sha1:984ADAEB85403EEF1BA85CDCF310FAAECEB409A0 B Adventures of Captain Comic, The (Bad Dump) (U) NES board=COLORDREAMS-74*377;PRG=64;CHR=64;WRAM=0;VRAM=0
+sha1:869111A86FD46872AD8B1BA0ED31B858FA15681F B Adventures of Lolo (Bad Dump) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0
+sha1:41BD74F739E008D476989C8296BB789EE57658F0 B Adventures of Lolo (Bad Dump 2) (U) NES board=NES-SEROM;PRG=32;CHR=32;WRAM=0;VRAM=0
+sha1:10AF069B2AC5DB2FB10768349F4068CB3CDA0EC7 B Airwolf (Bad Dump 1) (U) NES board=NES-SH1ROM;PRG=32;CHR=128
+sha1:DAD9D1D66018DFB3C30F48741EF188FEFA2B2F68 B Airwolf (Bad Dump 2) (U) NES board=NES-SH1ROM;PRG=32;CHR=128
;these roms are from goodNES but they are confusingly messed up somehow
-sha1:36405B87E66E18DC432690A5959D4529C14B1AEE High Speed (U) NES board=NES-TQROM;PRG=128;CHR=64;VRAM=8;WRAM=0;bad
+sha1:36405B87E66E18DC432690A5959D4529C14B1AEE B High Speed (U) NES board=NES-TQROM;PRG=128;CHR=64;VRAM=8;WRAM=0
sha1:192C543866F1037276D2778046ABEDCA84868E26 Bio Senshi Dan - Increaser To No Tatakai (J) NES board=JALECO-JF-14;PRG=128;CHR=128
sha1:E80FF0B707B0D675FDBEF474E3FDB1A83E2B7C44 Mississippi Satsujin Jiken (J) NES board=JALECO-JF-11;PRG=128;CHR=32;PAD_H=1
sha1:8A5FD1061ADACDEABF422A2D2E555FF70749AE7C Mississippi Satsujin Jiken (Alt) (J) NES board=GXROM_HACKY;PRG=128;CHR=32;PAD_H=1
@@ -2347,9 +2347,9 @@ sha1:8C7D33753649A2BAF2EAAF8D5FFC2AE8E9316A13 Akira (J) NES board=TAITO-TC0190
sha1:0AE47BD83202A5A2235B0BC16278F56D66038AB5 Deathbots (U) NES board=AVE-NINA-06;PRG=64;CHR=64;PAD_H=1;PAD_V=0
;these roms are in goodNES but theyre junk
-sha1:4D6117577CE301BB987C5C32FEEF7B132A21B046 Afro Man (Mega Man 3 Hack) (UNL) NES board=TXROM-HOMEBREW;PRG=256;CHR=128;WRAM=8
-sha1:7BD102770FE7766BF8430ACDB3C17EE51E30478C Mike Tyson's Punch-Out!! (Hacked) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
-sha1:536D623BA02A622BDE8E2D7D514AE9785B5E0357 Punch Out!! Kirby (Hack) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
+sha1:4D6117577CE301BB987C5C32FEEF7B132A21B046 H Afro Man (Mega Man 3 Hack) (UNL) NES board=TXROM-HOMEBREW;PRG=256;CHR=128;WRAM=8
+sha1:7BD102770FE7766BF8430ACDB3C17EE51E30478C H Mike Tyson's Punch-Out!! (Hacked) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
+sha1:536D623BA02A622BDE8E2D7D514AE9785B5E0357 H Punch Out!! Kirby (Hack) (U) NES board=NES-PNROM;PRG=128;CHR=128;WRAM=0
;other assorted roms
sha1:92D9695FEB774F60965A8303CFE3E6AAEE7B7B62 Magic Dragon (Unl) NES board=Mapper107;PRG=128;CHR=64;WRAM=8;PAD_H=1