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

📄 uasm.cpp

📁 模拟了tec2000的所有功能
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	addr++;
}
void CUasm::sbb(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	int SR;
	byte_t sd;
	in_file.read((char*)&sd,sizeof(byte_t));
	DR=(sd&0xf0)>>4;
	SR=sd&0x0f;                           //sd与0x0f按位与之后即得SR
	 
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tSBB   R"<<dec<<DR<<", R"<<SR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 21";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::rcl(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tRCL   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2A";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::rcr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tRCR   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2B";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::asr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tASR   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2C";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::not(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tNOT   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 2D";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::jmpr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	

	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tJMPR   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 60";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::jrs(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	char OFFSET;                                 //OFFSET用于存放跳转偏移量
	in_file.read((char*) &OFFSET,sizeof(byte_t));
	char myout[4];
	unsigned short my=OFFSET+addr+1;
	sprintf(myout,"%4.4X",my);
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tJRS    "<<myout<<'h'<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 64";
		if((int)OFFSET<0x10)out_file<<"0"<<hex<<(int)OFFSET;
		else out_file<<hex<<(int)OFFSET;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::jrns(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	char OFFSET;                                 //OFFSET用于存放跳转偏移量
	in_file.read((char*) &OFFSET,sizeof(byte_t));
	char myout[4];
	unsigned short my=OFFSET+addr+1;
	sprintf(myout,"%4.4X",my);
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tJRNS   "<<myout<<'h'<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 65";
		if((int)OFFSET<0x10)out_file<<"0"<<hex<<(int)OFFSET;
		else out_file<<hex<<(int)OFFSET;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::clc(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t single;//
	in_file.read((char*)&single,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tCLC"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6C";
		if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
		else out_file<<hex<<(int)single;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::stc(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t single;//
	in_file.read((char*)&single,sizeof(byte_t));
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tSTC"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6D";
		if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
		else out_file<<hex<<(int)single;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::ei(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t single;//
	in_file.read((char*)&single,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tEI"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6E";
		if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
		else out_file<<hex<<(int)single;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::di(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t single;//
	in_file.read((char*)&single,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDI"<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW 6F";
		if((int)single<0x10)out_file<<"0"<<hex<<(int)single;
		else out_file<<hex<<(int)single;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::calr(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	int DR;
	byte_t sd;
	in_file.read((char*) &sd, sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tCALR   R"<<dec<<DR<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E0";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::ldra(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t sd;
	int DR;
	in_file.read((char*) &sd,sizeof(byte_t));
	DR=(sd&(0xf0))>>4;
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	

	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tLDRA  R"<<dec<<DR<<" , ";
	if(int(ADR_H)<0x10||int(ADR_H)>=0xa0)
		out_file<<'['<<hex<<"0"<<(int)ADR_H;
	else
		out_file<<'['<<hex<<(int)ADR_H;
	if(int(ADR_L)<0x10)
		out_file<<"0"<<(int)ADR_L;
	else
		out_file<<(int)ADR_L;
	out_file<<"h"<<']'<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E4";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ";
		if((int)ADR_H<0x10)out_file<<"0"<<hex<<(int)ADR_H;
		else out_file<<hex<<(int)ADR_H;
		if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
		out_file<<"h"<<endl;
	}

	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::ldrx(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t sd;
	int DR;
	int SR;
	in_file.read((char*) &sd,sizeof(byte_t));
	SR=(sd&(0x0f));
	DR=(sd&(0xf0))>>4;
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tLDRX  R"<<dec<<DR<<" , ";
	if(int(ADR_H)<0x10||int(ADR_H)>=0xa0)
		out_file<<hex<<"0"<<(int)ADR_H;
	else
		out_file<<hex<<(int)ADR_H;
	if(int(ADR_L)<0x10)
		out_file<<"0"<<(int)ADR_L;
	else
		out_file<<(int)ADR_L;
	out_file<<"h"<<'[';
	out_file<<"R"<<dec<<DR<<']'<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E5";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW ";
		if((int)ADR_H<0x10)out_file<<"0"<<hex<<(int)ADR_H;
		else out_file<<hex<<(int)ADR_H;
		if(int(ADR_L)<0x10)
		    out_file<<"0"<<(int)ADR_L;
	    else
		    out_file<<(int)ADR_L;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";
	j=(j+1)%8;
	addr++;
}
void CUasm::strx(ifstream& in_file,ofstream& out_file,ofstream& out_file1)
{
	byte_t ADR_L;
	byte_t ADR_H;
	byte_t sd;
	int DR;
	int SR;
	in_file.read((char*) &sd,sizeof(byte_t));
	SR=(sd&(0x0f));
	DR=(sd&(0xf0))>>4;
	in_file.read((char*)&ADR_H,sizeof(byte_t));
    in_file.read((char*)&ADR_L,sizeof(byte_t));
	
	
	if(j==0)
	{out_file1<<'\n'<<hex<<setfill('0')<<setw(4)<<addr<<":   ";}
	if(sign[addr-address]==1)
	{	out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tSTRX  R"<<dec<<DR<<" , ";
	if(int(ADR_H)<0x10||int(ADR_H)>=0xa0)
		out_file<<hex<<"0"<<(int)ADR_H;
	else
		out_file<<hex<<(int)ADR_H;
	if(int(ADR_L)<0x10)
		out_file<<"0"<<(int)ADR_L;
	else
		out_file<<(int)ADR_L;
	out_file<<"h"<<'[';
	out_file<<"R"<<dec<<DR<<']'<<endl;
	    out_file1<<"p  ";
	}
	else if(sign[addr-address]==2)
	{
		out_file1<<"w  ";
		out_file<<hex<<setfill('0')<<setw(4)<<addr<<": \tDW E6";
		if((int)sd<0x10)out_file<<"0"<<hex<<(int)sd;
		else out_file<<hex<<(int)sd;
		out_file<<"h"<<endl;
	}
	else out_file1<<"#  ";

⌨️ 快捷键说明

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