replaced the highlighting fix with a much better one :)

This commit is contained in:
thrust26 2021-01-01 13:05:25 +01:00
parent 7cb3c46704
commit d13299b184
2 changed files with 7 additions and 24 deletions

View File

@ -302,12 +302,15 @@ bool CartDebug::disassemble(int bank, uInt16 PC, bool force)
AddressList::const_iterator i;
for(i = addresses.cbegin(); i != addresses.cend(); ++i)
{
if (PC == *i) // already present
if(PC == *i) // already present
break;
}
// Otherwise, add the item at the end
if (i == addresses.end())
if(i == addresses.end())
{
addresses.push_back(PC);
addDirective(Device::AccessType::CODE, PC, PC, bank);
}
}
// Always attempt to resolve code sections unless it's been
@ -347,8 +350,8 @@ bool CartDebug::fillDisassemblyList(BankInfo& info, uInt16 search)
const DisassemblyTag& tag = myDisassembly.list[i];
const uInt16 address = tag.address & 0xFFF;
// Exclude 'Device::ROW'; they don't have a valid address
if(tag.type != Device::ROW)
// Exclude 'Device::ROW|NONE'; they don't have a valid address
if(tag.type != Device::ROW && tag.type != Device::NONE)
{
// Create a mapping from addresses to line numbers
myAddrToLineList.emplace(address, i);

View File

@ -76,26 +76,6 @@ void RomWidget::loadConfig()
// Update romlist to point to current PC (if it has changed)
int pcline = cart.addressToLine(dbg.cpuDebug().pc());
if(pcline < 0)
{
// If tentative code detection is disabled, the code where PC points to is
// not disassembled the first time it is executed. Therefore the rom list
// highlight would never be updated!
// The following code tries to fix that and moves the highlight to the
// line following the last know dissassembled code.
const CpuState& oldCpuState = static_cast<const CpuState&>(dbg.cpuDebug().getOldState());
int oldPc = oldCpuState.PC;
if(dbg.cpuDebug().pc() > oldPc && dbg.cpuDebug().pc() - oldPc <= 3)
// we assume the code moved forward by one instruction
pcline = cart.addressToLine(oldPc);
else
// code jumped, try to find previous line
for(int i = 1; i <= 3 && pcline < 0; ++i)
pcline = cart.addressToLine(dbg.cpuDebug().pc() - i);
if(pcline >= 0)
pcline++;
}
if(pcline >= 0 && pcline != myRomList->getHighlighted())
myRomList->setHighlighted(pcline);