obsolete file
This commit is contained in:
parent
3b5be4e54b
commit
b3faac170a
|
@ -1,708 +0,0 @@
|
||||||
#include "common.h"
|
|
||||||
#ifdef FCEUDEF_DEBUGGER
|
|
||||||
#include "../../x6502.h"
|
|
||||||
#include "../../debug.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
void UpdateDebugger(void);
|
|
||||||
static int discallb(uint16 a, char *s);
|
|
||||||
static void crs(HWND hParent);
|
|
||||||
static void Disyou(uint16 a);
|
|
||||||
static void UpdateDMem(uint16 a);
|
|
||||||
int BlockingCheck(void); //mbg merge 7/18/06 yech had to add this
|
|
||||||
|
|
||||||
static HWND mwin=0;
|
|
||||||
static int32 cmsi;
|
|
||||||
static int instep=-1;
|
|
||||||
static X6502 *Xsave;
|
|
||||||
|
|
||||||
HWND dwin;
|
|
||||||
|
|
||||||
static uint16 StrToU16(char *s)
|
|
||||||
{
|
|
||||||
unsigned int ret=0;
|
|
||||||
sscanf(s,"%4x",&ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8 StrToU8(char *s)
|
|
||||||
{
|
|
||||||
unsigned int ret=0;
|
|
||||||
sscanf(s,"%2x",&ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Need to be careful where these functions are used. */
|
|
||||||
static char *U16ToStr(uint16 a)
|
|
||||||
{
|
|
||||||
static char TempArray[16];
|
|
||||||
sprintf(TempArray,"%04X",a);
|
|
||||||
return TempArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *U8ToStr(uint8 a)
|
|
||||||
{
|
|
||||||
static char TempArray[16];
|
|
||||||
sprintf(TempArray,"%02X",a);
|
|
||||||
return TempArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16 asavers[27];
|
|
||||||
|
|
||||||
|
|
||||||
static void crs(HWND hParent)
|
|
||||||
{
|
|
||||||
// SetDlgItemText(hParent,320,(LPTSTR)(instep>=0)?"Stopped.":"Running...");
|
|
||||||
EnableWindow( GetDlgItem(hParent,301),(instep>=0)?1:0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Disyou(uint16 a)
|
|
||||||
{
|
|
||||||
int discount;
|
|
||||||
|
|
||||||
SendDlgItemMessage(dwin,100,LB_RESETCONTENT,0,0);
|
|
||||||
|
|
||||||
discount = 0;
|
|
||||||
while(discount < 25)
|
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
uint16 prea = a;
|
|
||||||
|
|
||||||
asavers[discount]=a;
|
|
||||||
sprintf(buffer,"%04x: ",a);
|
|
||||||
|
|
||||||
a = FCEUI_Disassemble(Xsave,a,buffer + strlen(buffer));
|
|
||||||
if(prea==Xsave->PC)
|
|
||||||
SendDlgItemMessage(dwin,100,LB_SETCURSEL,discount,0);
|
|
||||||
|
|
||||||
SendDlgItemMessage(dwin,100,LB_ADDSTRING,0,(LPARAM)(LPSTR)buffer);
|
|
||||||
discount++;
|
|
||||||
}
|
|
||||||
//FCEUI_Disassemble(Xsave,a,discallb);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SSI(X6502 *X)
|
|
||||||
{
|
|
||||||
SCROLLINFO si;
|
|
||||||
|
|
||||||
memset(&si,0,sizeof(si));
|
|
||||||
si.cbSize=sizeof(si);
|
|
||||||
si.fMask=SIF_ALL;
|
|
||||||
si.nMin=-32768;
|
|
||||||
si.nMax=32767;
|
|
||||||
si.nPage=27;
|
|
||||||
si.nPos=X->PC-32768;
|
|
||||||
SetScrollInfo(GetDlgItem(dwin,101),SB_CTL,&si,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void RFlags(X6502 *X)
|
|
||||||
{
|
|
||||||
int x;
|
|
||||||
|
|
||||||
SetDlgItemText(dwin,202,(LPTSTR)U8ToStr(X->P&~0x30));
|
|
||||||
for(x=0;x<8;x++)
|
|
||||||
{
|
|
||||||
if(x!=4 && x!=5)
|
|
||||||
CheckDlgButton(dwin,400+x,((X->P>>x)&1)?BST_CHECKED:BST_UNCHECKED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void RRegs(X6502 *X)
|
|
||||||
{
|
|
||||||
SetDlgItemText(dwin,200,(LPTSTR)U16ToStr(X->PC));
|
|
||||||
SetDlgItemText(dwin,201,(LPTSTR)U8ToStr(X->S));
|
|
||||||
SetDlgItemText(dwin,210,(LPTSTR)U8ToStr(X->A));
|
|
||||||
SetDlgItemText(dwin,211,(LPTSTR)U8ToStr(X->X));
|
|
||||||
SetDlgItemText(dwin,212,(LPTSTR)U8ToStr(X->Y));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void DoVecties(HWND hParent)
|
|
||||||
{
|
|
||||||
uint16 m[3];
|
|
||||||
int x;
|
|
||||||
|
|
||||||
FCEUI_GetIVectors(&m[2],&m[0],&m[1]);
|
|
||||||
for(x=0;x<3;x++)
|
|
||||||
SetDlgItemText(hParent,220+x,(LPTSTR)U16ToStr(m[x]));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Redrawsy(X6502 *X)
|
|
||||||
{
|
|
||||||
SSI(X);
|
|
||||||
RFlags(X);
|
|
||||||
RRegs(X);
|
|
||||||
|
|
||||||
Disyou(X->PC);
|
|
||||||
|
|
||||||
DoVecties(dwin);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void MultiCB(X6502 *X)
|
|
||||||
{
|
|
||||||
Xsave=X;
|
|
||||||
if(instep>=0)
|
|
||||||
{
|
|
||||||
Redrawsy(X);
|
|
||||||
if(mwin)
|
|
||||||
UpdateDMem(cmsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
while(instep>=0)
|
|
||||||
{
|
|
||||||
if(instep>=1)
|
|
||||||
{
|
|
||||||
instep--;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
StopSound();
|
|
||||||
if(!BlockingCheck()) /* Whoops, need to exit for some reason. */
|
|
||||||
{
|
|
||||||
instep=-1;
|
|
||||||
FCEUI_SetCPUCallback(0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Sleep(50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int multistep=0;
|
|
||||||
static void cpucb(X6502 *X)
|
|
||||||
{
|
|
||||||
multistep=0;
|
|
||||||
MultiCB(X);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void BPointHandler(X6502 *X, int type, unsigned int A)
|
|
||||||
{
|
|
||||||
if(multistep) return; /* To handle instructions that can cause multiple
|
|
||||||
breakpoints per instruction.
|
|
||||||
*/
|
|
||||||
if(!dwin) return; /* Window is closed, don't do breakpoints. */
|
|
||||||
multistep=1;
|
|
||||||
instep=0;
|
|
||||||
crs(dwin);
|
|
||||||
MultiCB(X);
|
|
||||||
}
|
|
||||||
|
|
||||||
static HWND hWndCallB;
|
|
||||||
static int RBPCallBack(int type, unsigned int A1, unsigned int A2,
|
|
||||||
void (*Handler)(X6502 *, int type, unsigned int A) )
|
|
||||||
{
|
|
||||||
char buf[128];
|
|
||||||
sprintf(buf,"%s%s%s $%04x - $%04x",(type&BPOINT_READ)?"R":" ",
|
|
||||||
(type&BPOINT_WRITE)?"W":" ",(type&BPOINT_PC)?"P":" ",A1,A2);
|
|
||||||
SendDlgItemMessage(hWndCallB,510,LB_ADDSTRING,0,(LPARAM)(LPSTR)buf);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void RebuildBPointList(HWND hwndDlg)
|
|
||||||
{
|
|
||||||
SendDlgItemMessage(hwndDlg,510,LB_RESETCONTENT,0,0);
|
|
||||||
hWndCallB=hwndDlg;
|
|
||||||
FCEUI_ListBreakPoints(RBPCallBack);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FetchBPDef(HWND hwndDlg, uint16 *A1, uint16 *A2, int *type)
|
|
||||||
{
|
|
||||||
char tmp[256];
|
|
||||||
|
|
||||||
GetDlgItemText(hwndDlg,520,tmp,256);
|
|
||||||
*A1=StrToU16(tmp);
|
|
||||||
GetDlgItemText(hwndDlg,521,tmp,256);
|
|
||||||
if(tmp[0]==0)
|
|
||||||
*A2=*A1;
|
|
||||||
else
|
|
||||||
*A2=StrToU16(tmp);
|
|
||||||
|
|
||||||
*type=0;
|
|
||||||
*type|=(IsDlgButtonChecked(hwndDlg,530)==BST_CHECKED)?BPOINT_READ:0;
|
|
||||||
*type|=(IsDlgButtonChecked(hwndDlg,531)==BST_CHECKED)?BPOINT_WRITE:0;
|
|
||||||
*type|=(IsDlgButtonChecked(hwndDlg,532)==BST_CHECKED)?BPOINT_PC:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SetBPDef(HWND hwndDlg, int32 A1, int32 A2, int type)
|
|
||||||
{
|
|
||||||
if(A1>=0)
|
|
||||||
SetDlgItemText(hwndDlg,520,(LPTSTR)U16ToStr(A1));
|
|
||||||
if(A2>=0)
|
|
||||||
SetDlgItemText(hwndDlg,521,(LPTSTR)U16ToStr(A2));
|
|
||||||
if(type>=0)
|
|
||||||
{
|
|
||||||
// CheckDlgButton(hwndDlg,123,(soundoptions&SO_SECONDARY)?BST_CHECKED:BST_UNCHECKED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL CALLBACK DebugCon(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
int32 scrollindex=0,ced=0;
|
|
||||||
DSMFix(uMsg);
|
|
||||||
switch(uMsg)
|
|
||||||
{
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
crs(hwndDlg);
|
|
||||||
DoVecties(hwndDlg);
|
|
||||||
FCEUI_SetCPUCallback(cpucb);
|
|
||||||
RebuildBPointList(hwndDlg);
|
|
||||||
break;
|
|
||||||
case WM_VSCROLL:
|
|
||||||
if(0!=instep) break;
|
|
||||||
switch((int)LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case SB_TOP:
|
|
||||||
scrollindex=-32768;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
case SB_BOTTOM:
|
|
||||||
scrollindex=32767;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
case SB_LINEUP:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,101),SB_CTL);
|
|
||||||
if(scrollindex>-32768)
|
|
||||||
{
|
|
||||||
scrollindex--;
|
|
||||||
ced=1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_PAGEUP:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,101),SB_CTL);
|
|
||||||
scrollindex-=27;
|
|
||||||
if(scrollindex<-32768)
|
|
||||||
scrollindex=-32768;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_LINEDOWN:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,101),SB_CTL);
|
|
||||||
if(scrollindex<32767)
|
|
||||||
{
|
|
||||||
scrollindex++;
|
|
||||||
ced=1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_PAGEDOWN:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,101),SB_CTL);
|
|
||||||
scrollindex+=27;
|
|
||||||
if(scrollindex>32767)
|
|
||||||
{
|
|
||||||
scrollindex=32767;
|
|
||||||
}
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_THUMBPOSITION:
|
|
||||||
case SB_THUMBTRACK:
|
|
||||||
scrollindex=(int16)(wParam>>16);
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(ced)
|
|
||||||
{
|
|
||||||
SendDlgItemMessage(hwndDlg,101,SBM_SETPOS,scrollindex,1);
|
|
||||||
Disyou(scrollindex+32768);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case WM_CLOSE:
|
|
||||||
case WM_QUIT: goto gornk;
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch(HIWORD(wParam))
|
|
||||||
{
|
|
||||||
case LBN_DBLCLK:
|
|
||||||
if(0==instep)
|
|
||||||
{
|
|
||||||
Xsave->PC=asavers[SendDlgItemMessage(hwndDlg,100,LB_GETCURSEL,0,0)];
|
|
||||||
RRegs(Xsave);
|
|
||||||
Disyou(Xsave->PC);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EN_KILLFOCUS:
|
|
||||||
{
|
|
||||||
char TempArray[64];
|
|
||||||
int id=LOWORD(wParam);
|
|
||||||
GetDlgItemText(hwndDlg,id,TempArray,64);
|
|
||||||
|
|
||||||
if(0==instep)
|
|
||||||
{
|
|
||||||
int tscroll=32768+SendDlgItemMessage(hwndDlg,101,SBM_GETPOS,0,0);
|
|
||||||
|
|
||||||
switch(id)
|
|
||||||
{
|
|
||||||
case 200:
|
|
||||||
if(Xsave->PC!=StrToU16(TempArray))
|
|
||||||
{
|
|
||||||
Xsave->PC=StrToU16(TempArray);
|
|
||||||
Disyou(Xsave->PC);
|
|
||||||
RRegs(Xsave);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 201:Xsave->S=StrToU8(TempArray);
|
|
||||||
RRegs(Xsave);
|
|
||||||
Disyou(tscroll);
|
|
||||||
break;
|
|
||||||
case 202:Xsave->P&=0x30;
|
|
||||||
Xsave->P|=StrToU8(TempArray)&~0x30;
|
|
||||||
RFlags(Xsave);
|
|
||||||
Disyou(tscroll);
|
|
||||||
break;
|
|
||||||
case 210:Xsave->A=StrToU8(TempArray);
|
|
||||||
RRegs(Xsave);
|
|
||||||
Disyou(tscroll);
|
|
||||||
break;
|
|
||||||
case 211:Xsave->X=StrToU8(TempArray);
|
|
||||||
RRegs(Xsave);
|
|
||||||
Disyou(tscroll);
|
|
||||||
break;
|
|
||||||
case 212:Xsave->Y=StrToU8(TempArray);
|
|
||||||
RRegs(Xsave);
|
|
||||||
Disyou(tscroll);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BN_CLICKED:
|
|
||||||
if(LOWORD(wParam)>=400 && LOWORD(wParam)<=407)
|
|
||||||
{
|
|
||||||
if(0==instep)
|
|
||||||
{
|
|
||||||
Xsave->P^=1<<(LOWORD(wParam)&7);
|
|
||||||
RFlags(Xsave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else switch(LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case 300:
|
|
||||||
instep=1;
|
|
||||||
crs(hwndDlg);
|
|
||||||
break;
|
|
||||||
case 301:
|
|
||||||
instep=-1;
|
|
||||||
crs(hwndDlg);
|
|
||||||
break;
|
|
||||||
case 302:FCEUI_NMI();break;
|
|
||||||
case 303:FCEUI_IRQ();break;
|
|
||||||
case 310:FCEUI_ResetNES();
|
|
||||||
if(instep>=0)
|
|
||||||
instep=1;
|
|
||||||
crs(hwndDlg);
|
|
||||||
break;
|
|
||||||
case 311:DoMemmo(hwndDlg);break;
|
|
||||||
|
|
||||||
case 540:
|
|
||||||
{
|
|
||||||
LONG t;
|
|
||||||
t=SendDlgItemMessage(hwndDlg,510,LB_GETCURSEL,0,0);
|
|
||||||
if(t!=LB_ERR)
|
|
||||||
{
|
|
||||||
FCEUI_DeleteBreakPoint(t);
|
|
||||||
SendDlgItemMessage(hWndCallB,510,LB_DELETESTRING,t,(LPARAM)(LPSTR)0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 541:
|
|
||||||
{
|
|
||||||
uint16 A1,A2;
|
|
||||||
int type;
|
|
||||||
FetchBPDef(hwndDlg, &A1, &A2, &type);
|
|
||||||
FCEUI_AddBreakPoint(type, A1,A2,BPointHandler);
|
|
||||||
hWndCallB=hwndDlg; /* Hacky hacky. */
|
|
||||||
RBPCallBack(type, A1,A2,0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(!(wParam>>16))
|
|
||||||
switch(wParam&0xFFFF)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
gornk:
|
|
||||||
instep=-1;
|
|
||||||
FCEUI_SetCPUCallback(0);
|
|
||||||
DestroyWindow(dwin);
|
|
||||||
dwin=0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BeginDSeq(HWND hParent)
|
|
||||||
{
|
|
||||||
if(dwin)
|
|
||||||
{
|
|
||||||
SetFocus(dwin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(!GI)
|
|
||||||
{
|
|
||||||
FCEUD_PrintError("You must have a game loaded before you can screw up a game.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
dwin=CreateDialog(fceu_hInstance,"DEBUGGER",0,DebugCon);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 16 numbers per line times 3 then minus one(no space at end) and plus
|
|
||||||
6 for "8000: "-like string and plus 2 for crlf. *16 for 16 lines, and
|
|
||||||
+1 for a null.
|
|
||||||
*/
|
|
||||||
static uint8 kbuf[(16*3-1+6+2)*16+1];
|
|
||||||
static void sexycallb(uint16 a, uint8 v)
|
|
||||||
{
|
|
||||||
if((a&15)==15)
|
|
||||||
sprintf((char*)kbuf+strlen((char*)kbuf),"%02X\r\n",v); //mbg merge 7/18/06 added casts
|
|
||||||
else if((a&15)==0)
|
|
||||||
sprintf((char*)kbuf+strlen((char*)kbuf),"%03xx: %02X ",a>>4,v); //mbg merge 7/18/06 added casts
|
|
||||||
else
|
|
||||||
sprintf((char*)kbuf+strlen((char*)kbuf),"%02X ",v); //mbg merge 7/18/06 added casts
|
|
||||||
}
|
|
||||||
|
|
||||||
static void MDSSI(void)
|
|
||||||
{
|
|
||||||
SCROLLINFO si;
|
|
||||||
|
|
||||||
memset(&si,0,sizeof(si));
|
|
||||||
si.cbSize=sizeof(si);
|
|
||||||
si.fMask=SIF_ALL;
|
|
||||||
si.nMin=0;
|
|
||||||
si.nMax=0xFFFF>>4;
|
|
||||||
si.nPage=16;
|
|
||||||
cmsi=si.nPos=0;
|
|
||||||
SetScrollInfo(GetDlgItem(mwin,103),SB_CTL,&si,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void UpdateDMem(uint16 a)
|
|
||||||
{
|
|
||||||
kbuf[0]=0;
|
|
||||||
FCEUI_MemDump(a<<4,256,sexycallb);
|
|
||||||
SetDlgItemText(mwin,100,(char*)kbuf); //mbg merge 7/18/06 added cast
|
|
||||||
}
|
|
||||||
|
|
||||||
int CreateDumpSave(uint32 a1, uint32 a2)
|
|
||||||
{
|
|
||||||
const char filter[]="Raw dump(*.dmp)\0*.dmp\0";
|
|
||||||
char nameo[2048];
|
|
||||||
OPENFILENAME ofn;
|
|
||||||
|
|
||||||
memset(&ofn,0,sizeof(ofn));
|
|
||||||
ofn.lStructSize=sizeof(ofn);
|
|
||||||
ofn.hInstance=fceu_hInstance;
|
|
||||||
ofn.lpstrTitle="Dump Memory As...";
|
|
||||||
ofn.lpstrFilter=filter;
|
|
||||||
nameo[0]=0;
|
|
||||||
ofn.lpstrFile=nameo;
|
|
||||||
ofn.nMaxFile=256;
|
|
||||||
ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
|
|
||||||
if(GetSaveFileName(&ofn))
|
|
||||||
{
|
|
||||||
FCEUI_DumpMem(nameo,a1,a2);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int LoadSave(uint32 a)
|
|
||||||
{
|
|
||||||
const char filter[]="Raw dump(*.dmp)\0*.dmp\0";
|
|
||||||
char nameo[2048];
|
|
||||||
OPENFILENAME ofn;
|
|
||||||
|
|
||||||
memset(&ofn,0,sizeof(ofn));
|
|
||||||
ofn.lStructSize=sizeof(ofn);
|
|
||||||
ofn.hInstance=fceu_hInstance;
|
|
||||||
ofn.lpstrTitle="Load Memory...";
|
|
||||||
ofn.lpstrFilter=filter;
|
|
||||||
nameo[0]=0;
|
|
||||||
ofn.lpstrFile=nameo;
|
|
||||||
ofn.nMaxFile=256;
|
|
||||||
ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
|
|
||||||
if(GetOpenFileName(&ofn))
|
|
||||||
{
|
|
||||||
FCEUI_LoadMem(nameo,a,0); /* LL Load */
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL CALLBACK MemCon(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
int32 scrollindex=0,ced=0;
|
|
||||||
char TempArray[64];
|
|
||||||
|
|
||||||
DSMFix(uMsg);
|
|
||||||
|
|
||||||
switch(uMsg)
|
|
||||||
{
|
|
||||||
case WM_CLOSE:
|
|
||||||
case WM_QUIT: goto gornk;
|
|
||||||
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch(HIWORD(wParam))
|
|
||||||
{
|
|
||||||
case BN_CLICKED:
|
|
||||||
switch(LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case 203:
|
|
||||||
case 202:
|
|
||||||
{
|
|
||||||
uint16 a;
|
|
||||||
uint8 v;
|
|
||||||
GetDlgItemText(hwndDlg,200,TempArray,64);
|
|
||||||
a=StrToU16(TempArray);
|
|
||||||
GetDlgItemText(hwndDlg,201,TempArray,64);
|
|
||||||
v=StrToU8(TempArray);
|
|
||||||
FCEUI_MemPoke(a,v,LOWORD(wParam)&1);
|
|
||||||
UpdateDMem(cmsi);
|
|
||||||
|
|
||||||
if(dwin && 0==instep)
|
|
||||||
{
|
|
||||||
int tscroll=32768+SendDlgItemMessage(dwin,101,SBM_GETPOS,0,0);
|
|
||||||
Disyou(tscroll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 212:
|
|
||||||
{
|
|
||||||
uint16 a1;
|
|
||||||
uint16 a2;
|
|
||||||
GetDlgItemText(hwndDlg,210,TempArray,64);
|
|
||||||
a1=StrToU16(TempArray);
|
|
||||||
GetDlgItemText(hwndDlg,211,TempArray,64);
|
|
||||||
a2=StrToU16(TempArray);
|
|
||||||
CreateDumpSave(a1,a2);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 222:
|
|
||||||
{
|
|
||||||
uint16 a;
|
|
||||||
GetDlgItemText(hwndDlg,220,TempArray,64);
|
|
||||||
a=StrToU16(TempArray);
|
|
||||||
LoadSave(a);
|
|
||||||
UpdateDMem(cmsi);
|
|
||||||
if(dwin && 0==instep)
|
|
||||||
{
|
|
||||||
int tscroll=32768+SendDlgItemMessage(dwin,101,SBM_GETPOS,0,0);
|
|
||||||
Disyou(tscroll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!(wParam>>16))
|
|
||||||
switch(wParam&0xFFFF)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
gornk:
|
|
||||||
DestroyWindow(mwin);
|
|
||||||
mwin=0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WM_INITDIALOG:
|
|
||||||
return(1);
|
|
||||||
case WM_VSCROLL:
|
|
||||||
switch((int)LOWORD(wParam))
|
|
||||||
{
|
|
||||||
case SB_TOP:
|
|
||||||
scrollindex=0;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
case SB_BOTTOM:
|
|
||||||
scrollindex=0xffff>>4;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
case SB_LINEUP:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,103),SB_CTL);
|
|
||||||
if(scrollindex>0)
|
|
||||||
{
|
|
||||||
scrollindex--;
|
|
||||||
ced=1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_PAGEUP:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,103),SB_CTL);
|
|
||||||
scrollindex-=16;
|
|
||||||
if(scrollindex<0)
|
|
||||||
scrollindex=0;
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_LINEDOWN:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,103),SB_CTL);
|
|
||||||
if(scrollindex<(0xFFFF>>4))
|
|
||||||
{
|
|
||||||
scrollindex++;
|
|
||||||
ced=1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_PAGEDOWN:
|
|
||||||
scrollindex=GetScrollPos(GetDlgItem(hwndDlg,103),SB_CTL);
|
|
||||||
scrollindex+=16;
|
|
||||||
if(scrollindex>(0xFFFF>>4))
|
|
||||||
{
|
|
||||||
scrollindex=(65535>>4);
|
|
||||||
}
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SB_THUMBPOSITION:
|
|
||||||
case SB_THUMBTRACK:
|
|
||||||
scrollindex=HIWORD(wParam);
|
|
||||||
ced=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(ced)
|
|
||||||
{
|
|
||||||
SendDlgItemMessage(hwndDlg,103,SBM_SETPOS,scrollindex,1);
|
|
||||||
UpdateDMem(scrollindex);
|
|
||||||
cmsi=scrollindex;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DoMemmo(HWND hParent)
|
|
||||||
{
|
|
||||||
if(mwin)
|
|
||||||
{
|
|
||||||
SetFocus(mwin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mwin=CreateDialog(fceu_hInstance,"MEMVIEW",0,MemCon);
|
|
||||||
MDSSI();
|
|
||||||
UpdateDMem(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateDebugger(void)
|
|
||||||
{
|
|
||||||
if(mwin)
|
|
||||||
UpdateDMem(cmsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KillDebugger(void)
|
|
||||||
{
|
|
||||||
if(mwin)
|
|
||||||
DestroyWindow(mwin);
|
|
||||||
if(dwin)
|
|
||||||
DestroyWindow(dwin);
|
|
||||||
dwin=mwin=0;
|
|
||||||
}
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue