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:
parent
c95bc1c458
commit
167386847d
|
@ -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];
|
||||
|
|
|
@ -359,4 +359,6 @@ void _MMU_write16(u32 addr, u16 val) { _MMU_write16(PROCNUM, addr, val); }
|
|||
template<int PROCNUM>
|
||||
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -19,501 +19,565 @@
|
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include "memView.h"
|
||||
#include <commctrl.h>
|
||||
|
||||
#include "../MMU.h"
|
||||
#include "debug.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;
|
||||
bool autoup;
|
||||
MemView_DataStruct(u8 CPU) : cpu(CPU), address(0x02000000), viewMode(0)
|
||||
{
|
||||
}
|
||||
|
||||
s8 cpu;
|
||||
u32 curr_ligne;
|
||||
u8 representation;
|
||||
} memview_struct;
|
||||
HWND hDlg;
|
||||
u8 cpu;
|
||||
u32 address;
|
||||
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;
|
||||
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;
|
||||
RECT rect;
|
||||
int lg;
|
||||
int ht;
|
||||
HDC mem_dc;
|
||||
int shift;
|
||||
BOOL error = FALSE;
|
||||
u32 address = 0x00000000;
|
||||
|
||||
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;
|
||||
int nbligne;
|
||||
RECT r;
|
||||
u32 adr;
|
||||
|
||||
GetClientRect(hwnd, &rect);
|
||||
lg = rect.right - rect.left;
|
||||
ht = rect.bottom - rect.top;
|
||||
GetClientRect(hCtl, &rc);
|
||||
w = (rc.right - rc.left);
|
||||
h = (rc.bottom - rc.top);
|
||||
|
||||
hdc = BeginPaint(hwnd, &ps);
|
||||
hdc = BeginPaint(hCtl, &ps);
|
||||
|
||||
mem_dc = CreateCompatibleDC(hdc);
|
||||
mem_bmp = CreateCompatibleBitmap(hdc, lg, ht);
|
||||
SelectObject(mem_dc, mem_bmp);
|
||||
mem_hdc = CreateCompatibleDC(hdc);
|
||||
mem_bmp = CreateCompatibleBitmap(hdc, w, h);
|
||||
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;
|
||||
|
||||
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)
|
||||
if(data != NULL)
|
||||
{
|
||||
int j;
|
||||
sprintf(text, "%04X:%04X", (int)(adr>>16), (int)(adr&0xFFFF));
|
||||
DrawText(mem_dc, text, -1, &r, DT_TOP | DT_LEFT | DT_NOPREFIX);
|
||||
r.left += 11*fontsize.cx;
|
||||
u32 addr = data->address;
|
||||
u8 memory[0x100];
|
||||
char text[80];
|
||||
int startx, cury;
|
||||
int line;
|
||||
|
||||
if(win->representation == 0)
|
||||
for(j=0; j<16; ++j)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
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
|
||||
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;
|
||||
sprintf(text, "%s.", text);
|
||||
}
|
||||
|
||||
r.left+=fontsize.cx;
|
||||
TextOut(mem_hdc, startx, cury, text, strlen(text));
|
||||
|
||||
for(j=0; j<16; ++j)
|
||||
{
|
||||
u8 c = MMU_read8(win->cpu, adr+j);
|
||||
if(c >= 32 && c <= 127) {
|
||||
text[j] = (char)c;
|
||||
cury += fontheight;
|
||||
}
|
||||
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);
|
||||
|
||||
EndPaint(hwnd, &ps);
|
||||
return 1;
|
||||
EndPaint(hCtl, &ps);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=================================================== ARM7
|
||||
LRESULT CALLBACK ViewMem_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
LRESULT CALLBACK MemView_ViewBoxProc(HWND hCtl, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg)
|
||||
MemView_DataStruct *data = (MemView_DataStruct*)GetWindowLong(hCtl, DWL_USER);
|
||||
|
||||
switch(uMsg)
|
||||
{
|
||||
case WM_NCCREATE:
|
||||
SetScrollRange(hwnd, SB_VERT, 0, 0x0FFFFFFF, TRUE);
|
||||
SetScrollPos(hwnd, SB_VERT, 10, TRUE);
|
||||
SetScrollRange(hCtl, SB_VERT, 0x00000000, 0x000FFFF0, TRUE);
|
||||
SetScrollPos(hCtl, SB_VERT, 0x00000000, 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)
|
||||
{
|
||||
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:
|
||||
MemViewBox_OnPaint(hwnd, MemView9, wParam, lParam);
|
||||
MemView_ViewBoxPaint(hCtl, data, wParam, lParam);
|
||||
return 1;
|
||||
|
||||
case WM_ERASEBKGND:
|
||||
return 1;
|
||||
case WM_VSCROLL :
|
||||
case WM_VSCROLL:
|
||||
{
|
||||
RECT rect;
|
||||
SIZE fontsize;
|
||||
HDC dc;
|
||||
HFONT old;
|
||||
int nbligne;
|
||||
int firstpos = GetScrollPos(hCtl, SB_VERT);
|
||||
|
||||
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)
|
||||
switch(LOWORD(wParam))
|
||||
{
|
||||
case SB_LINEDOWN :
|
||||
MemView9->curr_ligne = std::min((u32)0x0FFFFFFFF, (u32)MemView9->curr_ligne+1);
|
||||
case SB_LINEUP:
|
||||
data->address = (u32)max(0x00000000, ((int)data->address - 0x10));
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
SelectObject(dc, old);
|
||||
SetScrollPos(hwnd, SB_VERT, MemView9->curr_ligne, TRUE);
|
||||
InvalidateRect(hwnd, NULL, FALSE);
|
||||
UpdateWindow(hwnd);
|
||||
SetScrollPos(hCtl, SB_VERT, ((data->address >> 4) & 0x000FFFFF), TRUE);
|
||||
InvalidateRect(hCtl, NULL, FALSE); UpdateWindow(hCtl);
|
||||
}
|
||||
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;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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 <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
|
||||
IDD_MICROPHONE DIALOG 0, 0, 241, 111
|
||||
STYLE DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU
|
||||
|
|
Loading…
Reference in New Issue