Assemble opcode by typing

This commit is contained in:
Kingcom 2013-08-17 21:20:24 +02:00
parent e1126af4eb
commit c7c826b7b6
4 changed files with 32 additions and 3 deletions

View file

@ -80,6 +80,7 @@ LRESULT CALLBACK CtrlDisAsmView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA
ccp->onVScroll(wParam,lParam);
break;
case WM_MOUSEWHEEL:
ccp->dontRedraw = false;
if (GET_WHEEL_DELTA_WPARAM(wParam) > 0)
{
ccp->scrollWindow(-3);
@ -92,6 +93,9 @@ LRESULT CALLBACK CtrlDisAsmView::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPA
case WM_KEYDOWN:
ccp->onKeyDown(wParam,lParam);
return 0;
case WM_CHAR:
ccp->onChar(wParam,lParam);
return 0;
case WM_SYSKEYDOWN:
ccp->onKeyDown(wParam,lParam);
return 0; // return a value so that windows doesn't execute the standard syskey action
@ -161,6 +165,7 @@ CtrlDisAsmView::CtrlDisAsmView(HWND _wnd)
hasFocus = false;
controlHeld = false;
dontRedraw = false;
keyTaken = false;
matchAddress = -1;
searching = false;
@ -295,7 +300,7 @@ void CtrlDisAsmView::assembleOpcode(u32 address, std::string defaultText)
return;
}
bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op);
bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op,false);
if (result == false) return;
result = MIPSAsm::MipsAssembleOpcode(op,debugger,address,encoded);
@ -511,10 +516,21 @@ void CtrlDisAsmView::followBranch()
}
}
void CtrlDisAsmView::onChar(WPARAM wParam, LPARAM lParam)
{
if (keyTaken) return;
char str[2];
str[0] = wParam;
str[1] = 0;
assembleOpcode(curAddress,str);
}
void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
{
dontRedraw = false;
u32 windowEnd = windowStart+visibleRows*instructionSize;
keyTaken = true;
if (controlHeld)
{
@ -594,6 +610,7 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
debugger->toggleBreakpoint(curAddress);
break;
default:
keyTaken = false;
return;
}
}
@ -663,6 +680,7 @@ void CtrlDisAsmView::toggleBreakpoint()
void CtrlDisAsmView::onMouseDown(WPARAM wParam, LPARAM lParam, int button)
{
dontRedraw = false;
int x = LOWORD(lParam);
int y = HIWORD(lParam);

View file

@ -68,6 +68,7 @@ class CtrlDisAsmView
int matchAddress;
bool searching;
bool dontRedraw;
bool keyTaken;
void assembleOpcode(u32 address, std::string defaultText);
void disassembleToFile();
@ -85,6 +86,7 @@ public:
static LRESULT CALLBACK wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static CtrlDisAsmView * getFrom(HWND wnd);
void onChar(WPARAM wParam, LPARAM lParam);
void onPaint(WPARAM wParam, LPARAM lParam);
void onVScroll(WPARAM wParam, LPARAM lParam);
void onKeyDown(WPARAM wParam, LPARAM lParam);

View file

@ -5,6 +5,7 @@
static TCHAR textBoxContents[256];
static TCHAR out[256];
static TCHAR windowTitle[256];
static bool defaultSelected;
static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
@ -12,6 +13,7 @@ static INT_PTR CALLBACK InputBoxFunc(HWND hDlg, UINT message, WPARAM wParam, LPA
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg,IDC_INPUTBOX),textBoxContents);
SetWindowText(hDlg, windowTitle);
if (defaultSelected == false) PostMessage(GetDlgItem(hDlg,IDC_INPUTBOX),EM_SETSEL,-1,-1);
return TRUE;
case WM_COMMAND:
switch (wParam)
@ -35,13 +37,19 @@ void InputBoxFunc()
}
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue)
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected)
{
defaultSelected = selected;
if (defaultvalue && strlen(defaultvalue)<255)
strcpy(textBoxContents,defaultvalue);
else
strcpy(textBoxContents,"");
if (title != NULL)
strcpy(windowTitle,title);
else
strcpy(windowTitle,"");
if (IDOK==DialogBox(hInst,(LPCSTR)IDD_INPUTBOX,hParent,InputBoxFunc))
{
strcpy(outvalue,out);
@ -54,6 +62,7 @@ bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defa
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength)
{
const char *defaultTitle = "Input value";
defaultSelected = true;
if (defaultvalue && strlen(defaultvalue)<255)
strcpy(textBoxContents,defaultvalue);

View file

@ -3,6 +3,6 @@
#include "Globals.h"
#include "Common/CommonWindows.h"
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue);
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, bool selected = true);
bool InputBox_GetString(HINSTANCE hInst, HWND hParent, TCHAR *title, TCHAR *defaultvalue, TCHAR *outvalue, size_t outlength);
bool InputBox_GetHex(HINSTANCE hInst, HWND hParent, TCHAR *title, u32 defaultvalue, u32 &outvalue);