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

📄 2c4.c

📁 z80的软件仿真程序以及源代码
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<z8.h>

void com_mov(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a=0,n=0,m=0;
int i,j,xz=0;
if(Is_char(cms.di[0])&&cms.di[1]==0)
{                                 /*res*/
if(Is_char(cms.si[0])&&cms.si[1]==0)
{a=0x40;m=bit_di(cms.di);
if(m<=0x38){n=bit_si(cms.si);if(n<=0x7){a=a+m+n;BYTE;return;}else xz=1;}
else xz=1;}if(xz==1)
{if(cms.di[0]=='a'||cms.di[0]=='A')
{
if(cms.si[0]=='r'||cms.si[0]=='R'){a=0x5fed;WORD;return;}
else if(cms.si[0]=='i'||cms.si[0]=='I'){a=0x57ed;WORD;return;}
else{PREC(cms.si);exit(0);}}
else if(cms.si[0]=='a'||cms.si[0]=='A')
{if(cms.di[0]=='r'||cms.di[0]=='R'){a=0x4fed;WORD;return;}
else if(cms.di[0]=='i'||cms.di[0]=='I'){a=0x47ed;WORD;return;}
else{PREC(cms.di);exit(0);}}else{PREC(cms.si);exit(0);}}                                               
                                /*ljs*/
else if(cms.si[0]=='#'){a=0x6;m=bit_di(cms.di);a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}if(Is_num(cms.si[0]))
a=ljs(cms.si);
if(!(Is_num(cms.si[0]))){ i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}if(a>0xff){OVER(a);exit(0);}BYTE;return;}
                                /*mem*/
else if(cms.si[0]=='@')
{if(cms.di[0]!='a'&&cms.di[0]!='A'){PREC(cms.si);exit(0);}
a=0x3a;BYTE;for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
				/*ljs*/
if(Is_num(cms.si[0]))a=ljs(cms.si);

else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}
				/*res*//*HL*/
if(cms.si[0]=='('||cms.si[0]=='[')

{ for(i=1;Ture(cms.si[i])&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
{j=i-1;cms.si[j]=cms.si[i];}cms.si[i-1]=0;
if((cms.si[0]=='h'||cms.si[0]=='H')&&(cms.si[1]=='l'||cms.si[1]=='L'))
{n=0x46; 
m=bit_di(cms.di);if(n==0xff){PREC(cms.di);exit(0);}
a=a+m+n;BYTE;return;}
                                /*ix*/
if((cms.si[0]=='i'||cms.si[0]=='I')&&cms.si[1]!=0)
{if(cms.si[1]=='x'||cms.si[1]=='X')
 {a=0xdd;BYTE;a=0x46;m=bit_di(cms.di);a=a+m;BYTE;
 if(cms.si[2]=='+')
  {j=0;
   for(i=3;(Ture(cms.si[i]))&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
      {cms.si[j]=cms.si[i];j++;}cms.si[j]=0;
       if(Is_num(cms.si[0]))a=ljs(cms.si);
       else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
       a=dseg[i].data;}
       if(a>0xff){OVER(a);exit(0);}}
      else a=0;BYTE;return;} 
                                /*iy*/
else  if(cms.si[1]=='y'||cms.si[1]=='Y')
 {a=0xfd;BYTE;a=0x46;m=bit_di(cms.di);a=a+m;BYTE;
  if(cms.si[2]=='+')
   {j=0;if(cms.si[3]==0)i=4;else i=3;
     for(i=3;(Ture(cms.si[i]))&&cms.si[i]!=')'&&cms.si[i]!=']';i++)
	{cms.si[j]=cms.si[i];j++;}cms.si[j]=0;
        if(Is_num(cms.si[0]))a=ljs(cms.si);
        else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
        a=dseg[i].data;}
        if(a>0xff){OVER(a);exit(0);}}
        else a=0;BYTE;return;}else {PREC(cms.si);exit(0);} 
}
                              /*BC,DE*/
if(cms.di[0]=='a'||cms.di[0]=='A')
{if((cms.si[0]=='b'||cms.si[0]=='B')&&(cms.si[1]=='c'||cms.si[1]=='C'))
{a=0x0a; BYTE;return;}
if((cms.si[0]=='d'||cms.si[0]=='D')&&(cms.si[1]=='e'||cms.si[1]=='E'))
{a=0x1a;BYTE;return;} }}}


                               /*WORD MOV*/
else
if(Is_char(cms.di[0])&&Is_char(cms.di[1]))
{ if(cms.di[0]=='i'||cms.di[0]=='I')
{if(cms.di[1]=='x'||cms.di[1]=='X')
{a=0x21dd;WORD;if(cms.si[0]=='#'){for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}}
else if(cms.di[1]=='Y'||cms.di[1]=='y')
{a=0x21fd;WORD;if(cms.si[0]=='#'){for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.di);exit(0);}}else{PREC(cms.di);exit(0);}}
				/*sp*/
else if(strcmp(cms.di,"sp")==0||strcmp(cms.di,"SP")==0)
{if(strcmp(cms.si,"hl")==0||strcmp(cms.si,"HL")==0){a=0xf9;BYTE;return;}
else if(strcmp(cms.si,"ix")==0||strcmp(cms.si,"IX")==0){a=0xf9dd;WORD;return;}
else if(strcmp(cms.si,"IY")==0||strcmp(cms.si,"iy")==0){a=0xf9fd;WORD;return;}
 }
                                  /*ljs*/
if(cms.si[0]=='#')
{a=0x01;m=word_bit(cms.di);a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}
                               /*mem*/
else if(cms.si[0]=='@')
{a=0xed;BYTE;a=0x4b;m=word_bit(cms.di);
if(m==0xff){PREC(cms.di);exit(0);}a=a+m;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.si);exit(0);}}
                              /*reg>>mem*//*byte*/

else
if(cms.di[0]=='@')
{if((cms.si[0]=='a'||cms.si[0]=='A')&&cms.si[1]==0)
{a=0x32;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}WORD;return;}
                                 /*word*/
else 
if(Is_char(cms.si[0])&&Is_char(cms.si[1]))
{a=0xed;BYTE;a=0x43;m=word_bit(cms.si);
if(m==0xff){PREC(cms.si);exit(0);}a=a+m;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}WORD;return;}else{PREC(cms.si);exit(0);} }
                                   /*regs*//*hl*/
else
if(cms.di[0]=='('||cms.di[0]=='[')
{for(i=0;Ture(cms.di[i])&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{j=i+1;cms.di[i]=cms.di[j];}cms.di[i-1]=0;
if(Is_char(cms.di[0]))
{a=0x40;m=bit_di(cms.di);
if(m!=0xff){n=bit_si(cms.si);if(n==0xff){PREC(cms.di);exit(0);}
a=a+m+n;BYTE;return;}}
                               /*BC,DE*/

if(m==0xff&&(cms.si[0]=='a'||cms.si[0]=='A'))
{if((cms.di[0]=='b'||cms.di[0]=='B')&&(cms.di[1]=='c'||cms.di[1]=='C'))
{a=0x02;BYTE;return;}
if((cms.di[0]=='d'||cms.di[0]=='D')&&(cms.di[1]=='e'||cms.di[1]=='E'))
{a=0x12;BYTE;return;}}
                               /*ix*/
if((cms.di[0]=='i'||cms.di[0]=='I')&&cms.di[1]!=0)
{if(cms.di[1]=='x'||cms.di[1]=='X')
 {a=0xdd;BYTE;a=0x70;n=bit_si(cms.si);a=a+n;BYTE;
 if(cms.di[2]=='+')
  {j=0;if(cms.di[3]==0)i=4;else i=3;
   for(;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
      {cms.di[j]=cms.di[i];j++;}cms.di[j]=0;
       if(Is_num(cms.di[0]))a=ljs(cms.di);
       else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
       a=dseg[i].data;}
       if(a>0xff){OVER(a);exit(0);}}
      else a=0;BYTE;return;} 
                                /*iy*/
if(cms.di[1]=='y'||cms.di[1]=='Y')
 {a=0xfd;BYTE;a=0x70;n=bit_si(cms.si);a=a+n;BYTE;
  if(cms.di[2]=='+')
   {j=0;if(cms.di[3]==0)i=4;else i=3;
     for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
	{cms.di[j]=cms.di[i];j++;}cms.di[j]=0;
        if(Is_num(cms.di[0]))a=ljs(cms.di);
        else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
        a=dseg[i].data;}
        if(a>0xff){OVER(a);exit(0);}}
        else a=0;BYTE;return;} printf("[%d]Error!",No-1);exit(0);}
printf("[%d]Error!",No-1);exit(0);}printf("[%d]Error!",No-1);exit(0);}

void com_push(FILE *p,struct coms cms)
{unsigned int a,m;
a=0xc5;m=word_bit(cms.di);if(m>0x30){PREC(cms.di);exit(0);}
a=a+m;BYTE;return;}

void com_pop(FILE *p,struct coms cms)
{unsigned int a,m;
a=0xc1;m=word_bit(cms.di);if(m>0x30){PREC(cms.di);exit(0);}
a=a+m;BYTE;return;}

void com_ex(FILE *p,struct coms cms)
{unsigned int a;
if(cms.com[2]=='x'||cms.com[2]=='X'){a=0xd9;BYTE;return;}
if(cms.di[0]=='('||cms.di[0]=='[')
{if(strcmp(cms.di,"(sp)")==0||strcmp(cms.di,"(SP)")==0
||strcmp(cms.di,"[sp]")==0||strcmp(cms.di,"[SP]")==0)
{if((cms.si[0]=='h'&&cms.si[1]=='l')||(cms.si[0]=='H'&&cms.si[1]=='L'))
{a=0xe3;BYTE;return;}
else if((cms.si[0]=='i'&&cms.si[1]=='x')||(cms.si[0]=='I'&&cms.si[1]=='X'))
{a=0xe3dd;WORD;return;}
else if((cms.si[0]=='i'&&cms.si[1]=='y')||(cms.si[0]=='I'&&cms.si[1]=='Y'))
{a=0xe3fd;WORD;return;}else{PREC(cms.si);exit(0);}}else{PREC(cms.di);exit(0);}}
else if((cms.di[0]=='d'&&cms.di[1]=='e')||(cms.di[0]=='D'&&cms.di[1]=='E'))
{if((cms.si[0]=='h'&&cms.si[1]=='l')||(cms.si[0]=='H'&&cms.si[1]=='L'))
{a=0xeb;BYTE;return;} else{PREC(cms.si);exit(0);}}
else if((cms.di[0]=='a'&&cms.di[1]=='f')||(cms.di[0]=='A'&&cms.di[1]=='F'))
{if(strcmp(cms.si,"a'f'")==0||strcmp(cms.si,"A'F'")==0)
{a=0x08;BYTE;return;} else{PREC(cms.si);exit(0);}}
else if(cms.si[0]=='('||cms.si[0]=='[')
{if(strcmp(cms.si,"(sp)")==0||strcmp(cms.si,"(SP)")==0
||strcmp(cms.si,"[sp]")==0||strcmp(cms.si,"[SP]")==0)
{if((cms.di[0]=='h'&&cms.di[1]=='l')||(cms.di[0]=='H'&&cms.di[1]=='L'))
{a=0xe3;BYTE;return;}
else if((cms.di[0]=='i'&&cms.di[1]=='x')||(cms.di[0]=='I'&&cms.di[1]=='X'))
{a=0xe3dd;WORD;return;}
else if((cms.di[0]=='i'&&cms.di[1]=='y')||(cms.di[0]=='I'&&cms.di[1]=='Y'))
{a=0xe3fd;WORD;return;}else{PREC(cms.di);exit(0);}}else{PREC(cms.si);exit(0);}}
else if((cms.si[0]=='d'&&cms.si[1]=='e')||(cms.si[0]=='D'&&cms.si[1]=='E'))
{if((cms.di[0]=='h'&&cms.di[1]=='l')||(cms.di[0]=='H'&&cms.di[1]=='L'))
{a=0xeb;BYTE;return;} else{PREC(cms.di);exit(0);}}
else if((cms.si[0]=='a'&&cms.si[1]=='f')||(cms.si[0]=='A'&&cms.si[1]=='F'))
{if(strcmp(cms.di,"a'f'")==0||strcmp(cms.di,"A'F'")==0)
{a=0x08;BYTE;return;} else{PREC(cms.di);exit(0);}}
else{PREC(cms.di);exit(0);}}

void com_ld(FILE *p,struct coms cms)
{ unsigned int a;
if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb0ed;WORD;return;}
else if(cms.com[3]==0){a=0xa0ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb8ed;WORD;return;}
else if(cms.com[3]==0){a=0xa8ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else{PREC(cms.com);exit(0);}}

void com_cp(FILE *p,struct coms cms)
{ unsigned int a;
if(Is_char(cms.com[2]))
{if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb1ed;WORD;return;}
else if(cms.com[3]==0){a=0xa1ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb9ed;WORD;return;}
else if(cms.com[3]==0){a=0xa9ed;WORD;return;}
else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='l'||cms.com[2]=='L'){a=0x2f;BYTE;return;}}
PREC(cms.com);exit(0);}

