fixed multi segment cart disassembly

This commit is contained in:
Thomas Jentzsch 2022-12-04 18:15:11 +01:00
parent e9efdbc3a1
commit 3370ca4afc
1 changed files with 6 additions and 11 deletions

View File

@ -254,6 +254,10 @@ bool CartDebug::disassembleAddr(uInt16 address, bool force)
if(segCount > 1) if(segCount > 1)
{ {
bool changed = false; bool changed = false;
// myDisassembly.list must be cleared before calling disassemble(),
// else the lineOfs in fillDisassemblyList will be too large
myDisassembly.list.clear();
myAddrToLineList.clear();
myDisassembly.fieldwidth = 24; myDisassembly.fieldwidth = 24;
for(int seg = 0; seg < segCount; ++seg) for(int seg = 0; seg < segCount; ++seg)
@ -266,17 +270,8 @@ bool CartDebug::disassembleAddr(uInt16 address, bool force)
info.offset = cart.bankOrigin(bank) | cart.bankSize() * seg; info.offset = cart.bankOrigin(bank) | cart.bankSize() * seg;
const uInt16 segAddress = bank == addrBank ? address : info.offset; const uInt16 segAddress = bank == addrBank ? address : info.offset;
// Disassemble segment // Disassemble segment
const bool newChanged = disassemble(bank, segAddress, disassembly, addrToLineList, force); changed |= disassemble(bank, segAddress, disassembly, addrToLineList, force);
if(!changed && newChanged)
{
// Clear lists at first change
// Note: This is currently either true for all or no segments
changed = true;
myDisassembly.list.clear();
myAddrToLineList.clear();
}
// Add extra empty line between segments // Add extra empty line between segments
if(seg < segCount - 1) if(seg < segCount - 1)
{ {