- 注册时间
- 2004-12-11
- 最后登录
- 1970-1-1
|
发表于 2007-7-2 18:21:48
|
显示全部楼层
原型 long System.RamRead(char data[],long offset,int size)
功能 读取地址为offset的size字节的内容到data中。offset的1,2字节是段内偏移,3字节是段号
0x00000000--0x00008000:RAM
0x00008000--0x00028000:==0x00038000--0x00058000
0x00028000--0x00030000:RAM
0x00030000--0x00130000:Nor
0x00033000--0x00033010:ggv TC800
0x00120000--0x00130000:文件系统
SuperBlock:偏移11 ,大小100
映射表 :偏移800,大小1000
fat表 :偏移1000,大小E000
///////////////////////////////////////应用///////////////////////
long getngffs()
{char buf[12];
System.RamRead(buf,0x120008,12);
if(buf[0]!=0xff)return(0x120000);else return(0x128000);
}
void loaddir(char &dir[])
{char buf[60];
strcpy(buf,dir);
if(strcmp(buf,"/")){strcat(buf,"/");ChDir(buf);}
else ChDir("/LAVA2");
}
int findfile(int start,int n,char &buf[],char &dir[])
{int i;
loaddir(dir);memmove(buf,(start<<4)+0xAA62,n<<4);if(!start)strcpy(buf,"..");ChDir(dir);
for(i=0;i<n;i++){if(buf[i<<4]==0xff)break;}
return(i);
}
int getfilenum(char &dir[])
{int i;
loaddir(dir);
for(i=1;*((i<<4)+0xAA62)!=0xff;i++);
ChDir(dir);return(i);
}
void getinode(char &attr[],char &name[],char &dir[])
{long addrs,offset;
int id,i,j;
char buf[10][32];
loaddir(dir);for(addrs=0xAA72;strcmp(addrs,name);addrs=addrs+16);id=(int *)(addrs-2);ChDir(dir);
offset=getngffs()+0x1000;
for(i=0;i<205;i++)
{System.RamRead(buf,offset+i*160,320);
for(j=0;j<10;j++){if(id==(int *)buf[j]&&buf[j][4]==0xc0){memmove(attr,buf[j],32);return;}}
}
}
void getver(char &ver[])
{long offset;
offset=getngffs();
System.RamRead(ver,offset+8,12);ver[12]=0;
}
long diskcheck()
{long offset;
int i,j,size;
char buf[256];
offset=getngffs();System.RamRead(buf,offset+0x11,256);
for(i=size=0;i<256;i++){for(j=0;j<8;j++){if((buf<<j)&0x80)size++;}}
return(size<<4);
}
long diskbad()
{long offset;
int i,bad,buf[2048];
offset=getngffs();System.RamRead(buf,offset+0x800,4096);
for(i=bad=0;i<2048;i++){if(buf<0||buf>2047)bad++;}
return(bad-1);
}
////////////////////////////////////////////////////////////////////////// |
|