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

📄 fat32mountpartition.c

📁 c51文件系统源码
💻 C
字号:
#ifndef _FAT32_DEFINE
 #include "FAT32.c"
#endif

BYTE FAT32MountPartition(void);

BYTE FAT32MountPartition(void)
{
	register BYTE i,j,k;
	xdata DWORD temp[4]={0,0,0,0};

	IDEReadSector(0);				//读MBR扇区

	//检查MBR扇区标记
 	if (DiskBuffer[510] != 0x55||DiskBuffer[511] != 0xaa)
		return(FAT32_ERR_MBR_FLAG);			//不正常的引导扇区标志

	//加载分区表
	j=0;k=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==0x0b)			//FAT32 分区
		{
			sDPT[j].TypeCode = DPT[i].TypeCode;
			sDPT[j].LBABegin = DPT[i].LBABegin;
			sDPT[j].CntSec = DPT[i].CntSec;
			j++;
		}
		else if (DPT[i].TypeCode==0x05||DPT[i].TypeCode==0x0f)		//扩展分区
		{
			temp[k]=DPT[i].LBABegin;
			k++;
		}
	}
	
	for(i=0;i<k&&j<16;i++)
	{
		IDEReadSector(temp[i]);
		DPT[i].LBABegin=MEMSwap32(DPT[i].LBABegin);
		DPT[i].CntSec=MEMSwap32(DPT[i].CntSec);
		if (DPT[i].TypeCode==0x0b)			//FAT32 分区
		{
			sDPT[j].TypeCode = DPT[i].TypeCode;
			sDPT[j].LBABegin = temp[i] + DPT[i].LBABegin;
			sDPT[j].CntSec = DPT[i].CntSec;
			j++;
		}
	}
	HDD.TotalPartitions=j;
	#ifdef DEBUG
		printf("Partition Table\n");
		printf("PNo.\tType\tLBAStart\tCount\tSize\n");
		for(i=0;i<HDD.TotalPartitions;i++)
		{
			printf("P%bd\t%bx\t%ld\t\t%ld\t%ldMB\n",i,sDPT[i].TypeCode,sDPT[i].LBABegin,sDPT[i].CntSec,sDPT[i].CntSec*512/1024/1024);
		}
	#endif
	return(0);
}

⌨️ 快捷键说明

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