Ram Watch/Search/Poke - use Watch objects internal domain value, this commit doesn't add functionatility yet (may have even broke something), but will lead to eventually being able to watch multiple domains at once, and some ram search optimizations

This commit is contained in:
adelikat 2012-09-04 00:33:47 +00:00
parent 0cc6bf072e
commit 2de8e3c346
8 changed files with 393 additions and 287 deletions

View File

@ -653,6 +653,7 @@ namespace BizHawk.MultiClient
w.Value = MakeValue(p); w.Value = MakeValue(p);
w.BigEndian = BigEndian; w.BigEndian = BigEndian;
w.Signed = Watch.DISPTYPE.HEX; w.Signed = Watch.DISPTYPE.HEX;
w.Domain = Domain;
switch (DataSize) switch (DataSize)
{ {
@ -669,7 +670,7 @@ namespace BizHawk.MultiClient
} }
RamPoke poke = new RamPoke(); RamPoke poke = new RamPoke();
poke.SetWatchObject(w, Domain); poke.SetWatchObject(w);
poke.location = GetAddressCoordinates(p); poke.location = GetAddressCoordinates(p);
Global.Sound.StopSound(); Global.Sound.StopSound();
poke.ShowDialog(); poke.ShowDialog();

View File

@ -23,11 +23,11 @@ namespace BizHawk.MultiClient
InitializeComponent(); InitializeComponent();
} }
public void SetWatchObject(Watch w, MemoryDomain d) public void SetWatchObject(Watch w)
{ {
PopulateMemoryDomainComboBox(); PopulateMemoryDomainComboBox();
watch = new Watch(w); watch = new Watch(w);
domain = d; domain = w.Domain;
} }
private void RamPoke_Load(object sender, EventArgs e) private void RamPoke_Load(object sender, EventArgs e)
@ -189,8 +189,8 @@ namespace BizHawk.MultiClient
{ {
watch.Value = int.Parse(ValueBox.Text); watch.Value = int.Parse(ValueBox.Text);
} }
watch.Domain = domain;
watch.PokeAddress(domain); watch.PokeAddress();
string value; string value;
if (HexRadio.Checked) if (HexRadio.Checked)

View File

