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

📄 asm.cpp

📁 模拟了tec2000的所有功能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	case 0x4500:
		 JRNC();intcontrol();break;
	case 0x4600:
		 JRZ();intcontrol(); break;
	case 0x4700:
		 JRNZ();intcontrol();break;
	case 0x8000:
		 JMPA();intcontrol();break;
    case 0x8100:
		 LDRR();intcontrol();break;
	case 0x8200:
		 in(); intcontrol(); break;
	case 0x8300:
		 STRR();intcontrol();break;
    case 0x8400:
		 PSHF();intcontrol();break;
	case 0x8500:
		 PUSH();intcontrol();break;
	case 0x8600:
		 out(); intcontrol();break;
	case 0x8700:
		 POP(); intcontrol();break;
	case 0x8800:
		 MVRD();intcontrol();break;
	case 0x8c00:
		 POPF();intcontrol();break;
	case 0x8f00:
		 RET(); intcontrol();break;
    case 0xce00:
		 CALA();intcontrol();break;
	case 0x2000:
		 ADC(); intcontrol();break;
	case 0x2100:
		 SBB();intcontrol(); break;
	case 0x2a00:
		 RCL();intcontrol(); break;
	case 0x2b00:
		 RCR(); intcontrol();break;
	case 0x2c00:
		 ASR();intcontrol(); break;
	case 0x2d00:
		 NOT();intcontrol(); break;
	case 0x6000:
		 JMPR();intcontrol();break;
	case 0x6400:
		 JRS(); intcontrol();break;
	case 0x6500:
		 JRNS();intcontrol();break;
    case 0x6c00:
		 CLC();intcontrol(); break;
	case 0x6d00:
		 STC();intcontrol(); break;
	case 0x6e00:
		 EI(); intcontrol(); break;
	case 0x6f00:
		 DI(); intcontrol(); break;
	case 0xe000:
		 CALR();intcontrol();break;
	case 0xe400:
		 LDRA();intcontrol();break;
	case 0xe500:
		 LDRX();intcontrol();break;
	case 0xe600:
		 STRX();intcontrol();break;
	case 0xe700:
		 STRA();intcontrol();break;
	case 0xef00:
		 IRET();intcontrol();break;
    default :{sign=0;break;}
	}
	}
	pEdit->ShowRegisterContext();
    //signG=0;
}

void Casm::controlG()
{   
    
    char *CS=now;
		int errorsign=1;
		while(CS[0]==' ')CS++;
        while((CS[0]!='\0')&&(CS[0]!=' '))
		{
			  if(!((CS[0]==' ')||(CS[0]=='0')||(CS[0]=='1')||(CS[0]=='2')||(CS[0]=='3')||(CS[0]=='4')||(CS[0]=='5')||(CS[0]=='6')||(CS[0]=='7')||(CS[0]=='8')||(CS[0]=='9')||(CS[0]=='A')||(CS[0]=='B')||(CS[0]=='C')||(CS[0]=='D')||(CS[0]=='E')||(CS[0]=='F')))
		            errorsign=0;
               CS++;
		}
        while(CS[0]!='\0')
		{
            if(CS[0]!=' ')
			   {errorsign=0;}
            CS++;
		}
		if(errorsign==1)
		{
	signG=1;
	addressD=0x2000;addressU=0x2000;addressT=0x2000;addressP=0x2000;
	WORD TEMPADR=getdata(now);//cout<<"Hello!"<<endl;
    WORD TEMP;
	IoportFlag81=0x0000;
    IoportFlag83=0x0000;
    int CurrentlengthAll;
    CString GGResult;
/*	GGResult="\r\n";
    CurrentlengthAll=pEdit->GetWindowTextLength();
    pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
    pEdit->ReplaceSel(GGResult);*/
    if(now[0]=='\0'){TEMP=0x2000;}
	else {TEMP=TEMPADR;}
	pc=TEMPADR;
    sp--;
	memory[sp]=pc;
    savepcsp();
     
	
    while(sp!=0xffff)
	{
		if(pEdit->end){
 
            signG=0;
			return;
		}
	ID=getinsID();
	switch(ID)
	{
	case 0x0000:
	     ADD();intcontrol(); break;
	case 0x0100:
		 SUB();intcontrol(); break;
	case 0x0200:
		 AND();intcontrol(); break;
	case 0x0300:
		 CMP();intcontrol();break;
	case 0x0400:
		 XOR();intcontrol(); break;
	case 0x0500:
		 TEST();intcontrol();break;
	case 0x0600:
		 OR(); intcontrol(); break;
	case 0x0700:
		 MVRR();intcontrol();break;
	case 0x0800:
		 DEC(); intcontrol();break;
	case 0x0900:
		 INC(); intcontrol();break;
	case 0x0a00:
		 SHL(); intcontrol();break;
	case 0x0b00:
		 SHR();intcontrol(); break;
	case 0x4100:
		 JR(); intcontrol(); break;
	case 0x4400:
		 JRC();intcontrol(); break;
	case 0x4500:
		 JRNC();intcontrol();break;
	case 0x4600:
		 JRZ();intcontrol(); break;
	case 0x4700:
		 JRNZ();intcontrol();break;
	case 0x8000:
		 JMPA();intcontrol();break;
    case 0x8100:
		 LDRR();intcontrol();break;
	case 0x8200:
		 in(); intcontrol(); break;
	case 0x8300:
		 STRR();intcontrol();break;
    case 0x8400:
		 PSHF();intcontrol();break;
	case 0x8500:
		 PUSH();intcontrol();break;
	case 0x8600:
		 out(); intcontrol();break;
	case 0x8700:
		 POP(); intcontrol();break;
	case 0x8800:
		 MVRD();intcontrol();break;
	case 0x8c00:
		 POPF();intcontrol();break;
	case 0x8f00:
		 RET(); intcontrol();break;
    case 0xce00:
		 CALA();intcontrol();break;
	case 0x2000:
		 ADC(); intcontrol();break;
	case 0x2100:
		 SBB();intcontrol(); break;
	case 0x2a00:
		 RCL();intcontrol(); break;
	case 0x2b00:
		 RCR(); intcontrol();break;
	case 0x2c00:
		 ASR();intcontrol(); break;
	case 0x2d00:
		 NOT();intcontrol(); break;
	case 0x6000:
		 JMPR();intcontrol();break;
	case 0x6400:
		 JRS(); intcontrol();break;
	case 0x6500:
		 JRNS();intcontrol();break;
    case 0x6c00:
		 CLC();intcontrol(); break;
	case 0x6d00:
		 STC();intcontrol(); break;
	case 0x6e00:
		 EI(); intcontrol(); break;
	case 0x6f00:
		 DI(); intcontrol(); break;
	case 0xe000:
		 CALR();intcontrol();break;
	case 0xe400:
		 LDRA();intcontrol();break;
	case 0xe500:
		 LDRX();intcontrol();break;
	case 0xe600:
		 STRX();intcontrol();break;
	case 0xe700:
		 STRA();intcontrol();break;
	case 0xef00:
		 IRET();intcontrol();break;
    default :{linkmicro();}
	}
	}
	CString GResult;
	GResult="\r\n";
	CurrentlengthAll=pEdit->GetWindowTextLength();
 	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(GResult);
	CString temp;
	for(int i=0;i<16;i++)
	{
		GResult="R";
		temp.Format("%d",i);
		GResult+=temp;
		GResult+="=";
		temp.Format("%04x",R[i]);
		if(i==8){
			temp+="\r\n";
			GResult+=temp;
		}
		else{
			GResult+=temp;
		    GResult+="  ";
		}
		CurrentlengthAll=pEdit->GetWindowTextLength();
    	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
    	pEdit->ReplaceSel(GResult);
	}

	traflags();
	GResult="F=";
	CurrentlengthAll=pEdit->GetWindowTextLength();
    pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
   	pEdit->ReplaceSel(GResult);
	for(int k=0;k<8;k++){
		GResult.Format("%d",F[k]);
		CurrentlengthAll=pEdit->GetWindowTextLength();
        pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
     	pEdit->ReplaceSel(GResult);
	}

	pEdit->ShowRegisterContext();

	GResult="\r\n>";
	CurrentlengthAll=pEdit->GetWindowTextLength();
    pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
   	pEdit->ReplaceSel(GResult);
	signG=0;
	}
    else
	{
        CString AResult,tempstr;
	    AResult="\r\nCommand Error!";
        AResult+="\r\n>";
        int	CurrentlengthAll;
	    CurrentlengthAll=pEdit->GetWindowTextLength();
    	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	    pEdit->ReplaceSel(AResult);

        char ch[10];
		ch[0]='\0';
		pEdit->help.MakeCHelp(ch,0);
		pEdit->ShowHelp();
	}
}


