diff --git a/z80debug.cpp b/z80debug.cpp index ab9a6f4..a26b320 100644 --- a/z80debug.cpp +++ b/z80debug.cpp @@ -712,6 +712,34 @@ namespace z80debug else { sendToConsoleLog("Syntax error: invalid register"); return; } } else if (strcmp(cmd, "g")==0 || strcmp(cmd, "goto")==0) { getcmd(); + int address = getnum(cmd); + if (address<0 || address>=65536) { sendToConsoleLog("Illegal address"); return; } + if (z80::getMemTag(address)!=MEMTAG_INST) address = find_previous_opcode(address); + z80debug::setcursor(address); + } else if (strcmp(cmd, "sym")==0 || strcmp(cmd, "symbol")==0) { + getcmd(); + if (strcmp(cmd, "add")==0) { + getcmd(); + char tmp[12]; strcpy(tmp, cmd); + getcmd(); + if (cmd[0]==0) { + z80dis::setSymbol(z80::getPC(), tmp); + } else { + int value = getnum(cmd); + z80dis::setSymbol(value, tmp); + } + sendToConsoleLog("Symbol added"); + } else if (strcmp(cmd, "del")==0) { + getcmd(); + if (cmd[0]==0) { + z80dis::setSymbol(z80::getPC(), NULL); + } else { + int value = getnum(cmd); + z80dis::setSymbol(value, NULL); + } + sendToConsoleLog("Symbol removed"); + } + int address = getnum(cmd); if (address<0 || address>=65536) { sendToConsoleLog("Illegal address"); return; } if (z80::getMemTag(address)!=MEMTAG_INST) address = find_previous_opcode(address); diff --git a/z80dis.cpp b/z80dis.cpp index fb2dae3..c94c907 100644 --- a/z80dis.cpp +++ b/z80dis.cpp @@ -217,15 +217,15 @@ namespace z80dis return symbols[pos]; } - bool comp(uint16_t a, uint16_t b) { - return a <= b; - } - void setSymbol(const uint16_t pos, const char *sym) { - strcpy(symbols[pos], sym); - used_symbols.push_back(pos); - sort(used_symbols.begin(), used_symbols.end(), comp); + if (sym) { + strcpy(symbols[pos], sym); + } else { + symbols[pos][0] = 0; + } + used_symbols.clear(); + for (int i=0; i<65536; ++i) if (symbols[i][0]!=0) used_symbols.push_back(i); saveSymbols(); }