@ -81,7 +81,7 @@ namespace BizHawk.MultiClient
for (int x = Searches.Count - 1; x >= 0; x--) for (int x = Searches.Count - 1; x >= 0; x--)
{ {
Searches[x].PeekAddress(Domain); Searches[x].PeekAddress();
} }
if (AutoSearchCheckBox.Checked) if (AutoSearchCheckBox.Checked)
{ {
@ -395,7 +395,6 @@ namespace BizHawk.MultiClient
{ {
ClearUndo(); ClearUndo();
ClearRedo(); ClearRedo();
//weededList.Clear();
IsAWeededList = false; IsAWeededList = false;
Searches.Clear(); Searches.Clear();
SetPlatformAndMemoryDomainLabel(); SetPlatformAndMemoryDomainLabel();
@ -422,7 +421,8 @@ namespace BizHawk.MultiClient
Searches[x].Type = GetDataSize(); Searches[x].Type = GetDataSize();
Searches[x].BigEndian = GetBigEndian(); Searches[x].BigEndian = GetBigEndian();
Searches[x].Signed = GetDataType(); Searches[x].Signed = GetDataType();
Searches[x].PeekAddress(Domain); Searches[x].Domain = Domain;
Searches[x].PeekAddress();
Searches[x].Prev = Searches[x].Value; Searches[x].Prev = Searches[x].Value;
Searches[x].Original = Searches[x].Value; Searches[x].Original = Searches[x].Value;
Searches[x].LastChange = Searches[x].Value; Searches[x].LastChange = Searches[x].Value;
@ -493,7 +493,9 @@ namespace BizHawk.MultiClient
int x = indexes[0]; int x = indexes[0];
Watch bob = Searches[indexes[0]]; Watch bob = Searches[indexes[0]];
if (indexes.Count > 0) if (indexes.Count > 0)
p.SetWatchObject(Searches[indexes[0]], Domain); {
p.SetWatchObject(Searches[indexes[0]]);
}
p.location = GetPromptPoint(); p.location = GetPromptPoint();
p.ShowDialog(); p.ShowDialog();
UpdateValues(); UpdateValues();
@ -1566,7 +1568,7 @@ namespace BizHawk.MultiClient
int changes = list[x].Changecount; int changes = list[x].Changecount;
list[x].Type = s; list[x].Type = s;
list[x].BigEndian = GetBigEndian(); list[x].BigEndian = GetBigEndian();
list[x].PeekAddress(Domain); list[x].PeekAddress();
list[x].Prev = list[x].Value; list[x].Prev = list[x].Value;
list[x].Original = list[x].Value; list[x].Original = list[x].Value;
list[x].LastChange = list[x].Value; list[x].LastChange = list[x].Value;

View File

@ -63,8 +63,9 @@ namespace BizHawk.MultiClient
{ {
List<Watch> w = new List<Watch>(); List<Watch> w = new List<Watch>();
for (int x = 0; x < Watches.Count; x++) for (int x = 0; x < Watches.Count; x++)
{
w.Add(new Watch(Watches[x])); w.Add(new Watch(Watches[x]));
}
return w; return w;
} }
@ -82,7 +83,7 @@ namespace BizHawk.MultiClient
for (int x = 0; x < Watches.Count; x++) for (int x = 0; x < Watches.Count; x++)
{ {
Watches[x].PeekAddress(Domain); Watches[x].PeekAddress();
} }
if (Global.Config.DisplayRamWatch) if (Global.Config.DisplayRamWatch)
@ -397,7 +398,8 @@ namespace BizHawk.MultiClient
private void InitializeAddress(Watch w) private void InitializeAddress(Watch w)
{ {
w.PeekAddress(Domain); w.Domain = Domain;
w.PeekAddress();
w.Prev = w.Value; w.Prev = w.Value;
w.Original = w.Value; w.Original = w.Value;
w.LastChange = w.Value; w.LastChange = w.Value;
@ -500,12 +502,15 @@ namespace BizHawk.MultiClient
} }
List<int> i = new List<int>(); List<int> i = new List<int>();
for (int z = 0; z < indexes.Count; z++) for (int z = 0; z < indexes.Count; z++)
{
i.Add(indexes[z] - 1); i.Add(indexes[z] - 1);
}
WatchListView.SelectedIndices.Clear(); WatchListView.SelectedIndices.Clear();
for (int z = 0; z < i.Count; z++) for (int z = 0; z < i.Count; z++)
{
WatchListView.SelectItem(i[z], true); WatchListView.SelectItem(i[z], true);
}
DisplayWatchList(); DisplayWatchList();
} }
@ -820,7 +825,9 @@ namespace BizHawk.MultiClient
Watches.Insert(indexes[0], w); Watches.Insert(indexes[0], w);
} }
else else
{
Watches.Add(w); Watches.Add(w);
}
DisplayWatchList(); DisplayWatchList();
} }
@ -876,7 +883,9 @@ namespace BizHawk.MultiClient
RamPoke p = new RamPoke(); RamPoke p = new RamPoke();
Global.Sound.StartSound(); Global.Sound.StartSound();
if (indexes.Count > 0) if (indexes.Count > 0)
p.SetWatchObject(Watches[indexes[0]], Domain); {
p.SetWatchObject(Watches[indexes[0]]);
}
p.location = GetPromptPoint(); p.location = GetPromptPoint();
p.ShowDialog(); p.ShowDialog();
UpdateValues(); UpdateValues();

View File

