📄 amview.cpp
字号:
// 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 + -