📄 fatmountpartition.c
字号:
#ifndef _FAT_DEFINE
#include "FAT.c"
#endif
BYTE FATMountPartition(void);
BYTE FATMountPartition(void)
{
register BYTE i,j=0;
xdata DWORD MasterExtLBA,ExtLBA;
bit Master=1,Ext=1;
MasterExtLBA=0x00000000;
ExtLBA=0x00000000;
while(Ext)
{
if (StorageMedia.ReadSector(ExtLBA,DiskBuffer)) {printf("I/O error");return(0);} //读MBR扇区
// IDEReadSector(ExtLBA,DiskBuffer);
Ext=0;
//检查MBR扇区标记
if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
{printf("55AA\n"); return(0);} //不正常的引导扇区标志
//加载分区表
for(i=0;i<4;i++)
{
DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
if (DPT[i].TypeCode==0x01||
DPT[i].TypeCode==0x04||
DPT[i].TypeCode==0x06||
DPT[i].TypeCode==0x0b||
DPT[i].TypeCode==0x0c||
DPT[i].TypeCode==0x0e) //FAT 分区
{
sDPT[j].LBABegin = DPT[i].LBABegin + ExtLBA;
sDPT[j].CntSec = DPT[i].CntSec;
j++;
if (j==FAT_MAX_PARTITIONS) return(j);
}
else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f) //扩展分区
{
Ext=1;
if (Master)
{
ExtLBA=DPT[i].LBABegin;
MasterExtLBA=DPT[i].LBABegin;
Master=~Master;
}
else
{
ExtLBA=MasterExtLBA+DPT[i].LBABegin;
}
}
}
}
return(j);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -