📄 registerdlg.cpp
字号:
// RegisterDlg.cpp : implementation file
//
#include "stdafx.h"
#include "DFYSimulator.h"
#include "RegisterDlg.h"
#include "DFY\CPU.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRegisterDlg dialog
CRegisterDlg::CRegisterDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRegisterDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CRegisterDlg)
m_pEditRegisterName=NULL;
m_pEditRegisterValue=NULL;
m_pListDisplayRegister=NULL;
m_strRegName = _T("");
m_nRegValue = 0;
//}}AFX_DATA_INIT
}
void CRegisterDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRegisterDlg)
DDX_Control(pDX, IDC_LIST_REGISTER, m_listDisplayReg);
DDX_Text(pDX, IDC_EDIT_REGISTERNAME, m_strRegName);
DDX_Text(pDX, IDC_EDIT_REGISTERVALUE, m_nRegValue);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRegisterDlg, CDialog)
//{{AFX_MSG_MAP(CRegisterDlg)
ON_WM_MOVE()
ON_WM_CLOSE()
ON_LBN_DBLCLK(IDC_LIST_REGISTER, OnDblclkListRegister)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRegisterDlg message handlers
void CRegisterDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
GetParent()->SetActiveWindow();
}
void CRegisterDlg::OnClose()
{
CMainFrame* pFrame=(CMainFrame*)GetParent();
pFrame->SetRegisterDlg(NULL);
DestroyWindow();
CDialog::OnClose();
}
void CRegisterDlg::OnOK()
{
UpdateData(TRUE);
m_listDisplayReg.ResetContent();
CDFYSimulatorApp* pApp=(CDFYSimulatorApp*)AfxGetApp();
CPU* _cpu=pApp->GetSimulatorCPU();
if(_cpu)
{
///if(m_strRegName=="CS") //in this version ,the value of
//CS shoud be 0;
// _cpu->SetCS(UNSHORT(m_nRegValue));
if(m_strRegName=="IP")
_cpu->SetIP(m_nRegValue);
if(m_strRegName=="SP")
_cpu->SetSP(m_nRegValue);
if(m_strRegName=="FLAGS")
_cpu->SetFLAGS(m_nRegValue);
if(m_strRegName=="PC")
_cpu->SetPC(UNSHORT(m_nRegValue));
if(m_strRegName=="GR0")
_cpu->SetGR(m_nRegValue,0);
if(m_strRegName=="GR1")
_cpu->SetGR(m_nRegValue,1);
if(m_strRegName=="GR2")
_cpu->SetGR(m_nRegValue,2);
if(m_strRegName=="GR3")
_cpu->SetGR(m_nRegValue,3);
if(m_strRegName=="GR4")
_cpu->SetGR(m_nRegValue,4);
FlushRegister();
}
}
void CRegisterDlg::OnCancel()
{
}
void CRegisterDlg::FlushRegister()
{
m_listDisplayReg.ResetContent();
CDFYSimulatorApp* pApp=(CDFYSimulatorApp*)AfxGetApp();
CPU* _cpu=pApp->GetSimulatorCPU();
if(_cpu)
{
WORD wData=0;
wData=_cpu->GetCS();
m_listDisplayReg.SetItemData(0,wData);
DisplayReg("CS",wData);
wData=_cpu->GetIP();
m_listDisplayReg.SetItemData(1,wData);
DisplayReg("IP",wData);
wData=_cpu->GetFLAGS();
m_listDisplayReg.SetItemData(2,wData);
DisplayReg("FLAGS",wData);
wData=_cpu->GetPC();
m_listDisplayReg.SetItemData(3,wData);
DisplayReg("PC",wData);
wData=_cpu->GetSP();
DisplayReg("SP",wData);
m_listDisplayReg.SetItemData(4,wData);
wData=_cpu->GetGR(0);
m_listDisplayReg.SetItemData(5,wData);
DisplayReg("GR0",wData);
wData=_cpu->GetGR(1);
m_listDisplayReg.SetItemData(6,wData);
DisplayReg("GR1",wData);
wData=_cpu->GetGR(2);
m_listDisplayReg.SetItemData(7,wData);
DisplayReg("GR2",wData);
wData=_cpu->GetGR(3);
m_listDisplayReg.SetItemData(8,wData);
DisplayReg("GR3",wData);
wData=_cpu->GetGR(4);
m_listDisplayReg.SetItemData(9,wData);
DisplayReg("GR4",wData);
}
}
void CRegisterDlg::DisplayReg(CString strRegName, WORD wData)
{
CString strData;
UNSHORT wData1=(UNSHORT)wData;
if(wData1<16)
strData.Format("000%xH",wData1);
else if(wData1>=16&&wData1<256)
strData.Format("00%xH",wData1);
else if(wData1>=256&&wData1<4096)
strData.Format("0%xH",wData1);
else
strData.Format("%xH",wData1);
CString str;
str.Format("%-8s=%8s",strRegName,strData);
str.MakeUpper();
m_listDisplayReg.AddString(str);
}
BOOL CRegisterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
FlushRegister();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CRegisterDlg::OnDblclkListRegister()
{
int i=m_listDisplayReg.GetCurSel();
if(i!=LB_ERR)
{
CString str;
m_listDisplayReg.GetText(i,str);
for(int j=0;j<20;j++)
{
if(str.GetAt(j)==' ')
break;
m_strRegName=str.Left(j+1);
}
m_nRegValue=m_listDisplayReg.GetItemData(i);
UpdateData(FALSE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -