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

📄 asm.cpp

📁 模拟了tec2000的所有功能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
 	    pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	    pEdit->ReplaceSel(UResult);
        addressU=pc;
		}
		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::controlD()
{
    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)
	{
	addressU=0x2000;addressP=0x2000;addressT=0x2000;
	WORD TEMPADR=getdata(now);
	WORD TEMP;
	if(now[0]=='\0'&&addressD!=0x2000){TEMP=addressD;}
	else if(now[0]=='\0'&&addressD==0x2000){TEMP=addressD;}
	else{TEMP=TEMPADR;}
	CString temp;
	CString DResult;
	DResult="\r\n";
    int	CurrentlengthAll=pEdit->GetWindowTextLength();
 	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(DResult);
	
	for(int i=0;i<16;i++)
	{
		temp.Format("%04x",TEMP+8*i);
		DResult=temp;
		DResult+=": ";
		for(int j=0;j<8;j++){
			temp.Format("%04x",memory[TEMP+j+8*i]);
			DResult+=temp;
			DResult+="  ";
		}
		DResult+="…………………………";
		DResult+="\r\n";
	    CurrentlengthAll=pEdit->GetWindowTextLength();
	   	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	  	pEdit->ReplaceSel(DResult);
	}
	DResult=">";
	CurrentlengthAll=pEdit->GetWindowTextLength();
	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(DResult);

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


	addressD=TEMP+128;
	}
	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::controlR()//?
{
    addressD=0x2000;addressU=0x2000;addressP=0x2000;addressT=0x2000;
	int	CurrentlengthAll;
	CString RResult,temp;
	RResult="\r\n";
	CurrentlengthAll=pEdit->GetWindowTextLength();
 	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(RResult);

   if(signR==0)
   {
	char *TEMP=now;
	WORD data=0;
	while(TEMP[0]==' '){TEMP++;}
    if(TEMP[0]=='\0')
	{
	   for(int i=0;i<16;i++)
	   {
           RResult="R";
		   temp.Format("%d",i);
		   RResult+=temp;
		   RResult+="=";
		   temp.Format("%04x",R[i]);
		   RResult+=temp;
		   RResult+="  ";
		   CurrentlengthAll=pEdit->GetWindowTextLength();
           pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
           pEdit->ReplaceSel(RResult); 
		   if(i==8)
		   {   
			   RResult="\r\n";
		       CurrentlengthAll=pEdit->GetWindowTextLength();
               pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
               pEdit->ReplaceSel(RResult); 
		   }
	   }
	   traflags();
       RResult="F=";
	   for(int k=0;k<8;k++){
		   temp.Format("%d",F[k]);
		   RResult+=temp;
	   }
	   RResult+="\r\n>";
	   CurrentlengthAll=pEdit->GetWindowTextLength();
       pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
       pEdit->ReplaceSel(RResult);  

	}
	else if(TEMP[0]=='R'||TEMP[0]=='r')
	{
		char *CS=TEMP;
		int errorsign=1;CS++;
	    while(CS[0]==' ')CS++;
        if(trahexdec(getdata(CS))>15||trahexdec(getdata(CS))<0)errorsign=0;
        while(CS[0]!=' '&&CS[0]!='\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')))
		  errorsign=0;
          CS++;
		}
        while(CS[0]!='\0')
		{
         if(CS[0]!=' ')
		 {errorsign=0;}
         CS++;
		}
		 
        if(errorsign==1)
		{
		signR=1;
		TEMP=TEMP+1;
		reg=trahexdec(getdata(TEMP));
		temp.Format("%04x",R[reg]);
        RResult=temp;
		RResult+=":";
		CurrentlengthAll=pEdit->GetWindowTextLength();
        pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
        pEdit->ReplaceSel(RResult); 
		}
		else
		{
        CString AResult,tempstr;
	    AResult="Command 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();
		}

	}
	else
	{
        CString AResult,tempstr;
	    AResult="Command 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();
	}
   }
	    
   else
   {
        char *CS=buf;
		while(CS[0]==' ')CS++;
		int errorsign=1;
           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++;
		   }
		if(errorsign==1)
		{
        signR=0;
	    WORD data;
		char *p=buf;
		while(p[0]==' ')p++;
		if(p[0]!='\0'){data=getdata(p);R[reg]=data; }
	    RResult=">";
		CurrentlengthAll=pEdit->GetWindowTextLength();
        pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
        pEdit->ReplaceSel(RResult);
		}
		else
		{
        CString AResult,tempstr;
	    AResult="Data 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::controlE()
{
	addressD=0x2000;addressU=0x2000;addressP=0x2000;addressT=0x2000;
	CString EResult;
    EResult.Empty();
	int CurrentlengthAll;
	if(signE==0)
	{
        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)
	{
	signE=1;	
	WORD TEMPADR=getdata(now);
	 
	

	EResult="\r\n";
	int	CurrentlengthAll=pEdit->GetWindowTextLength();
 	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(EResult);
    
 
	if(TEMPADR==0){Eaddress=0X2000;}
	else {Eaddress=TEMPADR;}
    CString dear;
	dear.Format("%04x",Eaddress);
	EResult=dear;
    EResult+="  ";
    dear.Format("%04x",memory[Eaddress]);
	EResult+=dear;EResult+=":";
	
	CurrentlengthAll=pEdit->GetWindowTextLength();
	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	pEdit->ReplaceSel(EResult);
	}
	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();
	}


	}
	else
	{
		 
		WORD TEMP=getdata(buf);
		char *p=buf;
		if(p[0]==' ')
		{
	         signE=1;
			 Eaddress++;CString dear;
	         EResult="  ";
             dear.Format("%04x",memory[Eaddress]);
	         EResult+=dear;
			 EResult+=":";
	         CurrentlengthAll=pEdit->GetWindowTextLength();
	         pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	         pEdit->ReplaceSel(EResult);
		}
	
		else 
		{
			if(p[0]=='\r')
			{
				signE=0;Eaddress=0x2000;
				EResult="\r\n>";
            	CurrentlengthAll=pEdit->GetWindowTextLength();
             	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
            	pEdit->ReplaceSel(EResult);
			}
			else
			{
               memory[Eaddress]=TEMP;
			   while(p[0]!=' '&&p[0]!='\r')p++;
			   if(p[0]==' ')
			   {
				   signE=1;
				   Eaddress++;
			       CString dear;
	               EResult=dear;
                   EResult+="  ";
                   dear.Format("%04x",memory[Eaddress]);
 	               EResult+=dear;EResult+=":";
	               CurrentlengthAll=pEdit->GetWindowTextLength();
	               pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
	               pEdit->ReplaceSel(EResult);
			   }
			   else{
				   signE=0;Eaddress=0x2000;
				   EResult="\r\n>";
                    CurrentlengthAll=pEdit->GetWindowTextLength();
                	pEdit->SetSel(CurrentlengthAll,CurrentlengthAll);
                	pEdit->ReplaceSel(EResult);

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

			   }
			}
		}
	}
	

}

void Casm::intexe(WORD intaddress)
{
//	AfxMessageBox("Hello");
    //signG=1;
    //IoportFlag81=0x0000;
    //IoportFlag83=0x0000;
    sp--;
	memory[sp]=pc;
    pc=intaddress;
	sp--;
	memory[sp]=flags;
    savepcsp();
    sign+=1;
    while(sign)
	{
	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;

⌨️ 快捷键说明

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