symbolic debugging / disasm: refinements to r3379
This commit is contained in:
parent
08b81a9089
commit
7fdba82d67
|
@ -545,25 +545,44 @@ void replaceNames(Name* list, char* str, std::vector<uint16>* addressesLog)
|
||||||
addrlen = 3;
|
addrlen = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (pos = strstr(src, test))
|
for(;;)
|
||||||
{
|
{
|
||||||
//zero 30-nov-2017 - change how this works so we can display the address still
|
int myAddrlen = addrlen;
|
||||||
//*pos = 0;
|
|
||||||
//strcat(buff, src);
|
//first, check for the (potentially) shortened zero page address
|
||||||
//strcat(buff, list->name);
|
pos = strstr(src, test);
|
||||||
//src = pos + 5; // 5 = strlen(beg->offset), because all offsets are in "$XXXX" format
|
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
|
//zero 30-nov-2017 - change how this works so we can display the address still
|
||||||
//append beginning part, plus addrlen for the offset
|
//append beginning part, plus addrlen for the offset
|
||||||
strncat(buff,src,pos-src+addrlen);
|
strncat(buff,src,pos-src+myAddrlen);
|
||||||
//append a space
|
//append a space
|
||||||
strcat(buff," ");
|
strcat(buff," ");
|
||||||
//append the label
|
//append the label
|
||||||
strcat(buff, list->name);
|
strcat(buff, list->name);
|
||||||
//begin processing after that offset
|
//begin processing after that offset
|
||||||
src = pos + addrlen;
|
src = pos + myAddrlen;
|
||||||
//append a space.. unless what's next is an RParen, I guess
|
//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)
|
if (addressesLog)
|
||||||
addressesLog->push_back(list->offsetNumeric);
|
addressesLog->push_back(list->offsetNumeric);
|
||||||
|
|
Loading…
Reference in New Issue