symbolic debugging / disasm: refinements to r3379

This commit is contained in:
zeromus 2017-12-01 09:05:18 +00:00
parent 08b81a9089
commit 7fdba82d67
1 changed files with 28 additions and 9 deletions

View File

@ -545,25 +545,44 @@ void replaceNames(Name* list, char* str, std::vector<uint16>* addressesLog)
addrlen = 3;
}
while (pos = strstr(src, test))
for(;;)
{
//zero 30-nov-2017 - change how this works so we can display the address still
//*pos = 0;
//strcat(buff, src);
//strcat(buff, list->name);
//src = pos + 5; // 5 = strlen(beg->offset), because all offsets are in "$XXXX" format
int myAddrlen = addrlen;
//first, check for the (potentially) shortened zero page address
pos = strstr(src, test);
if(!pos)
{
//if we didnt find that, check for the full $ABCD thing
pos = strstr(src, list->offset);
//if we didnt find that, bail
if(!pos) break;
//otherwise we found a length-5 token to replace
myAddrlen = 5;
}
//special hack: sometimes we have #$00, and we dont want to replace that.
//(this isn't a problem with $0000 because on the 6502 we ... dont.. have ... #$XXXX ?
//honestly, I don't know anything about this CPU. don't tell anyone.
//I'm just inferring from the fact that the algorithm previously relied on that assumption...
if(pos[-1] == '#')
{
src = pos + myAddrlen;
continue;
}
//zero 30-nov-2017 - change how this works so we can display the address still
//append beginning part, plus addrlen for the offset
strncat(buff,src,pos-src+addrlen);
strncat(buff,src,pos-src+myAddrlen);
//append a space
strcat(buff," ");
//append the label
strcat(buff, list->name);
//begin processing after that offset
src = pos + addrlen;
src = pos + myAddrlen;
//append a space.. unless what's next is an RParen, I guess
if(*src != ')') strcat(buff," ");
if(*src != ')' && *src != ',' && *src != 0) strcat(buff," ");
if (addressesLog)
addressesLog->push_back(list->offsetNumeric);