debugger start displays labels where possible

prevent repeated trap interrupts
some old code cleanup
This commit is contained in:
thrust26 2017-10-08 12:25:23 +02:00
parent d15690f5f1
commit 90705babd7
5 changed files with 18 additions and 43 deletions

View File

@ -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)
{ {

View File

@ -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);

View File

@ -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);

View File

@ -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;
} }
} }

View File

@ -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;