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

📄 amview.cpp

📁 本软件实现了模拟cpu的基本工作原理和工作过程
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// AMView.cpp : implementation of the CAMView class
//

#include "stdafx.h"
#include "AM.h"

#include "AMDoc.h"
#include "AMView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAMView

IMPLEMENT_DYNCREATE(CAMView, CFormView)

BEGIN_MESSAGE_MAP(CAMView, CFormView)
//{{AFX_MSG_MAP(CAMView)
ON_WM_PAINT()
ON_COMMAND(ID_BUTTON_TIME, OnButtonTime)
ON_WM_TIMER()
ON_COMMAND(ID_BUTTON_WRITE, OnButtonWrite)
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_RUN_BUTTON, OnRunButton)
ON_BN_CLICKED(IDC_START_BUTTON, OnStartButton)
ON_BN_CLICKED(IDC_STOP_BUTTON, OnStopButton)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAMView construction/destruction
CAMView::CAMView()
: CFormView(CAMView::IDD)
{
	//{{AFX_DATA_INIT(CAMView)
	m_mem_addr = _T("0000\r\n0001\r\n0002\r\n0003\r\n0004\r\n0005\r\n0006\r\n0007");
	m_mem_data = _T("");
	m_r0 = _T("0000");
	m_r1 = _T("0000");
	m_r10 = _T("0000");
	m_r11 = _T("0000");
	m_r12 = _T("0000");
	m_r13 = _T("0000");
	m_r14 = _T("0000");
	m_r15 = _T("0000");
	m_r2 = _T("0000");
	m_r3 = _T("0000");
	m_r4 = _T("0000");
	m_r5 = _T("0000");
	m_r6 = _T("0000");
	m_r7 = _T("0000");
	m_r8 = _T("0000");
	m_r9 = _T("0000");
	m_q = _T("0000");
	m_aport = _T("");
	m_bport = _T("");
	m_alu = _T("0000");
	m_addr = _T("0000");
	m_instruction = _T("0000");
	m_map = _T("0000");
	m_cmdata = _T("0000 0000 0000 0000");
	m_mpc = _T("0000");
	m_mux = _T("0000");
	m_input = _T("0000");
	m_ouput = _T("");
	m_pc = _T("0000");
	m_explain = _T("");
	m_bus = _T("0000");
	m_operator = _T("");
	m_sta_s = 0;
	m_sta_v = 0;
	m_sta_z = 0;
	m_sta_c = 0;
	m_cy = 0;
	m_f3 = 0;
	m_ov = 0;
	m_zr = 0;
	m_sp = _T("0000");
	m_ip = _T("0000");
	//}}AFX_DATA_INIT
	/////////////////////////////////////////
	/*	mcode[24].m_naddr=0;
	mcode[24].m_ci=14;
	mcode[24]A.m_scc=0;
	mcode[24].m_sc=0;
	mcode[24].m_sst=0;
	mcode[24].m_mrw=5;
	mcode[24].m_i86=3;
	mcode[24].m_i53=0;
	mcode[24].m_i20=4;
	
	  mcode[24].m_a=5;
	  mcode[24].m_b=6;
	  mcode[24].m_sci=0;
	  mcode[24].m_ssh=0;
	  mcode[24].m_sa=0;
	  mcode[24].m_dc1=0;
	  mcode[24].m_sb=0;
	mcode[24].m_dc2=2;*/
	
	maprom[0]="008C";
	maprom[1]="001C";
	maprom[2]="001E";
	maprom[3]="0020";
	maprom[4]="0022";
	maprom[5]="0052";
	maprom[6]="0054";
	maprom[7]="0056";
	maprom[8]="0024";
	maprom[9]="0026";
	maprom[10]="0028";
	maprom[11]="002C";
	maprom[12]="002E";
	maprom[13]="0030";
	maprom[14]="0032";
	maprom[15]="0034";
	
	maprom[16]="0038";
	maprom[17]="0058";
	maprom[18]="0040";
	maprom[19]="005A";
	maprom[20]="004A";
	maprom[21]="004C";
	maprom[22]="004E";
	maprom[23]="0050";
	maprom[24]="005C";
	maprom[25]="005E";
	maprom[26]="0060";
	maprom[27]="0062";
	maprom[28]="0064";
	maprom[29]="0066";
	maprom[30]="0068";
	maprom[31]="006A";
	
	maprom[32]="006C";
	maprom[33]="006E";
	maprom[34]="0070";
	maprom[36]="0072";
	maprom[37]="0074";
	maprom[38]="0078";
	maprom[40]="007A";
	maprom[41]="007C";
	maprom[42]="0080";
	maprom[43]="0084";
	maprom[44]="0086";
	maprom[45]="0088";
	maprom[46]="008A";
	maprom[47]="008E";
	
	maprom[48]="0090";
	maprom[50]="0092";
	maprom[51]="0094";
	maprom[52]="0098";
	maprom[53]="0100";
	maprom[54]="0110";
	maprom[55]="0120";
	maprom[56]="0130";
	maprom[57]="0140";
	maprom[58]="0150";
	maprom[59]="0160";
	maprom[60]="0170";
	maprom[61]="0180";
	maprom[62]="0190";
	maprom[63]="01A0";
	
	
	for(int i=0;i<200;i++)info[i].m_number="00 0000 0000 0000";
	//18H
	info[24].m_number="00 0E00 B0C5 6002";
	info[24].m_character="PC->AR PC->IP";
	
	info[25].m_number="00 0E00 30B0 5401";
	info[25].m_character="PC+1->PC MEM->IR";
	
	info[26].m_number="00 0200 9080 0000";
	info[26].m_character="/MAP=0";
	//1CH
	info[28].m_number="29 0301 B090 0088";
	info[28].m_character="SR+DR->DR CC#=0";
	
	info[30].m_number="29 0301 B090 0888";
	info[30].m_character="SR+DR+C->DR CC#=0";
	//20H
	info[32].m_number="29 0301 B190 0088";
	info[32].m_character="DR-SR->DR";
	
	info[34].m_number="29 0301 B190 0888";
	info[34].m_character="DR-SR-C->DR CC#=0";
	//24H
	info[36].m_number="29 0300 B0C0 0088";
	info[36].m_character="SR->DR CC#=0";
	
	info[38].m_number="00 0E00 90C0 008A";
	info[38].m_character="SR->DR";
	//27H
	info[39].m_number="29 0300 30F0 0088";
	info[39].m_character="MEM->DR CC#=0";
	//28H
	info[40].m_number="00 0E00 90B0 008A";
	info[40].m_character="DR->AR";
	
	info[41].m_number="29 0300 1040 0098";
	info[41].m_character="SR->MEM CC#=0";
	//2CH
	info[44].m_number="09 C300 A0B5 5402";
	info[44].m_character="PC->AR CC#=0 PC+1->PC";
	
	info[46].m_number="00 0E00 A0B5 5402";
	info[46].m_character="PC->AR PC+1->PC";
	//2FH
	info[47].m_number="09 C300 10F0 0002";
	info[47].m_character="MEM->AR CC#=0";
	
	info[48].m_number="00 0E00 A0B5 5402";
	info[48].m_character="PC->AR PC+1->PC";
	
	info[49].m_number="0A 4300 10F0 0002";
	info[49].m_character="MEM->AR CC#=0";
	
	info[50].m_number="00 0E00 A0B5 5402";
	info[50].m_character="PC->AR PC+1->PC";
	///////////////////////////////////////////
	info[0X33].m_character="MEM+SR->AR CC#=0";
	info[0X33].m_number="09 C300 10D0 008A";
	
	info[0X34].m_character="PC->AR PC+1->PC";
	info[0X34].m_number="00 0E00 A0B5 5402";
	
	info[0X35].m_character="MEM+SR->AR";
	info[0X35].m_number="00 0E00 10D0 008A";
	
	info[0X36].m_character="DR->MEM CC#=0";
	info[0X36].m_number="29 0300 1030 0098";
	
	info[0X4A].m_character="SR & DR->DR CC#=0";
	info[0X4A].m_number="29 0301 B490 0088";
	
	info[0X4C].m_character="SR xor DR->DR CC#=0";
	info[0X4C].m_number="29 0301 B690 0088";
	///////////////////////////////////////////
	//4EH
	info[78].m_number="29 0301 B390 0088";
	info[78].m_character="SR or DR ->DR CC#=0";
	
	info[80].m_number="29 0301 9490 0088";
	info[80].m_character="SR & DR  CC#=0";
	
	info[82].m_number="29 0301 9190 0088";
	info[82].m_character="DR-SR CC#=0";
	
	info[84].m_number="0D 8300 B1B0 4402";
	info[84].m_character="SP-1->SP->AR CC#=0 ";
	
	info[86].m_number="09 C300 A0B4 4402";
	info[86].m_character="SP->AR CC#=0 SP+1->SP";
	
	info[88].m_number="00 0E00 B1B0 4402";
	info[88].m_character="SP-1->SP->AR";
	//59H
	info[89].m_number="29 0300 1000 0030";
	info[89].m_character="STR->MEM CC#=0";
	
	info[90].m_number="00 0E00 A0B4 4402";
	info[90].m_character="SP->AR SP+1->SP";
	
	info[91].m_number="29 0302 1080 0000";
	info[91].m_character="MEM->STR CC#=0";
	
	info[92].m_number="29 0306 F0B0 0008";
	info[92].m_character="DR-L->DR RAM3->C 0->RAM0 CC#=0";
	
	info[94].m_number="29 0305 D0B0 0308";
	info[94].m_character="DR-R->DR F3->RAM3 RAM0->C CC#=0";
	
	info[96].m_number="29 0305 D0B0 0008";
	info[96].m_character="DR-R->DR 0->RAM3 CC#=0 RAM0->C";
	
	info[98].m_number="29 0306 F0B0 0108";
	info[98].m_character="DR-L->DR RAM3->C CC#=0 C->RAM0";
	
	info[100].m_number="29 0305 D0B0 0108";
	info[100].m_character="DR-R->DR C->RAM3 CC#=0 RAM0->C";
	
	info[102].m_number="29 0301 B0B0 0408";
	info[102].m_character="DR+1->DR CC#=0";
	///////////////////////////////////////////
	info[0X68].m_character="DR-1->DR CC#=0";
	info[0X68].m_number="29 0301 B1B0 0408";
	
	info[0X6A].m_character="/DR->DR CC#=0";
	info[0X6A].m_number="29 0301 B7B0 0008";
	
	info[0X70].m_character="CC#=CND";
	info[0X70].m_number="29 03E0 9080 0000";
	
	info[0X71].m_character="SR->PC CC#=0";
	info[0X71].m_number="29 0300 B0C0 5080";
	
	info[0X72].m_character="SR->PC CC#=0";
	info[0X72].m_number="29 0300 B0C0 5080";
	
	info[0X74].m_character="SP-1->SP->AR";
	info[0X74].m_number="00 0E00 B1B0 4402";
	
	info[0X75].m_character="PC->MEM";
	info[0X75].m_number="00 0E00 1045 0010";
	
	info[0X76].m_character="SR->PC CC#=0";
	info[0X76].m_number="29 0300 B0C0 5080";
	
	info[0X78].m_character="CC#=CND";
	info[0X78].m_number="29 03E0 9080 0000";
	
	info[0X79].m_character="IP+OFFSET->PC CC#=0";
	info[0X79].m_number="29 0300 B0D6 5020";
	
	info[0X7A].m_character="IP+OFFSET->PC CC#=0";
	info[0X7A].m_number="29 0300 B0D6 5020";
	
	info[0X7C].m_character="PORT->AR";
	info[0X7C].m_number="00 0E00 90F0 0022";
	
	info[0X7D].m_character="MIO#=0 REQ=1 WE#=1 I/O->R0 CC#=0(READ I/O)";
	info[0X7D].m_number="29 0300 38F0 0000";
	
	info[0X80].m_character="PORT->AR";
	info[0X80].m_number="00 0E00 90F0 0022";
	
	info[0X81].m_character="MIO#=0 REQ=1 WE#=0 R0->I/O CC#=0(WRITE I/O)";
	info[0X81].m_number="29 0300 1840 0010";
	
	info[0X84].m_character="SP->AR SP+1->SP";
	info[0X84].m_number="00 0E00 A0B4 4402";
	
	info[0X85].m_character="MEM->PC CC#=0";
	info[0X85].m_number="29 0300 30F0 5000";
	/////////////////////////////////////////////
	info[0X88].m_character="0->C CC#=0";
	info[0X88].m_number="29 0303 9080 0000";
	
	info[0X8A].m_character="1->C CC#=0";
	info[0X8A].m_number="29 0304 9080 0000";
	////////////////////////////////////////////
	info[0X90].m_character="PC->AR PC+1->PC CC#=CND";
	info[0X90].m_number="29 03E0 A0B5 5402";
	
	info[0X91].m_character="MEM->PC CC#=0";
	info[0X91].m_number="29 0300 30F0 5000";
	
	info[0X92].m_character="PC->AR PC+1->PC CC#=0";
	info[0X92].m_number="24 4300 A0B5 5402";
	
	info[0X94].m_character="PC->AR PC+1->PC";
	info[0X94].m_number="00 0E00 A0B5 5402";
	
	info[0X95].m_character="MEM->Q";
	info[0X95].m_number="00 0E00 00F0 0000";
	
	info[0X96].m_character="SP-1->SP->AR";
	info[0X96].m_number="00 0E00 B1B0 4402";
	
	info[0X97].m_character="PC->MEM Q->PC CC#=0";
	info[0X97].m_number="29 0300 2025 5010";
	
	
	mcode[0X1C].Set(info[0X1C].m_number);
	/////////////////////////////////////
	for(i=0;i<200;i++) mcode[i].Set(info[i].m_number);
	/////////////////////////////////////
	
	for(i=0;i<65536;i++)memory[i]=0;
	MemValueCvrt(memory,m_mem_data);
	//	memory[5]=2343;
	//	memory[65535]=2343;
	
	DataBus.x=0;
	DataBus.y=0;
	DataBus.w=1020;
	DataBus.h=25;
	DataBus.type=0;
	DataBus.arrow1=1;
	DataBus.arrow2=1;
	DataBus.shine=false;
	
	Font.CreateFont(14,7,0,0,20,false,false,false,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"楷体");
	BigFont.CreateFont(40,20,0,0,40,false,false,false,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"黑体");
	
	BusColor=RGB(122,122,122);
	BoxColor=RGB(122,122,122);
	ShineColor=RGB(222,222,222);
	SecColor=RGB(100,222,22);
	TextColor=RGB(80,50,100);

	
	BusBrush.CreateSolidBrush(BusColor);
	BoxBrush.CreateSolidBrush(BoxColor);
	ShineBrush.CreateSolidBrush(ShineColor);
	SecBrush.CreateSolidBrush(SecColor);
	
	cmpl=NULL;
	
}

