Debugger: Improve CPU memory mapping display (vs work ram and save ram regions)

This commit is contained in:
Sour 2018-01-02 12:06:20 -05:00
parent b1283ae48d
commit 0c9cbe4da0
4 changed files with 66 additions and 4 deletions

View file

@ -1068,6 +1068,30 @@ CartridgeState BaseMapper::GetState()
state.Nametables[i] = _nametableIndexes[i]; state.Nametables[i] = _nametableIndexes[i];
} }
state.WorkRamStart = -1;
state.WorkRamEnd = -1;
state.SaveRamStart = -1;
state.SaveRamEnd = -1;
for(int i = 0x40; i < 0x100; i++) {
int32_t address = ToAbsoluteWorkRamAddress(i << 8);
if(address >= 0) {
if(state.WorkRamStart < 0) {
state.WorkRamStart = i << 8;
} else {
state.WorkRamEnd = (i << 8) + 0x100;
}
} else {
address = ToAbsoluteSaveRamAddress(i << 8);
if(address >= 0) {
if(state.SaveRamStart < 0) {
state.SaveRamStart = i << 8;
} else {
state.SaveRamEnd = (i << 8) + 0x100;
}
}
}
}
return state; return state;
} }

View file

@ -77,6 +77,11 @@ struct CartridgeState
uint32_t ChrPageSize; uint32_t ChrPageSize;
uint32_t ChrSelectedPages[64]; uint32_t ChrSelectedPages[64];
uint32_t Nametables[8]; uint32_t Nametables[8];
int32_t WorkRamStart;
int32_t WorkRamEnd;
int32_t SaveRamStart;
int32_t SaveRamEnd;
}; };
struct PPUControlFlags struct PPUControlFlags

View file

@ -47,10 +47,38 @@ namespace Mesen.GUI.Debugger.Controls
regions.Add(new MemoryRegionInfo() { Name = "Internal RAM", Size = 0x2000, Color = Color.FromArgb(222, 222, 222) }); regions.Add(new MemoryRegionInfo() { Name = "Internal RAM", Size = 0x2000, Color = Color.FromArgb(222, 222, 222) });
regions.Add(new MemoryRegionInfo() { Name = "CPU Registers", Size = 0x2020, Color = Color.FromArgb(222, 222, 222) }); regions.Add(new MemoryRegionInfo() { Name = "CPU Registers", Size = 0x2020, Color = Color.FromArgb(222, 222, 222) });
regions.Add(new MemoryRegionInfo() { Name = "N/A", Size = 0x1FE0, Color = Color.FromArgb(222, 222, 222) });
regions.Add(new MemoryRegionInfo() { Name = "Work RAM", Size = 0x2000, Color = Color.FromArgb(0xCD, 0xDC, 0xFA) });
for(int i = 0; i < 0x8000 / state.PrgPageSize; i++) { Action<int> addEmpty = (int size) => { regions.Add(new MemoryRegionInfo() { Name = "N/A", Size = size, Color = Color.FromArgb(222, 222, 222) }); };
Action addWorkRam = () => { regions.Add(new MemoryRegionInfo() { Name = "Work RAM", Size = state.WorkRamEnd - state.WorkRamStart, Color = Color.FromArgb(0xCD, 0xDC, 0xFA) }); };
Action addSaveRam = () => { regions.Add(new MemoryRegionInfo() { Name = "Save RAM", Size = state.SaveRamEnd - state.SaveRamStart, Color = Color.FromArgb(0xFA, 0xDC, 0xCD) }); };
if(state.SaveRamStart > 0 && state.WorkRamStart > 0) {
if(state.SaveRamStart > state.WorkRamStart) {
addEmpty(state.WorkRamStart - 0x4020);
addWorkRam();
addEmpty(state.SaveRamStart - state.WorkRamEnd);
addSaveRam();
} else {
addEmpty(state.SaveRamStart - 0x4020);
addSaveRam();
addEmpty(state.WorkRamStart - state.SaveRamEnd);
addWorkRam();
}
} else if(state.WorkRamStart > 0) {
addEmpty(state.WorkRamStart - 0x4020);
addWorkRam();
} else if(state.SaveRamStart > 0) {
addEmpty(state.WorkRamStart - 0x4020);
addSaveRam();
}
int currentAddress = regions.Sum((MemoryRegionInfo region) => region.Size);
if(currentAddress < 0x8000) {
addEmpty(0x8000 - currentAddress);
currentAddress = 0x8000;
}
for(int i = (currentAddress - 0x8000) / (int)state.PrgPageSize; i < 0x8000 / state.PrgPageSize; i++) {
string text = state.PrgSelectedPages[i] == 0xEEEEEEEE ? "N/A" : ("$" + state.PrgSelectedPages[i].ToString("X2")); string text = state.PrgSelectedPages[i] == 0xEEEEEEEE ? "N/A" : ("$" + state.PrgSelectedPages[i].ToString("X2"));
regions.Add(new MemoryRegionInfo() { Name = text, Size = (int)state.PrgPageSize, Color = i % 2 == 0 ? Color.FromArgb(0xC4, 0xE7, 0xD4) : Color.FromArgb(0xA4, 0xD7, 0xB4) }); regions.Add(new MemoryRegionInfo() { Name = text, Size = (int)state.PrgPageSize, Color = i % 2 == 0 ? Color.FromArgb(0xC4, 0xE7, 0xD4) : Color.FromArgb(0xA4, 0xD7, 0xB4) });
} }

View file

@ -1075,6 +1075,11 @@ namespace Mesen.GUI
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public UInt32[] Nametables; public UInt32[] Nametables;
public Int32 WorkRamStart;
public Int32 WorkRamEnd;
public Int32 SaveRamStart;
public Int32 SaveRamEnd;
} }
public struct PPUDebugState public struct PPUDebugState