Hex Editor - implement viewing in 1 or 2 byte (todo: 4 byte)

This commit is contained in:
andres.delikat 2011-03-07 04:31:58 +00:00
parent 5ae14bc55d
commit 80d84888df
3 changed files with 99 additions and 6 deletions

View File

@ -118,20 +118,23 @@
// byteToolStripMenuItem
//
this.byteToolStripMenuItem.Name = "byteToolStripMenuItem";
this.byteToolStripMenuItem.Size = new System.Drawing.Size(116, 22);
this.byteToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem.Text = "1 Byte";
this.byteToolStripMenuItem.Click += new System.EventHandler(this.byteToolStripMenuItem_Click);
//
// byteToolStripMenuItem1
//
this.byteToolStripMenuItem1.Name = "byteToolStripMenuItem1";
this.byteToolStripMenuItem1.Size = new System.Drawing.Size(116, 22);
this.byteToolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem1.Text = "2 Byte";
this.byteToolStripMenuItem1.Click += new System.EventHandler(this.byteToolStripMenuItem1_Click);
//
// byteToolStripMenuItem2
//
this.byteToolStripMenuItem2.Name = "byteToolStripMenuItem2";
this.byteToolStripMenuItem2.Size = new System.Drawing.Size(116, 22);
this.byteToolStripMenuItem2.Size = new System.Drawing.Size(152, 22);
this.byteToolStripMenuItem2.Text = "4 Byte";
this.byteToolStripMenuItem2.Click += new System.EventHandler(this.byteToolStripMenuItem2_Click);
//
// goToAddressToolStripMenuItem
//

View File

@ -87,6 +87,26 @@ namespace BizHawk.MultiClient
private void optionsToolStripMenuItem_DropDownOpened(object sender, EventArgs e)
{
autoloadToolStripMenuItem.Checked = Global.Config.AutoLoadHexEditor;
switch (MemoryViewer.GetDataSize())
{
default:
case 1:
byteToolStripMenuItem.Checked = true;
byteToolStripMenuItem1.Checked = false;
byteToolStripMenuItem2.Checked = false;
break;
case 2:
byteToolStripMenuItem.Checked = false;
byteToolStripMenuItem1.Checked = true;
byteToolStripMenuItem2.Checked = false;
break;
case 4:
byteToolStripMenuItem.Checked = false;
byteToolStripMenuItem1.Checked = false;
byteToolStripMenuItem2.Checked = true;
break;
}
}
private void SetMemoryDomain(int pos)
@ -145,6 +165,21 @@ namespace BizHawk.MultiClient
MemoryViewer.Refresh();
}
private void byteToolStripMenuItem_Click(object sender, EventArgs e)
{
MemoryViewer.SetDataSize(1);
}
private void byteToolStripMenuItem1_Click(object sender, EventArgs e)
{
MemoryViewer.SetDataSize(2);
}
private void byteToolStripMenuItem2_Click(object sender, EventArgs e)
{
MemoryViewer.SetDataSize(4);
}
}
}

View File

@ -9,7 +9,7 @@ namespace BizHawk.MultiClient
{
public class MemoryViewer : GroupBox
{
//data size variable, and adjust drawing based on it, and a method for parent to set it
//TODO: 4 byte
public VScrollBar vScrollBar1;
MemoryDomain Domain = new MemoryDomain("NULL", 1, Endian.Little, addr => 0, (a, v) => { });
@ -17,6 +17,7 @@ namespace BizHawk.MultiClient
Brush regBrush = Brushes.Black;
int RowsVisible = 0;
int DataSize = 1;
bool BigEndian = false;
string Header = "";
public MemoryViewer()
@ -67,15 +68,22 @@ namespace BizHawk.MultiClient
{
default:
case 1:
Header = " 0 1 2 3 4 5 6 7 8 9 A B C D E F"; //TODO: not constant, must deal with bite size
Header = " 0 1 2 3 4 5 6 7 8 9 A B C D E F";
for (int j = 0; j < 16; j++)
{
addr = (row * 16) + j;
if (addr < Domain.Size)
rowStr += String.Format("{0:X2}", Domain.PeekByte(addr)) + " "; //TODO: format based on data size
rowStr += String.Format("{0:X2}", Domain.PeekByte(addr)) + " ";
}
break;
case 2:
Header = " 0 2 4 6 8 A C E";
for (int j = 0; j < 16; j+=2)
{
addr = (row * 16) + j;
if (addr < Domain.Size)
rowStr += String.Format("{0:X4}", MakeValue(addr, DataSize, BigEndian)) + " ";
}
break;
case 4:
break;
@ -89,6 +97,42 @@ namespace BizHawk.MultiClient
}
}
private int MakeValue(int addr, int size, bool Bigendian)
{
int x = 0;
if (size == 1 || size == 2 || size == 4)
{
switch (size)
{
case 1:
x = Domain.PeekByte(addr);
break;
case 2:
if (Bigendian)
{
x = Domain.PeekByte(addr) + (Domain.PeekByte(addr + 1) * 255);
}
else
{
x = (Domain.PeekByte(addr) * 255) + Domain.PeekByte(addr + 1);
}
break;
case 3:
if (Bigendian)
{
//TODO
}
else
{
}
break;
}
return x;
}
else
return 0; //fail
}
public void ResetScrollBar()
{
vScrollBar1.Value = 0;
@ -137,5 +181,16 @@ namespace BizHawk.MultiClient
{
Display(e.Graphics);
}
public void SetDataSize(int size)
{
if (size == 1 || size == 2 || size == 4)
DataSize = size;
}
public int GetDataSize()
{
return DataSize;
}
}
}