CAMView::~CAMView()
{
}

void CAMView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAMView)
	DDX_Control(pDX, IDC_MICROSTEP_RADIO, m_ModeRadio);
	DDX_Control(pDX, IDC_MEM_SCROLLBAR, m_mem_scroll);
	DDX_Text(pDX, IDC_MEM_ADDR_EDIT, m_mem_addr);
	DDX_Text(pDX, IDC_MEM_DATA_EDIT, m_mem_data);
	DDX_Text(pDX, IDC_R0_EDIT, m_r0);
	DDX_Text(pDX, IDC_R1_EDIT, m_r1);
	DDX_Text(pDX, IDC_R10_EDIT, m_r10);
	DDX_Text(pDX, IDC_R11_EDIT, m_r11);
	DDX_Text(pDX, IDC_R12_EDIT, m_r12);
	DDX_Text(pDX, IDC_R13_EDIT, m_r13);
	DDX_Text(pDX, IDC_R14_EDIT, m_r14);
	DDX_Text(pDX, IDC_R15_EDIT, m_r15);
	DDX_Text(pDX, IDC_R2_EDIT, m_r2);
	DDX_Text(pDX, IDC_R3_EDIT, m_r3);
	DDX_Text(pDX, IDC_R4_EDIT, m_r4);
	DDX_Text(pDX, IDC_R5_EDIT, m_r5);
	DDX_Text(pDX, IDC_R6_EDIT, m_r6);
	DDX_Text(pDX, IDC_R7_EDIT, m_r7);
	DDX_Text(pDX, IDC_R8_EDIT, m_r8);
	DDX_Text(pDX, IDC_R9_EDIT, m_r9);
	DDX_Text(pDX, IDC_Q_EDIT, m_q);
	DDX_Text(pDX, IDC_A_PORT_EDIT, m_aport);
	DDX_Text(pDX, IDC_B_PORT_EDIT, m_bport);
	DDX_Text(pDX, IDC_ALU_EDIT, m_alu);
	DDX_Text(pDX, IDC_AR_EDIT, m_addr);
	DDX_Text(pDX, IDC_IR_EDIT, m_instruction);
	DDX_Text(pDX, IDC_MAPROM_EDIT, m_map);
	DDX_Text(pDX, IDC_CMDR_EDIT, m_cmdata);
	DDX_Text(pDX, IDC_MPC_EDIT, m_mpc);
	DDX_Text(pDX, IDC_MUX_EDIT, m_mux);
	DDX_Text(pDX, IDC_IN_EDIT, m_input);
	DDX_Text(pDX, IDC_OUT_EDIT, m_ouput);
	DDX_Text(pDX, IDC_PC_EDIT, m_pc);
	DDX_Text(pDX, IDC_EXPLAIN_EDIT, m_explain);
	DDX_Text(pDX, IDC_BUS_EDIT, m_bus);
	DDV_MaxChars(pDX, m_bus, 4);
	DDX_Text(pDX, IDC_ALU_OPERATOR_EDIT, m_operator);
	DDX_Text(pDX, IDC_S_EDIT, m_sta_s);
	DDX_Text(pDX, IDC_V_EDIT, m_sta_v);
	DDX_Text(pDX, IDC_Z_EDIT, m_sta_z);
	DDX_Text(pDX, IDC_C_EDIT, m_sta_c);
	DDX_Text(pDX, IDC_CY_EDIT, m_cy);
	DDX_Text(pDX, IDC_F3_EDIT, m_f3);
	DDX_Text(pDX, IDC_OV_EDIT, m_ov);
	DDX_Text(pDX, IDC_ZR_EDIT, m_zr);
	DDX_Text(pDX, IDC_SP_EDIT, m_sp);
	DDX_Text(pDX, IDC_IP_EDIT, m_ip);
	//}}AFX_DATA_MAP
}

BOOL CAMView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	
	return CFormView::PreCreateWindow(cs);
}

void CAMView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
	
	m_mem_scroll.SetScrollRange(0,8191);
	m_mem_scroll.SetScrollPos(0);
	
	CheckRadioButton(IDC_MICROSTEP_RADIO,IDC_CONTINUE_RADIO,IDC_MICROSTEP_RADIO);
	
	UpdateData(false);
}

/////////////////////////////////////////////////////////////////////////////
// CAMView printing

BOOL CAMView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CAMView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CAMView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -