Added debugging tools

Breakpoints, memory breakpoints, made disassembler better in general
This commit is contained in:
Yackerw 2020-08-15 16:02:38 -04:00
parent 316103d2ec
commit 5bd5c630f1
11 changed files with 805 additions and 116 deletions

View File

@ -24,6 +24,7 @@
#include "firmware.h"
#include "mc.h"
#include "mem.h"
#include "NDSSystem.h"
#ifdef HAVE_LUA
#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);
#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((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);
#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
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
CallRegisteredLuaMemHook(addr, 4, /*FIXME*/ 0, LUAMEMHOOK_READ);
#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
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
}
// 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((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
}
// 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((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
}
// 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((addr&(~0x3FFF)) == MMU.DTCMRegion)
{

View File

@ -59,6 +59,8 @@
#include "wifi.h"
#include "Database.h"
#include "frontend/modules/Disassembler.h"
#include "frontend/windows/disView.h"
#include "display.h"
#ifdef GDB_STUB
#include "gdbstub.h"
@ -91,6 +93,9 @@ GameInfo gameInfo;
NDSSystem nds;
CFIRMWARE *extFirmwareObj = NULL;
std::vector<int> memReadBreakPoints;
std::vector<int> memWriteBreakPoints;
using std::min;
using std::max;
@ -1911,6 +1916,29 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
s32 timer = minarmtime<doarm9,doarm7>(arm9,arm7);
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(!(NDS_ARM9.freeze & CPU_FREEZE_WAIT_IRQ) && !nds.freezeBus)
@ -1933,6 +1961,24 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
nds.idleCycles[0] += arm9-temp;
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))
{
@ -1964,6 +2010,23 @@ static /*donotinline*/ std::pair<s32,s32> armInnerLoop(
#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);
@ -1984,6 +2047,7 @@ void NDS_debug_break()
void NDS_debug_continue()
{
NDS_ARM9.stalled = NDS_ARM7.stalled = 0;
execute = true;
}
void NDS_debug_step()

View File

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

View File

@ -1,4 +1,4 @@
/*
/*
Copyright (C) 2006 yopyop
Copyright (C) 2006-2007 shash
Copyright (C) 2008-2016 DeSmuME team
@ -3104,6 +3104,10 @@ TEMPLATE static u32 FASTCALL OP_BLX_REG(const u32 i)
cpu->CPSR.bits.T = BIT0(tmp);
cpu->R[15] = tmp & (0xFFFFFFFC|(cpu->CPSR.bits.T<<1));
cpu->next_instruction = cpu->R[15];
if (cpu->runToRet) {
cpu->runToRet = false;
cpu->runToRetTmp = cpu->next_instruction + 4;
}
return 3;
}
@ -3145,6 +3149,10 @@ TEMPLATE static u32 FASTCALL OP_BL(const u32 i)
cpu->R[15] += (off<<2);
cpu->R[15] &= (0xFFFFFFFC|(cpu->CPSR.bits.T<<1));
cpu->next_instruction = cpu->R[15];
if (cpu->runToRet) {
cpu->runToRet = false;
cpu->runToRetTmp = cpu->next_instruction + 4;
}
return 3;
}
@ -3403,12 +3411,12 @@ TEMPLATE static u32 FASTCALL OP_SMLA_T_T(const u32 i)
TEMPLATE static u32 FASTCALL OP_SMLAL_B_B(const u32 i)
{
s32 a = LWORD(cpu->R[REG_POS(i,0)]);
s32 b = LWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
s32 a = LWORD(cpu->R[REG_POS(i,0)]);
s32 b = LWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
cpu->R[REG_POS(i,16)] = (u32)((sum>>32) & 0xFFFFFFFF);
return 2;
@ -3416,12 +3424,12 @@ TEMPLATE static u32 FASTCALL OP_SMLAL_B_B(const u32 i)
TEMPLATE static u32 FASTCALL OP_SMLAL_B_T(const u32 i)
{
s32 a = LWORD(cpu->R[REG_POS(i,0)]);
s32 b = HWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
s32 a = LWORD(cpu->R[REG_POS(i,0)]);
s32 b = HWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
cpu->R[REG_POS(i,16)] = (u32)((sum>>32) & 0xFFFFFFFF);
return 2;
@ -3429,12 +3437,12 @@ TEMPLATE static u32 FASTCALL OP_SMLAL_B_T(const u32 i)
TEMPLATE static u32 FASTCALL OP_SMLAL_T_B(const u32 i)
{
s32 a = HWORD(cpu->R[REG_POS(i,0)]);
s32 b = LWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
s32 a = HWORD(cpu->R[REG_POS(i,0)]);
s32 b = LWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
cpu->R[REG_POS(i,16)] = (u32)((sum>>32) & 0xFFFFFFFF);
return 2;
@ -3442,12 +3450,12 @@ TEMPLATE static u32 FASTCALL OP_SMLAL_T_B(const u32 i)
TEMPLATE static u32 FASTCALL OP_SMLAL_T_T(const u32 i)
{
s32 a = HWORD(cpu->R[REG_POS(i,0)]);
s32 b = HWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
s32 a = HWORD(cpu->R[REG_POS(i,0)]);
s32 b = HWORD(cpu->R[REG_POS(i,8)]);
s64 product = (s64)(a*b);
s64 dst64 = (s64)(cpu->R[REG_POS(i,12)] + (((s64)cpu->R[REG_POS(i,16)])<<32));
s64 sum = dst64 + product;
cpu->R[REG_POS(i,12)] = (u32)(sum & 0xFFFFFFFF);
cpu->R[REG_POS(i,16)] = (u32)((sum>>32) & 0xFFFFFFFF);
return 2;
@ -4750,6 +4758,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIA(const u32 i)
//start += 4;
cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
return MMU_aluMemCycles<PROCNUM>(2, c);
@ -4791,6 +4805,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB(const u32 i)
else
registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
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);
start -= 4;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
OP_L_DA(14, start);
@ -4858,6 +4884,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB(const u32 i)
registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
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);
start += 4;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
if(i & (1 << REG_POS(i,16))) {
@ -4965,6 +5003,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB_W(const u32 i)
else
registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
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);
start -= 4;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
OP_L_DA(14, start);
@ -5047,6 +5097,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB_W(const u32 i)
registres[15] = tmp & 0xFFFFFFFC;
cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
OP_L_DB(14, start);
@ -5125,6 +5181,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIA2(const u32 i)
//start += 4;
cpu->next_instruction = cpu->R[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
return MMU_aluMemCycles<PROCNUM>(2, c);
}
@ -5180,6 +5242,12 @@ TEMPLATE static u32 FASTCALL OP_LDMIB2(const u32 i)
cpu->changeCPSR();
cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
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);
start -= 4;
cpu->next_instruction = registres[15];
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
OP_L_DA(14, start);
@ -5270,6 +5344,12 @@ TEMPLATE static u32 FASTCALL OP_LDMDB2(const u32 i)
cpu->changeCPSR();
cpu->next_instruction = registres[15];
c += MMU_memAccessCycles<PROCNUM,32,MMU_AD_READ>(start);
// debugging
if (cpu->runToRet) {
execute = false;
cpu->runToRet = false;
}
}
OP_L_DB(14, start);

View File

@ -327,6 +327,13 @@ struct armcpu_t
/** the ctrl interface */
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);

View File

@ -37,8 +37,9 @@ typedef struct
BOOL autoup;
u32 autoup_secs;
u32 curr_ligne;
armcpu_t *cpu;
armcpu_t* cpu;
u16 mode;
s32 break_pos;
} disview_struct;
disview_struct *DisView7 = NULL;
@ -47,7 +48,7 @@ disview_struct *DisView9 = NULL;
extern TOOLSCLASS *ViewDisasm_ARM7;
extern TOOLSCLASS *ViewDisasm_ARM9;
static HWND DisViewWnd[2] = {NULL, NULL};
HWND DisViewWnd[2] = {NULL, NULL};
#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 adr;
if (win->autoup||win->autogo)
win->curr_ligne = (win->cpu->instruct_adr >> 2);
//if (win->autoup||win->autogo)
// win->curr_ligne = (win->cpu->instruct_adr >> 2);
adr = win->curr_ligne*4;
SetTextColor(mem_dc, RGB(0, 0, 0));
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);
des_arm_instructions_set[INDEX(ins)](adr, 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)
{
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);
des_thumb_instructions_set[ins>>6](adr, ins, txt);
sprintf(text, "%04X:%04X %04X %s", (int)(adr>>16), (int)(adr&0xFFFF), (int)ins, txt);
@ -174,53 +195,71 @@ LRESULT DisViewDialog_OnPaint(HWND hwnd, disview_struct *win, WPARAM wParam, LPA
for(i = 0; i < 16; ++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 CPSROFF 288
SetBkMode(hdc, TRANSPARENT);
if(win->cpu->CPSR.bits.N)
SetTextColor(hdc, RGB(255,0,0));
else
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)
SetTextColor(hdc, RGB(255,0,0));
else
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)
SetTextColor(hdc, RGB(255,0,0));
else
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)
SetTextColor(hdc, RGB(255,0,0));
else
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)
SetTextColor(hdc, RGB(255,0,0));
else
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)
SetTextColor(hdc, RGB(255,0,0));
else
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);
SetWindowText(GetDlgItem(hwnd, IDC_MODE), text);
sprintf(text, "%08X", MMU.timer[0][0]);//win->cpu->SPSR);
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);
return 1;
@ -308,7 +347,7 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
UDM_SETRANGE, 0, MAKELONG(99, 1));
SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN),
UDM_SETPOS32, 0, DisView7->autoup_secs);
DisViewWnd[1] = NULL;
DisViewWnd[1] = hwnd;
return 1;
}
case WM_CLOSE :
@ -332,6 +371,13 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case WM_TIMER:
SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0);
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 :
switch (LOWORD (wParam))
{
@ -385,6 +431,7 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case IDC_STEP:
{
NDS_debug_step();
NDS_ARM7.debugStep = true;
}
return 1;
@ -464,6 +511,85 @@ BOOL CALLBACK ViewDisasm_ARM7Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
EnableWindow(GetDlgItem(hwnd, IDC_AUTO_UPDATE), TRUE);
}
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 0;
@ -554,7 +680,7 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
UDM_SETRANGE, 0, MAKELONG(99, 1));
SendMessage(GetDlgItem(hwnd, IDC_AUTO_UPDATE_SPIN),
UDM_SETPOS32, 0, DisView9->autoup_secs);
DisViewWnd[0] = NULL;
DisViewWnd[0] = hwnd;
return 1;
}
case WM_CLOSE :
@ -578,6 +704,13 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case WM_TIMER:
SendMessage(hwnd, WM_COMMAND, IDC_REFRESH, 0);
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 :
switch (LOWORD (wParam))
{
@ -631,6 +764,8 @@ BOOL CALLBACK ViewDisasm_ARM9Proc (HWND hwnd, UINT message, WPARAM wParam, LPARA
case IDC_STEP:
{
NDS_debug_step();
DisView9->curr_ligne += 1;
NDS_ARM9.debugStep = true;
}
return 1;
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);
}
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 0;

