📄 debug.cpp
字号:
Update();
#endif
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::Break1Click(TObject *Sender)
{
if (!romLoaded) return;
debug=1; run=0;
// while (emuRunning)
// Sleep(0);
debugStartPC=regPC;//R.PC.D;
Update();
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol0KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (!romLoaded) return;
if (Key=='G')
MemGotoClick(Sender);
else if (Key=='S')
Searchforvalue1Click(Sender);
else if (Key==VK_PRIOR)
{
int row=((TListBox*)Sender)->ItemIndex;
debugStartMem-=0x30;
UpdateMem();
((TListBox*)Sender)->ItemIndex=row;
Key=0;
}
else if (Key==VK_NEXT)
{
int row=((TListBox*)Sender)->ItemIndex;
debugStartMem+=0x30;
UpdateMem();
((TListBox*)Sender)->ItemIndex=row;
Key=0;
}
else if (Key==VK_DOWN)
{
if (((TListBox *)Sender)->ItemIndex==5)
{
debugStartMem+=8;
UpdateMem();
((TListBox *)Sender)->ItemIndex=5;
}
}
else if (Key==VK_UP)
{
if (((TListBox *)Sender)->ItemIndex==0)
{
debugStartMem-=8;
UpdateMem();
((TListBox *)Sender)->ItemIndex=0;
}
}
else if (Key==VK_LEFT)
{
if (Sender==MemCol1)
{
MemCol0->ItemIndex=MemCol1->ItemIndex;
MemCol1->ItemIndex=-1;
ActiveControl=MemCol0;
}
else if (Sender==MemCol2)
{
MemCol1->ItemIndex=MemCol2->ItemIndex;
MemCol2->ItemIndex=-1;
ActiveControl=MemCol1;
}
else if (Sender==MemCol3)
{
MemCol2->ItemIndex=MemCol3->ItemIndex;
MemCol3->ItemIndex=-1;
ActiveControl=MemCol2;
}
else if (Sender==MemCol4)
{
MemCol3->ItemIndex=MemCol4->ItemIndex;
MemCol4->ItemIndex=-1;
ActiveControl=MemCol3;
}
else if (Sender==MemCol5)
{
MemCol4->ItemIndex=MemCol5->ItemIndex;
MemCol5->ItemIndex=-1;
ActiveControl=MemCol4;
}
else if (Sender==MemCol6)
{
MemCol5->ItemIndex=MemCol6->ItemIndex;
MemCol6->ItemIndex=-1;
ActiveControl=MemCol5;
}
else if (Sender==MemCol7)
{
MemCol6->ItemIndex=MemCol7->ItemIndex;
MemCol7->ItemIndex=-1;
ActiveControl=MemCol6;
}
Key=0;
}
else if (Key==VK_RIGHT)
{
if (Sender==MemCol0)
{
MemCol1->ItemIndex=MemCol0->ItemIndex;
MemCol0->ItemIndex=-1;
ActiveControl=MemCol1;
}
else if (Sender==MemCol1)
{
MemCol2->ItemIndex=MemCol1->ItemIndex;
MemCol1->ItemIndex=-1;
ActiveControl=MemCol2;
}
else if (Sender==MemCol2)
{
MemCol3->ItemIndex=MemCol2->ItemIndex;
MemCol2->ItemIndex=-1;
ActiveControl=MemCol3;
}
else if (Sender==MemCol3)
{
MemCol4->ItemIndex=MemCol3->ItemIndex;
MemCol3->ItemIndex=-1;
ActiveControl=MemCol4;
}
else if (Sender==MemCol4)
{
MemCol5->ItemIndex=MemCol4->ItemIndex;
MemCol4->ItemIndex=-1;
ActiveControl=MemCol5;
}
else if (Sender==MemCol5)
{
MemCol6->ItemIndex=MemCol5->ItemIndex;
MemCol5->ItemIndex=-1;
ActiveControl=MemCol6;
}
else if (Sender==MemCol6)
{
MemCol7->ItemIndex=MemCol6->ItemIndex;
MemCol6->ItemIndex=-1;
ActiveControl=MemCol7;
}
Key=0;
}
else if (Key==VK_RETURN)
{
if (Sender==MemCol0)
MemDblClick(0,MemCol0->ItemIndex);
else if (Sender==MemCol1)
MemDblClick(1,MemCol1->ItemIndex);
else if (Sender==MemCol2)
MemDblClick(2,MemCol2->ItemIndex);
else if (Sender==MemCol3)
MemDblClick(3,MemCol3->ItemIndex);
else if (Sender==MemCol4)
MemDblClick(4,MemCol4->ItemIndex);
else if (Sender==MemCol5)
MemDblClick(5,MemCol5->ItemIndex);
else if (Sender==MemCol6)
MemDblClick(6,MemCol6->ItemIndex);
else if (Sender==MemCol7)
MemDblClick(7,MemCol7->ItemIndex);
}
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemGotoClick(TObject *Sender)
{
if (!romLoaded) return;
#ifdef DEMO
MessageBox(NULL,"This feature is disabled in the demo version.","VGBC",MB_OK|MB_TASKMODAL);
return;
#else
GoToDlg->Address->Text="";
if (GoToDlg->ShowModal()==1)
{
sscanf(GoToDlg->Address->Text.c_str(),"%x",&debugStartMem);
UpdateMem();
}
#endif
}
void __fastcall TDebugWnd::MemCol0Click(TObject *Sender)
{
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol1Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol2Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol3Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol4Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol5Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol6->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol6Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol7->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol7Click(TObject *Sender)
{
MemCol0->ItemIndex=-1;
MemCol1->ItemIndex=-1;
MemCol2->ItemIndex=-1;
MemCol3->ItemIndex=-1;
MemCol4->ItemIndex=-1;
MemCol5->ItemIndex=-1;
MemCol6->ItemIndex=-1;
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemDblClick(int col,int selindx)
{
if (!romLoaded) return;
if (selindx==-1) return;
#ifdef DEMO
MessageBox(NULL,"Memory editing is disabled in the demo version.","VGBC",MB_OK|MB_TASKMODAL);
return;
#else
int addr=debugStartMem+col+(selindx<<3);
char str[4];
sprintf(str,"%2.2X",getmem_direct(addr)&0xff);
NewValueDlg->Address->Text=str;
NewValueDlg->Address->SelectAll();
NewValueDlg->ActiveControl=NewValueDlg->Address;
if (NewValueDlg->ShowModal()==1)
{
int v;
sscanf(NewValueDlg->Address->Text.c_str(),"%x",&v);
putmem_direct(addr&0xffffff,v);
int row=selindx;
UpdateMem();
switch(col)
{
case 0: MemCol0->ItemIndex=row; break;
case 1: MemCol1->ItemIndex=row; break;
case 2: MemCol2->ItemIndex=row; break;
case 3: MemCol3->ItemIndex=row; break;
case 4: MemCol4->ItemIndex=row; break;
case 5: MemCol5->ItemIndex=row; break;
case 6: MemCol6->ItemIndex=row; break;
case 7: MemCol7->ItemIndex=row; break;
}
}
#endif
}
void __fastcall TDebugWnd::MemCol0DblClick(TObject *Sender)
{
MemDblClick(0,MemCol0->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol1DblClick(TObject *Sender)
{
MemDblClick(1,MemCol1->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol2DblClick(TObject *Sender)
{
MemDblClick(2,MemCol2->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol3DblClick(TObject *Sender)
{
MemDblClick(3,MemCol3->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol4DblClick(TObject *Sender)
{
MemDblClick(4,MemCol4->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol5DblClick(TObject *Sender)
{
MemDblClick(5,MemCol5->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol6DblClick(TObject *Sender)
{
MemDblClick(6,MemCol6->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::MemCol7DblClick(TObject *Sender)
{
MemDblClick(7,MemCol7->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::Setbreakpoint1Click(TObject *Sender)
{
if (!romLoaded) return;
if (Code->ItemIndex==-1) return;
#ifdef DEMO
MessageBox(NULL,"This feature is disabled in the demo version.","VGBC",MB_OK|MB_TASKMODAL);
return;
#else
int pc,i,j;
// PauseStart();
sscanf(Code->Items->Strings[Code->ItemIndex].c_str(),
"%x",&pc);
for (i=0;i<debugCodeBreakCount;i++)
{
if (debugCodeBreak[i]==pc)
{
for (j=i;j<(debugCodeBreakCount-1);j++)
debugCodeBreak[j]=debugCodeBreak[j+1];
debugCodeBreakCount--;
Code->Repaint();
// PauseEnd();
return;
}
}
debugCodeBreak[debugCodeBreakCount++]=pc;
Code->Repaint();
// PauseEnd();
#endif
}
//---------------------------------------------------------------------------
void __fastcall TDebugWnd::CodeDrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
if (!romLoaded) return;
TBrush *brush=new TBrush;
TBrush *oldBrush=Code->Canvas->Brush;
brush->Style=bsSolid;
TPen *pen=new TPen;
TPen *oldPen=Code->Canvas->Pen;
int pos,bp=0;
int txt=0;
if (Code->Items->Strings[Index].c_str()[0]!='@')
{
sscanf(Code->Items->Strings[Index].c_str(),
"%X",&pos);
for (int i=0;i<debugCodeBreakCount;i++)
{
if (pos==debugCodeBreak[i])
bp=1;
}
}
else
txt=1;
if (State.Contains(odSelected))
{
if ((!txt)&&(Code->Items->Strings[Index].c_str()[4]=='-'))
{
if (bp)
{
brush->Color=clDkGray;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -