hexeditor: support 32bit systembus domain. only lightly tested.

This commit is contained in:
zeromus 2014-09-11 21:55:38 +00:00
parent a9bb4162fd
commit c36667ddb5
1 changed files with 42 additions and 39 deletions

View File

@ -41,6 +41,7 @@ namespace BizHawk.Client.EmuHawk
private int _maxRow; private int _maxRow;
private long _domainSize;
private MemoryDomain _domain = new MemoryDomain( private MemoryDomain _domain = new MemoryDomain(
"NULL", 1024, MemoryDomain.Endian.Little, addr => 0, delegate(int a, byte v) { v = 0; }); "NULL", 1024, MemoryDomain.Endian.Little, addr => 0, delegate(int a, byte v) { v = 0; });
@ -200,7 +201,7 @@ namespace BizHawk.Client.EmuHawk
{ {
startByte = 0; startByte = 0;
} }
else if (_addressHighlighted >= (_domain.Size - 1 - numByte)) else if (_addressHighlighted >= (_domainSize - 1 - numByte))
{ {
startByte = 0; startByte = 0;
} }
@ -209,7 +210,7 @@ namespace BizHawk.Client.EmuHawk
startByte = _addressHighlighted + _dataSize; startByte = _addressHighlighted + _dataSize;
} }
for (var i = startByte; i < (_domain.Size - numByte); i++) for (var i = startByte; i < (_domainSize - numByte); i++)
{ {
var ramblock = new StringBuilder(); var ramblock = new StringBuilder();
for (var j = 0; j < numByte; j++) for (var j = 0; j < numByte; j++)
@ -254,7 +255,7 @@ namespace BizHawk.Client.EmuHawk
int startByte; int startByte;
if (_addressHighlighted == -1) if (_addressHighlighted == -1)
{ {
startByte = _domain.Size - _dataSize; startByte = (int)(_domainSize - _dataSize);
} }
else else
{ {
@ -381,7 +382,7 @@ namespace BizHawk.Client.EmuHawk
} }
} }
private static int GetNumDigits(int i) private static int GetNumDigits(long i)
{ {
if (i <= 0x10000) if (i <= 0x10000)
{ {
@ -510,7 +511,7 @@ namespace BizHawk.Client.EmuHawk
{ {
_row = i + HexScrollBar.Value; _row = i + HexScrollBar.Value;
_addr = _row << 4; _addr = _row << 4;
if (_addr >= _domain.Size) if (_addr >= _domainSize)
{ {
break; break;
} }
@ -538,14 +539,14 @@ namespace BizHawk.Client.EmuHawk
{ {
_row = i + HexScrollBar.Value; _row = i + HexScrollBar.Value;
_addr = _row << 4; _addr = _row << 4;
if (_addr >= _domain.Size) if (_addr >= _domainSize)
{ {
break; break;
} }
for (var j = 0; j < 16; j += _dataSize) for (var j = 0; j < 16; j += _dataSize)
{ {
if (_addr + j + _dataSize <= _domain.Size) if (_addr + j + _dataSize <= _domainSize)
{ {
rowStr.AppendFormat(_digitFormatString, MakeValue(_addr + j)); rowStr.AppendFormat(_digitFormatString, MakeValue(_addr + j));
} }
@ -563,7 +564,7 @@ namespace BizHawk.Client.EmuHawk
rowStr.Append(" | "); rowStr.Append(" | ");
for (var k = 0; k < 16; k++) for (var k = 0; k < 16; k++)
{ {
if (_addr + k < _domain.Size) if (_addr + k < _domainSize)
{ {
rowStr.Append(Remap(MakeByte(_addr + k))); rowStr.Append(Remap(MakeByte(_addr + k)));
} }
@ -604,8 +605,14 @@ namespace BizHawk.Client.EmuHawk
private void SetMemoryDomain(MemoryDomain d) private void SetMemoryDomain(MemoryDomain d)
{ {
_domain = d; _domain = d;
//store domain size separately as a long, to apply 0-hack
_domainSize = _domain.Size;
if (_domainSize == 0)
_domainSize = 0x100000000;
_bigEndian = d.EndianType == MemoryDomain.Endian.Big; _bigEndian = d.EndianType == MemoryDomain.Endian.Big;
_maxRow = _domain.Size / 2; _maxRow = (int)(_domainSize / 2);
SetUpScrollBar(); SetUpScrollBar();
if (0 >= HexScrollBar.Minimum && 0 <= HexScrollBar.Maximum) if (0 >= HexScrollBar.Minimum && 0 <= HexScrollBar.Maximum)
{ {
@ -651,7 +658,7 @@ namespace BizHawk.Client.EmuHawk
private void UpdateGroupBoxTitle() private void UpdateGroupBoxTitle()
{ {
var addressesString = "0x" + string.Format("{0:X8}", _domain.Size / _dataSize).TrimStart('0'); var addressesString = "0x" + string.Format("{0:X8}", _domainSize / _dataSize).TrimStart('0');
MemoryViewerBox.Text = Global.Emulator.SystemId + " " + _domain + " - " + addressesString + " addresses"; MemoryViewerBox.Text = Global.Emulator.SystemId + " " + _domain + " - " + addressesString + " addresses";
} }
@ -661,26 +668,22 @@ namespace BizHawk.Client.EmuHawk
for (var i = 0; i < MemoryDomains.Count; i++) for (var i = 0; i < MemoryDomains.Count; i++)
{ {
//zero 09-sep-2014 - what cases would have a MemoryDomain of size 0? //zero 11-sep-2014 - historically, memorydomains of size zero were ignored.
//1. unspecified malfunctions (please specify) //now, they'll be confused with a 32bit memorydomain. hope that's not a problem.
//2. full 32bit memorydomains var str = MemoryDomains[i].ToString();
if (MemoryDomains[i].Size > 0) var item = new ToolStripMenuItem { Text = str };
{ {
var str = MemoryDomains[i].ToString(); var temp = i;
var item = new ToolStripMenuItem { Text = str }; item.Click += (o, ev) => SetMemoryDomain(temp);
{
var temp = i;
item.Click += (o, ev) => SetMemoryDomain(temp);
}
if (i == 0)
{
SetMemoryDomain(i);
}
MemoryDomainsMenuItem.DropDownItems.Add(item);
_domainMenuItems.Add(item);
} }
if (i == 0)
{
SetMemoryDomain(i);
}
MemoryDomainsMenuItem.DropDownItems.Add(item);
_domainMenuItems.Add(item);
} }
// Add File on Disk memory domain // Add File on Disk memory domain
@ -706,9 +709,9 @@ namespace BizHawk.Client.EmuHawk
address = 0; address = 0;
} }
if (address >= _domain.Size) if (address >= _domainSize)
{ {
address = _domain.Size - 1; address = (int)(_domainSize - 1);
} }
SetHighlighted(address); SetHighlighted(address);
@ -725,9 +728,9 @@ namespace BizHawk.Client.EmuHawk
address = 0; address = 0;
} }
if (address >= _domain.Size) if (address >= _domainSize)
{ {
address = _domain.Size - 1; address = (int)(_domainSize - 1);
} }
if (!IsVisible(address)) if (!IsVisible(address))
@ -780,7 +783,7 @@ namespace BizHawk.Client.EmuHawk
break; break;
} }
_numDigits = GetNumDigits(_domain.Size); _numDigits = GetNumDigits(_domainSize);
_numDigitsStr = "{0:X" + _numDigits + "} "; _numDigitsStr = "{0:X" + _numDigits + "} ";
} }
@ -879,7 +882,7 @@ namespace BizHawk.Client.EmuHawk
var file = new FileInfo(path); var file = new FileInfo(path);
using (var binWriter = new BinaryWriter(File.Open(file.FullName, FileMode.Create))) using (var binWriter = new BinaryWriter(File.Open(file.FullName, FileMode.Create)))
{ {
for (var i = 0; i < _domain.Size; i++) for (var i = 0; i < _domainSize; i++)
{ {
binWriter.Write(_domain.PeekByte(i)); binWriter.Write(_domain.PeekByte(i));
} }
@ -940,7 +943,7 @@ namespace BizHawk.Client.EmuHawk
private void SetUpScrollBar() private void SetUpScrollBar()
{ {
_rowsVisible = (MemoryViewerBox.Height - (fontHeight * 2) - (fontHeight / 2)) / fontHeight; _rowsVisible = (MemoryViewerBox.Height - (fontHeight * 2) - (fontHeight / 2)) / fontHeight;
var totalRows = (_domain.Size + 15) / 16; var totalRows = (int)((_domainSize + 15) / 16);
if (totalRows < _rowsVisible) if (totalRows < _rowsVisible)
{ {
@ -999,7 +1002,7 @@ namespace BizHawk.Client.EmuHawk
private void DoShiftClick() private void DoShiftClick()
{ {
if (_addressOver >= 0 && _addressOver < _domain.Size) if (_addressOver >= 0 && _addressOver < _domainSize)
{ {
_secondaryHighlightedAddresses.Clear(); _secondaryHighlightedAddresses.Clear();
if (_addressOver < _addressHighlighted) if (_addressOver < _addressHighlighted)
@ -1098,7 +1101,7 @@ namespace BizHawk.Client.EmuHawk
private void AddToSecondaryHighlights(int address) private void AddToSecondaryHighlights(int address)
{ {
if (address >= 0 && address < _domain.Size) if (address >= 0 && address < _domainSize)
{ {
_secondaryHighlightedAddresses.Add(address); _secondaryHighlightedAddresses.Add(address);
} }
@ -1295,7 +1298,7 @@ namespace BizHawk.Client.EmuHawk
{ {
var sb = new StringBuilder(); var sb = new StringBuilder();
for (var i = 0; i < _domain.Size / 16; i++) for (var i = 0; i < _domainSize / 16; i++)
{ {
for (var j = 0; j < 16; j++) for (var j = 0; j < 16; j++)
{ {
@ -1811,7 +1814,7 @@ namespace BizHawk.Client.EmuHawk
break; break;
case Keys.End: case Keys.End:
newHighlighted = _domain.Size - _dataSize; newHighlighted = (int)(_domainSize - _dataSize);
if (e.Modifiers == Keys.Shift) if (e.Modifiers == Keys.Shift)
{ {
for (var i = _addressHighlighted; i < newHighlighted; i++) for (var i = _addressHighlighted; i < newHighlighted; i++)