enhance debugger disassemblies, 'savedis' now allows multi-bank ROMs

This commit is contained in:
thrust26 2020-03-30 23:01:15 +02:00
parent 45758ad5b5
commit 6e5a162a18
1 changed files with 8 additions and 10 deletions

View File

@ -1043,22 +1043,19 @@ string CartDebug::saveDisassembly()
uInt16 oldBank = myConsole.cartridge().getBank(); uInt16 oldBank = myConsole.cartridge().getBank();
// prepare for switching banks // prepare for switching banks
myConsole.cartridge().unlockBank(); // TODO: make sure every CartWidget does it like that, myConsole.cartridge().unlockBank();
// maybe define a commonly used method.
for(int bank = 0; bank < bankCount; ++bank) for(int bank = 0; bank < bankCount; ++bank)
{ {
// TODO: not every CartDebugWidget does it like that, we need a method
myConsole.cartridge().unlockBank();
myConsole.cartridge().bank(bank); myConsole.cartridge().bank(bank);
myConsole.cartridge().lockBank();
BankInfo& info = myBankInfo[bank]; BankInfo& info = myBankInfo[bank];
// TODO: we have to get the bank disassembled if it had not been debugged before. // TODO: make PageAccess ready for multi-bank ROMs
// If the debugger is stopped at least once in each bank, the disassembly is mostly* correct. disassemble();
// So we have to replicate that.
// (* Beamrider is 100% identical, Asteroids has some bytes after the hotspot wrong)
// One problem seems to be, that we do not know where to start. There is no valid addressList
// list for a non-debugged bank.
//disassemble(); // DOES NOT WORK YET!!! (makes it even worse!)
// An empty address list means that DiStella can't do a disassembly // An empty address list means that DiStella can't do a disassembly
if(info.addressList.size() == 0) if(info.addressList.size() == 0)
@ -1152,6 +1149,7 @@ string CartDebug::saveDisassembly()
buf << "\n"; buf << "\n";
} }
} }
myConsole.cartridge().unlockBank();
myConsole.cartridge().bank(oldBank); myConsole.cartridge().bank(oldBank);
myConsole.cartridge().lockBank(); myConsole.cartridge().lockBank();
@ -1310,7 +1308,7 @@ string CartDebug::saveDisassembly()
stringstream retVal; stringstream retVal;
if(myConsole.cartridge().bankCount() > 1) if(myConsole.cartridge().bankCount() > 1)
retVal << DebuggerParser::red("disassembly for multi-bank ROM not fully supported, only currently enabled banks disassembled\n"); retVal << DebuggerParser::red("disassembly for multi-bank ROM not fully supported\n");
retVal << "saved " << node.getShortPath() << " OK"; retVal << "saved " << node.getShortPath() << " OK";
return retVal.str(); return retVal.str();
} }