Debugger: Added option to break when a $2006 write scroll glitch occurs
This commit is contained in:
parent
d96f09a1e1
commit
36e2d04fe9
7 changed files with 36 additions and 0 deletions
|
@ -40,6 +40,8 @@ enum class DebuggerFlags
|
|||
BreakOnPlay = 0x8000,
|
||||
|
||||
BreakOnFirstCycle = 0x10000,
|
||||
|
||||
BreakOnPpu2006ScrollGlitch = 0x20000,
|
||||
};
|
||||
|
||||
enum class BreakSource
|
||||
|
@ -57,6 +59,7 @@ enum class BreakSource
|
|||
BreakOnCpuCrash = 9,
|
||||
Pause = 10,
|
||||
BreakAfterSuspend = 11,
|
||||
BreakOnPpu2006ScrollGlitch = 12
|
||||
};
|
||||
|
||||
enum class AddressType
|
||||
|
|
|
@ -1288,8 +1288,16 @@ void PPU::UpdateState()
|
|||
//When a $2006 address update lands on the Y or X increment, the written value is bugged and is ANDed with the incremented value
|
||||
if(_cycle == 257) {
|
||||
_state.VideoRamAddr &= _updateVramAddr;
|
||||
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
|
||||
if(debugger && debugger->CheckFlag(DebuggerFlags::BreakOnPpu2006ScrollGlitch)) {
|
||||
debugger->BreakImmediately(BreakSource::BreakOnPpu2006ScrollGlitch);
|
||||
}
|
||||
} else if(_cycle > 0 && (_cycle & 0x07) == 0 && (_cycle <= 256 || _cycle > 320)) {
|
||||
_state.VideoRamAddr = (_updateVramAddr & ~0x1F) | (_state.VideoRamAddr & _updateVramAddr & 0x1F);
|
||||
shared_ptr<Debugger> debugger = _console->GetDebugger(false);
|
||||
if(debugger && debugger->CheckFlag(DebuggerFlags::BreakOnPpu2006ScrollGlitch)) {
|
||||
debugger->BreakImmediately(BreakSource::BreakOnPpu2006ScrollGlitch);
|
||||
}
|
||||
} else {
|
||||
_state.VideoRamAddr = _updateVramAddr;
|
||||
}
|
||||
|
|
|
@ -319,6 +319,7 @@ namespace Mesen.GUI.Config
|
|||
public bool BreakOnDebuggerFocus = false;
|
||||
public bool BreakOnCrash = false;
|
||||
public bool BreakOnDecayedOamRead = false;
|
||||
public bool BreakOnPpu2006ScrollGlitch = false;
|
||||
public bool BreakOnUninitMemoryRead = false;
|
||||
public bool BreakOnInit = true;
|
||||
public bool BreakOnPlay = false;
|
||||
|
|
11
GUI.NET/Debugger/frmDebugger.Designer.cs
generated
11
GUI.NET/Debugger/frmDebugger.Designer.cs
generated
|
@ -137,6 +137,7 @@ namespace Mesen.GUI.Debugger
|
|||
this.toolStripMenuItem26 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBreakOnDecayedOamRead = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnUninitMemoryRead = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnPpu2006ScrollGlitch = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem15 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.mnuBreakOnOpen = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mnuBreakOnDebuggerFocus = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -1216,6 +1217,7 @@ namespace Mesen.GUI.Debugger
|
|||
this.toolStripMenuItem26,
|
||||
this.mnuBreakOnDecayedOamRead,
|
||||
this.mnuBreakOnUninitMemoryRead,
|
||||
this.mnuBreakOnPpu2006ScrollGlitch,
|
||||
this.toolStripMenuItem15,
|
||||
this.mnuBreakOnOpen,
|
||||
this.mnuBreakOnDebuggerFocus,
|
||||
|
@ -1303,6 +1305,14 @@ namespace Mesen.GUI.Debugger
|
|||
this.mnuBreakOnUninitMemoryRead.Text = "Break on uninitialized memory read";
|
||||
this.mnuBreakOnUninitMemoryRead.Click += new System.EventHandler(this.mnuBreakOnUninitMemoryRead_Click);
|
||||
//
|
||||
// mnuBreakOnPpu2006ScrollGlitch
|
||||
//
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.CheckOnClick = true;
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.Name = "mnuBreakOnPpu2006ScrollGlitch";
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.Size = new System.Drawing.Size(261, 22);
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.Text = "Break on PPU $2006 scroll glitch";
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.Click += new System.EventHandler(this.mnuBreakOnPpu2006ScrollGlitch_Click);
|
||||
//
|
||||
// toolStripMenuItem15
|
||||
//
|
||||
this.toolStripMenuItem15.Name = "toolStripMenuItem15";
|
||||
|
@ -2271,5 +2281,6 @@ namespace Mesen.GUI.Debugger
|
|||
private System.Windows.Forms.ToolStripMenuItem mnuRunCpuCycle;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuShowSelectionLength;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuWatchWindow;
|
||||
private System.Windows.Forms.ToolStripMenuItem mnuBreakOnPpu2006ScrollGlitch;
|
||||
}
|
||||
}
|
|
@ -112,6 +112,7 @@ namespace Mesen.GUI.Debugger
|
|||
this.mnuBreakOnBrk.Checked = ConfigManager.Config.DebugInfo.BreakOnBrk;
|
||||
this.mnuBreakOnUninitMemoryRead.Checked = ConfigManager.Config.DebugInfo.BreakOnUninitMemoryRead;
|
||||
this.mnuBreakOnDecayedOamRead.Checked = ConfigManager.Config.DebugInfo.BreakOnDecayedOamRead;
|
||||
this.mnuBreakOnPpu2006ScrollGlitch.Checked = ConfigManager.Config.DebugInfo.BreakOnPpu2006ScrollGlitch;
|
||||
this.mnuBreakOnCrash.Checked = ConfigManager.Config.DebugInfo.BreakOnCrash;
|
||||
this.mnuBreakOnDebuggerFocus.Checked = ConfigManager.Config.DebugInfo.BreakOnDebuggerFocus;
|
||||
this.mnuBringToFrontOnBreak.Checked = ConfigManager.Config.DebugInfo.BringToFrontOnBreak;
|
||||
|
@ -427,6 +428,7 @@ namespace Mesen.GUI.Debugger
|
|||
SetFlag(DebuggerFlags.BreakOnBrk, config.BreakOnBrk);
|
||||
SetFlag(DebuggerFlags.BreakOnUninitMemoryRead, config.BreakOnUninitMemoryRead);
|
||||
SetFlag(DebuggerFlags.BreakOnDecayedOamRead, config.BreakOnDecayedOamRead);
|
||||
SetFlag(DebuggerFlags.BreakOnPpu2006ScrollGlitch, config.BreakOnPpu2006ScrollGlitch);
|
||||
SetFlag(DebuggerFlags.BreakOnInit, config.BreakOnInit);
|
||||
SetFlag(DebuggerFlags.BreakOnPlay, config.BreakOnPlay);
|
||||
SetFlag(DebuggerFlags.BreakOnFirstCycle, config.BreakOnFirstCycle);
|
||||
|
@ -1224,6 +1226,13 @@ namespace Mesen.GUI.Debugger
|
|||
ConfigManager.ApplyChanges();
|
||||
UpdateDebuggerFlags();
|
||||
}
|
||||
|
||||
private void mnuBreakOnPpu2006ScrollGlitch_Click(object sender, EventArgs e)
|
||||
{
|
||||
ConfigManager.Config.DebugInfo.BreakOnPpu2006ScrollGlitch = mnuBreakOnPpu2006ScrollGlitch.Checked;
|
||||
ConfigManager.ApplyChanges();
|
||||
UpdateDebuggerFlags();
|
||||
}
|
||||
|
||||
private void mnuBreakOnCrash_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
|
|
@ -1246,6 +1246,7 @@
|
|||
<Value ID="BreakOnUninitMemoryRead">Uninitialized memory read</Value>
|
||||
<Value ID="BreakOnDecayedOamRead">Decayed OAM read</Value>
|
||||
<Value ID="BreakOnCpuCrash">CPU crashed</Value>
|
||||
<Value ID="BreakOnPpu2006ScrollGlitch">$2006 write scroll glitch</Value>
|
||||
</Enum>
|
||||
<Enum ID="VsPpuType">
|
||||
<Value ID="RP2C03B">RP2C03B</Value>
|
||||
|
|
|
@ -1737,6 +1737,8 @@ namespace Mesen.GUI
|
|||
BreakOnPlay = 0x8000,
|
||||
|
||||
BreakOnFirstCycle = 0x10000,
|
||||
|
||||
BreakOnPpu2006ScrollGlitch = 0x20000,
|
||||
}
|
||||
|
||||
public struct InteropRomInfo
|
||||
|
@ -2357,6 +2359,7 @@ namespace Mesen.GUI
|
|||
BreakOnCpuCrash = 9,
|
||||
Pause = 10,
|
||||
BreakAfterSuspend = 11,
|
||||
BreakOnPpu2006ScrollGlitch = 12
|
||||
}
|
||||
|
||||
public enum PpuAddressType
|
||||
|
|
Loading…
Add table
Reference in a new issue