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