void Casm::controlT()
{
    addressD=0x2000;addressU=0x2000;addressP=0x2000;
	WORD TEMPADR=getdata(now);
	WORD TEMP;
    if(now[0]=='\0'&&addressT!=0x2000){TEMP=addressT;}
	else if(now[0]=='\0'&&addressT==0x2000){TEMP=addressT;}
	else{TEMP=TEMPADR;}
	pc=TEMP;
    savepcsp();
    ID=getinsID();
	switch(ID)
	{
	case 0x0000:
	     ADD(); break;
	case 0x0100:
		 SUB(); break;
	case 0x0200:
		 AND(); break;
	case 0x0300:
		 CMP(); break;
	case 0x0400:
		 XOR(); break;
	case 0x0500:
		 TEST();break;
	case 0x0600:
		 OR();  break;
	case 0x0700:
		 MVRR();break;
	case 0x0800:
		 DEC(); break;
	case 0x0900:
		 INC(); break;
	case 0x0a00:
		 SHL(); break;
	case 0x0b00:
		 SHR(); break;
	case 0x4100:
		 JR();  break;
	case 0x4400:
		 JRC(); break;
	case 0x4500:
		 JRNC();break;
	case 0x4600:
		 JRZ(); break;
	case 0x4700:
		 JRNZ();break;
	case 0x8000:
		 JMPA();break;
    case 0x8100:
		 LDRR();break;
	case 0x8200:
		 in();  break;
	case 0x8300:
		 STRR();break;
    case 0x8400:
		 PSHF();break;
	case 0x8500:
		 PUSH();break;
	case 0x8600:
		 out(); break;
	case 0x8700:
		 POP(); break;
	case 0x8800:
		 MVRD();break;
	case 0x8c00:
		 POPF();break;
	case 0x8f00:
		 RET(); break;
    case 0xce00:
		 CALA();break;
	case 0x2000:
		 ADC(); break;
	case 0x2100:
		 SBB(); break;
	case 0x2a00:
		 RCL(); break;
	case 0x2b00:
		 RCR(); break;
	case 0x2c00:
		 ASR(); break;
	case 0x2d00:
		 NOT(); break;
	case 0x6000:
		 JMPR();break;
	case 0x6400:
		 JRS(); break;
	case 0x6500:
		 JRNS();break;
    case 0x6c00:
		 CLC(); break;
	case 0x6d00:
		 STC(); break;
	case 0x6e00:
		 EI();  break;
	case 0x6f00:
		 DI();  break;
	case 0xe000:
		 CALR();break;
	case 0xe400:
		 LDRA();break;
	case 0xe500:
		 LDRX();break;
	case 0xe600:
		 STRX();break;
	case 0xe700:
		 STRA();break;
	case 0xef00:
		 IRET();break;
    default :break;
	}
	
	addressT=pc;
	int CurrentlengthAll;
    CString TResult;
	TResult="\r\n";
	CurrentlengthAll=pEdit->GetWindowTextLength();
 	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(TResult);
	CString temp;
	for(int i=0;i<16;i++)
	{
		TResult="R";
		temp.Format("%d",i);
		TResult+=temp;
		TResult+="=";
		temp.Format("%04x",R[i]);
		if(i==8){
			temp+="\r\n";
			TResult+=temp;
		}
		else{
			TResult+=temp;
		    TResult+="  ";
		}
		CurrentlengthAll=pEdit->GetWindowTextLength();
    	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
    	pEdit->ReplaceSel(TResult);
	}

	traflags();
	TResult="F=";
	CurrentlengthAll

⌨️ 快捷键说明

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