@ -46,6 +46,8 @@
this.BigEndianRadio = new System.Windows.Forms.RadioButton(); this.BigEndianRadio = new System.Windows.Forms.RadioButton();
this.OK = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button();
this.Cancel = new System.Windows.Forms.Button(); this.Cancel = new System.Windows.Forms.Button();
this.label6 = new System.Windows.Forms.Label();
this.DomainComboBox = new System.Windows.Forms.ComboBox();
this.DataTypeGroupBox.SuspendLayout(); this.DataTypeGroupBox.SuspendLayout();
this.DataSizeBox.SuspendLayout(); this.DataSizeBox.SuspendLayout();
this.EndianBox.SuspendLayout(); this.EndianBox.SuspendLayout();
@ -78,8 +80,8 @@
this.AddressBox.Size = new System.Drawing.Size(100, 20); this.AddressBox.Size = new System.Drawing.Size(100, 20);
this.AddressBox.TabIndex = 2; this.AddressBox.TabIndex = 2;
this.AddressBox.Text = "00000000"; this.AddressBox.Text = "00000000";
this.AddressBox.Leave += new System.EventHandler(this.AddressBox_Leave);
this.AddressBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.AddressBox_KeyPress); this.AddressBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.AddressBox_KeyPress);
this.AddressBox.Leave += new System.EventHandler(this.AddressBox_Leave);
// //
// NotesBox // NotesBox
// //
@ -212,7 +214,8 @@
// //
// OK // OK
// //
this.OK.Location = new System.Drawing.Point(12, 222); this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.OK.Location = new System.Drawing.Point(12, 260);
this.OK.Name = "OK"; this.OK.Name = "OK";
this.OK.Size = new System.Drawing.Size(75, 23); this.OK.Size = new System.Drawing.Size(75, 23);
this.OK.TabIndex = 7; this.OK.TabIndex = 7;
@ -222,8 +225,9 @@
// //
// Cancel // Cancel
// //
this.Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.Cancel.Location = new System.Drawing.Point(123, 222); this.Cancel.Location = new System.Drawing.Point(123, 260);
this.Cancel.Name = "Cancel"; this.Cancel.Name = "Cancel";
this.Cancel.Size = new System.Drawing.Size(75, 23); this.Cancel.Size = new System.Drawing.Size(75, 23);
this.Cancel.TabIndex = 8; this.Cancel.TabIndex = 8;
@ -231,13 +235,33 @@
this.Cancel.UseVisualStyleBackColor = true; this.Cancel.UseVisualStyleBackColor = true;
this.Cancel.Click += new System.EventHandler(this.Cancel_Click); this.Cancel.Click += new System.EventHandler(this.Cancel_Click);
// //
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(11, 214);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(83, 13);
this.label6.TabIndex = 15;
this.label6.Text = "Memory Domain";
//
// DomainComboBox
//
this.DomainComboBox.FormattingEnabled = true;
this.DomainComboBox.Location = new System.Drawing.Point(12, 230);
this.DomainComboBox.Name = "DomainComboBox";
this.DomainComboBox.Size = new System.Drawing.Size(141, 21);
this.DomainComboBox.TabIndex = 14;
this.DomainComboBox.SelectedIndexChanged += new System.EventHandler(this.DomainComboBox_SelectedIndexChanged);
//
// RamWatchNewWatch // RamWatchNewWatch
// //
this.AcceptButton = this.OK; this.AcceptButton = this.OK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.Cancel; this.CancelButton = this.Cancel;
this.ClientSize = new System.Drawing.Size(213, 258); this.ClientSize = new System.Drawing.Size(213, 296);
this.Controls.Add(this.label6);
this.Controls.Add(this.DomainComboBox);
this.Controls.Add(this.Cancel); this.Controls.Add(this.Cancel);
this.Controls.Add(this.OK); this.Controls.Add(this.OK);
this.Controls.Add(this.EndianBox); this.Controls.Add(this.EndianBox);
@ -284,5 +308,7 @@
private System.Windows.Forms.RadioButton LittleEndianRadio; private System.Windows.Forms.RadioButton LittleEndianRadio;
private System.Windows.Forms.Button OK; private System.Windows.Forms.Button OK;
private System.Windows.Forms.Button Cancel; private System.Windows.Forms.Button Cancel;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.ComboBox DomainComboBox;
} }
} }

View File

