Merge pull request #357 from Yackerw/master

Add many debugging features
This commit is contained in:
zeromus 2020-08-19 00:39:22 -04:00 committed by GitHub
commit 79c6ab430a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 804 additions and 116 deletions

View File

@ -24,6 +24,7 @@
#include "firmware.h" #include "firmware.h"
#include "mc.h" #include "mc.h"
#include "mem.h" #include "mem.h"
#include "NDSSystem.h"
#ifdef HAVE_LUA #ifdef HAVE_LUA
#include "lua-engine.h" #include "lua-engine.h"
@ -699,6 +700,16 @@ FORCEINLINE u8 _MMU_read08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u3
CallRegisteredLuaMemHook(addr, 1, /*FIXME*/ 0, LUAMEMHOOK_READ); CallRegisteredLuaMemHook(addr, 1, /*FIXME*/ 0, LUAMEMHOOK_READ);
#endif #endif
// break points, wheee
for (int i = 0; i < memReadBreakPoints.size(); ++i)
{
if (addr == memReadBreakPoints[i])
{
execute = false;
i = memReadBreakPoints.size();
}
}
if(PROCNUM==ARMCPU_ARM9) if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion) if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{ {
@ -734,6 +745,16 @@ FORCEINLINE u16 _MMU_read16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u
CallRegisteredLuaMemHook(addr, 2, /*FIXME*/ 0, LUAMEMHOOK_READ); CallRegisteredLuaMemHook(addr, 2, /*FIXME*/ 0, LUAMEMHOOK_READ);
#endif #endif
// break points, wheee
for (int i = 0; i < memReadBreakPoints.size(); ++i)
{
if (addr == memReadBreakPoints[i])
{
execute = false;
i = memReadBreakPoints.size();
}
}
//special handling for execution from arm9, since we spend so much time in there //special handling for execution from arm9, since we spend so much time in there
if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE) if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE)
{ {
@ -781,6 +802,15 @@ FORCEINLINE u32 _MMU_read32(const int PROCNUM, const MMU_ACCESS_TYPE AT, const u
#ifdef HAVE_LUA #ifdef HAVE_LUA
CallRegisteredLuaMemHook(addr, 4, /*FIXME*/ 0, LUAMEMHOOK_READ); CallRegisteredLuaMemHook(addr, 4, /*FIXME*/ 0, LUAMEMHOOK_READ);
#endif #endif
// break points, wheee
for (int i = 0; i < memReadBreakPoints.size(); ++i)
{
if (addr == memReadBreakPoints[i])
{
execute = false;
i = memReadBreakPoints.size();
}
}
//special handling for execution from arm9, since we spend so much time in there //special handling for execution from arm9, since we spend so much time in there
if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE) if(PROCNUM==ARMCPU_ARM9 && AT == MMU_AT_CODE)
@ -837,6 +867,16 @@ FORCEINLINE void _MMU_write08(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm
} }
// break points, wheee
for (int i = 0; i < memWriteBreakPoints.size(); ++i)
{
if (addr == memWriteBreakPoints[i])
{
execute = false;
i = memWriteBreakPoints.size();
}
}
if(PROCNUM==ARMCPU_ARM9) if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion) if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{ {
@ -876,6 +916,16 @@ FORCEINLINE void _MMU_write16(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm
} }
// break points, wheee
for (int i = 0; i < memWriteBreakPoints.size(); ++i)
{
if (addr == memWriteBreakPoints[i])
{
execute = false;
i = memWriteBreakPoints.size();
}
}
if(PROCNUM==ARMCPU_ARM9) if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion) if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{ {
@ -915,6 +965,16 @@ FORCEINLINE void _MMU_write32(const int PROCNUM, const MMU_ACCESS_TYPE AT, const
if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm if((addr&(~0x3FFF)) == MMU.DTCMRegion) return; //dtcm
} }
// break points, wheee
for (int i = 0; i < memWriteBreakPoints.size(); ++i)
{
if (addr == memWriteBreakPoints[i])
{
execute = false;
i = memWriteBreakPoints.size();
}
}
if(PROCNUM==ARMCPU_ARM9) if(PROCNUM==ARMCPU_ARM9)
if((addr&(~0x3FFF)) == MMU.DTCMRegion) if((addr&(~0x3FFF)) == MMU.DTCMRegion)
{ {

View File

@ -59,6 +59,7 @@
#include "wifi.h" #include "wifi.h"
#include "Database.h" #include "Database.h"
#include "frontend/modules/Disassembler.h" #include "frontend/modules/Disassembler.h"
#include "display.h"
#ifdef GDB_STUB #ifdef GDB_STUB
#include "gdbstub.h" #include "gdbstub.h"
@ -91,6 +92,9 @@ GameInfo gameInfo;
NDSSystem nds; NDSSystem nds;
CFIRMWARE *extFirmwareObj = NULL; CFIRMWARE *extFirmwareObj = NULL;
std::vector<int> memReadBreakPoints;
std::vector<int> memWriteBreakPoints;
using std::min; using std::min;
using std::max; using std::max;
@ -1911,6 +1915,29 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
s32 timer = minarmtime<doarm9,doarm7>(arm9,arm7); s32 timer = minarmtime<doarm9,doarm7>(arm9,arm7);
while(timer < s32next && !sequencer.reschedule && execute) while(timer < s32next && !sequencer.reschedule && execute)
{ {
// breakpoint handling
for (int i = 0; i < NDS_ARM9.breakPoints.size(); ++i) {
if (NDS_ARM9.instruct_adr == NDS_ARM9.breakPoints[i] && !NDS_ARM9.debugStep) {
emu_paused = true;
paused = true;
execute = false;
// update debug display
//PostMessageA(DisViewWnd[0], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM9.instruct_adr);
//InvalidateRect(DisViewWnd[0], NULL, FALSE);
return std::make_pair(arm9, arm7);
}
}
for (int i = 0; i < NDS_ARM7.breakPoints.size(); ++i) {
if (NDS_ARM7.instruct_adr == NDS_ARM7.breakPoints[i] && !NDS_ARM7.debugStep) {
emu_paused = true;
paused = true;
execute = false;
// update debug display
//PostMessageA(DisViewWnd[1], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM7.instruct_adr);
//InvalidateRect(DisViewWnd[1], NULL, FALSE);
return std::make_pair(arm9, arm7);
}
}
if(doarm9 && (!doarm7 || arm9 <= timer)) if(doarm9 && (!doarm7 || arm9 <= timer))
{ {
if(!(NDS_ARM9.freeze & CPU_FREEZE_WAIT_IRQ) && !nds.freezeBus) if(!(NDS_ARM9.freeze & CPU_FREEZE_WAIT_IRQ) && !nds.freezeBus)
@ -1933,6 +1960,24 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
nds.idleCycles[0] += arm9-temp; nds.idleCycles[0] += arm9-temp;
if (gxFIFO.size < 255) nds.freezeBus &= ~1; if (gxFIFO.size < 255) nds.freezeBus &= ~1;
} }
// for proper stepping...
if (NDS_ARM9.debugStep) {
NDS_ARM9.debugStep = false;
execute = false;
//PostMessageA(DisViewWnd[0], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM9.instruct_adr);
//InvalidateRect(DisViewWnd[0], NULL, FALSE);
}
if (NDS_ARM9.stepOverBreak == NDS_ARM9.instruct_adr && NDS_ARM9.stepOverBreak != 0) {
NDS_ARM9.stepOverBreak = 0;
execute = false;
//PostMessageA(DisViewWnd[0], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM9.instruct_adr);
//InvalidateRect(DisViewWnd[0], NULL, FALSE);
}
// aaand handle step to return
if (NDS_ARM9.runToRetTmp != 0 && NDS_ARM9.runToRetTmp == NDS_ARM9.instruct_adr) {
NDS_ARM9.runToRetTmp = 0;
NDS_ARM9.runToRet = true;
}
} }
if(doarm7 && (!doarm9 || arm7 <= timer)) if(doarm7 && (!doarm9 || arm7 <= timer))
{ {
@ -1964,6 +2009,23 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
#endif #endif
} }
} }
if (NDS_ARM7.debugStep) {
NDS_ARM7.debugStep = false;
execute = false;
//PostMessageA(DisViewWnd[1], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM7.instruct_adr);
//InvalidateRect(DisViewWnd[1], NULL, FALSE);
}
if (NDS_ARM7.stepOverBreak == NDS_ARM7.instruct_adr && NDS_ARM7.stepOverBreak != 0) {
NDS_ARM7.stepOverBreak = 0;
execute = false;
//PostMessageA(DisViewWnd[1], WM_COMMAND, IDC_DISASMSEEK, NDS_ARM7.instruct_adr);
//InvalidateRect(DisViewWnd[1], NULL, FALSE);
}
// aaand handle step to return
if (NDS_ARM7.runToRetTmp != 0 && NDS_ARM7.runToRetTmp == NDS_ARM7.instruct_adr) {
NDS_ARM7.runToRetTmp = 0;
NDS_ARM7.runToRet = true;
}
} }
timer = minarmtime<doarm9,doarm7>(arm9,arm7); timer = minarmtime<doarm9,doarm7>(arm9,arm7);
@ -1984,6 +2046,7 @@ void NDS_debug_break()
void NDS_debug_continue() void NDS_debug_continue()
{ {
NDS_ARM9.stalled = NDS_ARM7.stalled = 0; NDS_ARM9.stalled = NDS_ARM7.stalled = 0;
execute = true;
} }
void NDS_debug_step() void NDS_debug_step()