void com_cmp(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,n;
int i,j;
if(Is_char(cms.di[0])){a=0xb8;n=bit_si(cms.di);
if(n<=0x7){a=a+n;BYTE;return;}else {PREC(cms.di);exit(0);}}
else if(cms.di[0]=='#')
{a=0xfe;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0])){a=ljs(cms.di);
if(a>0xff){OVER(a);exit(0);}else{BYTE;return;}}
else{i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;if(a>0xff){OVER(a);exit(0);} BYTE;return;}}
else 
if(cms.di[0]=='('||cms.di[0]=='[')
{for(i=1;Ture(cms.di[i])&&cms.di[i]!=')'&&cms.di[i]!=']';i++)
{j=i-1;cms.di[j]=cms.di[i];}cms.di[i-1]=0;
if((cms.di[0]=='h'||cms.di[0]=='H')&&(cms.di[1]=='l'||cms.di[1]=='L'))
{a=0xbe;BYTE;return;}
                                
else if(cms.di[0]=='i'||cms.di[0]=='I')
{if(cms.di[1]=='x'||cms.di[1]=='X')
 {a=0xbedd;WORD;if(cms.di[2]=='+')
  {j=0;
   for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++,j++)
      {cms.di[j]=cms.di[i];}cms.di[j]=0;
       if(Is_num(cms.di[0]))a=ljs(cms.di);
       else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.si);exit(0);}
       a=dseg[i].data;}
       if(a>0xff){OVER(a);exit(0);}}
      else a=0;BYTE;return;} 
                                
else if(cms.di[1]=='y'||cms.di[1]=='Y')
 {a=0xbefd;WORD;if(cms.di[2]=='+')
   {j=0;
     for(i=3;(Ture(cms.di[i]))&&cms.di[i]!=')'&&cms.di[i]!=']';i++,j++)
	{cms.di[j]=cms.di[i];}cms.di[j]=0;
        if(Is_num(cms.di[0]))a=ljs(cms.di);
        else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
        a=dseg[i].data;}
        if(a>0xff){OVER(a);exit(0);}}
        else a=0;BYTE;return;} 
else{PREC(cms.di);exit(0);}}else{PREC(cms.di);exit(0);}
}}

void com_in(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,m;
int i,j;
 if(cms.com[2]==0)
{if(cms.si[0]=='@'&&(cms.di[0]=='a'||cms.di[0]=='A'))
{a=0xdb;BYTE;
for(i=0;Ture(cms.si[i]);i++)
{j=i+1;cms.si[i]=cms.si[j];}
if(Is_num(cms.si[0]))a=ljs(cms.si);
else {i=find_da(dseg,cms.si);if(i==-1){PREC(cms.si);exit(0);}
a=dseg[i].data;}if(a>0xff){PREC(cms.si);exit(0);}BYTE;return;}
else if((cms.si[0]=='['||cms.si[0]=='(')&&(cms.si[1]=='c'||cms.si[1]=='C'))
{a=0xed;BYTE;a=0x40;m=bit_di(cms.di);if(m!=0xff){a=a+m;BYTE;return;}
printf("[%d]Error!",No-1);exit(0);}}
else if(cms.com[2]=='i'||cms.com[2]=='I')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xb2ed;WORD;return;}
else if(cms.com[3]==0){a=0xa2ed;WORD;return;}else{PREC(cms.com);exit(0);}}
else if(cms.com[2]=='d'||cms.com[2]=='D')
{if(cms.com[3]=='r'||cms.com[3]=='R'){a=0xbaed;WORD;return;}
else if(cms.com[3]==0){a=0xaaed;WORD;return;}else {PREC(cms.com);exit(0);}}
printf("[%d]Error!",No-1);exit(0);}

void com_out(FILE *p,struct coms cms,struct dataseg dseg[64])
{unsigned int a,m;
int i,j;
 if(cms.com[3]==0)
{if(cms.di[0]=='@'&&(cms.si[0]=='a'||cms.si[0]=='A'))
{a=0xd3;BYTE;
for(i=0;Ture(cms.di[i]);i++)
{j=i+1;cms.di[i]=cms.di[j];}
if(Is_num(cms.di[0]))a=ljs(cms.di);
else {i=find_da(dseg,cms.di);if(i==-1){PREC(cms.di);exit(0);}
a=dseg[i].data;}if(a>0xff){PREC(cms.di);exit(0);}BYTE;return;}
else if((cms.di[0]=='['||cms.di[0]=='(')&&(cms.di[1]=='c'||cms.di[1]=='C'))
{a=0xed;BYTE;a=0x41;m=bit_di(cms.si);           
if(m!=0xff){a=a+m;BYTE;return;}
printf("[%d]Error!",No-1);exit(0);}}
else if(cms.com[3]=='i'||cms.com[3]=='I')
{if(cms.com[4]=='r'||cms.com[4]=='R'){a=0xb3ed;WORD;return;}
else if(cms.com[4]==0){a=0xa3ed;WORD;return;}else{PREC(cms.com);exit(0);}}
else if(cms.com[3]=='d'||cms.com[3]=='D')
{if(cms.com[4]=='r'||cms.com[4]=='R'){a=0xbbed;WORD;return;}
else if(cms.com[4]==0){a=0xabed;WORD;return;}else {PREC(cms.com);exit(0);}}
printf("[%d]Error!",No-1);exit(0);}

⌨️ 快捷键说明

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