@ -13,6 +13,7 @@ namespace BizHawk.MultiClient
public partial class RamWatchNewWatch : Form public partial class RamWatchNewWatch : Form
{ {
public Watch watch = new Watch(); public Watch watch = new Watch();
public MemoryDomain domain = Global.Emulator.MainMemory;
public bool userSelected = false; public bool userSelected = false;
public bool customSetup = false; public bool customSetup = false;
public Point location = new Point(); public Point location = new Point();
@ -76,6 +77,11 @@ namespace BizHawk.MultiClient
LittleEndianRadio.Checked = true; LittleEndianRadio.Checked = true;
} }
public void SetDomain(MemoryDomain domain)
{
watch.Domain = domain;
}
public void SetEndian(Endian endian) public void SetEndian(Endian endian)
{ {
if (endian == Endian.Big) if (endian == Endian.Big)
@ -99,9 +105,13 @@ namespace BizHawk.MultiClient
} }
if (location.X > 0 && location.Y > 0) if (location.X > 0 && location.Y > 0)
{
this.Location = location; this.Location = location;
} }
PopulateMemoryDomainComboBox();
}
private void Cancel_Click(object sender, EventArgs e) private void Cancel_Click(object sender, EventArgs e)
{ {
userSelected = false; userSelected = false;
@ -159,7 +169,7 @@ namespace BizHawk.MultiClient
{ {
watch.BigEndian = false; watch.BigEndian = false;
} }
watch.Domain = domain;
watch.Notes = NotesBox.Text; watch.Notes = NotesBox.Text;
this.Close(); this.Close();
@ -184,5 +194,61 @@ namespace BizHawk.MultiClient
if (!InputValidate.IsValidHexNumber(e.KeyChar)) if (!InputValidate.IsValidHexNumber(e.KeyChar))
e.Handled = true; e.Handled = true;
} }
private void PopulateMemoryDomainComboBox()
{
DomainComboBox.Items.Clear();
if (Global.Emulator.MemoryDomains.Count > 0)
{
for (int x = 0; x < Global.Emulator.MemoryDomains.Count; x++)
{
string str = Global.Emulator.MemoryDomains[x].ToString();
DomainComboBox.Items.Add(str);
}
}
SetDomainSelection();
}
private int GetNumDigits(Int32 i)
{
if (i < 0x10000) return 4;
if (i < 0x100000) return 5;
if (i < 0x1000000) return 6;
if (i < 0x10000000) return 7;
else return 8;
}
private void SetAddressBox()
{
AddressBox.Text = String.Format("{0:X" +
GetNumDigits(watch.Address) + "}", watch.Address);
}
private void SetDomainSelection()
{
//Counts should always be the same, but just in case, let's check
int max;
if (Global.Emulator.MemoryDomains.Count < DomainComboBox.Items.Count)
max = Global.Emulator.MemoryDomains.Count;
else
max = DomainComboBox.Items.Count;
for (int x = 0; x < max; x++)
{
if (domain.ToString() == DomainComboBox.Items[x].ToString())
DomainComboBox.SelectedIndex = x;
}
}
private void DomainComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
domain = Global.Emulator.MemoryDomains[DomainComboBox.SelectedIndex];
int x = GetNumDigits(domain.Size);
watch.Address = 0;
watch.Value = 0;
watch.Domain = domain;
SetAddressBox();
AddressBox.MaxLength = GetNumDigits(domain.Size);
}
} }
} }

View File

@ -112,12 +112,12 @@
<value>2.0</value> <value>2.0</value>
</resheader> </resheader>
<resheader name="reader"> <resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAABMLAAATCwAAAAEAAAAA AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAABMLAAATCwAAAAEAAAAA

View File