View File

@ -21,6 +21,8 @@
#define DISVIEW_H
#include <windows.h>
#include <stdio.h>
#include <types.h>
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);
@ -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 LRESULT CALLBACK ViewDisasm_ARM9BoxProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
extern HWND DisViewWnd[2];
template<int proc> void FORCEINLINE DisassemblerTools_Refresh();
#endif

View File

@ -1214,17 +1214,27 @@ void CheckMessages()
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(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);
continue;
}
if (SoundView_GetHWnd() && IsDialogMessage(SoundView_GetHWnd(), &msg))
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))
{
TranslateMessage(&msg);

View File

@ -37,6 +37,9 @@ using namespace std;
typedef u32 HWAddressType;
int RBPOffs;
int WBPOffs;
struct MemViewRegion
{
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);
}
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)
{
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;
case WM_PAINT:
MemView_Paint(wnd, hDlg, wParam, lParam);
return 1;
case WM_DESTROY:
{
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->SetFocus();
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;
}
@ -727,6 +839,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else
{
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));
sprintf(text, "%02X", val);
@ -770,6 +892,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else
{
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));
sprintf(text, "%04X", val);
@ -823,6 +955,16 @@ LRESULT MemView_ViewBoxPaint(CMemView* wnd, HWND hCtl, WPARAM wParam, LPARAM lPa
else
{
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));
sprintf(text, "%08X", val);