View File

@ -405,6 +405,9 @@ typedef struct TSCalInfo
extern GameInfo gameInfo; extern GameInfo gameInfo;
extern std::vector<int> memReadBreakPoints;
extern std::vector<int> memWriteBreakPoints;
struct UserButtons : buttonstruct<bool> struct UserButtons : buttonstruct<bool>
{ {

View File

@ -3104,6 +3104,10 @@ TEMPLATE static u32 FASTCALL OP_BLX_REG(const u32 i)
cpu->CPSR.bits.T = BIT0(tmp); cpu->CPSR.bits.T = BIT0(tmp);
cpu->R[15] = tmp & (0xFFFFFFFC|(cpu->CPSR.bits.T<<1)); cpu->R[15] = tmp & (0xFFFFFFFC|(cpu->CPSR.bits.T<<1));
cpu->next_instruction = cpu->R[15]; cpu->next_instruction = cpu->R[15];
if (cpu->runToRet) {
cpu->runToRet = false;
cpu->runToRetTmp = cpu->next_instruction + 4;
}
return 3; return 3;
} }
@ -3145,6 +3149,10 @@ TEMPLATE static u32 FASTCALL OP_BL(const u32 i)
cpu->R[15] += (off<<2); cpu->R[15] += (off<<2);
cpu->R[15] &= (0xFFFFFFFC|(cpu->CPSR.bits.T<<1)); cpu->R[15] &= (0xFFFFFFFC|(cpu->CPSR.bits.T<<1));
cpu->next_instruction = cpu->R[15]; cpu->next_instruction = cpu->R[15];
if (cpu->runToRet) {
cpu->runToRet = false;
cpu->runToRetTmp = cpu->next_instruction + 4;
}
return 3; return 3;
} }
@ -4750,6 +4758,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIA(const u32 i)
//start += 4; //start += 4;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
return MMU_aluMemCycles<PROCNUM>(2, c); return MMU_aluMemCycles<PROCNUM>(2, c);
@ -4791,6 +4805,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB(const u32 i)
else else
registres[15] = tmp & 0xFFFFFFFC; registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
return MMU_aluMemCycles<PROCNUM>(4, c); return MMU_aluMemCycles<PROCNUM>(4, c);
} }
@ -4817,6 +4837,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDA(const u32 i)
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
start -= 4; start -= 4;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DA(14, start); OP_L_DA(14, start);
@ -4858,6 +4884,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB(const u32 i)
registres[15] = tmp & 0xFFFFFFFC; registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DB(14, start); OP_L_DB(14, start);
@ -4915,6 +4947,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIA_W(const u32 i)
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
start += 4; start += 4;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
if(i & (1 << REG_POS(i,16))) { if(i & (1 << REG_POS(i,16))) {
@ -4965,6 +5003,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB_W(const u32 i)
else else
registres[15] = tmp & 0xFFFFFFFC; registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
if(i & (1 << REG_POS(i,16))) { if(i & (1 << REG_POS(i,16))) {
@ -4998,6 +5042,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDA_W(const u32 i)
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
start -= 4; start -= 4;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DA(14, start); OP_L_DA(14, start);
@ -5047,6 +5097,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB_W(const u32 i)
registres[15] = tmp & 0xFFFFFFFC; registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DB(14, start); OP_L_DB(14, start);
@ -5125,6 +5181,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIA2(const u32 i)
//start += 4; //start += 4;
cpu->next_instruction = cpu->R[15]; cpu->next_instruction = cpu->R[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
return MMU_aluMemCycles<PROCNUM>(2, c); return MMU_aluMemCycles<PROCNUM>(2, c);
} }
@ -5180,6 +5242,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB2(const u32 i)
cpu->changeCPSR(); cpu->changeCPSR();
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
return MMU_aluMemCycles<PROCNUM>(2, c); return MMU_aluMemCycles<PROCNUM>(2, c);
} }
@ -5212,6 +5280,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDA2(const u32 i)
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
start -= 4; start -= 4;
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DA(14, start); OP_L_DA(14, start);
@ -5270,6 +5344,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB2(const u32 i)
cpu->changeCPSR(); cpu->changeCPSR();
cpu->next_instruction = registres[15]; cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start); c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
} }
OP_L_DB(14, start); OP_L_DB(14, start);

