Debugger - Register box - properly detect flags and use button style and better positioning, convert register textboxes to hex, and set max length of the boxes appropriately given the size of the register

This commit is contained in:
adelikat 2014-12-20 03:47:58 +00:00
parent aba50b0f87
commit 0965475999
2 changed files with 79 additions and 52 deletions

View File

@ -42,6 +42,9 @@ namespace BizHawk.Client.EmuHawk
foreach (var register in registers) foreach (var register in registers)
{ {
Controls Controls
.OfType<Panel>()
.First(p => p.Name == "FlagPanel")
.Controls
.OfType<CheckBox>() .OfType<CheckBox>()
.ToList() .ToList()
.ForEach(checkbox => .ForEach(checkbox =>
@ -59,7 +62,7 @@ namespace BizHawk.Client.EmuHawk
{ {
if (textbox.Name == register.Key) if (textbox.Name == register.Key)
{ {
textbox.Text = register.Value.ToString(); textbox.Text = register.Value.Value.ToHexString(register.Value.BitSize / 16);
} }
}); });
} }
@ -118,7 +121,7 @@ namespace BizHawk.Client.EmuHawk
var registers = Core.GetCpuFlagsAndRegisters(); var registers = Core.GetCpuFlagsAndRegisters();
int y = 0; int y = 0;
foreach (var register in registers) foreach (var register in registers.Where(r => r.Value.BitSize != 1))
{ {
this.Controls.Add(new Label this.Controls.Add(new Label
{ {
@ -129,63 +132,32 @@ namespace BizHawk.Client.EmuHawk
if (canset) if (canset)
{ {
if (register.Key.Contains("Flag")) // TODO: this depends on naming conventions! var t = new TextBox
{ {
var c = new CheckBox Name = register.Key,
{ Text = register.Value.Value.ToHexString(register.Value.BitSize / 16),
Name = register.Key, Width = 45,
Text = "", Location = new Point(40, y),
Checked = register.Value.Value == 1 ? true : false, MaxLength = register.Value.BitSize / 4,
Location = new Point(40, y) CharacterCasing = CharacterCasing.Upper
}; };
c.CheckedChanged += (o, e) => t.TextChanged += (o, e) =>
{
if (!_supressChangeEvents)
{
try
{
Core.SetCpuRegister(c.Name, c.Checked ? 1 : 0);
}
catch (InvalidOperationException) // TODO: This is hacky stuff because NES doesn't support setting flags! Need to know when a core supports this or not, and enable/disable the box accordingly
{
_supressChangeEvents = true;
c.Checked = !c.Checked;
_supressChangeEvents = false;
c.Enabled = false;
}
}
};
this.Controls.Add(c);
}
else
{ {
var t = new TextBox if (!_supressChangeEvents)
{ {
Name = register.Key, try
Text = register.Value.ToString(),
Width = 45,
Location = new Point(40, y),
};
t.TextChanged += (o, e) =>
{
if (!_supressChangeEvents)
{ {
try Core.SetCpuRegister(t.Name, int.Parse(t.Text));
{
Core.SetCpuRegister(t.Name, int.Parse(t.Text));
}
catch (InvalidOperationException)
{
t.Enabled = false;
}
} }
}; catch (InvalidOperationException)
{
t.Enabled = false;
}
}
};
this.Controls.Add(t); this.Controls.Add(t);
}
} }
else else
{ {
@ -200,6 +172,56 @@ namespace BizHawk.Client.EmuHawk
y += 25; y += 25;
} }
var flags = registers.Where(r => r.Value.BitSize == 1);
if (flags.Any())
{
var p = new Panel
{
Name = "FlagPanel",
Location = new Point(5, y),
BorderStyle = BorderStyle.None,
Size = new Size(240, 23),
AutoScroll = true
};
foreach (var flag in registers.Where(r => r.Value.BitSize == 1).OrderByDescending(x => x.Key))
{
var c = new CheckBox
{
Appearance = System.Windows.Forms.Appearance.Button,
Name = flag.Key,
Text = flag.Key.Replace("Flag", "").Trim(), // Hack
Checked = flag.Value.Value == 1 ? true : false,
Location = new Point(40, y),
Dock = DockStyle.Left,
Size = new Size(23, 23)
};
c.CheckedChanged += (o, e) =>
{
if (!_supressChangeEvents)
{
try
{
Core.SetCpuRegister(c.Name, c.Checked ? 1 : 0);
}
catch (InvalidOperationException) // TODO: This is hacky stuff because NES doesn't support setting flags! Need to know when a core supports this or not, and enable/disable the box accordingly
{
_supressChangeEvents = true;
c.Checked = !c.Checked;
_supressChangeEvents = false;
c.Enabled = false;
}
}
};
p.Controls.Add(c);
}
this.Controls.Add(p);
}
} }
} }
} }

View File

@ -24,6 +24,11 @@ namespace BizHawk.Common.NumberExtensions
return string.Format("{0:X" + numdigits + "}", n); return string.Format("{0:X" + numdigits + "}", n);
} }
public static string ToHexString(this ulong n, int numdigits)
{
return string.Format("{0:X" + numdigits + "}", n);
}
public static bool Bit(this byte b, int index) public static bool Bit(this byte b, int index)
{ {
return (b & (1 << index)) != 0; return (b & (1 << index)) != 0;