Debugger: Memory Viewer - Added missing right-click navigation options between the various PPU memory types

This commit is contained in:
Sour 2019-01-17 18:00:11 -05:00
parent 9b68473863
commit cc07cb283a
3 changed files with 60 additions and 23 deletions

View file

@ -205,7 +205,7 @@ namespace Mesen.GUI.Config
public XmlKeys MemoryViewer_Import = Keys.Control | Keys.O;
[ShortcutName("Export")]
public XmlKeys MemoryViewer_Export = Keys.Control | Keys.S;
[ShortcutName("View in CPU Memory")]
[ShortcutName("View in CPU/PPU Memory")]
public XmlKeys MemoryViewer_ViewInCpuMemory = Keys.None;
[ShortcutName("View in [memory type]")]
public XmlKeys MemoryViewer_ViewInMemoryType = Keys.None;

View file

@ -584,29 +584,46 @@ namespace Mesen.GUI.Debugger.Controls
mnuViewInDisassembly.Text = $"View in disassembly ({address})";
bool viewInCpuMemoryVisible = (_memoryType == DebugMemoryType.PrgRom || _memoryType == DebugMemoryType.WorkRam || _memoryType == DebugMemoryType.SaveRam);
bool viewInMemoryTypeVisible = _memoryType == DebugMemoryType.CpuMemory;
mnuViewInCpuMemory.Visible = viewInCpuMemoryVisible;
bool viewInCpuMemoryVisible = false;
bool viewInPpuMemoryVisible = false;
if(_memoryType == DebugMemoryType.PrgRom || _memoryType == DebugMemoryType.WorkRam || _memoryType == DebugMemoryType.SaveRam) {
viewInCpuMemoryVisible = true;
} else if(_memoryType == DebugMemoryType.ChrRom || _memoryType == DebugMemoryType.ChrRam || _memoryType == DebugMemoryType.NametableRam || _memoryType == DebugMemoryType.PaletteMemory) {
viewInPpuMemoryVisible = true;
}
bool viewInMemoryTypeVisible = _memoryType == DebugMemoryType.CpuMemory || _memoryType == DebugMemoryType.PpuMemory;
mnuViewInCpuMemory.Visible = viewInCpuMemoryVisible || viewInPpuMemoryVisible;
mnuViewInMemoryType.Visible = viewInMemoryTypeVisible;
mnuViewInDisassembly.Visible = (viewInCpuMemoryVisible || viewInMemoryTypeVisible);
sepViewActions.Visible = (viewInCpuMemoryVisible || viewInMemoryTypeVisible);
sepViewActions.Visible = (viewInCpuMemoryVisible || viewInPpuMemoryVisible || viewInMemoryTypeVisible);
if(viewInMemoryTypeVisible) {
frmDebugger debugger = DebugWindowManager.GetDebugger();
AddressTypeInfo addressInfo = new AddressTypeInfo();
InteropEmu.DebugGetAbsoluteAddressAndType(startAddress, addressInfo);
mnuViewInMemoryType.Text = $"View in " + ResourceHelper.GetEnumText(addressInfo.Type) + $" ({address})";
mnuViewInDisassembly.Enabled = debugger != null;
bool viewInMemoryTypeEnabled = addressInfo.Address >= 0 && (addressInfo.Type == AddressType.PrgRom || addressInfo.Type == AddressType.WorkRam || addressInfo.Type == AddressType.SaveRam);
bool viewInMemoryTypeEnabled = false;
if(_memoryType == DebugMemoryType.CpuMemory) {
AddressTypeInfo addressInfo = new AddressTypeInfo();
InteropEmu.DebugGetAbsoluteAddressAndType(startAddress, addressInfo);
mnuViewInMemoryType.Text = $"View in " + ResourceHelper.GetEnumText(addressInfo.Type) + $" ({address})";
viewInMemoryTypeEnabled = addressInfo.Address >= 0 && (addressInfo.Type == AddressType.PrgRom || addressInfo.Type == AddressType.WorkRam || addressInfo.Type == AddressType.SaveRam);
} else {
PpuAddressTypeInfo addressInfo = InteropEmu.DebugGetPpuAbsoluteAddressAndType(startAddress);
mnuViewInMemoryType.Text = $"View in " + ResourceHelper.GetEnumText(addressInfo.Type) + $" ({address})";
viewInMemoryTypeEnabled = addressInfo.Address >= 0 && (addressInfo.Type == PpuAddressType.ChrRam || addressInfo.Type == PpuAddressType.ChrRom || addressInfo.Type == PpuAddressType.NametableRam || addressInfo.Type == PpuAddressType.PaletteRam);
}
mnuViewInDisassembly.Enabled = DebugWindowManager.GetDebugger() != null;
mnuViewInMemoryType.Enabled = viewInMemoryTypeEnabled;
mnuViewInMemoryType.Visible = viewInMemoryTypeEnabled;
mnuViewInCpuMemory.Enabled = false;
} else if(viewInCpuMemoryVisible) {
frmDebugger debugger = DebugWindowManager.GetDebugger();
int relativeAddress = InteropEmu.DebugGetRelativeAddress(startAddress, _memoryType.ToAddressType());
mnuViewInCpuMemory.Text = $"View in CPU memory ({address})";
} else if(viewInCpuMemoryVisible || viewInPpuMemoryVisible) {
int relativeAddress = -1;
if(viewInCpuMemoryVisible) {
relativeAddress = InteropEmu.DebugGetRelativeAddress(startAddress, _memoryType.ToAddressType());
mnuViewInCpuMemory.Text = $"View in CPU memory ({address})";
} else {
relativeAddress = InteropEmu.DebugGetRelativePpuAddress(startAddress, _memoryType.ToPpuAddressType());
mnuViewInCpuMemory.Text = $"View in PPU memory ({address})";
}
mnuViewInCpuMemory.Enabled = relativeAddress >= 0;
mnuViewInDisassembly.Enabled = debugger != null && relativeAddress >= 0;
mnuViewInDisassembly.Enabled = viewInCpuMemoryVisible && DebugWindowManager.GetDebugger() != null && relativeAddress >= 0;
mnuViewInMemoryType.Enabled = false;
} else {
mnuViewInMemoryType.Enabled = false;
@ -701,18 +718,32 @@ namespace Mesen.GUI.Debugger.Controls
private void mnuViewInCpuMemory_Click(object sender, EventArgs e)
{
int relativeAddress = InteropEmu.DebugGetRelativeAddress((UInt32)SelectionStartAddress, _memoryType.ToAddressType());
if(relativeAddress >= 0) {
MemoryViewer.ShowAddress(relativeAddress, DebugMemoryType.CpuMemory);
if(_memoryType == DebugMemoryType.WorkRam || _memoryType == DebugMemoryType.SaveRam || _memoryType == DebugMemoryType.PrgRom) {
int relativeAddress = InteropEmu.DebugGetRelativeAddress((UInt32)SelectionStartAddress, _memoryType.ToAddressType());
if(relativeAddress >= 0) {
MemoryViewer.ShowAddress(relativeAddress, DebugMemoryType.CpuMemory);
}
} else {
int relativeAddress = InteropEmu.DebugGetRelativePpuAddress((UInt32)SelectionStartAddress, _memoryType.ToPpuAddressType());
if(relativeAddress >= 0) {
MemoryViewer.ShowAddress(relativeAddress, DebugMemoryType.PpuMemory);
}
}
}
private void mnuViewInMemoryType_Click(object sender, EventArgs e)
{
AddressTypeInfo addressInfo = new AddressTypeInfo();
InteropEmu.DebugGetAbsoluteAddressAndType((UInt32)SelectionStartAddress, addressInfo);
if(addressInfo.Address >= 0 && (addressInfo.Type == AddressType.PrgRom || addressInfo.Type == AddressType.WorkRam || addressInfo.Type == AddressType.SaveRam)) {
MemoryViewer.ShowAddress(addressInfo.Address, addressInfo.Type.ToMemoryType());
if(_memoryType == DebugMemoryType.CpuMemory) {
AddressTypeInfo addressInfo = new AddressTypeInfo();
InteropEmu.DebugGetAbsoluteAddressAndType((UInt32)SelectionStartAddress, addressInfo);
if(addressInfo.Address >= 0 && (addressInfo.Type == AddressType.PrgRom || addressInfo.Type == AddressType.WorkRam || addressInfo.Type == AddressType.SaveRam)) {
MemoryViewer.ShowAddress(addressInfo.Address, addressInfo.Type.ToMemoryType());
}
} else {
PpuAddressTypeInfo addressInfo = InteropEmu.DebugGetPpuAbsoluteAddressAndType((UInt32)SelectionStartAddress);
if(addressInfo.Address >= 0) {
MemoryViewer.ShowAddress(addressInfo.Address, addressInfo.Type.ToMemoryType());
}
}
}

View file

@ -1093,6 +1093,12 @@
<Value ID="SaveRam">Save RAM</Value>
<Value ID="Register">Register</Value>
</Enum>
<Enum ID="PpuAddressType">
<Value ID="ChrRom">CHR ROM</Value>
<Value ID="ChrRam">CHR RAM</Value>
<Value ID="NametableRam">Nametable RAM</Value>
<Value ID="PaletteRam">Palette RAM</Value>
</Enum>
<Enum ID="DebugMemoryType">
<Value ID="CpuMemory">CPU Memory</Value>
<Value ID="PpuMemory">PPU Memory</Value>