View File

@ -327,6 +327,13 @@ struct armcpu_t
/** the ctrl interface */ /** the ctrl interface */
armcpu_ctrl_iface ctrl_iface; armcpu_ctrl_iface ctrl_iface;
// debugging stuff
int runToRetTmp;
bool runToRet;
int stepOverBreak;
std::vector<int> breakPoints;
bool debugStep;
}; };
int armcpu_new( armcpu_t *armcpu, u32 id); int armcpu_new( armcpu_t *armcpu, u32 id);

View File

@ -37,8 +37,9 @@ typedef struct
BOOL autoup; BOOL autoup;
u32 autoup_secs; u32 autoup_secs;
u32 curr_ligne; u32 curr_ligne;
armcpu_t *cpu; armcpu_t* cpu;
u16 mode; u16 mode;
s32 break_pos;
} disview_struct; } disview_struct;
disview_struct *DisView7 = NULL; disview_struct *DisView7 = NULL;
@ -47,7 +48,7 @@ disview_struct *DisView9 = NULL;
extern TOOLSCLASS *ViewDisasm_ARM7; extern TOOLSCLASS *ViewDisasm_ARM7;
extern TOOLSCLASS *ViewDisasm_ARM9; extern TOOLSCLASS *ViewDisasm_ARM9;
static HWND DisViewWnd[2] = {NULL, NULL}; HWND DisViewWnd[2] = {NULL, NULL};
#define INDEX(i) ((((i)>>16)&0xFF0)|(((i)>>4)&0xF)) #define INDEX(i) ((((i)>>16)&0xFF0)|(((i)>>4)&0xF))
@ -90,12 +91,23 @@ LRESULT DisViewBox_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPARAM
u32 i; u32 i;
u32 adr; u32 adr;
if (win->autoup||win->autogo) //if (win->autoup||win->autogo)
win->curr_ligne = (win->cpu->instruct_adr >> 2); // win->curr_ligne = (win->cpu->instruct_adr >> 2);
adr = win->curr_ligne*4; adr = win->curr_ligne*4;
SetTextColor(mem_dc, RGB(0, 0, 0));
for(i = 0; i < nbligne; ++i) for(i = 0; i < nbligne; ++i)
{ {
SetBkColor(mem_dc, RGB(255, 255, 255));
for (int j = 0; j < win->cpu->breakPoints.size(); ++j) {
if (adr == win->cpu->breakPoints[j]) {
SetBkColor(mem_dc, RGB(255, 0, 0));
}
}
if (adr == win->cpu->instruct_adr) {
SetBkColor(mem_dc, RGB(0, 255, 0));
}
u32 ins = _MMU_read32(win->cpu->proc_ID, MMU_AT_DEBUG, adr); u32 ins = _MMU_read32(win->cpu->proc_ID, MMU_AT_DEBUG, adr);
des_arm_instructions_set[INDEX(ins)](adr, ins, txt); des_arm_instructions_set[INDEX(ins)](adr, ins, txt);
sprintf(text, "%04X:%04X %08X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt); sprintf(text, "%04X:%04X %08X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt);
@ -130,6 +142,15 @@ LRESULT DisViewBox_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPARAM
for(i = 0; i < nbligne; ++i) for(i = 0; i < nbligne; ++i)
{ {
SetBkColor(mem_dc, RGB(255, 255, 255));
for (int j = 0; j < win->cpu->breakPoints.size(); ++j) {
if (adr == win->cpu->breakPoints[j]) {
SetBkColor(mem_dc, RGB(255, 0, 0));
}
}
if (adr == win->cpu->instruct_adr) {
SetBkColor(mem_dc, RGB(0, 255, 0));
}
u32 ins = _MMU_read16(win->cpu->proc_ID, MMU_AT_DEBUG, adr); u32 ins = _MMU_read16(win->cpu->proc_ID, MMU_AT_DEBUG, adr);
des_thumb_instructions_set[ins>>6](adr, ins, txt); des_thumb_instructions_set[ins>>6](adr, ins, txt);
sprintf(text, "%04X:%04X %04X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt); sprintf(text, "%04X:%04X %04X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt);
@ -174,47 +195,50 @@ LRESULT DisViewDialog_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPA
for(i = 0; i < 16; ++i) for(i = 0; i < 16; ++i)
{ {
sprintf(text, "%08X", (int)win->cpu->R[i]); sprintf(text, "%08X", (int)win->cpu->R[i]);
SetWindowText(GetDlgItem(hwnd, IDC_R0+i), text); //SetWindowText(GetDlgItem(hwnd, IDC_R0+i), text);
SetDlgItemText(hwnd, IDC_R0 + i, text);
} }
#define OFF 16 #define OFF 16
#define CPSROFF 288
SetBkMode(hdc, TRANSPARENT); SetBkMode(hdc, TRANSPARENT);
if(win->cpu->CPSR.bits.N) if(win->cpu->CPSR.bits.N)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 452+OFF, 238, "N", 1); TextOut(hdc, 452+OFF, CPSROFF, "N", 1);
if(win->cpu->CPSR.bits.Z) if(win->cpu->CPSR.bits.Z)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 464+OFF, 238, "Z", 1); TextOut(hdc, 464+OFF, CPSROFF, "Z", 1);
if(win->cpu->CPSR.bits.C) if(win->cpu->CPSR.bits.C)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 475+OFF, 238, "C", 1); TextOut(hdc, 475+OFF, CPSROFF, "C", 1);
if(win->cpu->CPSR.bits.V) if(win->cpu->CPSR.bits.V)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 486+OFF, 238, "V", 1); TextOut(hdc, 486+OFF, CPSROFF, "V", 1);
if(win->cpu->CPSR.bits.Q) if(win->cpu->CPSR.bits.Q)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 497+OFF, 238, "Q", 1); TextOut(hdc, 497+OFF, CPSROFF, "Q", 1);
if(!win->cpu->CPSR.bits.I) if(!win->cpu->CPSR.bits.I)
SetTextColor(hdc, RGB(255,0,0)); SetTextColor(hdc, RGB(255,0,0));
else else
SetTextColor(hdc, RGB(70, 70, 70)); SetTextColor(hdc, RGB(70, 70, 70));
TextOut(hdc, 508+OFF, 238, "I", 1); TextOut(hdc, 508+OFF, CPSROFF, "I", 1);
sprintf(text, "%02X", (int)win->cpu->CPSR.bits.mode); sprintf(text, "%02X", (int)win->cpu->CPSR.bits.mode);
SetWindowText(GetDlgItem(hwnd, IDC_MODE), text); SetWindowText(GetDlgItem(hwnd, IDC_MODE), text);
@ -222,6 +246,21 @@ LRESULT DisViewDialog_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPA
sprintf(text, "%08X", MMU.timer[0][0]);//win->cpu->SPSR); sprintf(text, "%08X", MMU.timer[0][0]);//win->cpu->SPSR);
SetWindowText(GetDlgItem(hwnd, IDC_TMP), text); SetWindowText(GetDlgItem(hwnd, IDC_TMP), text);
// weehee break points drawing
for (int i = 0; i < 8; ++i) {
int j = i + win->break_pos;
if (j < win->cpu->breakPoints.size()) {
sprintf(text, "%08X", win->cpu->breakPoints[j]);
}
else {
sprintf(text, "%08X", 0);
}
SetWindowText(GetDlgItem(hwnd, IDC_BP0 + i), text);
}
sprintf(text, "%02i", win->break_pos);
SetWindowText(GetDlgItem(hwnd, IDC_BPCOUNT), text);
EndPaint(hwnd, &ps); EndPaint(hwnd, &ps);
return 1; return 1;
} }
@ -308,7 +347,7 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
UDM_SETRANGE, 0, MAKELONG(99, 1)); UDM_SETRANGE, 0, MAKELONG(99, 1));
SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN),
UDM_SETPOS32, 0, DisView7->autoup_secs); UDM_SETPOS32, 0, DisView7->autoup_secs);
DisViewWnd[1] = NULL; DisViewWnd[1] = hwnd;
return 1; return 1;
} }
case WM_CLOSE : case WM_CLOSE :
@ -332,6 +371,13 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case WM_TIMER: case WM_TIMER:
SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0); SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0);
return 1; return 1;
case WM_MOUSEWHEEL: {
int tmp = (*((int*)&wParam));
short tmp2 = (*(((short*)&tmp) + 1));
DisView7->curr_ligne += -tmp2 / WHEEL_DELTA;
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case WM_COMMAND : case WM_COMMAND :
switch (LOWORD (wParam)) switch (LOWORD (wParam))
{ {
@ -385,6 +431,7 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case IDC_STEP: case IDC_STEP:
{ {
NDS_debug_step(); NDS_debug_step();
NDS_ARM7.debugStep = true;
} }
return 1; return 1;
@ -464,6 +511,85 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE), TRUE);
} }
return 1; return 1;
case IDC_DISASMSEEK:
{
DisView7->curr_ligne = lParam / 4;
return 1;
}
case IDC_BPUP:
{
DisView7->break_pos = max<s32>(0, DisView7->break_pos - 1);
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_BPDOWN:
{
DisView7->break_pos += 1;
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_BREAKPOINT: {
char tmp[16];
int lg = GetDlgItemText(hwnd, IDC_BPDEST, tmp, 16);
u32 adr = 0;
for (int 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;
}
}
NDS_ARM7.breakPoints.push_back(adr);
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_DELBP: {
if (DisView7->break_pos < NDS_ARM7.breakPoints.size()) {
NDS_ARM7.breakPoints.erase(NDS_ARM7.breakPoints.begin() + DisView7->break_pos);
}
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_REGUPDATE: {
for (int i = 0; i < 15; ++i) {
char tmp[16];
int lg = GetDlgItemText(hwnd, IDC_R0 + i, tmp, 16);
u32 adr = 0;
for (int 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;
}
}
NDS_ARM7.R[i] = adr;
}
return 1;
}
case IDC_RUNRET: {
NDS_ARM7.runToRet = true;
execute = true;
return 1;
}
case IDC_STEPOVER: {
NDS_ARM7.stepOverBreak = NDS_ARM7.instruct_adr + 4;
execute = true;
paused = false;
}
return 1;
return 1; return 1;
} }
return 0; return 0;
@ -554,7 +680,7 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
UDM_SETRANGE, 0, MAKELONG(99, 1)); UDM_SETRANGE, 0, MAKELONG(99, 1));
SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN), SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN),
UDM_SETPOS32, 0, DisView9->autoup_secs); UDM_SETPOS32, 0, DisView9->autoup_secs);
DisViewWnd[0] = NULL; DisViewWnd[0] = hwnd;
return 1; return 1;
} }
case WM_CLOSE : case WM_CLOSE :
@ -578,6 +704,13 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case WM_TIMER: case WM_TIMER:
SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0); SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0);
return 1; return 1;
case WM_MOUSEWHEEL: {
int tmp = (*((int*)&wParam));
short tmp2 = (*(((short*)&tmp) + 1));
DisView9->curr_ligne += -tmp2 / WHEEL_DELTA;
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case WM_COMMAND : case WM_COMMAND :
switch (LOWORD (wParam)) switch (LOWORD (wParam))
{ {
@ -631,6 +764,8 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case IDC_STEP: case IDC_STEP:
{ {
NDS_debug_step(); NDS_debug_step();
DisView9->curr_ligne += 1;
NDS_ARM9.debugStep = true;
} }
return 1; return 1;
case IDC_CONTINUE: case IDC_CONTINUE:
@ -709,6 +844,84 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE), TRUE);
} }
return 1; return 1;
case IDC_DISASMSEEK:
{
DisView9->curr_ligne = lParam / 4;
return 1;
}
case IDC_BPUP:
{
DisView9->break_pos = max<s32>(0, DisView9->break_pos - 1);
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_BPDOWN:
{
DisView9->break_pos += 1;
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_BREAKPOINT: {
char tmp[16];
int lg = GetDlgItemText(hwnd, IDC_BPDEST, tmp, 16);
u32 adr = 0;
for (int 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;
}
}
NDS_ARM9.breakPoints.push_back(adr);
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_DELBP: {
if (DisView9->break_pos < NDS_ARM9.breakPoints.size()) {
NDS_ARM9.breakPoints.erase(NDS_ARM9.breakPoints.begin() + DisView9->break_pos);
}
InvalidateRect(hwnd, NULL, FALSE);
return 1;
}
case IDC_REGUPDATE: {
for (int i = 0; i < 15; ++i) {
char tmp[16];
int lg = GetDlgItemText(hwnd, IDC_R0 + i, tmp, 16);
u32 adr = 0;
for (int 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;
}
}
NDS_ARM9.R[i] = adr;
}
return 1;
}
case IDC_RUNRET: {
NDS_ARM9.runToRet = true;
execute = true;
return 1;
}
case IDC_STEPOVER: {
NDS_ARM9.stepOverBreak = NDS_ARM9.instruct_adr + 4;
execute = true;
paused = false;
}
return 1; return 1;
} }
return 0; return 0;

