diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index 792160810..d28e34eee 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -4363,6 +4363,17 @@ void FASTCALL MMU_write8(u32 proc, u32 adr, u8 val) _MMU_ARM7_write08(adr,val); } +void FASTCALL MMU_DumpMemBlock(u8 proc, u32 address, u32 size, u8 *buffer) +{ + u32 i; + u32 curaddr; + + for(i = 0, curaddr = address; i < size; i++, curaddr++) + { + buffer[i] = T1ReadByte(MMU.MMU_MEM[ARMCPU_ARM7][(curaddr >> 20) & 0xFF], (curaddr & MMU.MMU_MASK[ARMCPU_ARM7][(curaddr >> 20) & 0xFF])); + } +} + void mmu_select_savetype(int type, int *bmemtype, u32 *bmemsize) { if (type<0 || type > 6) return; *bmemtype=save_types[type][0]; diff --git a/desmume/src/MMU.h b/desmume/src/MMU.h index 8b4acdf6b..cb81e178b 100644 --- a/desmume/src/MMU.h +++ b/desmume/src/MMU.h @@ -359,4 +359,6 @@ void _MMU_write16(u32 addr, u16 val) { _MMU_write16(PROCNUM, addr, val); } template void _MMU_write32(u32 addr, u32 val) { _MMU_write32(PROCNUM, addr, val); } +void FASTCALL MMU_DumpMemBlock(u8 proc, u32 address, u32 size, u8 *buffer); + #endif diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 8b698e500..812e44e35 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -161,8 +161,8 @@ static int FrameLimit = 1; //=========================== view tools TOOLSCLASS *ViewDisasm_ARM7 = NULL; TOOLSCLASS *ViewDisasm_ARM9 = NULL; -TOOLSCLASS *ViewMem_ARM7 = NULL; -TOOLSCLASS *ViewMem_ARM9 = NULL; +//TOOLSCLASS *ViewMem_ARM7 = NULL; +//TOOLSCLASS *ViewMem_ARM9 = NULL; TOOLSCLASS *ViewRegisters = NULL; TOOLSCLASS *ViewPalette = NULL; TOOLSCLASS *ViewTiles = NULL; @@ -960,6 +960,7 @@ DWORD WINAPI run() int fps=0; int fpsframecount=0; u64 fpsticks=0; + int tools_frames = 0; int res; HWND hwnd = MainWindow->getHWnd(); @@ -1034,6 +1035,16 @@ DWORD WINAPI run() } + tools_frames++; + if(tools_frames == 10) + { + if(MemView_IsOpened(ARMCPU_ARM9)) MemView_Refresh(ARMCPU_ARM9); + if(MemView_IsOpened(ARMCPU_ARM7)) MemView_Refresh(ARMCPU_ARM7); + + tools_frames = 0; + } + + fpsframecount++; QueryPerformanceCounter((LARGE_INTEGER *)&curticks); @@ -1540,10 +1551,12 @@ int WINAPI WinMain (HINSTANCE hThisInstance, GInfo_Init(); + MemView_Init(); + ViewDisasm_ARM7 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER7, (DLGPROC) ViewDisasm_ARM7Proc); ViewDisasm_ARM9 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER9, (DLGPROC) ViewDisasm_ARM9Proc); - ViewMem_ARM7 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER7, (DLGPROC) ViewMem_ARM7Proc); - ViewMem_ARM9 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER9, (DLGPROC) ViewMem_ARM9Proc); + //ViewMem_ARM7 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER7, (DLGPROC) ViewMem_ARM7Proc); + //ViewMem_ARM9 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER9, (DLGPROC) ViewMem_ARM9Proc); ViewRegisters = new TOOLSCLASS(hThisInstance, IDD_IO_REG, (DLGPROC) IoregView_Proc); ViewPalette = new TOOLSCLASS(hThisInstance, IDD_PAL, (DLGPROC) ViewPalProc); ViewTiles = new TOOLSCLASS(hThisInstance, IDD_TILE, (DLGPROC) ViewTilesProc); @@ -1725,6 +1738,11 @@ int WINAPI WinMain (HINSTANCE hThisInstance, GInfo_DeInit(); + MemView_DlgClose(ARMCPU_ARM9); + MemView_DlgClose(ARMCPU_ARM7); + + MemView_DeInit(); + //if (input!=NULL) delete input; if (ViewLights!=NULL) delete ViewLights; if (ViewMatrices!=NULL) delete ViewMatrices; @@ -1733,8 +1751,8 @@ int WINAPI WinMain (HINSTANCE hThisInstance, if (ViewTiles!=NULL) delete ViewTiles; if (ViewPalette!=NULL) delete ViewPalette; if (ViewRegisters!=NULL) delete ViewRegisters; - if (ViewMem_ARM9!=NULL) delete ViewMem_ARM9; - if (ViewMem_ARM7!=NULL) delete ViewMem_ARM7; +// if (ViewMem_ARM9!=NULL) delete ViewMem_ARM9; +// if (ViewMem_ARM7!=NULL) delete ViewMem_ARM7; if (ViewDisasm_ARM9!=NULL) delete ViewDisasm_ARM9; if (ViewDisasm_ARM7!=NULL) delete ViewDisasm_ARM7; @@ -2743,12 +2761,14 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM ViewRegisters->open(); return 0; case IDM_MEMORY: - ViewMem_ARM7->regClass("MemViewBox7", ViewMem_ARM7BoxProc); + /* ViewMem_ARM7->regClass("MemViewBox7", ViewMem_ARM7BoxProc); if (!ViewMem_ARM7->open()) ViewMem_ARM7->unregClass(); ViewMem_ARM9->regClass("MemViewBox9", ViewMem_ARM9BoxProc); if (!ViewMem_ARM9->open()) - ViewMem_ARM9->unregClass(); + ViewMem_ARM9->unregClass();*/ + if(!MemView_IsOpened(ARMCPU_ARM9)) MemView_DlgOpen(hwnd, ARMCPU_ARM9); + if(!MemView_IsOpened(ARMCPU_ARM7)) MemView_DlgOpen(hwnd, ARMCPU_ARM7); return 0; case IDM_DISASSEMBLER: ViewDisasm_ARM7->regClass("DesViewBox7",ViewDisasm_ARM7BoxProc); diff --git a/desmume/src/windows/memView.cpp b/desmume/src/windows/memView.cpp index b17152ded..34ff9499b 100644 --- a/desmume/src/windows/memView.cpp +++ b/desmume/src/windows/memView.cpp @@ -19,501 +19,565 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include -#include "memView.h" -#include + #include "../MMU.h" #include "debug.h" #include "resource.h" +#include "common.h" +#include +#include +#include +#include +#include "memView.h" -typedef struct +using namespace std; + +////////////////////////////////////////////////////////////////////////////// + +typedef struct MemView_DataStruct { - u32 autoup_secs; - bool autoup; - - s8 cpu; - u32 curr_ligne; - u8 representation; -} memview_struct; - - -memview_struct *MemView7 = NULL; -memview_struct *MemView9 = NULL; - -LRESULT MemViewBox_OnPaint(HWND hwnd, memview_struct * win, WPARAM wParam, LPARAM lParam) -{ - HDC hdc; - PAINTSTRUCT ps; - SIZE fontsize; - TCHAR text[80]; - int i; - RECT rect; - int lg; - int ht; - HDC mem_dc; - HBITMAP mem_bmp; - int nbligne; - RECT r; - u32 adr; - - GetClientRect(hwnd, &rect); - lg = rect.right - rect.left; - ht = rect.bottom - rect.top; - - hdc = BeginPaint(hwnd, &ps); - - mem_dc = CreateCompatibleDC(hdc); - mem_bmp = CreateCompatibleBitmap(hdc, lg, ht); - SelectObject(mem_dc, mem_bmp); - - FillRect(mem_dc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); - - SelectObject(mem_dc, GetStockObject(SYSTEM_FIXED_FONT)); - - GetTextExtentPoint32(mem_dc, "0", 1, &fontsize); - - nbligne = ht/fontsize.cy; - - SetTextColor(mem_dc, RGB(0,0,0)); - - r.top = 3; - r.left = 3; - r.bottom = r.top+fontsize.cy; - r.right = rect.right-3; - - adr = win->curr_ligne*0x10; - - for(i=0; i>16), (int)(adr&0xFFFF)); - DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); - r.left += 11*fontsize.cx; - - if(win->representation == 0) - for(j=0; j<16; ++j) - { - sprintf(text, "%02X", MMU_read8(win->cpu, adr+j)); - DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); - r.left+=3*fontsize.cx; - } - else - if(win->representation == 1) - for(j=0; j<16; j+=2) - { - sprintf(text, "%04X", MMU_read16(win->cpu, adr+j)); - DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); - r.left+=5*fontsize.cx; - } - else - for(j=0; j<16; j+=4) - { - sprintf(text, "%08X", (int)MMU_read32(win->cpu, adr+j)); - DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); - r.left+=9*fontsize.cx; - } - - r.left+=fontsize.cx; - - for(j=0; j<16; ++j) - { - u8 c = MMU_read8(win->cpu, adr+j); - if(c >= 32 && c <= 127) { - text[j] = (char)c; - } - else - text[j] = '.'; - } - text[j] = '\0'; - DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); - - adr+=0x10; - r.top += fontsize.cy; - r.bottom += fontsize.cy; - r.left = 3; - } - - BitBlt(hdc, 0, 0, lg, ht, mem_dc, 0, 0, SRCCOPY); - - DeleteDC(mem_dc); - DeleteObject(mem_bmp); - - EndPaint(hwnd, &ps); - return 1; -} - -//=================================================== ARM7 -LRESULT CALLBACK ViewMem_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - case WM_NCCREATE: - SetScrollRange(hwnd, SB_VERT, 0, 0x0FFFFFFF, TRUE); - SetScrollPos(hwnd, SB_VERT, 10, TRUE); - return 1; - - case WM_NCDESTROY: - return 1; - - case WM_PAINT: - MemViewBox_OnPaint(hwnd, MemView7, wParam, lParam); - return 1; - - case WM_ERASEBKGND: - return 1; - case WM_VSCROLL : - { - RECT rect; - SIZE fontsize; - HDC dc; - HFONT old; - int nbligne; - - GetClientRect(hwnd, &rect); - dc = GetDC(hwnd); - old = (HFONT)SelectObject(dc, GetStockObject(SYSTEM_FIXED_FONT)); - GetTextExtentPoint32(dc, "0", 1, &fontsize); - - nbligne = (rect.bottom - rect.top)/fontsize.cy; - - switch LOWORD(wParam) - { - case SB_LINEDOWN : - MemView7->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView7->curr_ligne+1); - break; - case SB_LINEUP : - MemView7->curr_ligne = (u32)std::max((u32)0l, (u32)MemView7->curr_ligne-1); - break; - case SB_PAGEDOWN : - MemView7->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView7->curr_ligne+nbligne); - break; - case SB_PAGEUP : - MemView7->curr_ligne = (u32)std::max((u32)0l, (u32)MemView7->curr_ligne-nbligne); - break; - } - - SelectObject(dc, old); - SetScrollPos(hwnd, SB_VERT, MemView7->curr_ligne, TRUE); - InvalidateRect(hwnd, NULL, FALSE); - UpdateWindow(hwnd); - } - return 1; - } - - return FALSE; -} - -BOOL CALLBACK ViewMem_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - //bail out early if the dialog isnt initialized - if(!MemView7 && message != WM_INITDIALOG) - return false; - - switch (message) + MemView_DataStruct(u8 CPU) : cpu(CPU), address(0x02000000), viewMode(0) { - case WM_INITDIALOG : - { - SetWindowText(hwnd, "ARM7 memory viewer"); - SendMessage(GetDlgItem(hwnd, IDC_8_BIT), BM_SETCHECK, TRUE, 0); - MemView7 = new memview_struct; - memset(MemView7, 0, sizeof(memview_struct)); - MemView7->cpu = 1; - MemView7->autoup_secs = 1; - SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), - UDM_SETRANGE, 0, MAKELONG(99, 1)); - SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), - UDM_SETPOS32, 0, MemView7->autoup_secs); - return 0; - } - case WM_CLOSE: - { - if(MemView7->autoup) - { - KillTimer(hwnd, IDT_VIEW_MEM7); - MemView7->autoup = false; - } + } - if (MemView7!=NULL) - { - delete MemView7; - MemView7 = NULL; - } - //INFO("Close ARM7 memory dialog\n"); - PostQuitMessage(0); - return 0; + HWND hDlg; + u8 cpu; + u32 address; + u8 viewMode; +} MemView_DataStruct; + +MemView_DataStruct * MemView_Data[2] = {NULL, NULL}; + +////////////////////////////////////////////////////////////////////////////// + +BOOL MemView_Init() +{ + WNDCLASSEX wc; + + wc.cbSize = sizeof(wc); + wc.lpszClassName = "MemView_ViewBox"; + wc.hInstance = hAppInst; + wc.lpfnWndProc = MemView_ViewBoxProc; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hIcon = 0; + wc.lpszMenuName = 0; + wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); + wc.style = 0; + wc.cbClsExtra = 0; + wc.cbWndExtra = sizeof(MemView_DataStruct); + wc.hIconSm = 0; + + RegisterClassEx(&wc); + + return 1; +} + +void MemView_DeInit() +{ + UnregisterClass("MemView_ViewBox", hAppInst); +} + +////////////////////////////////////////////////////////////////////////////// + +BOOL MemView_DlgOpen(HWND hParentWnd, u8 CPU) +{ + HWND hDlg; + char title[32]; + + MemView_Data[CPU] = new MemView_DataStruct(CPU); + if(MemView_Data[CPU] == NULL) + return 0; + + hDlg = CreateDialogParam(hAppInst, MAKEINTRESOURCE(IDD_MEM_VIEW), hParentWnd, MemView_DlgProc, (LPARAM)MemView_Data[CPU]); + if(hDlg == NULL) + return 0; + + MemView_Data[CPU]->hDlg = hDlg; + + sprintf(title, "ARM%s memory", ((CPU == ARMCPU_ARM7) ? "7" : "9")); + SetWindowText(hDlg, title); + + ShowWindow(hDlg, SW_SHOW); + UpdateWindow(hDlg); + + return 1; +} + +void MemView_DlgClose(u8 CPU) +{ + if(MemView_Data[CPU] != NULL) + { + DestroyWindow(MemView_Data[CPU]->hDlg); + delete MemView_Data[CPU]; + MemView_Data[CPU] = NULL; + } +} + +BOOL MemView_IsOpened(u8 CPU) +{ + return (MemView_Data[CPU] != NULL); +} + +void MemView_Refresh(u8 CPU) +{ + InvalidateRect(MemView_Data[CPU]->hDlg, NULL, FALSE); + UpdateWindow(MemView_Data[CPU]->hDlg); +} + +////////////////////////////////////////////////////////////////////////////// + +LRESULT MemView_DlgPaint(HWND hDlg, MemView_DataStruct *data, WPARAM wParam, LPARAM lParam) +{ + HDC hdc; + PAINTSTRUCT ps; + + hdc = BeginPaint(hDlg, &ps); + + EndPaint(hDlg, &ps); + + return 0; +} + +BOOL CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + MemView_DataStruct *data = (MemView_DataStruct*)GetWindowLong(hDlg, DWL_USER); + if((data == NULL) && (uMsg != WM_INITDIALOG)) + return 0; + + switch(uMsg) + { + case WM_INITDIALOG: + { + if(data == NULL) + { + data = (MemView_DataStruct*)lParam; + SetWindowLong(hDlg, DWL_USER, (LONG)data); } - case WM_TIMER: - SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0); + + CheckRadioButton(hDlg, IDC_8_BIT, IDC_32_BIT, IDC_8_BIT); + + SendMessage(GetDlgItem(hDlg, IDC_ADDRESS), EM_SETLIMITTEXT, 8, 0); + SetWindowText(GetDlgItem(hDlg, IDC_ADDRESS), "02000000"); + + SetWindowLong(GetDlgItem(hDlg, IDC_MEMVIEWBOX), DWL_USER, (LONG)data); + + InvalidateRect(hDlg, NULL, FALSE); UpdateWindow(hDlg); + } + return 1; + + case WM_CLOSE: + case WM_DESTROY: + MemView_DlgClose(data->cpu); + return 1; + + case WM_PAINT: + MemView_DlgPaint(hDlg, data, wParam, lParam); + return 1; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDCANCEL: + MemView_DlgClose(data->cpu); return 1; - case WM_COMMAND : - switch (LOWORD (wParam)) - { - case IDC_8_BIT : - MemView7->representation = 0; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_16_BIT : - MemView7->representation = 1; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_32_BIT : - MemView7->representation = 2; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_AUTO_UPDATE : - if(MemView7->autoup) - { - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SECS), false); - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), false); - KillTimer(hwnd, IDT_VIEW_MEM7); - MemView7->autoup = FALSE; - return 1; - } - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SECS), true); - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), true); - MemView7->autoup = TRUE; - SetTimer(hwnd, IDT_VIEW_MEM7, MemView7->autoup_secs*20, (TIMERPROC) NULL); - return 1; - case IDC_AUTO_UPDATE_SECS: - { - int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); - if (!MemView7) - { - SendMessage(hwnd, WM_INITDIALOG, 0, 0); - } - if (t != MemView7->autoup_secs) - { - MemView7->autoup_secs = t; - if (MemView7->autoup) - SetTimer(hwnd, IDT_VIEW_MEM7, - MemView7->autoup_secs*20, (TIMERPROC) NULL); - } - } - return 1; - case IDC_REFRESH: - InvalidateRect(hwnd, NULL, FALSE); - return 1; - case IDC_GO : - { - char tmp[8]; - int lg = GetDlgItemText(hwnd, IDC_GOTOMEM, tmp, 8); - u32 adr = 0; - u16 i; - - for(i = 0; i='A')&&(tmp[i]<='F')) - { - adr = adr*16 + (tmp[i]-'A'+10); - continue; - } - if((tmp[i]>='0')&&(tmp[i]<='9')) - { - adr = adr*16 + (tmp[i]-'0'); - continue; - } - } - MemView7->curr_ligne = (adr>>4); - InvalidateRect(hwnd, NULL, FALSE); - UpdateWindow(hwnd); - } - return 1; - case IDC_FERMER : - SendMessage(hwnd, WM_CLOSE, 0, 0); - return 1; - } - } - return FALSE; -} - -//=================================================== ARM9 -LRESULT CALLBACK ViewMem_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) - { - case WM_NCCREATE: - SetScrollRange(hwnd, SB_VERT, 0, 0x0FFFFFFF, TRUE); - SetScrollPos(hwnd, SB_VERT, 10, TRUE); - return 1; - - case WM_NCDESTROY: - return 1; - - case WM_PAINT: - MemViewBox_OnPaint(hwnd, MemView9, wParam, lParam); - return 1; - - case WM_ERASEBKGND: - return 1; - case WM_VSCROLL : - { - RECT rect; - SIZE fontsize; - HDC dc; - HFONT old; - int nbligne; - - GetClientRect(hwnd, &rect); - dc = GetDC(hwnd); - old = (HFONT)SelectObject(dc, GetStockObject(SYSTEM_FIXED_FONT)); - GetTextExtentPoint32(dc, "0", 1, &fontsize); - - nbligne = (rect.bottom - rect.top)/fontsize.cy; - - switch LOWORD(wParam) - { - case SB_LINEDOWN : - MemView9->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView9->curr_ligne+1); - break; - case SB_LINEUP : - MemView9->curr_ligne = (u32)std::max((u32)0l, (u32)MemView9->curr_ligne-1); - break; - case SB_PAGEDOWN : - MemView9->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView9->curr_ligne+nbligne); - break; - case SB_PAGEUP : - MemView9->curr_ligne = (u32)std::max((u32)0l, (u32)MemView9->curr_ligne-nbligne); - break; - } - - SelectObject(dc, old); - SetScrollPos(hwnd, SB_VERT, MemView9->curr_ligne, TRUE); - InvalidateRect(hwnd, NULL, FALSE); - UpdateWindow(hwnd); - } - return 1; - } - - return FALSE; -} - -BOOL CALLBACK ViewMem_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - //bail out early if the dialog isnt initialized - if(!MemView9 && message != WM_INITDIALOG) - return false; - - switch (message) - { - case WM_INITDIALOG : - { - SetWindowText(hwnd, "ARM9 memory viewer"); - SendMessage(GetDlgItem(hwnd, IDC_8_BIT), BM_SETCHECK, TRUE, 0); - MemView9 = new memview_struct; - memset(MemView9, 0, sizeof(memview_struct)); - MemView9->cpu = 0; - MemView9->autoup_secs = 1; - SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), - UDM_SETRANGE, 0, MAKELONG(99, 1)); - SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), - UDM_SETPOS32, 0, MemView9->autoup_secs); - return 1; - } - case WM_CLOSE: - { - if(MemView9->autoup) - { - KillTimer(hwnd, IDT_VIEW_MEM9); - MemView9->autoup = false; - } - - if (MemView9!=NULL) - { - delete MemView9; - MemView9 = NULL; - } - //INFO("Close ARM9 memory dialog\n"); - PostQuitMessage(0); - return 0; - } - case WM_TIMER: - SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0); + case IDC_8_BIT: + case IDC_16_BIT: + case IDC_32_BIT: + CheckRadioButton(hDlg, IDC_8_BIT, IDC_32_BIT, LOWORD(wParam)); + data->viewMode = (LOWORD(wParam) - IDC_8_BIT); + InvalidateRect(hDlg, NULL, FALSE); UpdateWindow(hDlg); return 1; - case WM_COMMAND : - switch (LOWORD (wParam)) - { - case IDC_8_BIT : - MemView9->representation = 0; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_16_BIT : - MemView9->representation = 1; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_32_BIT : - MemView9->representation = 2; - InvalidateRect(GetDlgItem(hwnd, IDC_MEM_BOX), NULL, FALSE); - UpdateWindow(GetDlgItem(hwnd, IDC_MEM_BOX)); - return 1; - case IDC_AUTO_UPDATE : - if(MemView9->autoup) - { - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SECS), false); - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), false); - KillTimer(hwnd, IDT_VIEW_MEM9); - MemView9->autoup = FALSE; - return 1; - } - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SECS), true); - EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), true); - MemView9->autoup = TRUE; - SetTimer(hwnd, IDT_VIEW_MEM9, MemView9->autoup_secs*20, (TIMERPROC) NULL); - return 1; - case IDC_AUTO_UPDATE_SECS: - { - int t = GetDlgItemInt(hwnd, IDC_AUTO_UPDATE_SECS, FALSE, TRUE); - if (!MemView9) - { - SendMessage(hwnd, WM_INITDIALOG, 0, 0); - } - if (t != MemView9->autoup_secs) - { - MemView9->autoup_secs = t; - if (MemView9->autoup) - SetTimer(hwnd, IDT_VIEW_MEM9, - MemView9->autoup_secs*20, (TIMERPROC) NULL); - } - } - return 1; - case IDC_REFRESH: - InvalidateRect(hwnd, NULL, FALSE); - return 1; - case IDC_GO : - { - char tmp[8]; - int lg = GetDlgItemText(hwnd, IDC_GOTOMEM, tmp, 8); - u32 adr = 0; - u16 i; + case IDC_GO: + { + char addrstr[9]; + int len; + int i; + int shift; + BOOL error = FALSE; + u32 address = 0x00000000; - for(i = 0; i='A')&&(tmp[i]<='F')) - { - adr = adr*16 + (tmp[i]-'A'+10); - continue; - } - if((tmp[i]>='0')&&(tmp[i]<='9')) - { - adr = adr*16 + (tmp[i]-'0'); - continue; - } - } - MemView9->curr_ligne = (adr>>4); - InvalidateRect(hwnd, NULL, FALSE); - UpdateWindow(hwnd); - } - return 1; - case IDC_FERMER : - SendMessage(hwnd, WM_CLOSE, 0, 0); - return 1; - } + len = GetWindowText(GetDlgItem(hDlg, IDC_ADDRESS), addrstr, 9); + + for(i = 0; i < len; i++) + { + char ch = addrstr[i]; + + if((ch >= '0') && (ch <= '9')) + continue; + + if((ch >= 'A') && (ch <= 'F')) + continue; + + if((ch >= 'a') && (ch <= 'f')) + continue; + + if(ch == '\0') + break; + + error = TRUE; + break; + } + + if(error) + { + MessageBox(hDlg, "Error:\nInvalid address specified.\nThe address must be an hexadecimal value.", "DeSmuME", (MB_OK | MB_ICONERROR)); + SetWindowText(GetDlgItem(hDlg, IDC_ADDRESS), ""); + return 1; + } + + for(i = (len-1), shift = 0; i >= 0; i--, shift += 4) + { + char ch = addrstr[i]; + + if((ch >= '0') && (ch <= '9')) + address |= ((ch - '0') << shift); + else if((ch >= 'A') && (ch <= 'F')) + address |= ((ch - 'A' + 0xA) << shift); + else if((ch >= 'a') && (ch <= 'f')) + address |= ((ch - 'a' + 0xA) << shift); + } + + data->address = min((u32)0xFFFFFF00, (address & 0xFFFFFFF0)); + SetScrollPos(GetDlgItem(hDlg, IDC_MEMVIEWBOX), SB_VERT, ((data->address >> 4) & 0x000FFFFF), TRUE); + InvalidateRect(hDlg, NULL, FALSE); UpdateWindow(hDlg); + } + return 1; + + case IDC_TEXTDUMP: + { + char fileName[256] = ""; + OPENFILENAME ofn; + + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hDlg; + ofn.lpstrFilter = "Text file (*.txt)\0*.txt\0Any file (*.*)\0*.*\0\0"; + ofn.nFilterIndex = 1; + ofn.lpstrFile = fileName; + ofn.nMaxFile = 256; + ofn.lpstrDefExt = "txt"; + ofn.Flags = OFN_NOCHANGEDIR; + + if(GetSaveFileName(&ofn)) + { + FILE *f; + u8 memory[0x100]; + int line; + + MMU_DumpMemBlock(data->cpu, data->address, 0x100, memory); + + f = fopen(fileName, "a"); + + for(line = 0; line < 16; line++) + { + int i; + + fprintf(f, "%08X\t\t", (data->address + (line << 4))); + + switch(data->viewMode) + { + case 0: + { + for(i = 0; i < 16; i++) + { + fprintf(f, "%02X ", T1ReadByte(memory, ((line << 4) + i))); + } + fprintf(f, "\t"); + } + break; + + case 1: + { + for(i = 0; i < 16; i += 2) + { + fprintf(f, "%04X ", T1ReadWord(memory, ((line << 4) + i))); + } + fprintf(f, "\t\t"); + } + break; + + case 2: + { + for(i = 0; i < 16; i += 4) + { + fprintf(f, "%08X ", T1ReadLong(memory, ((line << 4) + i))); + } + fprintf(f, "\t\t\t"); + } + break; + } + + for(i = 0; i < 16; i++) + { + u8 val = T1ReadByte(memory, ((line << 4) + i)); + + if((val >= 32) && (val <= 127)) + fprintf(f, "%c", (char)val); + else + fprintf(f, "."); + } + fprintf(f, "\n"); + } + + fclose(f); + } + } + return 1; + + case IDC_RAWDUMP: + { + char fileName[256] = ""; + OPENFILENAME ofn; + + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = hDlg; + ofn.lpstrFilter = "Binary file (*.bin)\0*.bin\0Any file (*.*)\0*.*\0\0"; + ofn.nFilterIndex = 1; + ofn.lpstrFile = fileName; + ofn.nMaxFile = 256; + ofn.lpstrDefExt = "bin"; + ofn.Flags = OFN_NOCHANGEDIR; + + if(GetSaveFileName(&ofn)) + { + FILE *f; + u8 memory[0x100]; + int line; + + MMU_DumpMemBlock(data->cpu, data->address, 0x100, memory); + + f = fopen(fileName, "ab"); + + fwrite(memory, 0x100, 1, f); + + fclose(f); + } + } + return 1; + } + return 0; } - return FALSE; + + return 0; } + +////////////////////////////////////////////////////////////////////////////// + +LRESULT MemView_ViewBoxPaint(HWND hCtl, MemView_DataStruct *data, WPARAM wParam, LPARAM lParam) +{ + HDC hdc; + PAINTSTRUCT ps; + RECT rc; + int w, h; + SIZE fontsize; + int fontwidth, fontheight; + HDC mem_hdc; + HBITMAP mem_bmp; + + GetClientRect(hCtl, &rc); + w = (rc.right - rc.left); + h = (rc.bottom - rc.top); + + hdc = BeginPaint(hCtl, &ps); + + mem_hdc = CreateCompatibleDC(hdc); + mem_bmp = CreateCompatibleBitmap(hdc, w, h); + SelectObject(mem_hdc, mem_bmp); + + SelectObject(mem_hdc, GetStockObject(SYSTEM_FIXED_FONT)); + + GetTextExtentPoint32(mem_hdc, " ", 1, &fontsize); + fontwidth = fontsize.cx; + fontheight = fontsize.cy; + + FillRect(mem_hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH)); + + if(data != NULL) + { + u32 addr = data->address; + u8 memory[0x100]; + char text[80]; + int startx, cury; + int line; + + startx = 0; + cury = 0; + + sprintf(text, " "); + GetTextExtentPoint32(mem_hdc, text, strlen(text), &fontsize); + startx = (fontsize.cx + 5); + cury = (fontsize.cy + 3); + + MoveToEx(mem_hdc, (fontsize.cx + 2), 0, NULL); + LineTo(mem_hdc, (fontsize.cx + 2), h); + + MoveToEx(mem_hdc, 0, (fontsize.cy + 1), NULL); + LineTo(mem_hdc, w, (fontsize.cy + 1)); + + switch(data->viewMode) + { + case 0: + { + sprintf(text, " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF"); + TextOut(mem_hdc, startx, 0, text, strlen(text)); + } + break; + + case 1: + { + sprintf(text, " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF"); + TextOut(mem_hdc, startx, 0, text, strlen(text)); + } + break; + + case 2: + { + sprintf(text, " 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF"); + TextOut(mem_hdc, startx, 0, text, strlen(text)); + } + break; + } + + MMU_DumpMemBlock(data->cpu, data->address, 0x100, memory); + + for(line = 0; line < 16; line++, addr += 0x10) + { + int i; + + sprintf(text, "%08X", addr); + TextOut(mem_hdc, 0, cury, text, strlen(text)); + + switch(data->viewMode) + { + case 0: + { + sprintf(text, " "); + for(i = 0; i < 16; i++) + { + sprintf(text, "%s%02X ", text, T1ReadByte(memory, ((line << 4) + i))); + } + sprintf(text, "%s ", text); + } + break; + + case 1: + { + sprintf(text, " "); + for(i = 0; i < 16; i += 2) + { + sprintf(text, "%s%04X ", text, T1ReadWord(memory, ((line << 4) + i))); + } + sprintf(text, "%s ", text); + } + break; + + case 2: + { + sprintf(text, " "); + for(i = 0; i < 16; i += 4) + { + sprintf(text, "%s%08X ", text, T1ReadLong(memory, ((line << 4) + i))); + } + sprintf(text, "%s ", text); + } + break; + } + + for(i = 0; i < 16; i++) + { + u8 val = T1ReadByte(memory, ((line << 4) + i)); + + if((val >= 32) && (val <= 127)) + sprintf(text, "%s%c", text, (char)val); + else + sprintf(text, "%s.", text); + } + + TextOut(mem_hdc, startx, cury, text, strlen(text)); + + cury += fontheight; + } + } + + BitBlt(hdc, 0, 0, w, h, mem_hdc, 0, 0, SRCCOPY); + + DeleteDC(mem_hdc); + DeleteObject(mem_bmp); + + EndPaint(hCtl, &ps); + + return 0; +} + +LRESULT CALLBACK MemView_ViewBoxProc(HWND hCtl, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + MemView_DataStruct *data = (MemView_DataStruct*)GetWindowLong(hCtl, DWL_USER); + + switch(uMsg) + { + case WM_NCCREATE: + SetScrollRange(hCtl, SB_VERT, 0x00000000, 0x000FFFF0, TRUE); + SetScrollPos(hCtl, SB_VERT, 0x00000000, TRUE); + return 1; + + case WM_NCDESTROY: + return 1; + + case WM_ERASEBKGND: + return 1; + + case WM_PAINT: + MemView_ViewBoxPaint(hCtl, data, wParam, lParam); + return 1; + + case WM_VSCROLL: + { + int firstpos = GetScrollPos(hCtl, SB_VERT); + + switch(LOWORD(wParam)) + { + case SB_LINEUP: + data->address = (u32)max(0x00000000, ((int)data->address - 0x10)); + break; + + case SB_LINEDOWN: + data->address = min((u32)0xFFFFFF00, (data->address + 0x10)); + break; + + case SB_PAGEUP: + data->address = (u32)max(0x00000000, ((int)data->address - 0x100)); + break; + + case SB_PAGEDOWN: + data->address = min((u32)0xFFFFFF00, (data->address + 0x100)); + break; + + case SB_THUMBTRACK: + case SB_THUMBPOSITION: + { + SCROLLINFO si; + + ZeroMemory(&si, sizeof(si)); + si.cbSize = sizeof(si); + si.fMask = SIF_TRACKPOS; + + GetScrollInfo(hCtl, SB_VERT, &si); + + data->address = min((u32)0xFFFFFF00, (data->address + ((si.nTrackPos - firstpos) * 16))); + } + break; + } + + SetScrollPos(hCtl, SB_VERT, ((data->address >> 4) & 0x000FFFFF), TRUE); + InvalidateRect(hCtl, NULL, FALSE); UpdateWindow(hCtl); + } + return 1; + } + + return DefWindowProc(hCtl, uMsg, wParam, lParam); +} + +////////////////////////////////////////////////////////////////////////////// diff --git a/desmume/src/windows/memView.h b/desmume/src/windows/memView.h index 52f7e7eda..078a57f7f 100644 --- a/desmume/src/windows/memView.h +++ b/desmume/src/windows/memView.h @@ -22,12 +22,15 @@ #ifndef MEM_VIEW_H #define MEM_VIEW_H -#include "../common.h" +BOOL MemView_Init(); +void MemView_DeInit(); -extern BOOL CALLBACK ViewMem_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); -extern LRESULT CALLBACK ViewMem_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +BOOL MemView_DlgOpen(HWND hParentWnd, u8 CPU); +void MemView_DlgClose(u8 CPU); +BOOL MemView_IsOpened(u8 CPU); +void MemView_Refresh(u8 CPU); -extern BOOL CALLBACK ViewMem_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); -extern LRESULT CALLBACK ViewMem_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); +BOOL CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); +LRESULT CALLBACK MemView_ViewBoxProc(HWND hCtl, UINT uMsg, WPARAM wParam, LPARAM lParam); #endif \ No newline at end of file diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 23f4ff68a..7cc7bbe0c 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -7,7 +7,6 @@ #define IDC_FERMER 103 #define IDD_DESASSEMBLEUR_VIEWER7 103 #define IDC_STEP 104 -#define IDD_MEM_VIEWER7 104 #define IDC_SETPNUM 105 #define IDC_SCROLLER 106 #define IDD_SOUNDSETTINGS 106 @@ -97,8 +96,6 @@ #define IDC_8_BIT 302 #define IDC_16_BIT 303 #define IDC_32_BIT 304 -#define IDC_MEM_BOX 305 -#define IDC_GOTOMEM 306 #define IDC_DES_BOX 402 #define IDC_R0 403 #define IDC_R1 404 @@ -157,6 +154,7 @@ #define IDB_BGTILES 913 #define IDD_EMULATIONSETTINGS 916 #define IDD_WIFISETTINGS 918 +#define IDD_MEM_VIEW 920 #define IDC_BGMAP_SEL 1000 #define IDC_BRIDGEADAPTER 1000 #define IDC_EDIT03 1000 @@ -185,16 +183,20 @@ #define IDC_ARM7BIOSBROWSE 1007 #define IDC_EDIT06 1007 #define IDC_EDIT09 1008 +#define IDC_MEMVIEWBOX 1008 +#define IDC_ADDRESS 1009 #define IDC_BIOSSWIS 1009 #define IDC_EDIT10 1009 #define IDC_FORCERATIO 1009 #define IDC_AUTO_UPDATE_SPIN 1010 #define IDC_EDIT15 1010 +#define IDC_TEXTDUMP 1010 #define IDC_WINDOW1X 1010 #define IDC_AUTO_UPDATE_SECS 1011 #define IDC_USEEXTFIRMWARE 1011 #define IDC_WINDOW2X 1011 #define IDC_FIRMWARE 1012 +#define IDC_RAWDUMP 1012 #define IDC_REFRESH 1012 #define IDC_WINDOW3X 1012 #define IDC_EDIT02 1013 @@ -356,7 +358,6 @@ #define IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL 1302 #define IDD_DESASSEMBLEUR_VIEWER9 1302 #define IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT 1303 -#define IDD_MEM_VIEWER9 1303 #define IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT 1304 #define IDD_GBASLOT_NONE 1304 #define IDD_GBASLOT_RUMBLEPAK 1305 @@ -421,8 +422,8 @@ #define ID_VIEW_DISPLAYFPS 40010 #define ID_VIEW_DISPLAYINPUT 40011 #define ID_VIEW_DISPLAYLAG 40012 -#define ID_VIEW_HUDEDITOR 40013 -#define ID_VIEW_DISPLAYMICROPHONE 40014 +#define ID_VIEW_HUDEDITOR 40013 +#define ID_VIEW_DISPLAYMICROPHONE 40014 #define IDM_FILE_RECORDAVI 40015 #define IDM_FILE_STOPAVI 40016 #define ACCEL_CTRL_O 40032 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 9af62d302..1b3869b19 100644 --- a/desmume/src/windows/resources.rc +++ b/desmume/src/windows/resources.rc @@ -113,8 +113,8 @@ MENU_PRINCIPAL MENU MENUITEM SEPARATOR MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER MENUITEM "Display Fps", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR } @@ -285,8 +285,8 @@ MENU_PRINCIPAL MENU MENUITEM SEPARATOR MENUITEM "Display Frame Counter", ID_VIEW_FRAMECOUNTER MENUITEM "Display FPS", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR } @@ -456,8 +456,8 @@ MENU_PRINCIPAL MENU MENUITEM SEPARATOR MENUITEM "Compteur d'images", ID_VIEW_FRAMECOUNTER MENUITEM "Framerate", ID_VIEW_DISPLAYFPS - MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT - MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG + MENUITEM "Display Input", ID_VIEW_DISPLAYINPUT + MENUITEM "Display Lag Counter", ID_VIEW_DISPLAYLAG MENUITEM "Display Microphone", ID_VIEW_DISPLAYMICROPHONE MENUITEM "HUD Editing Mode", ID_VIEW_HUDEDITOR } @@ -1235,6 +1235,28 @@ FONT 8, "MS Sans Serif", 0, 0, 1 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +IDD_MEM_VIEW DIALOG 0, 0, 436, 231 +STYLE DS_CENTER | DS_FIXEDSYS | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU +CAPTION "" +FONT 8, "MS Sans Serif" +BEGIN + PUSHBUTTON "Close", IDCANCEL, 188, 210, 60, 15, BS_PUSHBUTTON + GROUPBOX "View mode", IDC_STATIC, 5, 5, 145, 35 + RADIOBUTTON "8-bit", IDC_8_BIT, 15, 20, 40, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON + RADIOBUTTON "16-bit", IDC_16_BIT, 60, 20, 39, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON + RADIOBUTTON "32-bit", IDC_32_BIT, 105, 20, 39, 10, WS_GROUP | WS_TABSTOP | BS_RADIOBUTTON + GROUPBOX "View address", IDC_STATIC, 160, 5, 115, 35 + PUSHBUTTON "Go", IDC_GO, 240, 20, 25, 14, BS_PUSHBUTTON + PUSHBUTTON "Text dump", IDC_TEXTDUMP, 295, 20, 60, 14, BS_PUSHBUTTON + CONTROL "1", IDC_MEMVIEWBOX, "MemView_ViewBox", 0x50210000, 5, 45, 425, 160 + EDITTEXT IDC_ADDRESS, 170, 20, 70, 14, ES_AUTOHSCROLL, WS_EX_TRANSPARENT + PUSHBUTTON "Raw dump", IDC_RAWDUMP, 360, 20, 60, 14, BS_PUSHBUTTON + GROUPBOX "View dump", IDC_STATIC, 285, 5, 145, 35 +END + + + LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_EMULATIONSETTINGS DIALOG 0, 0, 241, 270 STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU @@ -2104,138 +2126,6 @@ FONT 8, "MS Shell Dlg", 400, 0, 1 LTEXT "frames", IDC_STATIC, 92, 158, 16, 8, SS_LEFT } - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_MEM_VIEWER7 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Vis Hukommelse" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Gå Til:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&Start", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_MEM_BOX, "MemViewBox7", 0x50210000, 4, 16, 424, 142, 0x00000200 - PUSHBUTTON "&Luk", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_MEM_VIEWER7 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP -CAPTION "View Memory" -FONT 8, "MS Sans Serif", 400, 0, 0 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Go to:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - PUSHBUTTON "&Close", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_MEM_BOX, "MemViewBox7", 0x50210000, 4, 16, 424, 142, 0x00000200 - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_MEM_VIEWER7 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Visualisation de la memoire" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Aller E:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Edit", IDC_MEM_BOX, "MemViewBox7", 0x50210000, 4, 16, 424, 142, 0x00000200 - PUSHBUTTON "&Fermer", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_DANISH, SUBLANG_DANISH_DENMARK -IDD_MEM_VIEWER9 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Vis Hukommelse" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Gå Til:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&Start", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_MEM_BOX, "MemViewBox9", 0x50210000, 4, 16, 424, 142, 0x00000200 - PUSHBUTTON "&Luk", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_MEM_VIEWER9 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP -CAPTION "View Memory" -FONT 8, "MS Shell Dlg", 0, 0, 1 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Go to:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - PUSHBUTTON "&Close", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - CONTROL "Rediger", IDC_MEM_BOX, "MemViewBox9", 0x50210000, 4, 16, 424, 142, 0x00000200 - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - - - -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -IDD_MEM_VIEWER9 DIALOGEX 0, 0, 428, 178 -STYLE DS_CENTER | DS_SETFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME -CAPTION "Visualisation de la memoire" -FONT 8, "MS Sans Serif", 0, 0, 1 -{ - AUTORADIOBUTTON "8 bit", IDC_8_BIT, 10, 4, 29, 10, WS_GROUP | WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "16 bit", IDC_16_BIT, 44, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - AUTORADIOBUTTON "32 bit", IDC_32_BIT, 82, 4, 33, 10, WS_TABSTOP | BS_AUTORADIOBUTTON - LTEXT "Aller E:", IDC_STATIC, 130, 4, 33, 10, SS_LEFT - EDITTEXT IDC_GOTOMEM, 155, 1, 82, 14, WS_GROUP | ES_AUTOHSCROLL | ES_UPPERCASE | ES_WANTRETURN - PUSHBUTTON "&GO", IDC_GO, 240, 1, 20, 14, BS_PUSHBUTTON - CONTROL "Edit", IDC_MEM_BOX, "MemViewBox9", 0x50210000, 4, 16, 424, 142, 0x00000200 - PUSHBUTTON "&Fermer", IDC_FERMER, 185, 162, 50, 14, BS_PUSHBUTTON - AUTOCHECKBOX "&Auto-update", IDC_AUTO_UPDATE, 327, 1, 54, 14, BS_AUTOCHECKBOX - EDITTEXT IDC_AUTO_UPDATE_SECS, 382, 2, 12, 14, WS_DISABLED | ES_AUTOHSCROLL | ES_READONLY - CONTROL "", IDC_AUTO_UPDATE_SPIN, UPDOWN_CLASS, WS_DISABLED | UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_SETBUDDYINT, 394, 2, 11, 14 - LTEXT "frames", IDC_STATIC, 406, 5, 16, 8, SS_LEFT -} - LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDD_MICROPHONE DIALOG 0, 0, 241, 111 STYLE DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU