⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pucontrolpan.cpp

📁 一款国产的8051模拟器(全部源代码) 本软件是一款8051模拟器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -