diff --git a/Core/Debugger/SymbolMap.cpp b/Core/Debugger/SymbolMap.cpp index a207f238de..5e514885b2 100644 --- a/Core/Debugger/SymbolMap.cpp +++ b/Core/Debugger/SymbolMap.cpp @@ -248,7 +248,7 @@ bool SymbolMap::getSymbolValue(char* symbol, u32& dest) if (strcasecmp(entry.name,symbol) == 0) #endif { - dest = entries[i].address; + dest = entries[i].vaddress; return true; } } diff --git a/Windows/Debugger/CtrlDisAsmView.cpp b/Windows/Debugger/CtrlDisAsmView.cpp index 0cf750dd48..988b622686 100644 --- a/Windows/Debugger/CtrlDisAsmView.cpp +++ b/Windows/Debugger/CtrlDisAsmView.cpp @@ -194,9 +194,6 @@ bool CtrlDisAsmView::getDisasmAddressText(u32 address, char* dest, bool abbrevia const char* addressSymbol = debugger->findSymbolForAddress(address); if (addressSymbol != NULL) { - if (memcmp(addressSymbol,"z_",2) == 0) addressSymbol += 2; - if (memcmp(addressSymbol,"zz_",3) == 0) addressSymbol += 3; - for (int k = 0; addressSymbol[k] != 0; k++) { // abbreviate long names @@ -250,8 +247,6 @@ void CtrlDisAsmView::parseDisasm(const char* disasm, char* opcode, char* argumen const char* addressSymbol = debugger->findSymbolForAddress(branchTarget); if (addressSymbol != NULL && displaySymbols) { - if (memcmp(addressSymbol,"z_",2) == 0) addressSymbol += 2; - if (memcmp(addressSymbol,"zz_",3) == 0) addressSymbol += 3; arguments += sprintf(arguments,"%s",addressSymbol); } else { arguments += sprintf(arguments,"0x%08X",branchTarget); @@ -490,20 +485,25 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam) if (controlHeld) { - switch (wParam & 0xFFFF) + switch (tolower(wParam & 0xFFFF)) { - case 'S': case 's': search(false); break; - case 'C': case 'c': search(true); break; case 'x': - case 'X': disassembleToFile(); break; + case 'g': + { + u32 addr; + controlHeld = false; + if (executeExpressionWindow(wnd,debugger,addr) == false) return; + gotoAddr(addr); + } + break; } } else { switch (wParam & 0xFFFF) diff --git a/Windows/Debugger/CtrlMemView.cpp b/Windows/Debugger/CtrlMemView.cpp index 8b80e61f94..11c1be5489 100644 --- a/Windows/Debugger/CtrlMemView.cpp +++ b/Windows/Debugger/CtrlMemView.cpp @@ -12,6 +12,7 @@ #include "../../Core/Debugger/SymbolMap.h" #include "Debugger_Disasm.h" +#include "ExpressionParser.h" #include "CtrlMemView.h" @@ -35,6 +36,7 @@ CtrlMemView::CtrlMemView(HWND _wnd) mode=MV_NORMAL; debugger = 0; + ctrlDown = false; hasFocus = false; windowStart = curAddress; asciiSelected = false; @@ -119,10 +121,13 @@ LRESULT CALLBACK CtrlMemView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM return FALSE; case WM_KEYDOWN: ccp->onKeyDown(wParam,lParam); - break; + return 0; case WM_CHAR: ccp->onChar(wParam,lParam); - break; + return 0; + case WM_KEYUP: + if (wParam == VK_CONTROL) ccp->ctrlDown = false; + return 0; case WM_LBUTTONDOWN: SetFocus(hwnd); lmbDown=true; ccp->onMouseDown(wParam,lParam,1); break; case WM_RBUTTONDOWN: SetFocus(hwnd); rmbDown=true; ccp->onMouseDown(wParam,lParam,2); break; case WM_MOUSEMOVE: ccp->onMouseMove(wParam,lParam,(lmbDown?1:0) | (rmbDown?2:0)); break; @@ -340,6 +345,15 @@ void CtrlMemView::onVScroll(WPARAM wParam, LPARAM lParam) void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam) { + if (ctrlDown && tolower(wParam & 0xFFFF) == 'g') + { + ctrlDown = false; + u32 addr; + if (executeExpressionWindow(wnd,debugger,addr) == false) return; + gotoAddr(addr); + return; + } + switch (wParam & 0xFFFF) { case VK_DOWN: @@ -360,6 +374,9 @@ void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam) case VK_PRIOR: scrollWindow(-visibleRows); break; + case VK_CONTROL: + ctrlDown = true; + break; default: return; } @@ -367,6 +384,8 @@ void CtrlMemView::onKeyDown(WPARAM wParam, LPARAM lParam) void CtrlMemView::onChar(WPARAM wParam, LPARAM lParam) { + if (ctrlDown) return; + if (!Memory::IsValidAddress(curAddress)) { scrollCursor(1); diff --git a/Windows/Debugger/CtrlMemView.h b/Windows/Debugger/CtrlMemView.h index 0110297485..806b4d31f9 100644 --- a/Windows/Debugger/CtrlMemView.h +++ b/Windows/Debugger/CtrlMemView.h @@ -44,6 +44,7 @@ class CtrlMemView int asciiStart; bool asciiSelected; int selectedNibble; + bool ctrlDown; int visibleRows; diff --git a/Windows/Debugger/Debugger_Disasm.cpp b/Windows/Debugger/Debugger_Disasm.cpp index 71b802431d..769ca7cbd0 100644 --- a/Windows/Debugger/Debugger_Disasm.cpp +++ b/Windows/Debugger/Debugger_Disasm.cpp @@ -362,8 +362,6 @@ void CDisasm::handleBreakpointNotify(LPARAM lParam) const char* sym = cpu->findSymbolForAddress(CBreakPoints::GetBreakpointAddress(index)); if (sym != NULL) { - if (memcmp(sym,"z_",2) == 0) sym += 2; - if (memcmp(sym,"zz_",3) == 0) sym += 3; strcpy(breakpointText,sym); } else { strcpy(breakpointText,"-"); diff --git a/Windows/Debugger/ExpressionParser.cpp b/Windows/Debugger/ExpressionParser.cpp index 11ea3f63ec..96e7a9b631 100644 --- a/Windows/Debugger/ExpressionParser.cpp +++ b/Windows/Debugger/ExpressionParser.cpp @@ -222,7 +222,7 @@ bool parseExpression(char* infix, DebugInterface* cpu, u32& dest) while (infixPos < infixLen) { char first = tolower(infix[infixPos]); - char subStr[12]; + char subStr[256]; int subPos = 0; if (first == ' ' || first == '\t')