View File

@ -91,6 +91,22 @@
#define IDC_COMBO2 161
#define IDC_COMBO3 162
#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 IDC_FRAMESKIP0 191
#define IDC_FRAMESKIP1 192
@ -109,6 +125,35 @@
#define IDM_MGPU 219
#define IDM_SGPU 220
#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_16_BIT 303
#define IDC_32_BIT 304

View File

@ -311,7 +311,7 @@ BEGIN
DEFPUSHBUTTON "Add",IDC_BADD,120,190,50,14
END
IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 380, 186
IDD_DESASSEMBLEUR_VIEWER7 DIALOGEX 0, 0, 470, 206
STYLE DS_SETFONT | DS_CENTER | WS_CAPTION
CAPTION "Disassembler"
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 "Edit",IDC_DES_BOX,"DesViewBox7",WS_VSCROLL | WS_TABSTOP,4,16,296,150
PUSHBUTTON "&Close",IDC_FERMER,248,170,50,14
LTEXT "R0 :",IDC_STATIC,304,16,17,8
LTEXT "R1 :",IDC_STATIC,304,24,17,8
LTEXT "R2 :",IDC_STATIC,304,32,17,8
LTEXT "R3 :",IDC_STATIC,304,40,17,8
LTEXT "R4 :",IDC_STATIC,304,48,17,8
LTEXT "R5 :",IDC_STATIC,304,56,17,8
LTEXT "R6 :",IDC_STATIC,304,64,17,8
LTEXT "R7 :",IDC_STATIC,304,72,17,8
LTEXT "R8 :",IDC_STATIC,304,80,17,8
LTEXT "R9 :",IDC_STATIC,304,88,17,8
LTEXT "R10 :",IDC_STATIC,304,96,17,8
LTEXT "R11 :",IDC_STATIC,304,104,17,8
LTEXT "R12 :",IDC_STATIC,304,112,17,8
LTEXT "SP :",IDC_STATIC,304,120,17,8
LTEXT "LR :",IDC_STATIC,304,128,17,8
LTEXT "PC :",IDC_STATIC,304,136,17,8
LTEXT "Mode :",IDC_STATIC,304,158,22,8
LTEXT "SPSR :",IDC_STATIC,304,168,22,8
LTEXT "00000000",IDC_R0,325,16,40,8
LTEXT "00000000",IDC_R1,325,24,40,8
LTEXT "00000000",IDC_R2,325,32,40,8
LTEXT "00000000",IDC_R3,325,40,40,8
LTEXT "00000000",IDC_R4,325,48,40,8
LTEXT "00000000",IDC_R5,325,56,40,8
LTEXT "00000000",IDC_R6,325,64,40,8
LTEXT "00000000",IDC_R7,325,72,40,8
LTEXT "00000000",IDC_R8,325,80,40,8
LTEXT "00000000",IDC_R9,325,88,40,8
LTEXT "00000000",IDC_R10,325,96,40,8
LTEXT "00000000",IDC_R11,325,104,40,8
LTEXT "00000000",IDC_R12,325,112,40,8
LTEXT "00000000",IDC_R13,325,120,40,8
LTEXT "00000000",IDC_R14,325,128,40,8
LTEXT "00000000",IDC_R15,325,136,40,8
LTEXT "",IDC_MODE,327,158,28,8
LTEXT "",IDC_TMP,327,168,40,8
EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
LTEXT "R0 :", IDC_STATIC, 304, 16, 17, 8
LTEXT "R1 :", IDC_STATIC, 304, 26, 17, 8
LTEXT "R2 :", IDC_STATIC, 304, 36, 17, 8
LTEXT "R3 :", IDC_STATIC, 304, 46, 17, 8
LTEXT "R4 :", IDC_STATIC, 304, 56, 17, 8
LTEXT "R5 :", IDC_STATIC, 304, 66, 17, 8
LTEXT "R6 :", IDC_STATIC, 304, 76, 17, 8
LTEXT "R7 :", IDC_STATIC, 304, 86, 17, 8
LTEXT "R8 :", IDC_STATIC, 304, 96, 17, 8
LTEXT "R9 :", IDC_STATIC, 304, 106, 17, 8
LTEXT "R10 :", IDC_STATIC, 304, 116, 17, 8
LTEXT "R11 :", IDC_STATIC, 304, 126, 17, 8
LTEXT "R12 :", IDC_STATIC, 304, 136, 17, 8
LTEXT "SP :", IDC_STATIC, 304, 146, 17, 8
LTEXT "LR :", IDC_STATIC, 304, 156, 17, 8
LTEXT "PC :", IDC_STATIC, 304, 166, 17, 8
LTEXT "Mode :", IDC_STATIC, 304, 188, 22, 8
LTEXT "SPSR :", IDC_STATIC, 304, 198, 22, 8
EDITTEXT IDC_R0, 325, 16, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R1, 325, 26, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R2, 325, 36, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R3, 325, 46, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R4, 325, 56, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R5, 325, 66, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R6, 325, 76, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R7, 325, 86, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R8, 325, 96, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R9, 325, 106, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R10, 325, 116, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R11, 325, 126, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R12, 325, 136, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R13, 325, 146, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R14, 325, 156, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R15, 325, 166, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "", IDC_MODE, 327, 188, 28, 8
LTEXT "", IDC_TMP, 327, 198, 40, 8
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
LTEXT "frames",IDC_STATIC,364,5,16,8
PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON
@ -369,9 +369,26 @@ BEGIN
PUSHBUTTON "&Step",IDC_STEP,41,170,24,14
CONTROL "Autoupd asm",IDC_AUTOUPDATE_ASM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,172,57,10
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
IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 380, 186
IDD_DESASSEMBLEUR_VIEWER9 DIALOGEX 0, 0, 470, 206
STYLE DS_SETFONT | DS_CENTER | WS_CAPTION
CAPTION "Disassembler"
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 "Edit",IDC_DES_BOX,"DesViewBox9",WS_VSCROLL | WS_TABSTOP,4,16,296,150
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
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
LTEXT "R0 :",IDC_STATIC,304,16,17,8
LTEXT "R1 :",IDC_STATIC,304,24,17,8
LTEXT "R2 :",IDC_STATIC,304,32,17,8
LTEXT "R3 :",IDC_STATIC,304,40,17,8
LTEXT "R4 :",IDC_STATIC,304,48,17,8
LTEXT "R5 :",IDC_STATIC,304,56,17,8
LTEXT "R6 :",IDC_STATIC,304,64,17,8
LTEXT "R7 :",IDC_STATIC,304,72,17,8
LTEXT "R8 :",IDC_STATIC,304,80,17,8
LTEXT "R9 :",IDC_STATIC,304,88,17,8
LTEXT "R10 :",IDC_STATIC,304,96,17,8
LTEXT "R11 :",IDC_STATIC,304,104,17,8
LTEXT "R12 :",IDC_STATIC,304,112,17,8
LTEXT "SP :",IDC_STATIC,304,120,17,8
LTEXT "LR :",IDC_STATIC,304,128,17,8
LTEXT "PC :",IDC_STATIC,304,136,17,8
LTEXT "Mode :",IDC_STATIC,304,158,22,8
LTEXT "SPSR :",IDC_STATIC,304,168,22,8
LTEXT "00000000",IDC_R0,325,16,40,8
LTEXT "00000000",IDC_R1,325,24,40,8
LTEXT "00000000",IDC_R2,325,32,40,8
LTEXT "00000000",IDC_R3,325,40,40,8
LTEXT "00000000",IDC_R4,325,48,40,8
LTEXT "00000000",IDC_R5,325,56,40,8
LTEXT "00000000",IDC_R6,325,64,40,8
LTEXT "00000000",IDC_R7,325,72,40,8
LTEXT "00000000",IDC_R8,325,80,40,8
LTEXT "00000000",IDC_R9,325,88,40,8
LTEXT "00000000",IDC_R10,325,96,40,8
LTEXT "00000000",IDC_R11,325,104,40,8
LTEXT "00000000",IDC_R12,325,112,40,8
LTEXT "00000000",IDC_R13,325,120,40,8
LTEXT "00000000",IDC_R14,325,128,40,8
LTEXT "00000000",IDC_R15,325,136,40,8
LTEXT "",IDC_MODE,327,158,28,8
LTEXT "",IDC_TMP,327,168,40,8
EDITTEXT IDC_AUTO_UPDATE_SECS,340,3,12,14,ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
LTEXT "R1 :",IDC_STATIC,304,26,17,8
LTEXT "R2 :",IDC_STATIC,304,36,17,8
LTEXT "R3 :",IDC_STATIC,304,46,17,8
LTEXT "R4 :",IDC_STATIC,304,56,17,8
LTEXT "R5 :",IDC_STATIC,304,66,17,8
LTEXT "R6 :",IDC_STATIC,304,76,17,8
LTEXT "R7 :",IDC_STATIC,304,86,17,8
LTEXT "R8 :",IDC_STATIC,304,96,17,8
LTEXT "R9 :",IDC_STATIC,304,106,17,8
LTEXT "R10 :",IDC_STATIC,304,116,17,8
LTEXT "R11 :",IDC_STATIC,304,126,17,8
LTEXT "R12 :",IDC_STATIC,304,136,17,8
LTEXT "SP :",IDC_STATIC,304,146,17,8
LTEXT "LR :",IDC_STATIC,304,156,17,8
LTEXT "PC :",IDC_STATIC,304,166,17,8
LTEXT "Mode :",IDC_STATIC,304,188,22,8
LTEXT "SPSR :",IDC_STATIC,304,198,22,8
EDITTEXT IDC_R0, 325, 16, 40, 10,ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R1, 325, 26, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R2, 325, 36, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R3, 325, 46, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R4, 325, 56, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R5, 325, 66, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R6, 325, 76, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R7, 325, 86, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R8, 325, 96, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R9, 325, 106, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R10, 325, 116, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R11, 325, 126, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R12, 325, 136, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R13, 325, 146, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R14, 325, 156, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
EDITTEXT IDC_R15, 325, 166, 40, 10, ES_UPPERCASE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_GROUP
LTEXT "",IDC_MODE,327,188,28,8
LTEXT "",IDC_TMP,327,198,40,8
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
LTEXT "frames",IDC_STATIC,364,5,16,8
PUSHBUTTON "&Refresh",IDC_REFRESH,162,170,50,14,BS_ICON
@ -808,7 +842,7 @@ BEGIN
LTEXT "frames",IDC_STATIC,92,158,16,8
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
CAPTION "Memory Viewer"
FONT 8, "MS Sans Serif", 0, 0, 0x0
@ -832,6 +866,33 @@ BEGIN
LTEXT "",IDC_2012,163,223,73,8
EDITTEXT IDC_CURRENT_ADDR,41,223,43,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP
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
IDD_MICROPHONE DIALOGEX 0, 0, 241, 142