Fixed error tracking PC changes in disassembly when the PC and bank mirror

didn't match.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2766 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2013-07-17 23:00:55 +00:00
parent b6d3098e2c
commit 04f6a16f97
3 changed files with 16 additions and 4 deletions

View File

@ -14,6 +14,10 @@
3.9 to 3.9.1: (XXXX xx, 2013) 3.9 to 3.9.1: (XXXX xx, 2013)
* Fixed bug in debugger disassembly when the mirror used for the current
PC didn't match the mirror for the current bank. In this case, the
disassembler became confused and didn't properly track the PC address.
* Added ability to modify 'tiadriven' commandline argument to the * Added ability to modify 'tiadriven' commandline argument to the
debugger 'TIA' tab, and 'ramrandom' to the debugger 'I/O' tab. These debugger 'TIA' tab, and 'ramrandom' to the debugger 'I/O' tab. These
options were available for quite some time, but they weren't exposed options were available for quite some time, but they weren't exposed

View File

@ -326,18 +326,20 @@ bool CartDebug::fillDisassemblyList(BankInfo& info, uInt16 search)
// We place those parts in separate maps, to speed up access // We place those parts in separate maps, to speed up access
bool found = false; bool found = false;
myAddrToLineList.clear(); myAddrToLineList.clear();
myAddrToLineIsROM = info.offset & 0x1000;
for(uInt32 i = 0; i < myDisassembly.list.size(); ++i) for(uInt32 i = 0; i < myDisassembly.list.size(); ++i)
{ {
const DisassemblyTag& tag = myDisassembly.list[i]; const DisassemblyTag& tag = myDisassembly.list[i];
const uInt16 address = tag.address & 0xFFF;
// Addresses marked as 'ROW' normally won't have an address // Addresses marked as 'ROW' normally won't have an address
if(tag.address) if(address)
{ {
// Create a mapping from addresses to line numbers // Create a mapping from addresses to line numbers
myAddrToLineList.insert(make_pair(tag.address, i)); myAddrToLineList.insert(make_pair(address, i));
// Did we find the search value? // Did we find the search value?
if(tag.address == search) if(address == (search & 0xFFF))
found = true; found = true;
} }
} }
@ -347,7 +349,12 @@ bool CartDebug::fillDisassemblyList(BankInfo& info, uInt16 search)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int CartDebug::addressToLine(uInt16 address) const int CartDebug::addressToLine(uInt16 address) const
{ {
map<uInt16, int>::const_iterator iter = myAddrToLineList.find(address); // Switching between ZP RAM address space and Cart/ROM address space
// means the line isn't present
if(!myAddrToLineIsROM != !(address & 0x1000))
return -1;
map<uInt16, int>::const_iterator iter = myAddrToLineList.find(address & 0xFFF);
return iter != myAddrToLineList.end() ? iter->second : -1; return iter != myAddrToLineList.end() ? iter->second : -1;
} }

View File

@ -360,6 +360,7 @@ class CartDebug : public DebuggerSystem
// to corresponding lines of text in that display // to corresponding lines of text in that display
Disassembly myDisassembly; Disassembly myDisassembly;
map<uInt16, int> myAddrToLineList; map<uInt16, int> myAddrToLineList;
bool myAddrToLineIsROM;
// Mappings from label to address (and vice versa) for items // Mappings from label to address (and vice versa) for items
// defined by the user (either through a symbol file or manually // defined by the user (either through a symbol file or manually