Big tool remake started. New memory viewer.

Here are the main differences with the old one:
- threading/timer system dropped; the viewers refresh every 10 frames
- same dialog template and procedure shared for both viewers, like before
- no trouble jumping over 0x0FFFFFFF; all addresses supported
- correct interpretation of the address entered
- scrollbar working correctly
- two view dump functions: Text dump will dump the current view into a text file, in an human-readable form; Raw dump will copy the current view to a binary file that can be opened with an hex editor
- the viewers use MMU_DumpMemBlock to read memory; this is better than the MMU_readX functions as it doesn't risk affecting the emulation; but that func isn't suitable for the I/O register region, as some registers aren't written to MMU.MMU_MEM.
This commit is contained in:
luigi__ 2009-04-11 14:09:16 +00:00
parent c95bc1c458
commit 167386847d
7 changed files with 631 additions and 640 deletions

View File

@ -4363,6 +4363,17 @@ void FASTCALL MMU_write8(u32 proc, u32 adr, u8 val)
_MMU_ARM7_write08(adr,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) { void mmu_select_savetype(int type, int *bmemtype, u32 *bmemsize) {
if (type<0 || type > 6) return; if (type<0 || type > 6) return;
*bmemtype=save_types[type][0]; *bmemtype=save_types[type][0];

View File

@ -359,4 +359,6 @@ void _MMU_write16(u32 addr, u16 val) { _MMU_write16(PROCNUM, addr, val); }
template<int PROCNUM> template<int PROCNUM>
void _MMU_write32(u32 addr, u32 val) { _MMU_write32(PROCNUM, addr, val); } 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 #endif

View File

@ -161,8 +161,8 @@ static int FrameLimit = 1;
//=========================== view tools //=========================== view tools
TOOLSCLASS *ViewDisasm_ARM7 = NULL; TOOLSCLASS *ViewDisasm_ARM7 = NULL;
TOOLSCLASS *ViewDisasm_ARM9 = NULL; TOOLSCLASS *ViewDisasm_ARM9 = NULL;
TOOLSCLASS *ViewMem_ARM7 = NULL; //TOOLSCLASS *ViewMem_ARM7 = NULL;
TOOLSCLASS *ViewMem_ARM9 = NULL; //TOOLSCLASS *ViewMem_ARM9 = NULL;
TOOLSCLASS *ViewRegisters = NULL; TOOLSCLASS *ViewRegisters = NULL;
TOOLSCLASS *ViewPalette = NULL; TOOLSCLASS *ViewPalette = NULL;
TOOLSCLASS *ViewTiles = NULL; TOOLSCLASS *ViewTiles = NULL;
@ -960,6 +960,7 @@ DWORD WINAPI run()
int fps=0; int fps=0;
int fpsframecount=0; int fpsframecount=0;
u64 fpsticks=0; u64 fpsticks=0;
int tools_frames = 0;
int res; int res;
HWND hwnd = MainWindow->getHWnd(); 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++; fpsframecount++;
QueryPerformanceCounter((LARGE_INTEGER *)&curticks); QueryPerformanceCounter((LARGE_INTEGER *)&curticks);
@ -1540,10 +1551,12 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
GInfo_Init(); GInfo_Init();
MemView_Init();
ViewDisasm_ARM7 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER7, (DLGPROC) ViewDisasm_ARM7Proc); ViewDisasm_ARM7 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER7, (DLGPROC) ViewDisasm_ARM7Proc);
ViewDisasm_ARM9 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER9, (DLGPROC) ViewDisasm_ARM9Proc); ViewDisasm_ARM9 = new TOOLSCLASS(hThisInstance, IDD_DESASSEMBLEUR_VIEWER9, (DLGPROC) ViewDisasm_ARM9Proc);
ViewMem_ARM7 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER7, (DLGPROC) ViewMem_ARM7Proc); //ViewMem_ARM7 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER7, (DLGPROC) ViewMem_ARM7Proc);
ViewMem_ARM9 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER9, (DLGPROC) ViewMem_ARM9Proc); //ViewMem_ARM9 = new TOOLSCLASS(hThisInstance, IDD_MEM_VIEWER9, (DLGPROC) ViewMem_ARM9Proc);
ViewRegisters = new TOOLSCLASS(hThisInstance, IDD_IO_REG, (DLGPROC) IoregView_Proc); ViewRegisters = new TOOLSCLASS(hThisInstance, IDD_IO_REG, (DLGPROC) IoregView_Proc);
ViewPalette = new TOOLSCLASS(hThisInstance, IDD_PAL, (DLGPROC) ViewPalProc); ViewPalette = new TOOLSCLASS(hThisInstance, IDD_PAL, (DLGPROC) ViewPalProc);
ViewTiles = new TOOLSCLASS(hThisInstance, IDD_TILE, (DLGPROC) ViewTilesProc); ViewTiles = new TOOLSCLASS(hThisInstance, IDD_TILE, (DLGPROC) ViewTilesProc);
@ -1725,6 +1738,11 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
GInfo_DeInit(); GInfo_DeInit();
MemView_DlgClose(ARMCPU_ARM9);
MemView_DlgClose(ARMCPU_ARM7);
MemView_DeInit();
//if (input!=NULL) delete input; //if (input!=NULL) delete input;
if (ViewLights!=NULL) delete ViewLights; if (ViewLights!=NULL) delete ViewLights;
if (ViewMatrices!=NULL) delete ViewMatrices; if (ViewMatrices!=NULL) delete ViewMatrices;
@ -1733,8 +1751,8 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
if (ViewTiles!=NULL) delete ViewTiles; if (ViewTiles!=NULL) delete ViewTiles;
if (ViewPalette!=NULL) delete ViewPalette; if (ViewPalette!=NULL) delete ViewPalette;
if (ViewRegisters!=NULL) delete ViewRegisters; if (ViewRegisters!=NULL) delete ViewRegisters;
if (ViewMem_ARM9!=NULL) delete ViewMem_ARM9; // if (ViewMem_ARM9!=NULL) delete ViewMem_ARM9;
if (ViewMem_ARM7!=NULL) delete ViewMem_ARM7; // if (ViewMem_ARM7!=NULL) delete ViewMem_ARM7;
if (ViewDisasm_ARM9!=NULL) delete ViewDisasm_ARM9; if (ViewDisasm_ARM9!=NULL) delete ViewDisasm_ARM9;
if (ViewDisasm_ARM7!=NULL) delete ViewDisasm_ARM7; if (ViewDisasm_ARM7!=NULL) delete ViewDisasm_ARM7;
@ -2743,12 +2761,14 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
ViewRegisters->open(); ViewRegisters->open();
return 0; return 0;
case IDM_MEMORY: case IDM_MEMORY:
ViewMem_ARM7->regClass("MemViewBox7", ViewMem_ARM7BoxProc); /* ViewMem_ARM7->regClass("MemViewBox7", ViewMem_ARM7BoxProc);
if (!ViewMem_ARM7->open()) if (!ViewMem_ARM7->open())
ViewMem_ARM7->unregClass(); ViewMem_ARM7->unregClass();
ViewMem_ARM9->regClass("MemViewBox9", ViewMem_ARM9BoxProc); ViewMem_ARM9->regClass("MemViewBox9", ViewMem_ARM9BoxProc);
if (!ViewMem_ARM9->open()) 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; return 0;
case IDM_DISASSEMBLER: case IDM_DISASSEMBLER:
ViewDisasm_ARM7->regClass("DesViewBox7",ViewDisasm_ARM7BoxProc); ViewDisasm_ARM7->regClass("DesViewBox7",ViewDisasm_ARM7BoxProc);

View File

@ -19,501 +19,565 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <algorithm>
#include "memView.h"
#include <commctrl.h>
#include "../MMU.h" #include "../MMU.h"
#include "debug.h" #include "debug.h"
#include "resource.h" #include "resource.h"
#include "common.h"
#include <algorithm>
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include "memView.h"
typedef struct using namespace std;
//////////////////////////////////////////////////////////////////////////////
typedef struct MemView_DataStruct
{ {
u32 autoup_secs; MemView_DataStruct(u8 CPU) : cpu(CPU), address(0x02000000), viewMode(0)
bool autoup; {
}
s8 cpu; HWND hDlg;
u32 curr_ligne; u8 cpu;
u8 representation; u32 address;
} memview_struct; u8 viewMode;
} MemView_DataStruct;
MemView_DataStruct * MemView_Data[2] = {NULL, NULL};
memview_struct *MemView7 = NULL; //////////////////////////////////////////////////////////////////////////////
memview_struct *MemView9 = NULL;
LRESULT MemViewBox_OnPaint(HWND hwnd, memview_struct * win, WPARAM wParam, LPARAM lParam) 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; HDC hdc;
PAINTSTRUCT ps; PAINTSTRUCT ps;
SIZE fontsize;
TCHAR text[80]; 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);
}
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 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 IDC_GO:
{
char addrstr[9];
int len;
int i; int i;
RECT rect; int shift;
int lg; BOOL error = FALSE;
int ht; u32 address = 0x00000000;
HDC mem_dc;
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 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; HBITMAP mem_bmp;
int nbligne;
RECT r;
u32 adr;
GetClientRect(hwnd, &rect); GetClientRect(hCtl, &rc);
lg = rect.right - rect.left; w = (rc.right - rc.left);
ht = rect.bottom - rect.top; h = (rc.bottom - rc.top);
hdc = BeginPaint(hwnd, &ps); hdc = BeginPaint(hCtl, &ps);
mem_dc = CreateCompatibleDC(hdc); mem_hdc = CreateCompatibleDC(hdc);
mem_bmp = CreateCompatibleBitmap(hdc, lg, ht); mem_bmp = CreateCompatibleBitmap(hdc, w, h);
SelectObject(mem_dc, mem_bmp); SelectObject(mem_hdc, mem_bmp);
FillRect(mem_dc, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH)); SelectObject(mem_hdc, GetStockObject(SYSTEM_FIXED_FONT));
SelectObject(mem_dc, GetStockObject(SYSTEM_FIXED_FONT)); GetTextExtentPoint32(mem_hdc, " ", 1, &fontsize);
fontwidth = fontsize.cx;
fontheight = fontsize.cy;
GetTextExtentPoint32(mem_dc, "0", 1, &fontsize); FillRect(mem_hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
nbligne = ht/fontsize.cy; if(data != NULL)
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<nbligne; ++i)
{ {
int j; u32 addr = data->address;
sprintf(text, "%04X:%04X", (int)(adr>>16), (int)(adr&0xFFFF)); u8 memory[0x100];
DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); char text[80];
r.left += 11*fontsize.cx; int startx, cury;
int line;
if(win->representation == 0) startx = 0;
for(j=0; j<16; ++j) 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)
{ {
sprintf(text, "%02X", MMU_read8(win->cpu, adr+j)); case 0:
DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX); {
r.left+=3*fontsize.cx; 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 else
if(win->representation == 1) sprintf(text, "%s.", text);
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; TextOut(mem_hdc, startx, cury, text, strlen(text));
for(j=0; j<16; ++j) cury += fontheight;
{
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); BitBlt(hdc, 0, 0, w, h, mem_hdc, 0, 0, SRCCOPY);
DeleteDC(mem_dc); DeleteDC(mem_hdc);
DeleteObject(mem_bmp); DeleteObject(mem_bmp);
EndPaint(hwnd, &ps); EndPaint(hCtl, &ps);
return 1;
return 0;
} }
//=================================================== ARM7 LRESULT CALLBACK MemView_ViewBoxProc(HWND hCtl, UINT uMsg, WPARAM wParam, LPARAM lParam)
LRESULT CALLBACK ViewMem_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
switch(msg) MemView_DataStruct *data = (MemView_DataStruct*)GetWindowLong(hCtl, DWL_USER);
switch(uMsg)
{ {
case WM_NCCREATE: case WM_NCCREATE:
SetScrollRange(hwnd, SB_VERT, 0, 0x0FFFFFFF, TRUE); SetScrollRange(hCtl, SB_VERT, 0x00000000, 0x000FFFF0, TRUE);
SetScrollPos(hwnd, SB_VERT, 10, TRUE); SetScrollPos(hCtl, SB_VERT, 0x00000000, TRUE);
return 1; return 1;
case WM_NCDESTROY: case WM_NCDESTROY:
return 1; return 1;
case WM_PAINT:
MemViewBox_OnPaint(hwnd, MemView7, wParam, lParam);
return 1;
case WM_ERASEBKGND: case WM_ERASEBKGND:
return 1; 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)
{
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;
}
case WM_TIMER:
SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0);
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<lg; ++i)
{
if((tmp[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: case WM_PAINT:
MemViewBox_OnPaint(hwnd, MemView9, wParam, lParam); MemView_ViewBoxPaint(hCtl, data, wParam, lParam);
return 1; return 1;
case WM_ERASEBKGND: case WM_VSCROLL:
return 1;
case WM_VSCROLL :
{ {
RECT rect; int firstpos = GetScrollPos(hCtl, SB_VERT);
SIZE fontsize;
HDC dc;
HFONT old;
int nbligne;
GetClientRect(hwnd, &rect); switch(LOWORD(wParam))
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 : case SB_LINEUP:
MemView9->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView9->curr_ligne+1); data->address = (u32)max(0x00000000, ((int)data->address - 0x10));
break; break;
case SB_LINEUP :
MemView9->curr_ligne = (u32)std::max((u32)0l, (u32)MemView9->curr_ligne-1); case SB_LINEDOWN:
data->address = min((u32)0xFFFFFF00, (data->address + 0x10));
break; break;
case SB_PAGEDOWN :
MemView9->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView9->curr_ligne+nbligne); case SB_PAGEUP:
data->address = (u32)max(0x00000000, ((int)data->address - 0x100));
break; break;
case SB_PAGEUP :
MemView9->curr_ligne = (u32)std::max((u32)0l, (u32)MemView9->curr_ligne-nbligne); 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; break;
} }
SelectObject(dc, old); SetScrollPos(hCtl, SB_VERT, ((data->address >> 4) & 0x000FFFFF), TRUE);
SetScrollPos(hwnd, SB_VERT, MemView9->curr_ligne, TRUE); InvalidateRect(hCtl, NULL, FALSE); UpdateWindow(hCtl);
InvalidateRect(hwnd, NULL, FALSE);
UpdateWindow(hwnd);
} }
return 1; return 1;
} }
return FALSE; return DefWindowProc(hCtl, uMsg, wParam, lParam);
} }
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);
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;
for(i = 0; i<lg; ++i)
{
if((tmp[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;
}
}
return FALSE;
}

View File

@ -22,12 +22,15 @@
#ifndef MEM_VIEW_H #ifndef MEM_VIEW_H
#define 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); BOOL MemView_DlgOpen(HWND hParentWnd, u8 CPU);
extern LRESULT CALLBACK ViewMem_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); 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); BOOL CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
extern LRESULT CALLBACK ViewMem_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK MemView_ViewBoxProc(HWND hCtl, UINT uMsg, WPARAM wParam, LPARAM lParam);
#endif #endif

View File

@ -7,7 +7,6 @@
#define IDC_FERMER 103 #define IDC_FERMER 103
#define IDD_DESASSEMBLEUR_VIEWER7 103 #define IDD_DESASSEMBLEUR_VIEWER7 103
#define IDC_STEP 104 #define IDC_STEP 104
#define IDD_MEM_VIEWER7 104
#define IDC_SETPNUM 105 #define IDC_SETPNUM 105
#define IDC_SCROLLER 106 #define IDC_SCROLLER 106
#define IDD_SOUNDSETTINGS 106 #define IDD_SOUNDSETTINGS 106
@ -97,8 +96,6 @@
#define IDC_8_BIT 302 #define IDC_8_BIT 302
#define IDC_16_BIT 303 #define IDC_16_BIT 303
#define IDC_32_BIT 304 #define IDC_32_BIT 304
#define IDC_MEM_BOX 305
#define IDC_GOTOMEM 306
#define IDC_DES_BOX 402 #define IDC_DES_BOX 402
#define IDC_R0 403 #define IDC_R0 403
#define IDC_R1 404 #define IDC_R1 404
@ -157,6 +154,7 @@
#define IDB_BGTILES 913 #define IDB_BGTILES 913
#define IDD_EMULATIONSETTINGS 916 #define IDD_EMULATIONSETTINGS 916
#define IDD_WIFISETTINGS 918 #define IDD_WIFISETTINGS 918
#define IDD_MEM_VIEW 920
#define IDC_BGMAP_SEL 1000 #define IDC_BGMAP_SEL 1000
#define IDC_BRIDGEADAPTER 1000 #define IDC_BRIDGEADAPTER 1000
#define IDC_EDIT03 1000 #define IDC_EDIT03 1000
@ -185,16 +183,20 @@
#define IDC_ARM7BIOSBROWSE 1007 #define IDC_ARM7BIOSBROWSE 1007
#define IDC_EDIT06 1007 #define IDC_EDIT06 1007
#define IDC_EDIT09 1008 #define IDC_EDIT09 1008
#define IDC_MEMVIEWBOX 1008
#define IDC_ADDRESS 1009
#define IDC_BIOSSWIS 1009 #define IDC_BIOSSWIS 1009
#define IDC_EDIT10 1009 #define IDC_EDIT10 1009
#define IDC_FORCERATIO 1009 #define IDC_FORCERATIO 1009
#define IDC_AUTO_UPDATE_SPIN 1010 #define IDC_AUTO_UPDATE_SPIN 1010
#define IDC_EDIT15 1010 #define IDC_EDIT15 1010
#define IDC_TEXTDUMP 1010
#define IDC_WINDOW1X 1010 #define IDC_WINDOW1X 1010
#define IDC_AUTO_UPDATE_SECS 1011 #define IDC_AUTO_UPDATE_SECS 1011
#define IDC_USEEXTFIRMWARE 1011 #define IDC_USEEXTFIRMWARE 1011
#define IDC_WINDOW2X 1011 #define IDC_WINDOW2X 1011
#define IDC_FIRMWARE 1012 #define IDC_FIRMWARE 1012
#define IDC_RAWDUMP 1012
#define IDC_REFRESH 1012 #define IDC_REFRESH 1012
#define IDC_WINDOW3X 1012 #define IDC_WINDOW3X 1012
#define IDC_EDIT02 1013 #define IDC_EDIT02 1013
@ -356,7 +358,6 @@
#define IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL 1302 #define IDC_LIGHT_VIEWER_LIGHT0COLOR_COLORCTRL 1302
#define IDD_DESASSEMBLEUR_VIEWER9 1302 #define IDD_DESASSEMBLEUR_VIEWER9 1302
#define IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT 1303 #define IDC_LIGHT_VIEWER_LIGHT0COLOR_EDIT 1303
#define IDD_MEM_VIEWER9 1303
#define IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT 1304 #define IDC_LIGHT_VIEWER_LIGHT0VECTOR_EDIT 1304
#define IDD_GBASLOT_NONE 1304 #define IDD_GBASLOT_NONE 1304
#define IDD_GBASLOT_RUMBLEPAK 1305 #define IDD_GBASLOT_RUMBLEPAK 1305

View File

@ -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 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_EMULATIONSETTINGS DIALOG 0, 0, 241, 270 IDD_EMULATIONSETTINGS DIALOG 0, 0, 241, 270
STYLE DS_CENTER | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU 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 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 <20>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 <20>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 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_MICROPHONE DIALOG 0, 0, 241, 111 IDD_MICROPHONE DIALOG 0, 0, 241, 111
STYLE DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU STYLE DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU