mirror of https://github.com/stella-emu/stella.git
debugger start displays labels where possible
prevent repeated trap interrupts some old code cleanup
This commit is contained in:
parent
d15690f5f1
commit
90705babd7
|
@ -168,7 +168,7 @@ FBInitStatus Debugger::initializeVideo()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool Debugger::start(const string& message, int address)
|
bool Debugger::start(const string& message, int address, bool read)
|
||||||
{
|
{
|
||||||
if(myOSystem.eventHandler().enterDebugMode())
|
if(myOSystem.eventHandler().enterDebugMode())
|
||||||
{
|
{
|
||||||
|
@ -177,8 +177,7 @@ bool Debugger::start(const string& message, int address)
|
||||||
ostringstream buf;
|
ostringstream buf;
|
||||||
buf << message;
|
buf << message;
|
||||||
if(address > -1)
|
if(address > -1)
|
||||||
buf << Common::Base::HEX4 << address;
|
buf << cartDebug().getLabel(address, read);
|
||||||
|
|
||||||
myDialog->message().setText(buf.str());
|
myDialog->message().setText(buf.str());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -368,27 +367,6 @@ bool Debugger::breakPoint(uInt16 bp)
|
||||||
return breakPoints().isSet(bp);
|
return breakPoints().isSet(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void Debugger::toggleReadTrap(uInt16 t)
|
|
||||||
{
|
|
||||||
readTraps().initialize();
|
|
||||||
readTraps().toggle(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void Debugger::toggleWriteTrap(uInt16 t)
|
|
||||||
{
|
|
||||||
writeTraps().initialize();
|
|
||||||
writeTraps().toggle(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void Debugger::toggleTrap(uInt16 t)
|
|
||||||
{
|
|
||||||
toggleReadTrap(t);
|
|
||||||
toggleWriteTrap(t);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void Debugger::addReadTrap(uInt16 t)
|
void Debugger::addReadTrap(uInt16 t)
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,7 +88,7 @@ class Debugger : public DialogContainer
|
||||||
@param message Message to display when entering debugger
|
@param message Message to display when entering debugger
|
||||||
@param address An address associated with the message
|
@param address An address associated with the message
|
||||||
*/
|
*/
|
||||||
bool start(const string& message = "", int address = -1);
|
bool start(const string& message = "", int address = -1, bool read = true);
|
||||||
bool startWithFatalError(const string& message = "");
|
bool startWithFatalError(const string& message = "");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -147,8 +147,6 @@ class Debugger : public DialogContainer
|
||||||
PackedBitArray& breakPoints() const { return mySystem.m6502().breakPoints(); }
|
PackedBitArray& breakPoints() const { return mySystem.m6502().breakPoints(); }
|
||||||
TrapArray& readTraps() const { return mySystem.m6502().readTraps(); }
|
TrapArray& readTraps() const { return mySystem.m6502().readTraps(); }
|
||||||
TrapArray& writeTraps() const { return mySystem.m6502().writeTraps(); }
|
TrapArray& writeTraps() const { return mySystem.m6502().writeTraps(); }
|
||||||
/*PackedBitArray& readTrapIfs() const { return mySystem.m6502().readTrapIfs(); }
|
|
||||||
PackedBitArray& writeTrapIfs() const { return mySystem.m6502().writeTrapIfs(); }*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Run the debugger command and return the result.
|
Run the debugger command and return the result.
|
||||||
|
@ -259,9 +257,6 @@ class Debugger : public DialogContainer
|
||||||
void toggleBreakPoint(uInt16 bp);
|
void toggleBreakPoint(uInt16 bp);
|
||||||
|
|
||||||
bool breakPoint(uInt16 bp);
|
bool breakPoint(uInt16 bp);
|
||||||
/*void toggleReadTrap(uInt16 t);
|
|
||||||
void toggleWriteTrap(uInt16 t);
|
|
||||||
void toggleTrap(uInt16 t);*/
|
|
||||||
void addReadTrap(uInt16 t);
|
void addReadTrap(uInt16 t);
|
||||||
void addWriteTrap(uInt16 t);
|
void addWriteTrap(uInt16 t);
|
||||||
void addTrap(uInt16 t);
|
void addTrap(uInt16 t);
|
||||||
|
|
|
@ -586,6 +586,7 @@ bool DebuggerParser::saveScriptFile(string file)
|
||||||
if(debugger.breakPoint(i))
|
if(debugger.breakPoint(i))
|
||||||
out << "break #" << i << endl;
|
out << "break #" << i << endl;
|
||||||
|
|
||||||
|
// TODO: new trapif
|
||||||
for(uInt32 i = 0; i < 0x10000; ++i)
|
for(uInt32 i = 0; i < 0x10000; ++i)
|
||||||
{
|
{
|
||||||
bool r = debugger.readTrap(i);
|
bool r = debugger.readTrap(i);
|
||||||
|
|
|
@ -55,6 +55,8 @@ M6502::M6502(const Settings& settings)
|
||||||
myLastAddress(0),
|
myLastAddress(0),
|
||||||
myLastPeekAddress(0),
|
myLastPeekAddress(0),
|
||||||
myLastPokeAddress(0),
|
myLastPokeAddress(0),
|
||||||
|
myLastPeekBaseAddress(0),
|
||||||
|
myLastPokeBaseAddress(0),
|
||||||
myLastSrcAddressS(-1),
|
myLastSrcAddressS(-1),
|
||||||
myLastSrcAddressA(-1),
|
myLastSrcAddressA(-1),
|
||||||
myLastSrcAddressX(-1),
|
myLastSrcAddressX(-1),
|
||||||
|
@ -65,7 +67,7 @@ M6502::M6502(const Settings& settings)
|
||||||
{
|
{
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
myDebugger = nullptr;
|
myDebugger = nullptr;
|
||||||
myJustHitTrapFlag = false;
|
myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +100,7 @@ void M6502::reset()
|
||||||
// Load PC from the reset vector
|
// Load PC from the reset vector
|
||||||
PC = uInt16(mySystem->peek(0xfffc)) | (uInt16(mySystem->peek(0xfffd)) << 8);
|
PC = uInt16(mySystem->peek(0xfffc)) | (uInt16(mySystem->peek(0xfffd)) << 8);
|
||||||
|
|
||||||
myLastAddress = myLastPeekAddress = myLastPokeAddress = 0;
|
myLastAddress = myLastPeekAddress = myLastPokeAddress = myLastPeekBaseAddress = myLastPokeBaseAddress;
|
||||||
myLastSrcAddressS = myLastSrcAddressA =
|
myLastSrcAddressS = myLastSrcAddressA =
|
||||||
myLastSrcAddressX = myLastSrcAddressY = -1;
|
myLastSrcAddressX = myLastSrcAddressY = -1;
|
||||||
myDataAddressForPoke = 0;
|
myDataAddressForPoke = 0;
|
||||||
|
@ -130,9 +132,8 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags)
|
||||||
int cond = evalCondTraps();
|
int cond = evalCondTraps();
|
||||||
if(cond > -1)
|
if(cond > -1)
|
||||||
{
|
{
|
||||||
myJustHitTrapFlag = true;
|
myJustHitReadTrapFlag = true;
|
||||||
myHitTrapInfo.message = "RTrap: ";
|
myHitTrapInfo.message = "RTrap(" + myTrapCondNames[cond] + "): ";
|
||||||
//myHitTrapInfo.message = "RTrapIf (" + myTrapCondNames[cond] + "): ";
|
|
||||||
myHitTrapInfo.address = address;
|
myHitTrapInfo.address = address;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -163,9 +164,8 @@ inline void M6502::poke(uInt16 address, uInt8 value, uInt8 flags)
|
||||||
int cond = evalCondTraps();
|
int cond = evalCondTraps();
|
||||||
if(cond > -1)
|
if(cond > -1)
|
||||||
{
|
{
|
||||||
myJustHitTrapFlag = true;
|
myJustHitWriteTrapFlag = true;
|
||||||
myHitTrapInfo.message = "WTrap: ";
|
myHitTrapInfo.message = "WTrap(" + myTrapCondNames[cond] + "): ";
|
||||||
//myHitTrapInfo.message = "WTrapIf (" + myTrapCondNames[cond] + "): ";
|
|
||||||
myHitTrapInfo.address = address;
|
myHitTrapInfo.address = address;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -200,11 +200,11 @@ bool M6502::execute(uInt32 number)
|
||||||
for(; !myExecutionStatus && (number != 0); --number)
|
for(; !myExecutionStatus && (number != 0); --number)
|
||||||
{
|
{
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
if(myJustHitTrapFlag)
|
if(myJustHitReadTrapFlag || myJustHitWriteTrapFlag)
|
||||||
{
|
{
|
||||||
if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address))
|
myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false;
|
||||||
{
|
if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address, myJustHitReadTrapFlag))
|
||||||
myJustHitTrapFlag = false;
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -405,7 +405,8 @@ class M6502 : public Serializable
|
||||||
TrapArray myReadTraps, myWriteTraps;
|
TrapArray myReadTraps, myWriteTraps;
|
||||||
|
|
||||||
// Did we just now hit a trap?
|
// Did we just now hit a trap?
|
||||||
bool myJustHitTrapFlag;
|
bool myJustHitReadTrapFlag;
|
||||||
|
bool myJustHitWriteTrapFlag;
|
||||||
struct HitTrapInfo {
|
struct HitTrapInfo {
|
||||||
string message;
|
string message;
|
||||||
int address;
|
int address;
|
||||||
|
|
Loading…
Reference in New Issue