📄 pucontrolpan.cpp
字号:
// PUControlPan.cpp : implementation file
//
#include "stdafx.h"
#include "MDIDemo.h"
#include "PUControlPan.h"
#include "DeviceManager.h"
#include "MainFrm.h"
#include "MyDefaultView.h"
//#include ""
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPUControlPan dialog
CPUControlPan::CPUControlPan(CWnd* pParent /*=NULL*/)
: CDialog(CPUControlPan::IDD, pParent)
{
//{{AFX_DATA_INIT(CPUControlPan)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
isthis=0;
ismem=0;
pcpu=NULL;
}
void CPUControlPan::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPUControlPan)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
void CPUControlPan::OnWzdCommandRange_RMEM(UINT uid)
{
ismem|=0x02;
ram=(GlobalVar *)DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_RMEM_SELECT].DevicePoint;
//DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_RMEM_SELECT].flag=ID_IS_CFG;
pramstr=DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_RMEM_SELECT].pDeviceName;
SetCPUInfo();
//AfxMessageBox(DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_RMEM_SELECT].pDeviceName);
if(ismem==0x3)
{
pcpu->SetMem((unsigned char *)eprom,(unsigned char *)ram);
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE);
this->SetTimer(1,1500,NULL);//SetTimer(this->m_hWnd,
QueryPerformanceFrequency(&lFr);
}
}
void CPUControlPan::OnWzdCommandRange_EPMEM(UINT uid)
{
ismem|=0x01;
eprom=(GlobalVar *)DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_EPMEM_SELECT].DevicePoint;
//DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_EPMEM_SELECT].flag=ID_IS_CFG;
pepromstr=DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_EPMEM_SELECT].pDeviceName;
SetCPUInfo();
//AfxMessageBox(DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[uid-IDC_DEVICE_EPMEM_SELECT].pDeviceName);
if(ismem==0x3)
{
pcpu->SetMem((unsigned char *)eprom,(unsigned char *)ram);
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE);
this->SetTimer(1,1500,NULL);//SetTimer(this->m_hWnd,
QueryPerformanceFrequency(&lFr);
}
}
void CPUControlPan::OnWzdCommandRange_SBUSI(UINT uid)
{
SerialBus * pbus=(SerialBus *)DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSI_SELECT].DevicePoint;
//DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSI_SELECT].flag=ID_IS_CFG;
pcpu->PS->SetSBUSrxd(pbus);
//pbus->SetOutObj((MyObject *)pcpu->PS);
psbusi=DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSI_SELECT].pDeviceName;
SetCPUInfo();
//AfxMessageBox(DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSI_SELECT].pDeviceName);
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
}
void CPUControlPan::OnWzdCommandRange_SBUSO(UINT uid)
{
SerialBus * pbus=(SerialBus *)DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSO_SELECT].DevicePoint;
//DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSO_SELECT].flag=ID_IS_CFG;
pcpu->PS->SetSBUStxd(pbus);
//pbus->SetInObj((MyObject *)pcpu->PS);
psbuso=DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSO_SELECT].pDeviceName;
SetCPUInfo();
//pcpu=(SerialBus *)DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSO_SELECT].DevicePoint;
// AfxMessageBox(DeviceMag.DTCB[ID_TYPE_SerialBus].DEVICEINFO[uid-IDC_DEVICE_SBUSO_SELECT].pDeviceName);
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
}
void CPUControlPan::OnWzdCommandRange_CPU(UINT uid)
{
pcpu=(GlobalVar *)DeviceMag.DTCB[ID_TYPE_8051CPU].DEVICEINFO[uid-IDC_DEVICE_SELECT].DevicePoint;
DeviceMag.DTCB[ID_TYPE_8051CPU].DEVICEINFO[uid-IDC_DEVICE_SELECT].flag=ID_IS_CFG;
pcpuname=DeviceMag.DTCB[ID_TYPE_8051CPU].DEVICEINFO[uid-IDC_DEVICE_SELECT].pDeviceName;
SetCPUInfo();
//AfxMessageBox(DeviceMag.DTCB[ID_TYPE_8051CPU].DEVICEINFO[uid-IDC_DEVICE_SELECT].pDeviceName);
GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
}
void CPUControlPan::OnWzdCommandRange_WSWND(UINT uid)
{
if(uid==IDC_WORK_SPACE_SELECT+257)
{
//
uid=ptab.GetCurSel()+IDC_WORK_SPACE_SELECT;
}
ptab.SetCurSel(uid-IDC_WORK_SPACE_SELECT);
ptab.pmyWnd[uid-IDC_WORK_SPACE_SELECT]->MDIActivate();
ptab.pmyWnd[uid-IDC_WORK_SPACE_SELECT]->UpdateWindow();
//ptab.pmyWnd[uid-IDC_WORK_SPACE_SELECT]->SetActiveView(
TCITEM ptcitem;
memset(&ptcitem,0,sizeof(TCITEM));
ptcitem.mask=TCIF_PARAM;
ptab.GetItem(uid-IDC_WORK_SPACE_SELECT,&ptcitem);
MyDefaultView * pview=(MyDefaultView *)ptab.pmyWnd[ptcitem.lParam]->GetActiveView();
//CString str;
//str.Format("pview=%d",pview);
//AfxMessageBox(str);
//str.Format("pview=%d,pview->WndMag.pview=%d",pview,pview->WndMag.pview);
//AfxMessageBox(str);
pview->WndMag.CreateRegRAMWatch(pcpu);
//AfxMessageBox("OnWzdCommandRange_WSWND");
}
BOOL CPUControlPan::OnInitDialog()
{
CDialog::OnInitDialog();
popmenu.CreatePopupMenu();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(FALSE);
pcpuname=NULL;
psbusi=NULL;
psbuso=NULL;
pepromstr=NULL;
pramstr=NULL;
totaltime=0;
sec=0;
//pathstr=NULL;
//GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
//GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
//GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
//AfxMessageBox("");
return 1;
}
BEGIN_MESSAGE_MAP(CPUControlPan, CDialog)
//{{AFX_MSG_MAP(CPUControlPan)
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDC_DEVICE_SELECT,IDC_DEVICE_SELECT+255,OnWzdCommandRange_CPU)
ON_COMMAND_RANGE(IDC_DEVICE_EPMEM_SELECT,IDC_DEVICE_EPMEM_SELECT+255,OnWzdCommandRange_EPMEM)
ON_COMMAND_RANGE(IDC_DEVICE_RMEM_SELECT,IDC_DEVICE_RMEM_SELECT+255,OnWzdCommandRange_RMEM)
ON_COMMAND_RANGE(IDC_DEVICE_SBUSI_SELECT,IDC_DEVICE_SBUSI_SELECT+255,OnWzdCommandRange_SBUSI)
ON_COMMAND_RANGE(IDC_DEVICE_SBUSO_SELECT,IDC_DEVICE_SBUSO_SELECT+255,OnWzdCommandRange_SBUSO)
ON_COMMAND_RANGE(IDC_WORK_SPACE_SELECT,IDC_WORK_SPACE_SELECT+257,OnWzdCommandRange_WSWND)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPUControlPan message handlers
void CPUControlPan::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y));
//this;
//this->ShowWindow(SW_HIDE);
::SetWindowPos(this->m_hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW|SWP_FRAMECHANGED);
// RECT rect;
// this->GetWindowRect(&rect);
this->Invalidate();
this->UpdateWindow();
this->ShowWindow(SW_SHOW);
CDialog::OnLButtonDown(nFlags, point);
}
void CPUControlPan::OnButton1()
{
// TODO: Add your control notification handler code here
CString str,path,path1;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"十六进制文件(*.hex)|*.hex",NULL);
if(IDOK==dlg.DoModal())
{
path=dlg.GetPathName();
//AfxMessageBox(path);
UINT succ=hex.LoadHEXFile(path.GetBuffer(path.GetLength()));
if(succ==0)
{
AfxMessageBox("HEX文件格式错误");
return ;
}
if(hex.MAXADDR>65536)
{
AfxMessageBox("EPROM超过64K,无法加载");
return ;
}
hex.HEXTOBINBUF((BYTE * )(pcpu->inst->mem->pcode),hex.MAXADDR);
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE);
// AfxMessageBox("1");
if(path.GetLength()<=20)
{
//strcpy(pathstr,path.GetBuffer(path.GetLength()));
pathstr.Format("%s",path.GetBuffer(path.GetLength()));
// AfxMessageBox("2");
SetCPUInfo();
}
else
{
// path1=dlg.GetFileName();
pathstr.Format("%s",dlg.GetFileName());
//strcpy(pathstr,path1.GetBuffer(path1.GetLength()));
SetCPUInfo();
}
}
return ;
}
void CPUControlPan::OnButton2()
{
// TODO: Add your control notification handler code here
CString str,path,path1;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"二进制文件(*.bin)|*.bin",NULL);
if(IDOK==dlg.DoModal())
{
path=dlg.GetPathName();
//AfxMessageBox(path);
HANDLE hFile = CreateFile( //建立并打开文件
path.GetBuffer(path.GetLength()),
GENERIC_READ,
FILE_SHARE_WRITE|FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return ;
}
DWORD filesize=GetFileSize(hFile,NULL);
DWORD returnsize=0;
UCHAR * pfile=new UCHAR[filesize+64];
ReadFile(hFile, pfile, filesize, &returnsize, NULL);
memcpy(pcpu->inst->mem->pcode,pfile,returnsize);
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON8)->EnableWindow(TRUE);
if(path.GetLength()<=20)
{
//strcpy(pathstr,path.GetBuffer(path.GetLength()));
pathstr.Format("%s",path.GetBuffer(path.GetLength()));
SetCPUInfo();
}
else
{
//path1=dlg.GetFileName();
pathstr.Format("%s",dlg.GetFileName());
// strcpy(pathstr,path1.GetBuffer(path1.GetLength()));
SetCPUInfo();
}
delete [] pfile;
}
}
void CPUControlPan::OnButton3()
{
popmenu.DestroyMenu();
popmenu.CreatePopupMenu();
CString str;
//popmenu.
int s=0;
for(int i=0;i<DeviceMag.DTCB[ID_TYPE_MEM].Currentpos;i++)
{
if(!(DeviceMag.DTCB[ID_TYPE_MEM].DEVICEINFO[i].flag&ID_IS_CFG))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -