📄 amview.cpp
字号:
case 0://F->Q
au.F_Q[0].shine=1;
au.Q_N.shine=1;
break;
case 1://NOP
break;
case 2://F->B
case 3://F->B
au.F_REG[0].shine=1;
au.REG_N.shine=1;
break;
//省略case 4:
case 5://F/2->B
au.F_REG[0].shine=1;
au.REG_R.shine=1;
break;
//省略case 6:
case 7://2*F->B
au.F_REG[0].shine=1;
au.REG_L.shine=1;
break;
default:
MessageBox("Am2901(ALU)指令I5-3出错!");
}
//==========ALU结果送总线==========
switch(MicroInst.m_i86){
case 2://A->Y
au.A_Y[0].shine=1;
if(MicroInst.m_dc1==1 || (MicroInst.m_dc1==0 && MicroInst.m_mrw!=1 && MicroInst.m_mrw!=3)){
au.RTOIB.shine=1;
if(RA==0)m_bus=m_r0;
else if(RA==1)m_bus=m_r1;
else if(RA==2)m_bus=m_r2;
else if(RA==3)m_bus=m_r3;
else if(RA==4)m_bus=m_r4;
else if(RA==5)m_bus=m_r5;
else if(RA==6)m_bus=m_r6;
else if(RA==7)m_bus=m_r7;
else if(RA==8)m_bus=m_r8;
else if(RA==9)m_bus=m_r9;
else if(RA==10)m_bus=m_r10;
else if(RA==11)m_bus=m_r11;
else if(RA==12)m_bus=m_r12;
else if(RA==13)m_bus=m_r13;
else if(RA==14)m_bus=m_r14;
else m_bus=m_r15;
}
break;
case 0:
case 1:
case 3:
//省略case 4:
case 5:
//省略case 6:
case 7:
au.F_Y.shine=1;
if(MicroInst.m_dc1==1 || (MicroInst.m_dc1==0 && MicroInst.m_mrw!=1 && MicroInst.m_mrw!=3)){
au.RTOIB.shine=1;
short2CString(f,m_bus);
}
break;
default:
MessageBox("Am2901(ALU)指令I5-3出错!");
}
//==========/MIO-REQ-/WE控制 之 写==========
if(MicroInst.m_mrw==0){
memory[CString2short(m_addr)]=CString2short(m_bus);
mem.WRITE.shine=1;
}
else if(MicroInst.m_mrw==2){
m_ouput=m_bus;
io.DISPLACE[0].shine=1;
}
//==========寄存器准备接收总线数据==========
if(MicroInst.m_dc2==0) ;
else if(MicroInst.m_dc2==1)cu.GIR.shine=1;
else if(MicroInst.m_dc2==2)mem.GAR.shine=1;
else MessageBox("寄存器准备接收总线数据控制(DC2)出错!");
//==========CC非码的生成==========
if(MicroInst.m_scc==0 && MicroInst.m_sc==0) cc=0;
else if(MicroInst.m_scc==7 ){
unsigned short kind=(instruction >> 8);
kind = kind & 7;
switch(kind){
case 0:
if(m_sta_c)cc=0;
else cc=1;
break;
case 1:
if(m_sta_z)cc=0;
else cc=1;
break;
case 2:
if(m_sta_v)cc=0;
else cc=1;
break;
case 3:
if(m_sta_s)cc=0;
else cc=1;
break;
case 4:
cc=m_sta_c;
break;
case 5:
cc=m_sta_z;
break;
case 6:
cc=m_sta_v;
break;
case 7:
cc=m_sta_s;
break;
}
}
else MessageBox("cc非码生成控制出错!");
//==========Am2910命令控制(控存下地址的生成)==========
switch(MicroInst.m_ci){
case 2:
cu.MAPROM_D.shine=1;
cu.D_MUX.shine=1;
cu.IR_MAPROM.shine=1;
m_mux=m_map;
cu.INC_MPC.shine=1;
cu.MUX_MPC[0].shine=1;
cu.MUX_CM[0].shine=1;
cu.CM_CMDR.shine=1;
short2CString(CString2short(m_mux)+1,m_mpc);
break;
case 3:
if(cc){
cu.MPC_MUX.shine=1;
m_mux=m_mpc;
cu.INC_MPC.shine=1;
cu.MUX_MPC[0].shine=1;
cu.MUX_CM[0].shine=1;
cu.CM_CMDR.shine=1;
short2CString(1+CString2short(m_mpc),m_mpc);
}
else{
cu.CMDR_D.shine=1;
cu.D_MUX.shine=1;
short2CString(MicroInst.m_naddr,m_mux);
cu.INC_MPC.shine=1;
cu.MUX_MPC[0].shine=1;
cu.MUX_CM[0].shine=1;
cu.CM_CMDR.shine=1;
short2CString(1+CString2short(m_mpc),m_mpc);
}
break;
case 14:
cu.MPC_MUX.shine=1;
m_mux=m_mpc;
cu.INC_MPC.shine=1;
cu.MUX_MPC[0].shine=1;
cu.MUX_CM[0].shine=1;
cu.CM_CMDR.shine=1;
short2CString(1+CString2short(m_mpc),m_mpc);
break;
default:
MessageBox("Am2910命令控制(控存下地址的生成)出错!");
}
UpdateData(false);
}
void CAMView::OnRunButton()
{
UpdateData(true);
int mode=GetCheckedRadioButton(IDC_MICROSTEP_RADIO,IDC_CONTINUE_RADIO);
if(mode==IDC_MACHINESTEP_RADIO || mode==IDC_CONTINUE_RADIO){
SetTimer(2,2000,NULL);
GetDlgItem(IDC_RUN_BUTTON)->EnableWindow(false);
}
Run();
}
void CAMView::OnStartButton()
{
startdlg.m_title="程序起始地址:";
startdlg.DoModal();
m_explain="新机器指令:";
m_pc=m_r5=startdlg.m_startpoint;
m_mpc="0019";
m_mux="0018";
/* MicroInst.m_naddr=0;
MicroInst.m_ci=0;
MicroInst.m_scc=0;
MicroInst.m_sc=0;*/
MicroInst.m_sst=0;
/* MicroInst.m_mrw=0;*/
MicroInst.m_i86=1;
/* MicroInst.m_i53=0;
MicroInst.m_i20=0;
MicroInst.m_a=0;
MicroInst.m_b=0;
MicroInst.m_sci=0;
MicroInst.m_ssh=0;
MicroInst.m_sa=0;
MicroInst.m_dc1=0;
MicroInst.m_sb=0;*/
MicroInst.m_dc2=0;
UpdateData(false);
SetTimer(1,100,NULL);
GetDlgItem(IDC_RUN_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_STOP_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_START_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_MICROSTEP_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_MACHINESTEP_RADIO)->EnableWindow(FALSE);
GetDlgItem(IDC_CONTINUE_RADIO)->EnableWindow(FALSE);
UpdateData(true);
int mode=GetCheckedRadioButton(IDC_MICROSTEP_RADIO,IDC_CONTINUE_RADIO);
if(mode==IDC_MACHINESTEP_RADIO || mode==IDC_CONTINUE_RADIO)
SetTimer(2,2000,NULL);
m_r1="0002";
m_r2="0003";
memory[0]=0x0412;
memory[1]=0xFC00;
UpdateData(false);
}
void CAMView::OnStopButton()
{
//==========ALU结果写回==========
switch(MicroInst.m_i86){
case 0://F->Q
//if(au.Q_N.shine)
m_q=m_alu;
break;
case 1://NOP
break;
case 2://F->B
case 3://F->B
//if(au.REG_N.shine)
RegWrite(RB,CString2short(m_alu));
break;
//省略case 4:
case 5://F/2->B
//if(au.REG_R.shine)
{
unsigned short num;
num=CString2short(m_alu)/2;
//向右移位时最高位的补位MAM3
if(MicroInst.m_ssh==0 || (MicroInst.m_ssh==3 && m_sta_c==0))num=num & 32767;
else if(MicroInst.m_ssh==1 || (MicroInst.m_ssh==3 && m_sta_c==1))num=num | 32768;
else MessageBox("上一条指令的移位控制位SSH出错!");
RegWrite(RB,num);
}
break;
//省略case 6:
case 7://2*F->B
//if(au.REG_L.shine)
{
unsigned short num;
num=CString2short(m_alu)*2;
//向左移位时最低位的补位MAM0
if(MicroInst.m_ssh==0 || (MicroInst.m_ssh==3 && m_sta_c==0)) ;
else if(MicroInst.m_ssh==1 || (MicroInst.m_ssh==3 && m_sta_c==1))num=num | 1;
else MessageBox("上一条指令的移位控制位SSH出错!");
RegWrite(RB,num);
}
break;
}
//==========状态标志位写回==========
unsigned short BusNum=CString2short(m_bus);
switch(MicroInst.m_sst){
case 0:
break;
case 1:
m_sta_c=m_cy;
m_sta_z=m_zr;
m_sta_v=m_ov;
m_sta_s=m_f3;
break;
case 2://INNER BUS 7~4->STATE REGISTER
m_sta_c=((BusNum & 0x0080)? 1:0);
m_sta_z=((BusNum & 0x0040)? 1:0);
m_sta_c=((BusNum & 0x0020)? 1:0);
m_sta_c=((BusNum & 0x0010)? 1:0);
break;
case 3:
m_sta_c=0;
break;
case 4:
m_sta_c=1;
break;
case 5:
m_sta_c=((CString2short(m_alu) & 1) ? 1:0);
break;
case 6:
m_sta_c=((CString2short(m_alu) & 0x8000) ? 1:0);
//省略case 7:
default:
MessageBox("状态位的产生控制出错!");
}
//==========寄存器接收总线数据==========
if(MicroInst.m_dc2==0) ;
else if(MicroInst.m_dc2==1){
m_instruction=m_bus;
m_map=maprom[(CString2short(m_instruction))>>10];
}
else if(MicroInst.m_dc2==2)m_addr=m_bus;
else MessageBox("寄存器接收总线数据控制(DC2)出错!");
//==========搽除上一次的闪烁控制==========
au.REG_A.shine=0;
au.REG_B.shine=0;
au.R_ALU.shine=0;
au.S_ALU.shine=0;
au.IBTOF.shine=0;
au.RTOIB.shine=0;
au.FTOIB.shine=0;
au.F_Y.shine=0;
au.A_R.shine=0;
au.B_S.shine=0;
au.REG_L.shine=0;
au.REG_N.shine=0;
au.REG_R.shine=0;
au.Q_L.shine=0;
au.Q_N.shine=0;
au.Q_R.shine=0;
au.A_Y[0].shine=0;
au.A_S[0].shine=0;
au.Q_S[0].shine=0;
au.D_R[0].shine=0;
au.F_REG[0].shine=0;
au.F_Q[0].shine=0;
au.Q_Q[0].shine=0;
cu.GIR.shine=0;
cu.ITOIB.shine=0;
cu.INC_MPC.shine=0;
cu.MAPROM_D.shine=0;
cu.CMDR_D.shine=0;
cu.MPC_MUX.shine=0;
cu.D_MUX.shine=0;
mem.GAR.shine=0;
mem.WRITE.shine=0;
mem.READ.shine=0;
io.WRITE[0].shine=0;
io.DISPLACE[0].shine=0;
au.REG_A.shine=0;
au.REG_B.shine=0;
au.R_ALU.shine=0;
au.S_ALU.shine=0;
au.IBTOF.shine=0;
cu.IR_MAPROM.shine=0;
cu.MUX_CM[0].shine=0;
cu.MUX_MPC[0].shine=0;
cu.CM_CMDR.shine=0;
OnPaint();
//==========加载==========
m_explain+="\r\n用户中止程序!";
MessageBox("用户中止程序!");
UpdateData(false);
GetDlgItem(IDC_RUN_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_STOP_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_START_BUTTON)->EnableWindow(TRUE);
GetDlgItem(IDC_MICROSTEP_RADIO)->EnableWindow(TRUE);
GetDlgItem(IDC_MACHINESTEP_RADIO)->EnableWindow(TRUE);
GetDlgItem(IDC_CONTINUE_RADIO)->EnableWindow(TRUE);
KillTimer(1);
UpdateData(false);
int mode=GetCheckedRadioButton(IDC_MICROSTEP_RADIO,IDC_CONTINUE_RADIO);
if(mode==IDC_MACHINESTEP_RADIO||mode==IDC_CONTINUE_RADIO)
KillTimer(2);
}
void CAMView::OnTimer(UINT nIDEvent)
{
count++;
int i;
if(nIDEvent==1){
if(count%2){
//运算器可闪布线
if(au.REG_A.shine) Draw(au.REG_A,BusBrush);
if(au.REG_B.shine) Draw(au.REG_B,BusBrush);
if(au.R_ALU.shine) Draw(au.R_ALU,BusBrush);
if(au.S_ALU.shine) Draw(au.S_ALU,BusBrush);
if(au.RTOIB.shine) Draw(au.RTOIB,BusBrush);
if(au.FTOIB.shine) Draw(au.FTOIB,BusBrush);
if(au.IBTOF.shine) Draw(au.IBTOF,BusBrush);
if(au.F_Y.shine) Draw(au.F_Y,BusBrush);
if(au.A_R.shine) Draw(au.A_R,BusBrush);
if(au.B_S.shine) Draw(au.B_S,BusBrush);
if(au.REG_L.shine) Draw(au.REG_L,BusBrush);
if(au.REG_N.shine) Draw(au.REG_N,BusBrush);
if(au.REG_R.shine) Draw(au.REG_R,BusBrush);
if(au.Q_L.shine) Draw(au.Q_L,BusBrush);
if(au.Q_N.shine) Draw(au.Q_N,BusBrush);
if(au.Q_R.shine) Draw(au.Q_R,BusBrush);
if(au.A_Y[0].shine) for(i=0;i<5;i++)Draw(au.A_Y[i],BusBrush);
if(au.A_S[0].shine) for(i=0;i<3;i++)Draw(au.A_S[i],BusBrush);
if(au.Q_S[0].shine) for(i=0;i<3;i++)Draw(au.Q_S[i],BusBrush);
if(au.D_R[0].shine) for(i=0;i<3;i++)Draw(au.D_R[i],BusBrush);
if(au.F_REG[0].shine) for(i=0;i<5;i++)Draw(au.F_REG[i],BusBrush);
if(au.F_Q[0].shine) for(i=0;i<5;i++)Draw(au.F_Q[i],BusBrush);
if(au.Q_Q[0].shine) for(i=0;i<5;i++)Draw(au.Q_Q[i],BusBrush);
//控制器可闪布线
if(cu.GIR.shine) Draw(cu.GIR,BusBrush);
if(cu.ITOIB.shine) Draw(cu.ITOIB,BusBrush);
if(cu.INC_MPC.shine) Draw(cu.INC_MPC,BusBrush);
if(cu.MAPROM_D.shine) Draw(cu.MAPROM_D,BusBrush);
if(cu.CMDR_D.shine) Draw(cu.CMDR_D,BusBrush);
if(cu.MPC_MUX.shine) Draw(cu.MPC_MUX,BusBrush);
if(cu.D_MUX.shine) Draw(cu.D_MUX,BusBrush);
if(cu.IR_MAPROM.shine) Draw(cu.IR_MAPROM,BusBrush);
if(cu.MUX_CM[0].shine) for(i=0;i<3;i++)Draw(cu.MUX_CM[i],BusBrush);
if(cu.MUX_MPC[0].shine) for(i=0;i<5;i++)Draw(cu.MUX_MPC[i],BusBrush);
if(cu.CM_CMDR.shine) Draw(cu.CM_CMDR,BusBrush);
//存储器可闪布线
if(mem.GAR.shine) Draw(mem.GAR,BusBrush);
if(mem.WRITE.shine) Draw(mem.WRITE,BusBrush);
if(mem.READ.shine) Draw(mem.READ,BusBrush);
//IO设备可闪布线
if(io.WRITE[0].shine) for(i=0;i<2;i++)Draw(io.WRITE[i],BusBrush);
if(io.DISPLACE[0].shine) for(i=0;i<2;i++)Draw(io.DISPLACE[i],BusBrush);
}
else{
//运算器可闪布线
if(au.REG_A.shine) Draw(au.REG_A,ShineBrush);
if(au.REG_B.shine) Draw(au.REG_B,ShineBrush);
if(au.R_ALU.shine) Draw(au.R_ALU,ShineBrush);
if(au.S_ALU.shine) Draw(au.S_ALU,ShineBrush);
if(au.RTOIB.shine) Draw(au.RTOIB,ShineBrush);
if(au.FTOIB.shine) Draw(au.FTOIB,ShineBrush);
if(au.IBTOF.shine) Draw(au.IBTOF,ShineBrush);
if(au.F_Y.shine) Draw(au.F_Y,ShineBrush);
if(au.A_R.shine) Draw(au.A_R,ShineBrush);
if(au.B_S.shine) Draw(au.B_S,ShineBrush);
if(au.REG_L.shine) Draw(au.REG_L,ShineBrush);
if(au.REG_N.shine) Draw(au.REG_N,ShineBrush);
if(au.REG_R.shine) Draw(au.REG_R,ShineBrush);
if(au.Q_L.shine) Draw(au.Q_L,ShineBrush);
if(au.Q_N.shine) Draw(au.Q_N,ShineBrush);
if(au.Q_R.shine) Draw(au.Q_R,ShineBrush);
if(au.A_Y[0].shine) for(i=0;i<5;i++)Draw(au.A_Y[i],ShineBrush);
if(au.A_S[0].shine) for(i=0;i<3;i++)Draw(au.A_S[i],ShineBrush);
if(au.Q_S[0].shine) for(i=0;i<3;i++)Draw(au.Q_S[i],ShineBrush);
if(au.D_R[0].shine) for(i=0;i<3;i++)Draw(au.D_R[i],ShineBrush);
if(au.F_REG[0].shine) for(i=0;i<5;i++)Draw(au.F_REG[i],ShineBrush);
if(au.F_Q[0].shine) for(i=0;i<5;i++)Draw(au.F_Q[i],ShineBrush);
if(au.Q_Q[0].shine) for(i=0;i<5;i++)Draw(au.Q_Q[i],ShineBrush);
//控制器可闪布线
if(cu.GIR.shine) Draw(cu.GIR,ShineBrush);
if(cu.ITOIB.shine) Draw(cu.ITOIB,ShineBrush);
if(cu.INC_MPC.shine) Draw(cu.INC_MPC,ShineBrush);
if(cu.MAPROM_D.shine) Draw(cu.MAPROM_D,ShineBrush);
if(cu.CMDR_D.shine) Draw(cu.CMDR_D,ShineBrush);
if(cu.MPC_MUX.shine) Draw(cu.MPC_MUX,ShineBrush);
if(cu.D_MUX.shine) Draw(cu.D_MUX,ShineBrush);
if(cu.IR_MAPROM.shine) Draw(cu.IR_MAPROM,ShineBrush);
if(cu.MUX_CM[0].shine) for(i=0;i<3;i++)Draw(cu.MUX_CM[i],ShineBrush);
if(cu.MUX_MPC[0].shine) for(i=0;i<5;i++)Draw(cu.MUX_MPC[i],ShineBrush);
if(cu.CM_CMDR.shine) Draw(cu.CM_CMDR,ShineBrush);
//存储器可闪布线
if(mem.GAR.shine) Draw(mem.GAR,ShineBrush);
if(mem.WRITE.shine) Draw(mem.WRITE,ShineBrush);
if(mem.READ.shine) Draw(mem.READ,ShineBrush);
//IO设备可闪布线
if(io.WRITE[0].shine) for(i=0;i<2;i++)Draw(io.WRITE[i],ShineBrush);
if(io.DISPLACE[0].shine) for(i=0;i<2;i++)Draw(io.DISPLACE[i],ShineBrush);
}
}
else if(nIDEvent==2){
int mode=GetCheckedRadioButton(IDC_MICROSTEP_RADIO,IDC_CONTINUE_RADIO);
if(mode==IDC_MACHINESTEP_RADIO||mode==IDC_CONTINUE_RADIO)Run();
}
CFormView::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -