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

📄 2.c

📁 z80的软件仿真程序以及源代码
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<z8.h>
main()
{struct coms cms;
struct dataseg dseg[64];
struct unknow_add adn[128];
struct know_add adk[128];
char name1[10],name2[10],name3[10];
unsigned a,m;
int i,j,b,num,over;
FILE *pf1,*pf2,*pf3,*p;
for(i=0;i<128;i++){adn[i].unad=0;adk[i].knad=0;
for(j=0;j<8;j++)
{adn[i].unf[j]=0;adk[i].knf[j]=0;}}
for(i=0;i<64;i++){dseg[i].data=0;
for(j=0;j<8;j++)dseg[i].def_data[j]=0;}
printf("Input file name(*.asm):"),
scanf("%s",name1);
madefile(name1,name2,name3);
if((pf1=fopen(name1,"r"))==NULL){printf("%s\tDon't Open",name1);exit(0);}
if((pf2=fopen(name2,"w+"))==NULL){PRE;exit(0);}
if((p=pf3=fopen(name3,"wb+"))==NULL){PRE;exit(0);}
while(!feof(pf1))
{over=0;
fprintf(pf2,"%d",No);putc('\t',pf2);fprintf(pf2,"%x",pc);putc('\t',pf2);
for(i=0;i<8;i++)cms.addf[i]=cms.com[i]=cms.di[i]=cms.si[i]=0;
b=getc(pf1);
if(b!='\n'&&b!=';'&&b!='*'){i=0;
 while(Ture(b)){cms.addf[i]=b;i++;READ1;}
while(b==32||b=='\t'||b==':')READ1;
if(b!='\n'&&b!=';'&&b!='*'){i=0;
while(Ture(b)){cms.com[i]=b;i++;READ1;}
i=0;
if(b!='\n'&&b!=';'&&b!='*')
{while(b==32||b=='\t')READ1;
while((b!=44)&&Ture(b)){cms.di[i]=b;i++;READ1;}
i=0;
if(b!='\n'&&b!=';'&&b!='*')
{while(b==32||b==','||b=='\t')READ1;
while(Ture(b)){cms.si[i]=b;i++;READ1;}
while(b==32||b=='\t'||b=='*')READ1;
while(b!='\n'&&b!=-1)READ1;}
}}}
                                                                       /*addres f*/
if(cms.addf[0]==0)putc('\t',pf2);
else
{if(strcmp(cms.com,"EQU")==0||(cms.com[0]=='=')||strcmp(cms.com,"equ")==0)
{strcpy(dseg[da].def_data,cms.addf);
dseg[da].data=ljs(cms.di);
da++;over=1;}
else
{if(strcmp(cms.addf,"ORG")==0||strcmp(cms.addf,"org")==0)
{write_lst(pf2,cms.com);over=1;
num=ljs(cms.com);if(pc>num){printf("[%d]error,addres rewrite!",No);exit(0);}
while(pc<num){pc++;b=0;putc(b,pf3);}
}else 
if(Is_char(cms.addf[0]))
{adk[adki].knad=pc;strcpy(adk[adki].knf,cms.addf);
adki++;}{putc('*',pf2);write_lst(pf2,cms.addf);}} }              /*addres.f*/
fprintf(pf2,"%s\t%s\t%s;",cms.com,cms.di,cms.si);
 putc(10,pf2);No++;if(over==1)continue;                                                                      
                                                                         /*common*/
if(cms.com!=0)
{if((((cms.com[0]=='l'&&cms.com[1]=='d')||(cms.com[0]=='L'&&cms.com[1]=='D'))&&cms.com[2]==0)
 ||(strcmp(cms.com,"mov")==0||strcmp(cms.com,"MOV")==0))
com_mov(pf3,cms,dseg);
else if(strcmp(cms.com,"push")==0||strcmp(cms.com,"PUSH")==0)
com_push(pf3,cms);
else if(strcmp(cms.com,"pop")==0||strcmp(cms.com,"POP")==0)
com_pop(pf3,cms);
else if((cms.com[0]=='e'&&cms.com[1]=='x')||(cms.com[0]=='E'&&cms.com[1]=='X'))
com_ex(pf3,cms);
else if(((cms.com[0]=='l'&&cms.com[1]=='d')||(cms.com[0]=='L'&&cms.com[1]=='D'))&&cms.com[2]!=0)
com_ld(pf3,cms);
else if(((cms.com[0]=='c'&&cms.com[1]=='p')||
(cms.com[0]=='C'&&cms.com[1]=='P'))&&Is_char(cms.com[2]))
com_cp(pf3,cms);
else if((((cms.com[0]=='c'&&cms.com[1]=='p')||(cms.com[0]=='C'&&cms.com[1]=='P'))&&cms.com[2]==0)||
(strcmp(cms.com,"cmp")==0||strcmp(cms.com,"CMP")==0))
com_cmp(pf3,cms,dseg);
else if(((cms.com[0]=='i'&&cms.com[1]=='n')&&(cms.com[2]=='i'||cms.com[2]=='d'||cms.com[2]==0))||
((cms.com[0]=='I'&&cms.com[1]=='N')&&(cms.com[2]=='I'||cms.com[2]=='D'||cms.com[2]==0)))
com_in(pf3,cms,dseg);
else if((cms.com[0]=='o'&&cms.com[1]=='u'&&cms.com[2]=='t')||
(cms.com[0]=='O'&&cms.com[1]=='U'&&cms.com[2]=='T'))com_out(pf3,cms,dseg);
else if((cms.com[0]=='a'&&cms.com[1]=='d'&&cms.com[2]=='d')||
(cms.com[0]=='A'&&cms.com[1]=='D'&&cms.com[2]=='D'))com_add(pf3,cms,dseg);
else if((cms.com[0]=='a'&&cms.com[1]=='d'&&cms.com[2]=='c')||
(cms.com[0]=='A'&&cms.com[1]=='D'&&cms.com[2]=='C'))com_adc(pf3,cms,dseg);
else if((cms.com[0]=='s'&&cms.com[1]=='u'&&cms.com[2]=='b')||
(cms.com[0]=='S'&&cms.com[1]=='U'&&cms.com[2]=='B'))com_sub(pf3,cms,dseg);
else if((cms.com[0]=='s'&&cms.com[1]=='b'&&cms.com[2]=='c')||
(cms.com[0]=='S'&&cms.com[1]=='B'&&cms.com[2]=='C'))com_sbc(pf3,cms,dseg);
else if((cms.com[0]=='a'&&cms.com[1]=='n'&&cms.com[2]=='d')||
(cms.com[0]=='A'&&cms.com[1]=='N'&&cms.com[2]=='D'))com_and(pf3,cms,dseg);
else if((cms.com[0]=='o'&&cms.com[1]=='r')||(cms.com[0]=='O'&&cms.com[1]=='R'))
com_or(pf3,cms,dseg);
else if((cms.com[0]=='x'&&cms.com[1]=='o'&&cms.com[2]=='r')||
(cms.com[0]=='X'&&cms.com[1]=='O'&&cms.com[2]=='R'))com_xor(pf3,cms,dseg);
else if((cms.com[0]=='i'&&cms.com[1]=='n'&&cms.com[2]=='c')||
(cms.com[0]=='I'&&cms.com[1]=='N'&&cms.com[2]=='C'))com_inc(pf3,cms,dseg);
else if((cms.com[0]=='d'&&cms.com[1]=='e'&&cms.com[2]=='c')||
(cms.com[0]=='D'&&cms.com[1]=='E'&&cms.com[2]=='C'))com_dec(pf3,cms,dseg);
else if((cms.com[0]=='n'&&cms.com[1]=='e'&&cms.com[2]=='g')||
(cms.com[0]=='N'&&cms.com[1]=='E'&&cms.com[2]=='G'))
{ a=0x44ed;WORD;}
else if((cms.com[0]=='c'&&cms.com[1]=='c'&&cms.com[2]=='f')||
(cms.com[0]=='C'&&cms.com[1]=='C'&&cms.com[2]=='F'))
{a=0x3f;BYTE;}
else if((cms.com[0]=='s'&&cms.com[1]=='c'&&cms.com[2]=='f')||
(cms.com[0]=='S'&&cms.com[1]=='C'&&cms.com[2]=='F'))
{a=0x37;BYTE;}
else if((cms.com[0]=='d'&&cms.com[1]=='a'&&cms.com[2]=='a')||
(cms.com[0]=='D'&&cms.com[1]=='A'&&cms.com[2]=='A'))
{a=0x27;BYTE;}
else if((cms.com[0]=='r'&&cms.com[1]=='l'&&cms.com[2]=='c')||
(cms.com[0]=='R'&&cms.com[1]=='L'&&cms.com[2]=='C'))com_rlc(pf3,cms,dseg);
else if((cms.com[0]=='r'&&cms.com[1]=='r'&&cms.com[2]=='c')||
(cms.com[0]=='R'&&cms.com[1]=='R'&&cms.com[2]=='C'))com_rrc(pf3,cms,dseg);
else if((cms.com[0]=='r'&&cms.com[1]=='r'&&cms.com[2]==0)||
(cms.com[0]=='R'&&cms.com[1]=='R'&&cms.com[2]==0))com_rr(pf3,cms,dseg);
else if((cms.com[0]=='r'&&cms.com[1]=='l'&&cms.com[2]==0)||
(cms.com[0]=='R'&&cms.com[1]=='L'&&cms.com[2]==0))com_rl(pf3,cms,dseg);
else if((cms.com[0]=='s'&&cms.com[1]=='l'&&cms.com[2]=='a')||
(cms.com[0]=='S'&&cms.com[1]=='L'&&cms.com[2]=='A'))com_sla(pf3,cms,dseg);
else if((cms.com[0]=='s'&&cms.com[1]=='r'&&cms.com[2]=='a')||
(cms.com[0]=='S'&&cms.com[1]=='R'&&cms.com[2]=='A'))com_sra(pf3,cms,dseg);
else if((cms.com[0]=='s'&&cms.com[1]=='r'&&cms.com[2]=='l')||
(cms.com[0]=='S'&&cms.com[1]=='R'&&cms.com[2]=='L'))com_srl(pf3,cms,dseg);
else if((cms.com[0]=='r'&&cms.com[1]=='l'&&cms.com[2]=='d')||
(cms.com[0]=='R'&&cms.com[1]=='L'&&cms.com[2]=='D'))
{a=0x6fed;WORD;}
else if((cms.com[0]=='r'&&cms.com[1]=='r'&&cms.com[2]=='d')||
(cms.com[0]=='R'&&cms.com[1]=='R'&&cms.com[2]=='D'))
{a=0x67ed;WORD;}
else if(strcmp(cms.com,"jp")==0||strcmp(cms.com,"jmp")==0||
strcmp(cms.com,"JP")==0||strcmp(cms.com,"JMP")==0||strcmp(cms.com,"ljmp")==0||
strcmp(cms.com,"LJMP")==0)com_jmp(pf3,cms,adk,adn);
else if((cms.com[0]=='j'&&cms.com[1]=='r')||(cms.com[0]=='J'&&cms.com[1]=='R'))
com_jr(pf3,cms);
else if(strcmp(cms.com,"djnz")==0||strcmp(cms.com,"DJNZ")==0)com_djnz(pf3,cms,adk);
else if(strcmp(cms.com,"call")==0||strcmp(cms.com,"CALL")==0)com_call(pf3,cms,adk,adn);
else if((cms.com[0]=='r'&&cms.com[1]=='e'&&cms.com[2]=='t')||
(cms.com[0]=='R'&&cms.com[1]=='E'&&cms.com[2]=='T'))com_ret(pf3,cms);
else if((cms.com[0]=='s'&&cms.com[1]=='e'&&cms.com[2]=='t')||
(cms.com[0]=='S'&&cms.com[1]=='E'&&cms.com[2]=='T'))com_set(pf3,cms,dseg);
else if((cms.com[0]=='r'&&cms.com[1]=='e'&&cms.com[2]=='s')||
(cms.com[0]=='R'&&cms.com[1]=='E'&&cms.com[2]=='S'))com_res(pf3,cms,dseg);
else if((cms.com[0]=='b'&&cms.com[1]=='i'&&cms.com[2]=='t')||
(cms.com[0]=='B'&&cms.com[1]=='I'&&cms.com[2]=='T'))com_bit(pf3,cms,dseg);
else if((cms.com[0]=='d'&&cms.com[1]=='i')||(cms.com[0]=='D'&&cms.com[1]=='I')){a=0xf3;BYTE;}
else if((cms.com[0]=='e'&&cms.com[1]=='i')||(cms.com[0]=='E'&&cms.com[1]=='I')){a=0xfb;BYTE;}
else if((cms.com[0]=='i'&&cms.com[1]=='m')||(cms.com[0]=='I'&&cms.com[1]=='M'))
{if(cms.com[2]=='0')a=0x46ed;else if(cms.com[2]=='1')a=0x56ed;else if(cms.com[2]=='2')a=0x5eed;
 WORD;}
else if((cms.com[0]=='r'&&cms.com[1]=='s'&&cms.com[2]=='t')||
(cms.com[0]=='R'&&cms.com[1]=='S'&&cms.com[2]=='T'))
{a=0xc7;m=bit_b(cms.di);a=a+m;BYTE;}
else if((cms.com[0]=='n'&&cms.com[1]=='o'&&cms.com[2]=='p')||
(cms.com[0]=='N'&&cms.com[1]=='O'&&cms.com[2]=='P')){a=0;BYTE;}
else if(strcmp(cms.com,"halt")==0||strcmp(cms.com,"HALT")==0){a=0x76;BYTE;}
else PREC(cms.com);
}}
for(i=0;i<adni;i++)
{pc=0;
 for(j=0;j<=adki;j++)
  {if(strcmp(adn[i].unf,adk[j].knf)==0)
    {a=adk[j].knad;fseek(pf3,adn[i].unad,0);WORD;j=adki+1;
    }
   }if(pc==0)printf("[%s]AT[%x]Don't find\n",adn[i].unf,adn[i].unad);
}
fclose(pf1);fclose(pf2);fclose(pf3);}

⌨️ 快捷键说明

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