@ -270,48 +270,50 @@ namespace BizHawk.MultiClient
} }
} }
public void PeekAddress(MemoryDomain domain) public void PeekAddress()
{ {
if (Type == TYPE.SEPARATOR) if (Type == TYPE.SEPARATOR)
{
return; return;
}
Prev = Value; Prev = Value;
switch (Type) switch (Type)
{ {
case TYPE.BYTE: case TYPE.BYTE:
Value = domain.PeekByte(Address); Value = Domain.PeekByte(Address);
break; break;
case TYPE.WORD: case TYPE.WORD:
if (BigEndian) if (BigEndian)
{ {
Value = 0; Value = 0;
Value |= domain.PeekByte(Address) << 8; Value |= Domain.PeekByte(Address) << 8;
Value |= domain.PeekByte(Address + 1); Value |= Domain.PeekByte(Address + 1);
} }
else else
{ {
Value = 0; Value = 0;
Value |= domain.PeekByte(Address); Value |= Domain.PeekByte(Address);
Value |= domain.PeekByte(Address + 1) << 8; Value |= Domain.PeekByte(Address + 1) << 8;
} }
break; break;
case TYPE.DWORD: case TYPE.DWORD:
if (BigEndian) if (BigEndian)
{ {
Value = 0; Value = 0;
Value |= domain.PeekByte(Address) << 24; Value |= Domain.PeekByte(Address) << 24;
Value |= domain.PeekByte(Address + 1) << 16; Value |= Domain.PeekByte(Address + 1) << 16;
Value |= domain.PeekByte(Address + 2) << 8; Value |= Domain.PeekByte(Address + 2) << 8;
Value |= domain.PeekByte(Address + 3) << 0; Value |= Domain.PeekByte(Address + 3) << 0;
} }
else else
{ {
Value = 0; Value = 0;
Value |= domain.PeekByte(Address) << 0; Value |= Domain.PeekByte(Address) << 0;
Value |= domain.PeekByte(Address + 1) << 8; Value |= Domain.PeekByte(Address + 1) << 8;
Value |= domain.PeekByte(Address + 2) << 16; Value |= Domain.PeekByte(Address + 2) << 16;
Value |= domain.PeekByte(Address + 3) << 24; Value |= Domain.PeekByte(Address + 3) << 24;
} }
break; break;
} }
@ -323,7 +325,7 @@ namespace BizHawk.MultiClient
} }
} }
public void PokeAddress(MemoryDomain domain) public void PokeAddress()
{ {
if (Type == TYPE.SEPARATOR) if (Type == TYPE.SEPARATOR)
return; return;
@ -331,13 +333,13 @@ namespace BizHawk.MultiClient
switch (Type) switch (Type)
{ {
case TYPE.BYTE: case TYPE.BYTE:
PokeByte(domain); PokeByte();
break; break;
case TYPE.WORD: case TYPE.WORD:
PokeWord(domain); PokeWord();
break; break;
case TYPE.DWORD: case TYPE.DWORD:
PokeDWord(domain); PokeDWord();
break; break;
} }
} }
@ -421,40 +423,40 @@ namespace BizHawk.MultiClient
#region Helpers #region Helpers
private void PokeByte(MemoryDomain domain) private void PokeByte()
{ {
domain.PokeByte(Address, (byte)Value); Domain.PokeByte(Address, (byte)Value);
} }
private void PokeWord(MemoryDomain domain) private void PokeWord()
{ {
if (BigEndian) if (BigEndian)
{ {
domain.PokeByte(Address + 0, (byte)(Value >> 8)); Domain.PokeByte(Address + 0, (byte)(Value >> 8));
domain.PokeByte(Address + 1, (byte)(Value)); Domain.PokeByte(Address + 1, (byte)(Value));
} }
else else
{ {
domain.PokeByte(Address + 0, (byte)(Value)); Domain.PokeByte(Address + 0, (byte)(Value));
domain.PokeByte(Address + 1, (byte)(Value >> 8)); Domain.PokeByte(Address + 1, (byte)(Value >> 8));
} }
} }
private void PokeDWord(MemoryDomain domain) private void PokeDWord()
{ {
if (BigEndian) if (BigEndian)
{ {
domain.PokeByte(Address + 0, (byte)(Value << 24)); Domain.PokeByte(Address + 0, (byte)(Value << 24));
domain.PokeByte(Address + 1, (byte)(Value << 16)); Domain.PokeByte(Address + 1, (byte)(Value << 16));
domain.PokeByte(Address + 2, (byte)(Value << 8)); Domain.PokeByte(Address + 2, (byte)(Value << 8));
domain.PokeByte(Address + 3, (byte)(Value)); Domain.PokeByte(Address + 3, (byte)(Value));
} }
else else
{ {
domain.PokeByte(Address + 0, (byte)(Value)); Domain.PokeByte(Address + 0, (byte)(Value));
domain.PokeByte(Address + 1, (byte)(Value << 8)); Domain.PokeByte(Address + 1, (byte)(Value << 8));
domain.PokeByte(Address + 2, (byte)(Value << 16)); Domain.PokeByte(Address + 2, (byte)(Value << 16));
domain.PokeByte(Address + 3, (byte)(Value << 24)); Domain.PokeByte(Address + 3, (byte)(Value << 24));
} }
} }