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

📄 biu.c

📁 32cpu的代码
💻 C
字号:
#include <stdio.h>
unsigned long sysad_addr;
long sysad_data[4];
char*  change_file_name(unsigned long physical_addr);

//read_write_flag  : 0    read
//read_write_flag  : 1    write
void biu(unsigned long read_write_flag){

	unsigned long file_data[16384];
	unsigned long first_instr,second_num;
	char file_path[100]={".\\Debug\\mem_"};
	char file_name[20];
	char file_type[10]={".dat"};
	int lf_i,i;
	FILE *file_data_fp;
	
	strcpy(file_name,change_file_name(sysad_addr));
	strcat(file_name,file_type);
	strcat(file_path,file_name);
	//open file
	if((file_data_fp=fopen(file_path,"r"))==NULL){ 
             printf("cannot open the file in %s !\n",file_path);
              exit(0);
          }
//          printf("a\n");
                    for(lf_i=0;lf_i<16384;lf_i++){
                    fscanf(file_data_fp,"@%8x\t\t%8x\n",&second_num,&first_instr);
                    file_data[(second_num&(0x0000ffff))/4]=first_instr;
                    if(feof(file_data_fp)){
	           //  for(i=0;i<3;i++){
	           /*  	    if((second_num&(0x0000000f)) == 0){
	             	    	file_data[lf_i+1]=0x00000000;
	             	    	file_data[lf_i+2]=0x00000000;
	             	    	file_data[lf_i+3]=0x00000000;
	             	    }else if((second_num&(0x0000000f)) == 4){
	             		file_data[lf_i+1]=0x00000000;
	             		file_data[lf_i+2]=0x00000000;
	             	    }else if((second_num&(0x0000000f)) == 8){
	             		file_data[lf_i+1]=0x00000000;
	             	    }else if((second_num&(0x0000000f)) == 12){
	             		file_data[lf_i+1]=0x00000000;
	             		file_data[lf_i+2]=0x00000000;
	             		file_data[lf_i+3]=0x00000000;
	             		file_data[lf_i+4]=0x00000000;
	             	    }else{
	             	     printf("the address in the file mem_%04x.dat is error",(sysad_addr>>16)&(0x0000ffff));
	             	    }*/
	                //   }
                       break;
                        }
                      }
                    fclose(file_data_fp);
//printf("b\n");
                /*      for(i=0;i<110;i++){
                      	printf("%08x\n",file_data[i]);
                      	}*/
          //read or write file
	if(read_write_flag == 0){
              sysad_data[0]=file_data[(sysad_addr&(0x0000fff0))/4];
              sysad_data[1]=file_data[(sysad_addr&(0x0000fff0))/4+1];
              sysad_data[2]=file_data[(sysad_addr&(0x0000fff0))/4+2];
              sysad_data[3]=file_data[(sysad_addr&(0x0000fff0))/4+3];
              #ifdef DEBUG
             // printf("%08x:  %08x  %08x %08x  %08x\n",sysad_addr,sysad_data[0],sysad_data[1],sysad_data[2],sysad_data[3]);
              #endif
	 }else if(read_write_flag == 1){
              file_data[(sysad_addr&(0x0000fff0))/4]=sysad_data[0];
              file_data[(sysad_addr&(0x0000fff0))/4+1]=sysad_data[1];
              file_data[(sysad_addr&(0x0000fff0))/4+2]=sysad_data[2];
              file_data[(sysad_addr&(0x0000fff0))/4+3]=sysad_data[3];
      
        	if((file_data_fp=fopen(file_path,"w+"))==NULL){ 
                     printf("cannot open the file in %s !\n",file_path);
                      exit(0);
                  }
//printf("c\n");
//             printf("%08x\n%08x\n%08x\n%08x\n",file_data[16380],file_data[16381],file_data[16382],file_data[16383]);
                for(i=0;i<16384;i=i+4){
      	             if((file_data[i] != 0xcccccccc)||(file_data[i+1] != 0xcccccccc)||(file_data[i+2] != 0xcccccccc)||(file_data[i+3] != 0xcccccccc)){
      	                fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4,file_data[i]);
      	                fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+4,file_data[i+1]);
      	                fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+8,file_data[i+2]);
      	                fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+12,file_data[i+3]);

                       }
                    }
//      	                printf("d\n");
                    fclose(file_data_fp);
	 }else{
	  printf("read_write_flag error in the biu module!\n");
	}
//printf("e\n");

}




char*  change_file_name(unsigned long physical_addr){
	int i,j;
	char  file_name[5];
	for(i=0;i<4;i++){
		     switch((physical_addr>>(16+i*4))&(0x0000000f))
		      {case 0 : file_name[3-i]='0';break;
		       case 1 : file_name[3-i]='1';break;
		       case 2 : file_name[3-i]='2';break;
		       case 3 : file_name[3-i]='3';break;
		       case 4 : file_name[3-i]='4';break;
		       case 5 : file_name[3-i]='5';break;
		       case 6 : file_name[3-i]='6';break;
		       case 7 : file_name[3-i]='7';break;
		       case 8 : file_name[3-i]='8';break;
		       case 9 : file_name[3-i]='9';break;
		       case 10 : file_name[3-i]='a';break;
		       case 11 : file_name[3-i]='b';break;
		       case 12 : file_name[3-i]='c';break;
		       case 13 : file_name[3-i]='d';break;
		       case 14 : file_name[3-i]='e';break;
		       case 15 : file_name[3-i]='f';break;
		       default : printf("chang file name error!\n");
			}
		}
		file_name[4]='\0';
		return(file_name);
	}

⌨️ 快捷键说明

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