View File

@ -21,6 +21,8 @@
#define DISVIEW_H #define DISVIEW_H
#include <windows.h> #include <windows.h>
#include <stdio.h>
#include <types.h>
extern BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); extern BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
extern LRESULT CALLBACK ViewDisasm_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK ViewDisasm_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
@ -28,6 +30,8 @@ extern LRESULT CALLBACK ViewDisasm_ARM7BoxProc(HWND hwnd, UINT msg, WPARAM wPara
extern BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); extern BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
extern LRESULT CALLBACK ViewDisasm_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK ViewDisasm_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
extern HWND DisViewWnd[2];
template<int proc> void FORCEINLINE DisassemblerTools_Refresh(); template<int proc> void FORCEINLINE DisassemblerTools_Refresh();
#endif #endif

View File

@ -1214,17 +1214,27 @@ void CheckMessages()
while( PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ) ) while( PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ) )
{ {
if( GetMessage( &msg, 0, 0, 0)>0 ) if (GetMessage(&msg, 0, 0, 0) > 0)
{ {
if (RamWatchHWnd && IsDialogMessage(RamWatchHWnd, &msg)) if (RamWatchHWnd && IsDialogMessage(RamWatchHWnd, &msg))
{ {
if(msg.message == WM_KEYDOWN) // send keydown messages to the dialog (for accelerators, and also needed for the Alt key to work) if (msg.message == WM_KEYDOWN) // send keydown messages to the dialog (for accelerators, and also needed for the Alt key to work)
SendMessage(RamWatchHWnd, msg.message, msg.wParam, msg.lParam); SendMessage(RamWatchHWnd, msg.message, msg.wParam, msg.lParam);
continue; continue;
} }
if (SoundView_GetHWnd() && IsDialogMessage(SoundView_GetHWnd(), &msg)) if (SoundView_GetHWnd() && IsDialogMessage(SoundView_GetHWnd(), &msg))
continue; continue;
if (DisViewWnd[0] && msg.message == WM_MOUSEWHEEL && IsDialogMessage(DisViewWnd[0], &msg))
{
SendMessage(DisViewWnd[0], msg.message, msg.wParam, msg.lParam);
}
if (DisViewWnd[1] && msg.message == WM_MOUSEWHEEL && IsDialogMessage(DisViewWnd[1], &msg))
{
SendMessage(DisViewWnd[1], msg.message, msg.wParam, msg.lParam);
}
if(!TranslateAccelerator(hwnd,hAccel,&msg)) if(!TranslateAccelerator(hwnd,hAccel,&msg))
{ {
TranslateMessage(&msg); TranslateMessage(&msg);

View File

@ -37,6 +37,9 @@ using namespace std;
typedef u32 HWAddressType; typedef u32 HWAddressType;
int RBPOffs;
int WBPOffs;
struct MemViewRegion struct MemViewRegion
{ {
char name[16]; // name of this region (ex. ARM9, region dropdown) char name[16]; // name of this region (ex. ARM9, region dropdown)
@ -249,6 +252,44 @@ INT_PTR CALLBACK EditAddrProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
return CallWindowProc((WNDPROC)oldEditAddrProc, hWnd, msg, wParam, lParam); return CallWindowProc((WNDPROC)oldEditAddrProc, hWnd, msg, wParam, lParam);
} }
void MemView_Paint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lParam) {
PAINTSTRUCT ps;
BeginPaint(hCtl, &ps);
// update text...
char str[16];
for (int i = 0; i < 8; ++i) {
int j = i + RBPOffs;
if (j < memReadBreakPoints.size()) {
sprintf(str, "%08X", memReadBreakPoints[j]);
}
else {
sprintf(str, "%08X", 0);
}
SetWindowText(GetDlgItem(hCtl, IDC_MRBP0 + i), str);
}
for (int i = 0; i < 8; ++i) {
int j = i + WBPOffs;
if (j < memWriteBreakPoints.size()) {
sprintf(str, "%08X", memWriteBreakPoints[j]);
}
else {
sprintf(str, "%08X", 0);
}
SetWindowText(GetDlgItem(hCtl, IDC_MWBP0 + i), str);
}
sprintf(str, "%02i", RBPOffs);
SetWindowText(GetDlgItem(hCtl, IDC_MEMRBPOFFS), str);
sprintf(str, "%02i", WBPOffs);
SetWindowText(GetDlgItem(hCtl, IDC_MEMWBPOFFS), str);
EndPaint(hCtl, &ps);
}
INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
CMemView* wnd = (CMemView*)GetWindowLongPtr(hDlg, DWLP_USER); CMemView* wnd = (CMemView*)GetWindowLongPtr(hDlg, DWLP_USER);
@ -325,6 +366,10 @@ INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
} }
return 1; return 1;
case WM_PAINT:
MemView_Paint(wnd, hDlg, wParam, lParam);
return 1;
case WM_DESTROY: case WM_DESTROY:
{ {
u16 num = ComboBox_GetCount(gAddress); u16 num = ComboBox_GetCount(gAddress);
@ -630,6 +675,73 @@ INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
wnd->Refresh(); wnd->Refresh();
wnd->SetFocus(); wnd->SetFocus();
return 1; return 1;
case IDC_READBP:
{
char str[16];
GetDlgItemText(hDlg, IDC_MEMBPTARG, str, 16);
memReadBreakPoints.push_back(strtol(str, NULL, 16));
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_WRITEBP:
{
char str[16];
GetDlgItemText(hDlg, IDC_MEMBPTARG, str, 16);
memWriteBreakPoints.push_back(strtol(str, NULL, 16));
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_DELREADBP: {
if (RBPOffs < memReadBreakPoints.size()) {
memReadBreakPoints.erase(memReadBreakPoints.begin() + RBPOffs);
}
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_DELWRITEBP: {
if (WBPOffs < memWriteBreakPoints.size()) {
memWriteBreakPoints.erase(memWriteBreakPoints.begin() + WBPOffs);
}
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_MEMRBPUP: {
RBPOffs = max(0, RBPOffs - 1);
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_MEMRBPDOWN: {
RBPOffs += 1;
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_MEMWBPUP: {
WBPOffs = max(0, WBPOffs - 1);
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
case IDC_MEMWBPDOWN: {
WBPOffs += 1;
wnd->Refresh();
wnd->SetFocus();
InvalidateRect(hDlg, NULL, FALSE);
return 1;
}
} }
return 0; return 0;
} }
@ -727,6 +839,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else else
{ {
SetBkColor(mem_hdc, RGB(255, 255, 255)); SetBkColor(mem_hdc, RGB(255, 255, 255));
for (int j = 0; j < memReadBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memReadBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
for (int j = 0; j < memWriteBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memWriteBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
SetTextColor(mem_hdc, RGB(0, 0, 0)); SetTextColor(mem_hdc, RGB(0, 0, 0));
sprintf(text, "%02X", val); sprintf(text, "%02X", val);
@ -770,6 +892,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else else
{ {
SetBkColor(mem_hdc, RGB(255, 255, 255)); SetBkColor(mem_hdc, RGB(255, 255, 255));
for (int j = 0; j < memReadBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memReadBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
for (int j = 0; j < memWriteBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memWriteBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
SetTextColor(mem_hdc, RGB(0, 0, 0)); SetTextColor(mem_hdc, RGB(0, 0, 0));
sprintf(text, "%04X", val); sprintf(text, "%04X", val);
@ -823,6 +955,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else else
{ {
SetBkColor(mem_hdc, RGB(255, 255, 255)); SetBkColor(mem_hdc, RGB(255, 255, 255));
for (int j = 0; j < memReadBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memReadBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
for (int j = 0; j < memWriteBreakPoints.size(); ++j) {
if ((line << 4) + i + wnd->address == memWriteBreakPoints[j]) {
SetBkColor(mem_hdc, RGB(255, 0, 0));
}
}
SetTextColor(mem_hdc, RGB(0, 0, 0)); SetTextColor(mem_hdc, RGB(0, 0, 0));
sprintf(text, "%08X", val); sprintf(text, "%08X", val);

View File

@ -91,6 +91,22 @@
#define IDC_COMBO2 161 #define IDC_COMBO2 161
#define IDC_COMBO3 162 #define IDC_COMBO3 162
#define IDC_COMBO4 163 #define IDC_COMBO4 163
#define IDC_DISASMSEEK 164
#define IDC_BREAKPOINT 165
#define IDC_BPDEST 166
#define IDC_BP0 167
#define IDC_BP1 168
#define IDC_BP2 169
#define IDC_BP3 170
#define IDC_BP4 171
#define IDC_BP5 172
#define IDC_BP6 173
#define IDC_BP7 174
#define IDC_BPUP 175
#define IDC_BPDOWN 176
#define IDC_DELBP 177
#define IDC_BPCOUNT 178
#define IDC_REGUPDATE 179
#define IDM_CONFIG 180 #define IDM_CONFIG 180
#define IDC_FRAMESKIP0 191 #define IDC_FRAMESKIP0 191
#define IDC_FRAMESKIP1 192 #define IDC_FRAMESKIP1 192
@ -109,6 +125,35 @@
#define IDM_MGPU 219 #define IDM_MGPU 219
#define IDM_SGPU 220 #define IDM_SGPU 220
#define IDC_FRAMESKIPAUTO 221 #define IDC_FRAMESKIPAUTO 221
#define IDC_RUNRET 230
#define IDC_STEPOVER 231
#define IDC_MEMBPTARG 232
#define IDC_READBP 233
#define IDC_WRITEBP 234
#define IDC_DELREADBP 235
#define IDC_DELWRITEBP 236
#define IDC_MRBP0 237
#define IDC_MRBP1 238
#define IDC_MRBP2 239
#define IDC_MRBP3 240
#define IDC_MRBP4 241
#define IDC_MRBP5 242
#define IDC_MRBP6 243
#define IDC_MRBP7 244
#define IDC_MWBP0 245
#define IDC_MWBP1 246
#define IDC_MWBP2 247
#define IDC_MWBP3 248
#define IDC_MWBP4 249
#define IDC_MWBP5 250
#define IDC_MWBP6 251
#define IDC_MWBP7 252
#define IDC_MEMRBPUP 253
#define IDC_MEMRBPDOWN 254
#define IDC_MEMRBPOFFS 255
#define IDC_MEMWBPUP 256
#define IDC_MEMWBPDOWN 257
#define IDC_MEMWBPOFFS 258
#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

View File

@ -311,7 +311,7 @@ BEGIN
DEFPUSHBUTTON "Add",IDC_BADD,120,190,50,14 DEFPUSHBUTTON "Add",IDC_BADD,120,190,50,14
END END
IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186 IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 470, 206
STYLE DS_SETFONT | DS_CENTER | WS_CAPTION STYLE DS_SETFONT | DS_CENTER | WS_CAPTION
CAPTION "Disassembler" CAPTION "Disassembler"
FONT 8, "MS Sans Serif", 0, 0, 0x1 FONT 8, "MS Sans Serif", 0, 0, 0x1
@ -325,43 +325,43 @@ BEGIN
CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14
CONTROL "Edit",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150 CONTROL "Edit",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150
PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14 PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14
LTEXT "R0 :",IDC_STATIC,304,16,17,8 LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8
LTEXT "R1 :",IDC_STATIC,304,24,17,8 LTEXT "R1 :", IDC_STATIC, 304, 26, 17, 8
LTEXT "R2 :",IDC_STATIC,304,32,17,8 LTEXT "R2 :", IDC_STATIC, 304, 36, 17, 8
LTEXT "R3 :",IDC_STATIC,304,40,17,8 LTEXT "R3 :", IDC_STATIC, 304, 46, 17, 8
LTEXT "R4 :",IDC_STATIC,304,48,17,8 LTEXT "R4 :", IDC_STATIC, 304, 56, 17, 8
LTEXT "R5 :",IDC_STATIC,304,56,17,8 LTEXT "R5 :", IDC_STATIC, 304, 66, 17, 8
LTEXT "R6 :",IDC_STATIC,304,64,17,8 LTEXT "R6 :", IDC_STATIC, 304, 76, 17, 8
LTEXT "R7 :",IDC_STATIC,304,72,17,8 LTEXT "R7 :", IDC_STATIC, 304, 86, 17, 8
LTEXT "R8 :",IDC_STATIC,304,80,17,8 LTEXT "R8 :", IDC_STATIC, 304, 96, 17, 8
LTEXT "R9 :",IDC_STATIC,304,88,17,8 LTEXT "R9 :", IDC_STATIC, 304, 106, 17, 8
LTEXT "R10 :",IDC_STATIC,304,96,17,8 LTEXT "R10 :", IDC_STATIC, 304, 116, 17, 8
LTEXT "R11 :",IDC_STATIC,304,104,17,8 LTEXT "R11 :", IDC_STATIC, 304, 126, 17, 8
LTEXT "R12 :",IDC_STATIC,304,112,17,8 LTEXT "R12 :", IDC_STATIC, 304, 136, 17, 8
LTEXT "SP :",IDC_STATIC,304,120,17,8 LTEXT "SP :", IDC_STATIC, 304, 146, 17, 8
LTEXT "LR :",IDC_STATIC,304,128,17,8 LTEXT "LR :", IDC_STATIC, 304, 156, 17, 8
LTEXT "PC :",IDC_STATIC,304,136,17,8 LTEXT "PC :", IDC_STATIC, 304, 166, 17, 8
LTEXT "Mode :",IDC_STATIC,304,158,22,8 LTEXT "Mode :", IDC_STATIC, 304, 188, 22, 8
LTEXT "SPSR :",IDC_STATIC,304,168,22,8 LTEXT "SPSR :", IDC_STATIC, 304, 198, 22, 8
LTEXT "00000000",IDC_R0,325,16,40,8 EDITTEXT IDC_R0, 325, 16, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R1,325,24,40,8 EDITTEXT IDC_R1, 325, 26, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R2,325,32,40,8 EDITTEXT IDC_R2, 325, 36, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R3,325,40,40,8 EDITTEXT IDC_R3, 325, 46, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R4,325,48,40,8 EDITTEXT IDC_R4, 325, 56, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R5,325,56,40,8 EDITTEXT IDC_R5, 325, 66, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R6,325,64,40,8 EDITTEXT IDC_R6, 325, 76, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R7,325,72,40,8 EDITTEXT IDC_R7, 325, 86, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R8,325,80,40,8 EDITTEXT IDC_R8, 325, 96, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R9,325,88,40,8 EDITTEXT IDC_R9, 325, 106, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R10,325,96,40,8 EDITTEXT IDC_R10, 325, 116, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R11,325,104,40,8 EDITTEXT IDC_R11, 325, 126, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R12,325,112,40,8 EDITTEXT IDC_R12, 325, 136, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R13,325,120,40,8 EDITTEXT IDC_R13, 325, 146, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R14,325,128,40,8 EDITTEXT IDC_R14, 325, 156, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R15,325,136,40,8 EDITTEXT IDC_R15, 325, 166, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "",IDC_MODE,327,158,28,8 LTEXT "", IDC_MODE, 327, 188, 28, 8
LTEXT "",IDC_TMP,327,168,40,8 LTEXT "", IDC_TMP, 327, 198, 40, 8
EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,12,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14
LTEXT "frames",IDC_STATIC,364,5,16,8 LTEXT "frames",IDC_STATIC,364,5,16,8
PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON
@ -369,9 +369,26 @@ BEGIN
PUSHBUTTON "&Step",IDC_STEP,41,170,24,14 PUSHBUTTON "&Step",IDC_STEP,41,170,24,14
CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10 CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10
PUSHBUTTON "&Cont",IDC_CONTINUE,67,170,24,14 PUSHBUTTON "&Cont",IDC_CONTINUE,67,170,24,14
LTEXT "00000000", IDC_BP0, 390, 32, 50, 14
LTEXT "00000000", IDC_BP1, 390, 42, 50, 14
LTEXT "00000000", IDC_BP2, 390, 52, 50, 14
LTEXT "00000000", IDC_BP3, 390, 62, 50, 14
LTEXT "00000000", IDC_BP4, 390, 72, 50, 14
LTEXT "00000000", IDC_BP5, 390, 82, 50, 14
LTEXT "00000000", IDC_BP6, 390, 92, 50, 14
LTEXT "00000000", IDC_BP7, 390, 102, 50, 14
PUSHBUTTON "&^", IDC_BPUP, 430, 32, 16, 14
PUSHBUTTON "&v", IDC_BPDOWN, 430, 48, 16, 14
LTEXT "00", IDC_BPCOUNT, 430, 64, 32, 14
PUSHBUTTON "&Delete Breakpoint", IDC_DELBP, 390, 112, 76, 14
PUSHBUTTON "&Update Registers", IDC_REGUPDATE, 390, 128, 76, 14
PUSHBUTTON "&Run To Return", IDC_RUNRET, 390, 144, 76, 14
PUSHBUTTON "&Step Over", IDC_STEPOVER, 390, 160, 76, 14
PUSHBUTTON "&Add Breakpoint", IDC_BREAKPOINT, 390, 0, 76, 14
EDITTEXT IDC_BPDEST, 390, 16, 76, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
END END
IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186 IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 470, 206
STYLE DS_SETFONT | DS_CENTER | WS_CAPTION STYLE DS_SETFONT | DS_CENTER | WS_CAPTION
CAPTION "Disassembler" CAPTION "Disassembler"
FONT 8, "MS Sans Serif", 0, 0, 0x1 FONT 8, "MS Sans Serif", 0, 0, 0x1
@ -385,45 +402,62 @@ BEGIN
CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14 CONTROL "&Auto-update",IDC_AUTO_UPDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,285,1,54,14
CONTROL "Edit",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150 CONTROL "Edit",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150
PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14 PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14
PUSHBUTTON "&Add Breakpoint",IDC_BREAKPOINT,390,0,76,14
EDITTEXT IDC_BPDEST,390,16,76,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP EDITTEXT IDC_SETPNUM,5,170,34,14,ES_UPPERCASE | ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP
LTEXT "00000000",IDC_BP0,390,32,50,14
LTEXT "00000000",IDC_BP1,390,42,50,14
LTEXT "00000000",IDC_BP2,390,52,50,14
LTEXT "00000000",IDC_BP3,390,62,50,14
LTEXT "00000000",IDC_BP4,390,72,50,14
LTEXT "00000000",IDC_BP5,390,82,50,14
LTEXT "00000000",IDC_BP6,390,92,50,14
LTEXT "00000000",IDC_BP7,390,102,50,14
PUSHBUTTON "&^",IDC_BPUP,430,32,16,14
PUSHBUTTON "&v",IDC_BPDOWN,430,48,16,14
LTEXT "00",IDC_BPCOUNT,430,64,32,14
PUSHBUTTON "&Delete Breakpoint",IDC_DELBP,390,112,76,14
PUSHBUTTON "&Update Registers",IDC_REGUPDATE,390,128,76,14
PUSHBUTTON "&Run To Return",IDC_RUNRET,390,144,76,14
PUSHBUTTON "&Step Over",IDC_STEPOVER,390,160,76,14
PUSHBUTTON "&Step",IDC_STEP,41,170,24,14 PUSHBUTTON "&Step",IDC_STEP,41,170,24,14
LTEXT "R0 :",IDC_STATIC,304,16,17,8 LTEXT "R0 :",IDC_STATIC,304,16,17,8
LTEXT "R1 :",IDC_STATIC,304,24,17,8 LTEXT "R1 :",IDC_STATIC,304,26,17,8
LTEXT "R2 :",IDC_STATIC,304,32,17,8 LTEXT "R2 :",IDC_STATIC,304,36,17,8
LTEXT "R3 :",IDC_STATIC,304,40,17,8 LTEXT "R3 :",IDC_STATIC,304,46,17,8
LTEXT "R4 :",IDC_STATIC,304,48,17,8 LTEXT "R4 :",IDC_STATIC,304,56,17,8
LTEXT "R5 :",IDC_STATIC,304,56,17,8 LTEXT "R5 :",IDC_STATIC,304,66,17,8
LTEXT "R6 :",IDC_STATIC,304,64,17,8 LTEXT "R6 :",IDC_STATIC,304,76,17,8
LTEXT "R7 :",IDC_STATIC,304,72,17,8 LTEXT "R7 :",IDC_STATIC,304,86,17,8
LTEXT "R8 :",IDC_STATIC,304,80,17,8 LTEXT "R8 :",IDC_STATIC,304,96,17,8
LTEXT "R9 :",IDC_STATIC,304,88,17,8 LTEXT "R9 :",IDC_STATIC,304,106,17,8
LTEXT "R10 :",IDC_STATIC,304,96,17,8 LTEXT "R10 :",IDC_STATIC,304,116,17,8
LTEXT "R11 :",IDC_STATIC,304,104,17,8 LTEXT "R11 :",IDC_STATIC,304,126,17,8
LTEXT "R12 :",IDC_STATIC,304,112,17,8 LTEXT "R12 :",IDC_STATIC,304,136,17,8
LTEXT "SP :",IDC_STATIC,304,120,17,8 LTEXT "SP :",IDC_STATIC,304,146,17,8
LTEXT "LR :",IDC_STATIC,304,128,17,8 LTEXT "LR :",IDC_STATIC,304,156,17,8
LTEXT "PC :",IDC_STATIC,304,136,17,8 LTEXT "PC :",IDC_STATIC,304,166,17,8
LTEXT "Mode :",IDC_STATIC,304,158,22,8 LTEXT "Mode :",IDC_STATIC,304,188,22,8
LTEXT "SPSR :",IDC_STATIC,304,168,22,8 LTEXT "SPSR :",IDC_STATIC,304,198,22,8
LTEXT "00000000",IDC_R0,325,16,40,8 EDITTEXT IDC_R0, 325, 16, 40, 10,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R1,325,24,40,8 EDITTEXT IDC_R1, 325, 26, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R2,325,32,40,8 EDITTEXT IDC_R2, 325, 36, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R3,325,40,40,8 EDITTEXT IDC_R3, 325, 46, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R4,325,48,40,8 EDITTEXT IDC_R4, 325, 56, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R5,325,56,40,8 EDITTEXT IDC_R5, 325, 66, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R6,325,64,40,8 EDITTEXT IDC_R6, 325, 76, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R7,325,72,40,8 EDITTEXT IDC_R7, 325, 86, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R8,325,80,40,8 EDITTEXT IDC_R8, 325, 96, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R9,325,88,40,8 EDITTEXT IDC_R9, 325, 106, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R10,325,96,40,8 EDITTEXT IDC_R10, 325, 116, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R11,325,104,40,8 EDITTEXT IDC_R11, 325, 126, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R12,325,112,40,8 EDITTEXT IDC_R12, 325, 136, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R13,325,120,40,8 EDITTEXT IDC_R13, 325, 146, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R14,325,128,40,8 EDITTEXT IDC_R14, 325, 156, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "00000000",IDC_R15,325,136,40,8 EDITTEXT IDC_R15, 325, 166, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "",IDC_MODE,327,158,28,8 LTEXT "",IDC_MODE,327,188,28,8
LTEXT "",IDC_TMP,327,168,40,8 LTEXT "",IDC_TMP,327,198,40,8
EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,12,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14 CONTROL "",IDC_AUTO_UPDATE_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_DISABLED,352,2,11,14
LTEXT "frames",IDC_STATIC,364,5,16,8 LTEXT "frames",IDC_STATIC,364,5,16,8
PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON
@ -808,7 +842,7 @@ BEGIN
LTEXT "frames",IDC_STATIC,92,158,16,8 LTEXT "frames",IDC_STATIC,92,158,16,8
END END
IDD_MEM_VIEW DIALOGEX 0, 0, 444, 239 IDD_MEM_VIEW DIALOGEX 0, 0, 614, 239
STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Memory Viewer" CAPTION "Memory Viewer"
FONT 8, "MS Sans Serif", 0, 0, 0x0 FONT 8, "MS Sans Serif", 0, 0, 0x0
@ -832,6 +866,33 @@ BEGIN
LTEXT "",IDC_2012,163,223,73,8 LTEXT "",IDC_2012,163,223,73,8
EDITTEXT IDC_CURRENT_ADDR,41,223,43,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_CURRENT_ADDR,41,223,43,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Address:",IDC_STATIC,8,222,28,13 LTEXT "Address:",IDC_STATIC,8,222,28,13
EDITTEXT IDC_MEMBPTARG, 446, 6, 160, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
PUSHBUTTON "Add Read Breakpoint", IDC_READBP, 446, 22, 80, 14
PUSHBUTTON "Add Write Breakpoint", IDC_WRITEBP, 528, 22, 80, 14
PUSHBUTTON "Del Read Breakpoint", IDC_DELREADBP, 446, 166, 80, 14
PUSHBUTTON "Del Write Breakpoint", IDC_DELWRITEBP, 528, 166, 80, 14
LTEXT "00000000", IDC_MRBP0, 446, 38, 60, 14
LTEXT "00000000", IDC_MRBP1, 446, 54, 60, 14
LTEXT "00000000", IDC_MRBP2, 446, 70, 60, 14
LTEXT "00000000", IDC_MRBP3, 446, 86, 60, 14
LTEXT "00000000", IDC_MRBP4, 446, 102, 60, 14
LTEXT "00000000", IDC_MRBP5, 446, 118, 60, 14
LTEXT "00000000", IDC_MRBP6, 446, 134, 60, 14
LTEXT "00000000", IDC_MRBP7, 446, 150, 60, 14
LTEXT "00000000", IDC_MWBP0, 528, 38, 60, 14
LTEXT "00000000", IDC_MWBP1, 528, 54, 60, 14
LTEXT "00000000", IDC_MWBP2, 528, 70, 60, 14
LTEXT "00000000", IDC_MWBP3, 528, 86, 60, 14
LTEXT "00000000", IDC_MWBP4, 528, 102, 60, 14
LTEXT "00000000", IDC_MWBP5, 528, 118, 60, 14
LTEXT "00000000", IDC_MWBP6, 528, 134, 60, 14
LTEXT "00000000", IDC_MWBP7, 528, 150, 60, 14
PUSHBUTTON "^", IDC_MEMRBPUP, 480, 38, 14, 14
PUSHBUTTON "v", IDC_MEMRBPDOWN, 480, 54, 14, 14
LTEXT "00", IDC_MEMRBPOFFS, 480, 70, 14, 28
PUSHBUTTON "^", IDC_MEMWBPUP, 562, 38, 14, 14
PUSHBUTTON "v", IDC_MEMWBPDOWN, 562, 54, 14, 14
LTEXT "00", IDC_MEMWBPOFFS, 562, 70, 14, 28
END END
IDD_MICROPHONE DIALOGEX 0, 0, 241, 142 IDD_MICROPHONE DIALOGEX 0, 0, 241, 142