📄 format.c
字号:
parameter.SectorIndex = 0 + Disk->SecOffset;
parameter.RsvdForLow = Disk->RsvdForLow;
parameter.Buf = FormatBuf;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
/* 初始化 FAT和根目录 */
cp2 = FormatBuf + 4;
FormatBuf[0] = 0xf0;
FormatBuf[1] = 0xff;
FormatBuf[2] = 0xff;
FormatBuf[3] = 0xff;
for (j = 4; j < BytsPerSec; j++)
{
*cp2++ = 0;
}
for (j = 0; j < temp; j++)
{
parameter.SectorIndex = j + 1 + Disk->SecOffset;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
FormatBuf[0] = 0;
FormatBuf[1] = 0;
FormatBuf[2] = 0;
FormatBuf[3] = 0;
}
i = (i * 32) / BytsPerSec;
temp++;
for (j = 0; j < i; j++)
{
parameter.SectorIndex = j + temp + Disk->SecOffset;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
}
}
else /* FAT32 */
{
/* 保留扇区数 */
FormatBuf[14] = 12;
FormatBuf[15] = 0;
/* 根目录FDT项数 */
FormatBuf[17] = 0;
FormatBuf[18] = 0;
/* FAT表占用扇区数 */
FormatBuf[22] = 0;
FormatBuf[23] = 0;
temp1 = (SecPerDisk * 4 + BytsPerSec - 12) / BytsPerSec;
FormatBuf[36] = temp1 & 0xff;
FormatBuf[37] = (temp1 >> 8) & 0xff;
FormatBuf[38] = (temp1 >> 16) & 0xff;
FormatBuf[39] = (temp1 >> 24) & 0xff;
/* FAT32 RootDirTable为开始簇号 */
FormatBuf[44] = 2;
FormatBuf[45] = 0;
FormatBuf[46] = 0;
FormatBuf[47] = 0;
FormatBuf[40] = 0;
FormatBuf[41] = 0;
FormatBuf[42] = 0;
FormatBuf[43] = 0;
FormatBuf[48] = 1;
FormatBuf[49] = 0;
FormatBuf[50] = 6; /* 6? */
FormatBuf[51] = 0;
FormatBuf[52] = 0;
FormatBuf[53] = 0;
FormatBuf[82] = 'F';
FormatBuf[83] = 'A';
FormatBuf[84] = 'T';
FormatBuf[85] = '3';
FormatBuf[86] = '2';
FormatBuf[87] = ' ';
FormatBuf[88] = ' ';
FormatBuf[89] = ' ';
parameter.SectorIndex = 0 + Disk->SecOffset;
parameter.RsvdForLow = Disk->RsvdForLow;
parameter.Buf = FormatBuf;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
parameter.SectorIndex = 6 + Disk->SecOffset;
parameter.RsvdForLow = Disk->RsvdForLow;
parameter.Buf = FormatBuf;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
cp2 = FormatBuf;
for (j = 0; j < BytsPerSec; j++)
{
*cp2++ = 0;
}
FormatBuf[0] = 0x52;
FormatBuf[1] = 0x52;
FormatBuf[2] = 0x61;
FormatBuf[3] = 0x41;
FormatBuf[484] = 0x72;
FormatBuf[485] = 0x72;
FormatBuf[486] = 0x41;
FormatBuf[487] = 0x61;
FormatBuf[488] = 0xff;
FormatBuf[489] = 0xff;
FormatBuf[490] = 0xff;
FormatBuf[491] = 0xff;
FormatBuf[492] = 0x02;
FormatBuf[493] = 0x00;
FormatBuf[494] = 0x00;
FormatBuf[495] = 0x00;
FormatBuf[508] = 0x00;
FormatBuf[509] = 0x00;
FormatBuf[510] = 0x55;
FormatBuf[511] = 0xaa;
parameter.SectorIndex = 1 + Disk->SecOffset;
parameter.RsvdForLow = Disk->RsvdForLow;
parameter.Buf = FormatBuf;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
parameter.SectorIndex = 7 + Disk->SecOffset;
parameter.RsvdForLow = Disk->RsvdForLow;
parameter.Buf = FormatBuf;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
/* 初始化 FAT和根目录 */
cp2 = FormatBuf + 12;
FormatBuf[0] = 0xf0;
FormatBuf[1] = 0xff;
FormatBuf[2] = 0xff;
FormatBuf[3] = 0xff;
FormatBuf[4] = 0xff;
FormatBuf[5] = 0xff;
FormatBuf[6] = 0xff;
FormatBuf[7] = 0xff;
FormatBuf[8] = 0xf8;
FormatBuf[9] = 0xff;
FormatBuf[10] = 0xff;
FormatBuf[11] = 0x0f;
for (j = 12; j < BytsPerSec; j++)
{
*cp2++ = 0;
}
//temp += 2;
parameter.SectorIndex = 12 + Disk->SecOffset;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
FormatBuf[0] = 0;
FormatBuf[1] = 0;
FormatBuf[2] = 0;
FormatBuf[3] = 0;
FormatBuf[4] = 0;
FormatBuf[5] = 0;
FormatBuf[6] = 0;
FormatBuf[7] = 0;
FormatBuf[8] = 0;
FormatBuf[9] = 0;
FormatBuf[10] = 0;
FormatBuf[11] = 0;
for (k = 1; k < temp1; k++)
{
parameter.SectorIndex = k + 12 + Disk->SecOffset;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
}
cp2 = FormatBuf;
for (i = 0; i < BytsPerSec; i++)
{
*cp2++ = 0;
}
FormatBuf[0] = '.';
FormatBuf[1] = 0x20;
FormatBuf[2] = 0x20;
FormatBuf[3] = 0x20;
FormatBuf[4] = 0x20;
FormatBuf[5] = 0x20;
FormatBuf[6] = 0x20;
FormatBuf[7] = 0x20;
FormatBuf[8] = 0x20;
FormatBuf[9] = 0x20;
FormatBuf[10] = 0x20;
FormatBuf[11] = ATTR_DIRECTORY;
FormatBuf[26] = 0x02;
FormatBuf[32 + 0] = '.';
FormatBuf[32 + 1] = '.';
FormatBuf[32 + 2] = 0x20;
FormatBuf[32 + 3] = 0x20;
FormatBuf[32 + 4] = 0x20;
FormatBuf[32 + 5] = 0x20;
FormatBuf[32 + 6] = 0x20;
FormatBuf[32 + 7] = 0x20;
FormatBuf[32 + 8] = 0x20;
FormatBuf[32 + 9] = 0x20;
FormatBuf[32 + 10] = 0x20;
FormatBuf[32 + 11] = ATTR_DIRECTORY;
FormatBuf[32 + 26] = 0x02;
parameter.SectorIndex = temp1 + 12 + Disk->SecOffset;
Disk->DiakCommand(DISK_WRITE_SECTOR, ¶meter);
}
}
mount(DriveName);
return TRUE;
}
return FALSE;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -