2004-05-09 | ŒöŠJ |
2004-05-10 | MBRŠg’£ƒtƒH[ƒ}ƒbƒgEƒwƒbƒhî•ñ LNF •¶ŽšƒpƒfƒBƒ“ƒO‚ðC³ |
‚±‚Ì•¶‘‚ÍAFAT ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚ɂ‚¢‚Ä‚Ì‹Zp“à—e‚ð‘‚«•\‚µ‚½‚à‚Ì‚Å‚ ‚éB
FAT ‚ÍAƒpƒ\ƒRƒ“‚ð‚Í‚¶‚ßAƒfƒWƒJƒ‚È‚Ç‚Ì‚³‚Ü‚´‚Ü‚È‹@Ší‚Å—˜—p‰Â”\‚ȃtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚Å‚ ‚éB ƒn[ƒhEƒfƒBƒXƒN‚ð‚Í‚¶‚ßAŠeŽíƒƒ‚ƒŠ[EƒJ[ƒh‚È‚Ç‚ÌŠO•”‹L‰¯‘•’uE‹L˜^”}‘̂̃tƒH[ƒ}ƒbƒg‚Æ‚µ‚Ä—˜—p‰Â”\‚¾B
‚µ‚©‚µA‰½‚ç‚©‚Ì——R‚Å FAT ‚ð—˜—p‚µ‚½‹@Ší‚ðì‚낤‚Æ‚µ‚½‚Æ‚«A FAT ‚ð—˜—p‚·‚é•û–@‚ɂ‚¢‚Ä‚Í”‘½‚‚Ìî•ñ‚ªŽUÝ‚·‚邪A ŽÀÛ‚Ì‹@Ší‚ÉŽÀ‘•‚·‚éꇂÌi“ú–{Œê‚Ìj‹Zpî•ñ‚ª‚«‚í‚ß‚Ä‚È‚¢‚±‚Æ‚É‹C‚ª‚‚¢‚½B
‚±‚̃y[ƒW‚ðì‚Á‚½–{—ˆ‚ÌŽïŽ|‚ÍAŽï–¡‚̃}ƒCƒRƒ“Hì‚Å MMC (Multi-Media Card) ‚â SD ƒJ[ƒh‚ðŽg‚¨‚¤‚Æ‚µ‚½‚Æ‚«‚ÉW‚ß‚½ FAT ‚Ìî•ñ‚ð‘‚«—¯‚ß‚Ä‚¨‚±‚¤‚Æ‚µ‚½‚à‚Ì‚Å‚ ‚éB ‚Ü‚¾Aî•ñ‚ðW‚ß‚½‚¾‚¯‚Å‚ ‚邪AFAT ‚ÉŠÖ‚·‚é‹Zp‰ðà‚ª‚È‚¢‚±‚Æ‚©‚ç Web ã‚ÅŒöŠJ‚·‚邱‚Æ‚Æ‚µ‚½B ŠÔˆá‚¢‚â’ljÁ‚·‚ׂ«î•ñ‚ª‚ ‚ê‚ÎA“K‹X•ÏX‚µ‚Ä‚¢‚é—\’è‚Å‚ ‚éB
¬Œ^‚Ì‘g‚Ýž‚Ý‹@Ší‚âŽï–¡‚̃}ƒCƒRƒ“Hì‚Å FAT ‚ðŽg‚¢A ‘å—e—Ê‚Ì‹L‰¯”}‘Ì‚ð—˜—p‚·‚邽‚ß‚Ì“ú–{Œê‚Ìî•ñŒ¹‚Æ‚µ‚ÄA‚±‚̃y[ƒW‚ð—˜—p‚µ‚Ä‚¢‚½‚¾‚¯‚ê‚ÎK‚¢‚Å‚ ‚éB ‚±‚̃y[ƒW‚ð“Ç‚Þ‚½‚ß‚É‚ÍA‚È‚‚Ä‚àŽï–¡ƒŒƒxƒ‹‚̃}ƒCƒRƒ“Hì‚ɂ‚¢‚Ä‚Ì’mŽ¯‚ª•K—v‚Å‚ ‚éB ‚³‚ç‚ÉAƒvƒƒOƒ‰ƒ~ƒ“ƒOŒ¾Œê (C) ‚ÉŠÖ‚·‚é’mŽ¯‚ª‚ ‚ê‚΂Ȃ¨—Ç‚¢B1. ‚Í‚¶‚ß‚É
(1) FAT ‚Æ‚Í
FAT (File Allocation Table) ‚ÍA‚©‚Â‚Ä MS-DOS ‚̃tƒƒbƒs[EƒfƒBƒXƒN‚̃tƒH[ƒ}ƒbƒg‚Æ‚µ‚Ä—˜—p‚³‚ꂽB ‚»‚ÌŒãA—ðŽj‚ðŒo‚ÄA‚³‚Ü‚´‚Ü‚È‚n‚r‚â‹@Ší‚Å—˜—p‚³‚êAÅ‚à•‹y‚µ‚½ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚Æ‚È‚Á‚½B ‰Šú‚Ì‹L˜^”}‘Ì‚Í—e—Ê‚ª‚È‚ FAT12 ‚ƌĂ΂ê‚é‹L˜^•ûŽ®‚ðŽæ‚Á‚Ä‚¢‚½B‚»‚ÌŒãA‹L˜^—e—Ê‚Ì‘‘å‚É‚µ‚½‚ª‚Á‚ÄA 2 GBytes ‚Ü‚Å‚Ì‹L˜^‚ª‰Â”\‚È FAT16A‚³‚ç‚É 2 TBytes ‚Ü‚Å‹L˜^‰Â”\‚È FAT32 ‚Ö‚ÆŠg’£‚³‚ꂽB MS-DOS ‚Å‚ÍAƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ÍA8.3 Œ`Ž®‚Æ‚¢‚¤‚ׂ«A‚W•¶Žš{‚R•¶Žš‚Å•\‚µ‚Ä‚¢‚½B ‚»‚ÌŒãA’·‚¢ƒtƒ@ƒCƒ‹–¼ (LNF: Long File Name) ‚ª—˜—p‰Â”\‚È VFAT (Virtual FAT) ‚ªŒ»‚ꂽB ‚±‚̃y[ƒW‚Å‚ÍAFAT16 ‚ðŽå‚ÉŽæ‚èã‚°‚éB‰E‚Ì}‚É FAT16 ƒtƒH[ƒ}ƒbƒg‚ÌŠT—v‚ðŽ¦‚·B FAT12 ‚Í FAT16 ‚Æ‚Ù‚Æ‚ñ‚Ç•Ï‚í‚ç‚È‚¢B(2) ŽáŠ±‚Ì—pŒêà–¾
FAT ‚ÍAƒfƒBƒXƒNEƒhƒ‰ƒCƒu‚Ì‚Í‚¶‚ß‚Ì‚Ù‚¤‚É‚ ‚éAƒtƒ@ƒCƒ‹‚Ì‹L˜^‡‚ð‹L‰¯‚µ‚½”z—ñ (table) ‚ðŽ¦‚·B ‚±‚̃e[ƒuƒ‹‚Ì–¼‘O‚ªƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚Ì–¼‘O‚Æ‚µ‚Ä•‹y‚µ‚½‚Ì‚Å‚ ‚éB ‹L˜^”}‘̂̓ZƒNƒ^ (sector) ‚ƌĂ΂ê‚éƒuƒƒbƒN’PˆÊ‚Å“Ç‚Ý‘‚«‚ðs‚¤B‚±‚̃ZƒNƒ^‚ÍA MS-DOS ‚©‚ç‚Ì“`“‚É]‚Á‚Ä 512 Bytes ‚ª•W€“I‚È‘å‚«‚³‚Æ‚È‚Á‚Ä‚¢‚éB ŽÀۂ̃tƒ@ƒCƒ‹‚ÍAƒZƒNƒ^‚ð‚³‚ç‚É‚Ü‚Æ‚ß‚½ƒNƒ‰ƒXƒ^ (cluster) ’PˆÊ‚Å“Ç‚Ý‘‚«‚ðs‚¤B ‚PƒNƒ‰ƒXƒ^‚ÍA•¡” (1 ` 64) ŒÂ‚̃ZƒNƒ^‚ð‚Ü‚Æ‚ß‚½‚à‚Ì‚Æ‚È‚Á‚Ä‚¢‚é‚Ì‚¾B ‚»‚Ì‚½‚ßAˆê”Ê‚É’m‚ç‚ê‚Ä‚¢‚é‚悤‚ÉA‚½‚Æ‚¦‚PƒoƒCƒg‚̃tƒ@ƒCƒ‹‚Å‚ ‚낤‚Æ‚àA ‚PƒNƒ‰ƒXƒ^•ª‚Ì—e—Ê‚ð‹L˜^”}‘Ìã‚Éè‚߂邱‚Æ‚Æ‚È‚éB MMC ‚â SD ƒJ[ƒh‚̂悤‚È‹L˜^”}‘Ì‚Ìʼn‚̃ZƒNƒ^ (sector zero) ‚Ì‚±‚Æ‚ð MBR (Master Boot Recode) ‚Æ‚æ‚ÔB ‚±‚Ì MBR ‚É‚ÍA•¨—“I‚È‹L˜^”}‘Ì‚ð‚PŒÂ‚©‚ç‚SŒÂ‚̃hƒ‰ƒCƒu‚É•ªŠ„‚·‚邽‚߂̃p[ƒeƒBƒVƒ‡ƒ“î•ñ‚ª‹L˜^‚³‚ê‚Ä‚¢‚éB ‚»‚Ì‘¼‚ÉAƒŒƒR[ƒhAƒgƒ‰ƒbƒNAƒwƒbƒh‚È‚Ç‚Æ‚¢‚¤—pŒê‚ª‚ ‚邪A‚Ù‚Æ‚ñ‚ÇŽg‚í‚È‚¢‚Ì‚ÅA‚±‚Ì•¶‘‚Å‚Í–³Ž‹‚·‚éB(3) ƒf[ƒ^\‘¢‚ɂ‚¢‚Ä
‹L˜^”}‘Ìã‚É‘‚«ž‚ñ‚Å‚¢‚é FAT ‚̃f[ƒ^\‘¢‚ð•\‚·‚½‚ßA‚bŒ¾Œê•—‚̃f[ƒ^\‘¢•\‹L‚ðs‚Á‚Ä‚¢‚éB ‚±‚ê‚ÍAŽÀÛ‚É FAT ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚ðŽÀ‘•‚·‚邱‚Æ‚ð”O“ª‚É‚¨‚¢‚ÄA‚±‚̃y[ƒW‚ð‘‚¢‚Ä‚¢‚邽‚ß‚Å‚ ‚éB ŽÀۂ̃VƒXƒeƒ€ã‚ɃvƒƒOƒ‰ƒ€‚ð‘g‚Þ‚Æ‚«‚ÍAFAT ‚̃f[ƒ^\‘¢‚ªƒpƒbƒNó‘Ô (‚PƒoƒCƒg‚Ì‚·‚«ŠÔ‚à–³‚‹l‚ßž‚܂ꂽó‘Ô) ‚Å‚ ‚邱‚Æ‚ÆAƒoƒCƒg•À‚Ñ‚ªƒrƒbƒOEƒGƒ“ƒfƒBƒAƒ“ (Intel •À‚Ñ) ‚Å‚ ‚邱‚Æ‚É—¯ˆÓ‚·‚é•K—v‚ª‚ ‚éB(4) “Á‹–‚ɂ‚¢‚Ä
FAT ‚ÉŠÖ‚·‚é’m“IŠ—LŒ ‚ÍA•Ä‘ Microsoft ŽÐ‚É‚ ‚éB
•Ä‘ Microsoft ŽÐ‚ÍAFAT ŠÖ˜A‚Ì“Á‹–‚ðƒ‰ƒCƒZƒ“ƒX‹Ÿ—^‚·‚é•ûj‚Å‚ ‚éB
‚ ‚é‹Zp‚ªL‚•‹y‚µ‚Ä‚©‚çA“Á‹–Œ ‚ðŽå’£‚·‚é‚Ì‚Í“¹‹`“I‚É‚·‚΂炵‚¢‚Æ‚¢‚¦‚È‚¢B ‚µ‚©‚µAFAT ‚ÉŠÖ‚·‚é•Ä‘“Á‹–‚ÍA•Ä‘ Microsoft ŽÐ‚É‚ ‚邱‚Æ‚ÍŠm‚©‚Ȃ悤‚¾B FAT (‚Æ‚‚É VFAT) ‚Ì“ÆèŽg—pŒ ‚ÍA•Ä‘ Microsoft ŽÐ‚É‚ ‚é‚ÆŒ©‚Ä‚æ‚¢‚¾‚낤B2. FAT ƒtƒH[ƒ}ƒbƒg
(1) MBR (Master Boot Recode)
MMC ‚â SD ƒJ[ƒh‚̂悤‚È‹L˜^”}‘Ì‚Ì擪ƒZƒNƒ^ (sector 0) ‚ÉAMBR (Master Boot Recode) ‚ª‚ ‚éB ‚±‚ê‚ÍAŽŸ‚̂悤‚È 512 Bytes ‚̃f[ƒ^\‘¢‚Æ‚È‚Á‚Ä‚¢‚éBMBR ’†‚̃p[ƒeƒBƒVƒ‡ƒ“Eƒe[ƒuƒ‹‚ÉŠeƒp[ƒeƒBƒVƒ‡ƒ“‚̃tƒ@ƒCƒ‹EƒVƒXƒeƒ€Eƒ^ƒCƒv‚Æ擪ƒZƒNƒ^‚ª‹Lq‚µ‚Ä‚¢‚éBtypedef struct MasterBootRecode { Byte checkRoutionOnx86[446]; struct { Byte bootDescriptor; /* 0x80: bootable device, 0x00: non-bootable */ Byte firstPartitionSector[3]; /* 1st sector number */ Byte fileSystemDescriptor; /* 1:FAT12, 4:FAT16(less than 32MB), 5:Šg’£ DOS ƒp[ƒeƒBƒVƒ‡ƒ“, 6:FAT16(more 32MB), 0xb:FAT32(more 2GB), 0xc:FAT32 Int32h Šg’£, 0xe:FAT16 Int32h Šg’£, 0xf:Šg’£ DOS ƒp[ƒeƒBƒVƒ‡ƒ“‚Ì Int32h Šg’£ */ Byte lastPartitionSector[3]; Byte firstSectorNumbers[4]; /* first sector number (link to BPB sector) */ Byte numberOfSectors[4]; } partitionTable[4]; Byte sig[2]; /* 0x55, 0xaa */ } MBRecode;(32 bit ˆÈã‚Ì CPU ‚Å‚ÍApartionTable \‘¢‘Ì‚ªƒpƒbƒN‚³‚ê‚È‚¢‚©‚à‚µ‚ê‚È‚¢)
ƒp[ƒeƒBƒVƒ‡ƒ“Eƒe[ƒuƒ‹ (partitionTable[]) ‚Ì fileSystemDescriptor ‚ª 4 or 6 ‚È‚ç‚Î FAT16 ‚ðŽ¦‚µA 11 ‚È‚ç‚Î FAT32 ‚ð•\‚·B ƒp[ƒeƒBƒVƒ‡ƒ“Eƒe[ƒuƒ‹‚É‚ ‚éƒp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^ (partitionTable[].firstSectorNumbers) ‚Ì ƒZƒNƒ^”Ô†‚Ƀp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^ BPB (BIOS Parameter Block) ‚ª‘¶Ý‚·‚éB
ÅŒã‚Ì 2 Bytes ‚Ì 0x55, 0xaa ŒÅ’èƒpƒ^[ƒ“‚ÅAMBR ƒZƒNƒ^‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB‰º‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍAMBR ‚Ì“à—e‚̃_ƒ“ƒv—á‚Å‚ ‚éB
‚±‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍA32 MBytes ‚Ì MMC (Multi-Media Card) ‚Å‚Ì—á‚Å‚ ‚éB(SDƒJ[ƒh‚È‚Ç‚Å‚à“¯‚¶‚Å‚ ‚낤)
ã‹L—á‚Å‚ÍAƒAƒhƒŒƒX 0x5101be ‚©‚çƒp[ƒeƒBƒVƒ‡ƒ“Eƒe[ƒuƒ‹‚ªŽn‚Ü‚Á‚Ä‚¢‚é (’…F•”•ª) B
ƒp[ƒeƒBƒVƒ‡ƒ“‚ÍA‚P‚‚µ‚©‚È‚A‚»‚Ì fileSystemDescriptor ‚ª 4 ‚Å‚ ‚邽‚ßA FAT16 ƒtƒ@ƒCƒ‹EƒVƒXƒeƒ€‚Å‚ ‚邱‚Æ‚ª‚í‚©‚éB ‚Ü‚½AfirstSectorNumbers ‚ª 0x00000020 ‚Å‚ ‚é‚Ì‚ÅA‚±‚̃p[ƒeƒBƒVƒ‡ƒ“‚Ìî•ñ‚ð 0x0020 ƒZƒNƒ^‚ÉŠi”[‚µ‚Ä‚¢‚邱‚Æ‚ª•ª‚©‚éB ‚È‚¨AŠg’£ƒp[ƒeƒBƒVƒ‡ƒ“‚̂悤‚Èê‡Aƒp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^ BPB ‚ÍAfirstPartitionSector ‚É‹L˜^‚µ‚Ä‚¢‚éB
firstPartitionSector[0] ‚ÉAƒp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^‚̃wƒbƒh”Ô†‚ª‹L˜^‚³‚ê‚Ä‚¢‚éB
firstPartitionSector[1] ‚Ì bit 0 ` 5 ‚ÉAƒp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^‚Ì (1 ‚©‚çŽn‚Ü‚é) ƒZƒNƒ^”Ô†‚ª‹L˜^‚³‚ê‚Ä‚¢‚éB
firstPartitionSector[1] ‚Ì bit 6, 7 bits (ãˆÊ 2 bits) ‚Æ firstPartitionSector[2] (‰ºˆÊ 8 bits) ‚Ì ‡Œv 10 bits ‚ÉAƒp[ƒeƒBƒVƒ‡ƒ“‚Ì擪ƒZƒNƒ^‚̃gƒ‰ƒbƒN”Ô†‚ª‹L˜^‚³‚ê‚Ä‚¢‚éB
(2) BPB (BIOS Parameter Block)
BPB ‚ÍAMBR ‚̃p[ƒeƒBƒVƒ‡ƒ“Eƒe[ƒuƒ‹’†‚É‹L˜^‚µ‚Ä‚¢‚é擪ƒZƒNƒ^‚É‘¶Ý‚·‚éB ‚»‚̃f[ƒ^\‘¢‚ÍAƒp[ƒeƒBƒVƒ‡ƒ“‚̃pƒ‰ƒ[ƒ^‚ðŽŸ‚Ì‚æ‚¤‚È 512 Bytes ‚̃f[ƒ^‚Å•\‚µ‚Ä‚¢‚éB‚±‚Ì BPB ‚Í FAT16 ‚Æ FAT32 ‚ňقȂéBFAT32 ‚ÍA68 ƒoƒCƒg–Ú‚©‚ç FAT16 ‚ðŠg’£‚µ‚½\‘¢‚Æ‚È‚Á‚Ä‚¢‚éB FAT32 ‚Ì BPB ‚ÍAsectorsPerFAT ‚ªƒ[ƒ‚ƂȂ邱‚Æ‚Å‹æ•Ê‚·‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éB ‚Ü‚½AFAT12 ‚Í FAT16 ‚Æ“¯‚¶\‘¢‚Æ‚È‚Á‚Ä‚¢‚éB ‚±‚±‚Åd—v‚ȃpƒ‰ƒ[ƒ^‚ÍAbytesPerSector, sectorsPerCluster, sectorsPerFAT (FAT32 ‚Ìê‡ bigSectorsPerFAT) ‚Å‚ ‚éBtypedef union BPBlock_t { /* FAT16 or FAT12 BPB */ struct FAT16BPB_t { Byte jmpOpeCode[3]; /* 0xeb ?? 0x90 */ Byte OEMName[8]; /* FAT16 */ Byte bytesPerSector[2]; /* bytes/sector */ Byte sectorsPerCluster; /* sectors/cluster */ Byte reservedSectors[2]; /* reserved sector, beginning with sector 0 */ Byte numberOfFATs; /* file allocation table */ Byte rootEntries[2]; /* root entry (512) */ Byte totalSectors[2]; /* partion total secter */ Byte mediaDescriptor; /* 0xf8: Hard Disk */ Byte sectorsPerFAT[2]; /* sector/FAT (FAT32 always zero: see bigSectorsPerFAT) */ Byte sectorsPerTrack[2]; /* sector/track (not use) */ Byte heads[2]; /* heads number (not use) */ Byte hiddenSectors[4]; /* hidden sector number */ Byte bigTotalSectors[4]; /* total sector number */ /* info */ Byte driveNumber; Byte unused; Byte extBootSignature; Byte serialNumber[4]; Byte volumeLabel[11]; Byte fileSystemType[8]; /* "FAT16 " */ Byte loadProgramCode[448]; Byte sig[2]; /* 0x55, 0xaa */ } fat16; /* FAT32 BPB */ struct FAT32BPB_t { Byte jmpOpeCode[3]; /* 0xeb ?? 0x90 */ Byte OEMName[8]; /* FAT32 */ Byte bytesPerSector[2]; Byte sectorsPerCluster; Byte reservedSectors[2]; Byte numberOfFATs; Byte rootEntries[2]; Byte totalSectors[2]; Byte mediaDescriptor; Byte sectorsPerFAT[2]; Byte sectorsPerTrack[2]; Byte heads[2]; Byte hiddenSectors[4]; Byte bigTotalSectors[4]; Byte bigSectorsPerFAT[4]; /* sector/FAT for FAT32 */ Byte extFlags[2]; /* use index zero (follows) */ /* bit 7 0: enable FAT mirroring, 1: disable mirroring */ /* bit 0-3 active FAT number (bit 7 is 1) */ Byte FS_Version[2]; Byte rootDirStrtClus[4]; /* root directory cluster */ Byte FSInfoSec[2]; /* 0xffff: no FSINFO, other: FSINFO sector */ Byte bkUpBootSec[2]; /* 0xffff: no back-up, other: back up boot sector number */ Byte reserved[12]; /* info */ Byte driveNumber; Byte unused; Byte extBootSignature; Byte serialNumber[4]; Byte volumeLabel[11]; Byte fileSystemType[8]; /* "FAT32 " */ Byte loadProgramCode[420]; Byte sig[2]; /* 0x55, 0xaa */ } fat32; } BPBlock;
bytesPerSector ‚ÍA‚PƒZƒNƒ^“–‚½‚è‚̃oƒCƒg”‚ð•\‚· (‚½‚¢‚Ä‚¢A‚±‚̃pƒ‰ƒ[ƒ^‚Í 512 ‚Å‚ ‚낤) B
sectorsPerCluster ‚ÍA‚PƒNƒ‰ƒXƒ^“–‚½‚è‚̃ZƒNƒ^”‚ð•\‚· (2 ‚Ì n@æŒÂ‚Æ‚È‚Á‚Ä‚¢‚é‚Í‚¸‚¾) B
sectorsPerFAT ‚ÍA‚P‚Â‚Ì FAT ‚ªè—L‚·‚éƒZƒNƒ^”‚ð•\‚·B
‚Ü‚½AnumberOfFATs ‚̓p[ƒeƒBƒVƒ‡ƒ“’†‚ÉŠÜ‚Ü‚ê‚é FAT ‚Ì”‚ðŽ¦‚·BFAT16 ‚Ìê‡AnumberOfFATs ‚ÍAí‚É‚Q‚Å‚ ‚èA‚Q‚Â‚Ì FAT ‚ðŽ‚‚±‚Æ‚ðŽ¦‚·B reservedSectors (‚½‚¢‚Ä‚¢A‚±‚Ì’l‚Í 1 ‚Å‚ ‚낤) ‚ÍABPB ƒZƒNƒ^‚ðŠÜ‚ß‚½—\–ñƒZƒNƒ^”‚ðŽ¦‚·B BPB —̈悪è‚ß‚éƒZƒNƒ^”‚ÆŽv‚Á‚Ä–â‘è–³‚¢B‰º‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍABPB ‚Ì“à—e‚̃_ƒ“ƒv—á‚Å‚ ‚éB
‚±‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍA32 MBytes ‚Ì MMC ‚Å FAT16 ƒtƒH[ƒ}ƒbƒg‚Ì—á‚Å‚ ‚éB
‚±‚Ì—á‚Å‚ÍAbytesPerSector ‚ª 0x0200 (512)AsectorsPerCluster ‚ª 0x04A sectorsPerFAT ‚ª 0x003d (61) ‚Æ‚È‚Á‚Ä‚¢‚éB
ÅŒã‚Ì 2 Bytes ‚Ì 0x55, 0xaa ŒÅ’èƒpƒ^[ƒ“‚ÅABPB ƒZƒNƒ^‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB(3) FAT (File Allocation Table)
BPB ‚ÌŽŸ‚̃ZƒNƒ^‚©‚ç FAT ‚ªŽn‚Ü‚éB
‚±‚ÌAFAT —̈æ‚̃ZƒNƒ^”‚Í BPB ‚̃pƒ‰ƒ[ƒ^‚©‚ç sectorsPerFAT ~ numberOfFATs ‚ÅŽZo‚Å‚«‚éB FAT16 ‚Ìê‡ABPB ‚Ì numberOfFATs ‚Í 2 ‚ɌŒè‚Æ‚È‚Á‚Ä‚¢‚éB ‚±‚ê‚ÍA“¯‚¶“à—e‚ðŽ‚ FAT ‚ð‚Q‚—pˆÓ‚µAFAT ‚ð“ñd‰»‚·‚邱‚Æ‚ÅAM—Š«‚ðŒüコ‚¹‚é–Ú“I‚ðŽ‚ÂB ‚½‚¾‚µA‚±‚Ì“ñd‰»‚Í FAT ‚ª”j‰ó‚³‚ê‚Ä‚¢‚邱‚Æ‚µ‚©”»•Ê‚Å‚«‚È‚¢B‘‚«ž‚Ý/“Ç‚Ýo‚µ•s—Ç‚É‚æ‚é FAT ‚Ì”j‰ó‚ÍA ‚½‚¢‚Ä‚¢ƒhƒ‰ƒCƒuŽ©‘Ì‚ªŽ‚ƒGƒ‰[ŒŸo/’ù³‹@”\‚É‚æ‚Á‚ÄA”»•Ê‰Â”\‚Å‚ ‚éB ‚»‚Ì‚½‚ßAŒ»Ý‚Å‚Í–³ˆÓ–¡‚È“ñd‰»‚Æ‚È‚Á‚Ä‚¢‚éB FAT32 ‚Ìê‡ABPB ‚Ì extFlags ƒpƒ‰ƒ[ƒ^‚É‚æ‚èA—LŒø‚È FAT ‚ðŽ¯•Ê‚·‚éB FAT ‚Í File Allcation Table ‚Ì–¼‚Ì’Ê‚èAƒtƒ@ƒCƒ‹‚̃f[ƒ^‚ª”z’u‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŽ¦‚·ƒe[ƒuƒ‹‚Å‚ ‚éB ‚±‚̃e[ƒuƒ‹‚Ì—v‘f‚ª 16 ƒrƒbƒg‚̃tƒH[ƒ}ƒbƒg‚ð FAT16 ‚ƌĂÑA32 ƒrƒbƒg‚Ì‚à‚Ì‚ð FAT32 ‚ƌĂÔB
—Ⴆ‚Î FAT16 ‚Ìê‡ABPB ‚̃pƒ‰ƒ[ƒ^‚©‚ç sectorsPerFAT ~ bytesPerSector € 2 ŒÂ‚Ì—v‘f (ƒNƒ‰ƒXƒ^) ‚ª‘¶Ý‚·‚邱‚Æ‚ª•ª‚©‚éB FAT ‚Ì n ”Ô–Ú‚Ì—v‘f‚ÍAn ”Ԗڂ̃Nƒ‰ƒXƒ^‚Ì”z’uó‹µ‚ðŽ¦‚· (‚±‚ê‚ðƒNƒ‰ƒXƒ^”Ô†‚ƌĂڂ¤) B ƒNƒ‰ƒXƒ^‚ª–¢Žg—p‚È‚ç 0x0000AŽŸ‚̃Nƒ‰ƒXƒ^‚Ö‚Æ‘±‚‚Ȃ玟‚̃Nƒ‰ƒXƒ^”Ô†AÅŒã‚̃Nƒ‰ƒXƒ^‚È‚ç 0xfff8 ` 0xffff ‚ª FAT —̈æ‚É‘‚«ž‚Ü‚ê‚Ä‚¢‚éB
‚Ü‚½AƒNƒ‰ƒXƒ^”Ô† 0x0001 ‚Í—\–ñ—̈æ‚Å‚ ‚邱‚Æ‚ðŽ¦‚·B (ƒNƒ‰ƒXƒ^”Ô† 0x0000 ‚à—\–ñ—̈æ‚Æ‚È‚é)FAT ‚É‹L˜^‚µ‚Ä‚¢‚éƒNƒ‰ƒXƒ^”Ô†‚ðŽŸ‚Ì•\‚É‚Ü‚Æ‚ß‚éB
FAT12 FAT16 FAT32 –¢Žg—pƒNƒ‰ƒXƒ^ 0x000 0x0000 0x00000000 —\–ñƒNƒ‰ƒXƒ^ 0x001 0x0001 0x00000001 —LŒø‚ȃ†[ƒUEƒf[ƒ^EƒNƒ‰ƒXƒ^ 0x002 ` 0xfff6 0x0002 ` 0xffff6 0x00000002 ` 0x0ffffff6 •s—ǃNƒ‰ƒXƒ^ 0xff7 0xfff7 0x0ffffff7 ÅIƒNƒ‰ƒXƒ^ 0xff8 ` 0xfff 0xfff8 ` 0xffff 0x0ffffff8 ` 0x0fffffff ã‚Ì•\‚̂悤‚É FAT32 ‚Æ‚¢‚Á‚Ä‚àA28 bits ‚µ‚©Žg—p‚µ‚Ä‚¢‚È‚¢BãˆÊ 4 bits ‚Í«—ˆ‚Ì‚½‚ß‚É—\–ñ‚³‚ê‚Ä‚¢‚éB FAT32 ‚ðŽg—p‚·‚éÛ‚ÍAãˆÊ 4 bits ‚ðƒ[ƒ‚ɃNƒŠƒA‚µ‚ÄŽg—p‚·‚ׂ«‚Å‚ ‚éB
‰º‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍAFAT ‚Ì擪—̈æ‚̃_ƒ“ƒv—á‚Å‚ ‚éB
‚±‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍA—á‚É‚æ‚Á‚Ä 32 MBytes ‚Ì MMC ‚Å FAT16 ƒtƒH[ƒ}ƒbƒg‚Å‚ ‚éB
ʼn‚Ì 0xfff8 ‚ÍAƒNƒ‰ƒXƒ^ 0x0000 ‚ªÅIƒNƒ‰ƒXƒ^‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB(ŽÀÛ‚Í–¢Žg—pƒNƒ‰ƒXƒ^)
ŽŸ‚Ì 0xffff ‚ÍAƒNƒ‰ƒXƒ^ 0x0001 ‚àÅIƒNƒ‰ƒXƒ^‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB(ŽÀÛ‚Í–¢Žg—pƒNƒ‰ƒXƒ^) ‚»‚ÌŽŸ‚Ì 0x0003 ‚ÍAƒNƒ‰ƒXƒ^ 0x0002 ‚ÌŽŸ‚̃Nƒ‰ƒXƒ^‚ª 0x0003 ‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB ˆÈ‰º‡‚ÉAƒNƒ‰ƒXƒ^ 0x0004A0x0005 ‚Æ‘±‚«AƒNƒ‰ƒXƒ^ 0x0005 ‚É‚ ‚éÅIƒNƒ‰ƒXƒ^‚̃}[ƒN (0xffff) ‚ÅA ‚±‚̃tƒ@ƒCƒ‹‚̃Nƒ‰ƒXƒ^‚ªI—¹‚·‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB (ƒNƒ‰ƒXƒ^ 0x0002 ` 0x0005 ‚ª“¯‚¶ƒtƒ@ƒCƒ‹‚̃f[ƒ^‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚é)
‚±‚̂悤‚ÉAFAT —̈æ‚ÉŽŸ‚̃Nƒ‰ƒXƒ^î•ñ‚ð‹L˜^‚·‚邱‚Æ‚ÅA ˜A‘±‚µ‚½ƒf[ƒ^—̈æ‚ðŽ¦‚·‚±‚Æ‚ðƒNƒ‰ƒXƒ^Eƒ`ƒFƒCƒ“‚ƌĂÔB ƒNƒ‰ƒXƒ^ 0x0006 ˆÈ~‚Ì FAT —v‘f‚ª 0x0000 ‚Æ‚È‚Á‚Ä‚¢‚é‚Ì‚ÍA‚±‚ê‚ç‚̃Nƒ‰ƒXƒ^‚Í–¢Žg—pó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB(4) RDE (Root Directory Entry)
RDE ‚ÍAƒ‹[ƒgEƒfƒBƒŒƒNƒgƒŠ‚Ìî•ñ‚ð‹L˜^‚µ‚½”z—ñ‚Å‚ ‚èAFAT16 ‚Ìê‡ FAT ‚ÌŽŸ‚̃ZƒNƒ^‚©‚ç‹L˜^‚³‚ê‚éB
(FAT32 ‚Ìê‡ABPB ‚Ì rootDirStrtClus ‚ÅŽ¦‚·ƒNƒ‰ƒXƒ^‚©‚ç‹L˜^‚³‚ê‚é) FAT16 ‚Ìê‡AŠi”[‚³‚ê‚郋[ƒgEƒfƒBƒŒƒNƒgƒŠî•ñ‚Ì”‚ÍABPB ‚Ì rootEntries (‚±‚̌”‚Í 512 ŒÂ‚̌Œè‚Æ‚È‚Á‚Ä‚¢‚é) ‚É‹Lq‚µ‚Ä‚¢‚éB
(FAT32 ‚Ìê‡AƒNƒ‰ƒXƒ^Eƒ`ƒFƒCƒ“‚Å RDE ‚ðŽ¦‚µ‚Ä‚¢‚é‚Ì‚ÅARDE ‚Ì‘å‚«‚³‚͉•ςł ‚é)
‚ЂƂ‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Í 32 Bytes ‚̃f[ƒ^’·‚ðŽ‚ÂBFAT16 ‚Ìê‡A‚±‚ꂪ 512 ŒÂ‚ ‚邽‚ßA RDE ‘S‘Ì‚Å‚Í 32 ~ 512 = 16384 Bytes (32 ƒZƒNƒ^) ‚̗̈æ‚ðè‚ß‚éB ‚ЂƂ‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ÍŽŸ‚̂悤‚È 32 Bytes ‚̃f[ƒ^\‘¢‚ðŽ‚ÂBtypedef struct DirEntry_t { Byte name[8]; /* file name */ Byte extension[3]; /* file name extension */ Byte attribute; /* file attribute bit 4 directory flag bit 3 volume flag bit 2 hidden flag bit 1 system flag bit 0 read only flag */ Byte reserved; /* use NT or same OS */ Byte createTimeMs; /* VFAT ‚ÅŽg—p‚·‚éƒtƒ@ƒCƒ‹ì¬Žž‚Ì10ƒ~ƒŠ•b (0 ` 199) */ Byte createTime[2]; /* VFAT ‚ÅŽg—p‚·‚éƒtƒ@ƒCƒ‹ì¬ŽžŠÔ */ Byte createDate[2]; /* VFAT ‚ÅŽg—p‚·‚éƒtƒ@ƒCƒ‹ì¬“ú•t */ Byte accessDate[2]; /* VFAT ‚ÅŽg—p‚·‚éƒtƒ@ƒCƒ‹EƒAƒNƒZƒX“ú•t */ Byte clusterHighWord[2]; /* FAT32 ‚ÅŽg—p‚·‚éƒNƒ‰ƒXƒ^”Ô†‚ÌãˆÊ 16 bits */ Byte updateTime[2]; Byte updateDate[2]; Byte cluster[2]; /* start cluster number */ Byte fileSize[4]; /* file size in bytes (directory is always zero) */ } DirEntry;name ‚¨‚æ‚Ñ extension
FAT ‚Ì 8.3 Œ`Ž®‚̃tƒ@ƒCƒ‹–¼‚ðŠi”[‚·‚éBƒtƒ@ƒCƒ‹–¼‚ÌðŒ‚ÍA擪‚Ì‚P•¶Žš–Ú‚ª‰p”Žš‚ÅA . " / \ [ ] : ; | = , ˆÈŠO‚Ì•¶Žš‚ªŽg—p‰Â”\‚Å‚ ‚éB‘S‚Ẳp¬•¶Žš‚͉p‘啶Žš‚É•ÏŠ·‚µ‚Ä‹L‰¯‚·‚éB ‚Ü‚½ACON AUX COM1 COM2 COM3 COM4 LPT1 LPT2 LPT3 PRN NUL ‚Ì–¼‘O‚ÍŽg—p‚Å‚«‚È‚¢B 擪‚Ì‚P•¶Žš–Ú‚É‚æ‚Á‚ÄAŽŸ‚̈Ӗ¡‚ª‚ ‚éB0x00 ‹óƒGƒ“ƒgƒŠ‚Å‚ ‚éB 0x05 (0xe5 ‚ðŽQÆ) 0x2e ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Ìꇂ̂ݎg—p‚Å‚«‚éB 0x2e (.) ƒJƒŒƒ“ƒgEƒfƒBƒŒƒNƒgƒŠ 0x2e, 0x2e (..) eƒfƒBƒŒƒNƒgƒŠ 0xe5 휂³‚ꂽƒGƒ“ƒgƒŠ (Žg—p‰Â”\)attribute
‘®«ƒtƒ‰ƒO‚Å‚ ‚éB‚±‚Ì’l‚ª 0x0f ‚È‚ç‚ÎALNF (Long File Name) ‚ð•\‚·“Á•Ê‚ȃGƒ“ƒgƒŠ‚Æ‚È‚éBbit 5 ƒA[ƒJƒCƒu‘®« (ƒtƒ@ƒCƒ‹ì¬E•ÏXŽž 1 ‚É‚·‚é) bit 4 ƒfƒBƒŒƒNƒgƒŠ‘®« bit 3 ƒ{ƒŠƒ…[ƒ€‘®« bit 2 ‰B‚µ‘®« bit 1 ƒVƒXƒeƒ€‘®« bit 0 “Ç‚ÝŽæ‚èê—p‘®«updateTime
ƒtƒ@ƒCƒ‹‚ªXV‚³‚ꂽŽžŠÔ‚ðŽ¦‚·BŽžŠÔ‚ÍAŽŸ‚̂悤‚É 16 bits ‚𕪊„‚µAŽž•ª•b‚Ì‚Q•b’PˆÊ‚Å•\‚·Bbit 15 ` 11 Žž bit 10 ` 5 •ª bit 4 ` 0 •b€‚QupdateDate
ƒtƒ@ƒCƒ‹‚ªXV‚³‚ꂽ“ú•t‚ðŽ¦‚·B“ú•t‚ÍAŽŸ‚̂悤‚É 16 bits ‚𕪊„‚µA”NŒŽ“ú‚Å•\‚·Bbit 15 ` 9 ”N (1980”N‚ðƒ[ƒ”N‚Æ‚·‚é) bit 8 ` 5 ŒŽ (1 ` 12) bit 4 ` 0 “ú (1 ` 31)cluster
‚±‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ªŽw‚µŽ¦‚·ƒtƒ@ƒCƒ‹“à—e‚Ì擪ƒNƒ‰ƒXƒ^”Ô†
(FAT32 ‚Ìê‡A‰ºˆÊ 16 bits ‚ðŽ¦‚µAãˆÊ 16 bits ‚Í clusterHighWord ‚Å•\‚·)fileSize
ƒtƒ@ƒCƒ‹‚Ì‘å‚«‚³‚ðƒoƒCƒg’PˆÊ‚Å•\‚·BƒGƒ“ƒgƒŠ‚ªƒfƒBƒŒƒNƒgƒŠ‘®«‚È‚ç‚ÎA‚±‚̃tƒ@ƒCƒ‹EƒTƒCƒY‚̓[ƒ‚Æ‚È‚éB‰º‚Ì‚P‚Uiƒ_ƒ“ƒv‚ÍARDE ‚Ì擪—̈æ‚̃_ƒ“ƒv—á‚Å‚ ‚éB
ã‹L—á‚ÍAH8MMC.MOT ‚Æ‚¢‚¤–¼‘O‚̃tƒ@ƒCƒ‹‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ðŽ¦‚µ‚Ä‚¢‚éB
attribute ‚ÍAƒA[ƒJƒCƒu‘®«‚Æ‚È‚Á‚Ä‚¢‚éB
ƒtƒ@ƒCƒ‹ì¬Žž‚ÍA0xabf6 (10101b 011111b 10110b) ‚Ì 0x36 ms ‚Æ‚È‚Á‚Ä‚¢‚éB(21Žž31•ª44.54•b)
ƒtƒ@ƒCƒ‹ì¬“ú•t‚ÍA0x3099 (0011000b 0100b 11001b) ‚Æ‚È‚Á‚Ä‚¢‚éB(2004”N4ŒŽ25“ú)
ƒAƒNƒZƒX“ú•t‚ª 0x30a5 (2004”N5ŒŽ5“ú)Aƒtƒ@ƒCƒ‹XV‚ª 0x3099 (2004”N4ŒŽ25“ú) ‚Ì 0xa736 (20Žž57•ª44•b) B
擪ƒNƒ‰ƒXƒ^‚Í 0x00000002 ƒNƒ‰ƒXƒ^‚Æ‚È‚Á‚Ä‚¢‚éBƒtƒ@ƒCƒ‹EƒTƒCƒY‚ÍA0x00001a00 ƒoƒCƒg‚Å‚ ‚éB(4) ƒ†[ƒUEƒf[ƒ^—̈æ
ƒ†[ƒUEƒf[ƒ^—̈æ‚ÍAŽÀۂ̃tƒ@ƒCƒ‹Eƒf[ƒ^‚âƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ð•Û‘¶‚·‚éB î•ñ‚ÍAƒNƒ‰ƒXƒ^’PˆÊ‚ÅŠÇ—‚³‚êAƒNƒ‰ƒXƒ^”Ô†‚É‚æ‚Á‚ÄŽ¯•Ê‚³‚ê‚éB FAT16 ‚Ìê‡Aƒ†[ƒUEƒf[ƒ^—̈æ‚ÍARDE ‚ÌŽŸ‚̃ZƒNƒ^‚©‚çŽn‚Ü‚éB‚±‚̃†[ƒUEƒf[ƒ^—̈æ‚ÌŠJŽnƒZƒNƒ^‚ÍAMBR ‚̃p[ƒeƒBƒVƒ‡ƒ“擪ƒZƒNƒ^‚Æ BPB ‚É‹L˜^‚³‚ê‚Ä‚¢‚éî•ñ‚©‚玟‚̂悤‚ÉŒvŽZ‚Å‚«‚éB
reservedSectors + numberOfFATs~sectorsPerFAT + rootEntries~32€bytesPerSector + [ƒp[ƒeƒBƒVƒ‡ƒ“擪ƒZƒNƒ^]
(FAT16 ‚Å‚Í rootEntries ‚ð 512AFAT32 ‚Å‚Í rootEntries ‚ðƒ[ƒ‚Æ‚µ‚ÄŒvŽZ‚·‚é)ƒ†[ƒUEƒf[ƒ^—̈æ‚̃ZƒNƒ^”‚ÍABPB ‚É‹L˜^‚³‚ê‚Ä‚¢‚éî•ñ‚©‚玟‚̂悤‚ÉŒvŽZ‚Å‚«‚éB
bigTotalSectors - reservedSectors - numberOfFATs~sectorsPerFAT - rootEntries~32€bytesPerSectorƒNƒ‰ƒXƒ^”Ô† 0x0000 ‚Æ 0x0001 ‚Í—\–ñ‚³‚ê‚Ä‚¢‚é‚Ì‚ÅAŽÀۂɃf[ƒ^‚ªŠi”[‚³‚ê‚éƒNƒ‰ƒXƒ^”Ô†‚Í 0x0002 ‚©‚çŽn‚Ü‚éB ‚»‚Ì‚½‚ßAƒ†[ƒUEƒf[ƒ^—̈æ‚Ì擪‚ÍAƒNƒ‰ƒXƒ^”Ô† 0x0002 ‚Æ‚È‚éB
(FAT16 ‚Å‚Í rootEntries ‚ð 512AFAT32 ‚Å‚Í rootEntries ‚ðƒ[ƒ‚Æ‚µ‚ÄŒvŽZ‚·‚é)
ƒNƒ‰ƒXƒ^”Ô† n ‚ªŠi”[‚³‚ê‚Ä‚¢‚éƒZƒNƒ^‚ÍAƒ†[ƒUEƒf[ƒ^—̈æ‚Ì擪ƒZƒNƒ^‚©‚çA (n - 2) ~ sectorsPerCluster ‚¾‚¯—£‚ê‚Ä‚¢‚邱‚Æ‚É‚È‚éB‚Ü‚½AŽqƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚̃f[ƒ^‚ÍAŽŸ‚Ì—á‚̂悤‚È“à—e‚ðŽ‚ƒtƒ@ƒCƒ‹‚Æ‚µ‚Ä‹L˜^‚³‚ê‚éB
ã‚Ì—á‚Å‚ÍAƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ª‚Q‚ ‚èA‚»‚ꂼ‚ê‚̃tƒ@ƒCƒ‹–¼‚ª . ‚Æ .. ‚Æ‚È‚Á‚Ä‚¢‚éB ‚±‚̃tƒ@ƒCƒ‹–¼‚ÍAƒfƒBƒŒƒNƒgƒŠ‚ðŽ¦‚·B‚»‚Ì‚½‚ßA‘®«ƒtƒ‰ƒO‚àƒfƒBƒŒƒNƒgƒŠ‘®«‚ðŽ¦‚µ‚Ä‚¢‚é
ƒtƒ@ƒCƒ‹–¼ . (dot) ‚ÍAƒJƒŒƒ“ƒgEƒfƒBƒŒƒNƒgƒŠ‚ðŽ¦‚µA‚»‚ÌŠJŽnƒNƒ‰ƒXƒ^”Ô†‚Í 0x0006 ‚Æ‚È‚Á‚Ä‚¢‚éB ‚±‚Ì‚±‚ê‚ÍAƒJƒŒƒ“ƒgEƒfƒBƒŒƒNƒgƒŠî•ñ‚ªƒNƒ‰ƒXƒ^ 0x0006 ‚©‚ç‹L˜^‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB
“¯—l‚ÉAƒtƒ@ƒCƒ‹–¼ .. (dot-dot) ‚ÌŠJŽnƒNƒ‰ƒXƒ^”Ô†‚ª 0x0cf7 ‚Æ‚È‚Á‚Ä‚¢‚é‚Ì‚ÍA eƒfƒBƒŒƒNƒgƒŠî•ñ‚ªƒNƒ‰ƒXƒ^ 0x0cf7 ‚©‚çŠi”[‚³‚ê‚Ä‚¢‚邱‚Æ‚ðŽ¦‚·B ‚±‚ÌeƒfƒBƒŒƒNƒgƒŠ‚ÌŠJŽnƒNƒ‰ƒXƒ^”Ô†‚ª 0x0000 ‚È‚ç‚ÎAeƒfƒBƒŒƒNƒgƒŠ‚̓‹[ƒgEƒfƒBƒŒƒNƒgƒŠ‚Å‚ ‚邱‚Æ‚ðŽ¦‚·B3. VFAT
VFAT ‚ÍAˆÈ‘O‚Ƃ̌݊·«‚ðˆÛŽ‚µ‚È‚ª‚ç MS-DOS Žž‘ã‚Ì 8.3 Œ`Ž®‚̃tƒ@ƒCƒ‹–¼‚æ‚è’·‚¢ƒtƒ@ƒCƒ‹‚ðˆµ‚¤B ‚»‚Ì‚½‚ß‚ÉA]—ˆ‚Ì FAT ‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ªŠg’£‚³‚ê‚Ä‚¢‚éB(1) VFAT ‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ
ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ɂ‚¢‚ÍA‘O‚Ì RDE ‚É‚Äà–¾‚µ‚Ä‚¢‚éB VFAT ‚Ìê‡A8.3 Œ`Ž®‚Ì MS-DOS ƒtƒ@ƒCƒ‹–¼‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Æ‚Æ‚à‚ÉA ŽŸ‚̂悤‚È 13 •¶Žš‚Ì Unicode ‚ð‹L˜^‚·‚é LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ð‹L˜^‚·‚éBtypedef struct LNFEntry_t { Byte LFNSeqNumber; /* LNF recode sequence number bit 7 휂³‚ê‚é‚Æ 1 ‚É‚È‚é bit 6 0: LNF ‚Í‘±‚A1: LNF ‚ÌÅŒã‚̃V[ƒPƒ“ƒX bit 5 ` 0 LNF ‚̇”Ô‚ð•\‚· (1 ` 63) */ Byte name1st[10]; /* Unicode 5 characters */ Byte attribute; /* file attribute (always 0x0f) */ Byte reserved; /* always 0x00 */ Byte checkCodeForShortName; /* DOS –¼‚̃`ƒFƒbƒNEƒR[ƒh */ Byte name2nd[12]; /* Unicode 6 characters */ Byte cluster[2]; /* always 0x0000 */ Byte name3rd[4]; /* Unicode 2 characters */ } LNFEntry;’·‚¢ƒtƒ@ƒCƒ‹–¼‚ð 13 •¶Žš‚²‚Æ‚É•ªŠ„‚µ‚ÄA‚±‚Ì LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ð‹L˜^‚·‚éB
LFNSeqNumber 13 •¶Žš‚²‚Æ‚É•ªŠ„‚µ‚½ LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚̇”Ô‚ðŽ¦‚·B name1st 13 •¶Žš’†‚Ìʼn‚Ì 1 ` 5 •¶Žš attribute 0x0f ‚Å LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Å‚ ‚邱‚Æ‚ðŽ¦‚·B reserved í‚É 0x00 checkCodeForShortName 8.3 Œ`Ž®‚̃tƒ@ƒCƒ‹–¼‚̃`ƒFƒbƒNEƒR[ƒh name2nd 13 •¶Žš’†‚Ì 6 ` 11 •¶Žš cluster í‚É 0x00 name3rd 13 •¶Žš’†‚Ì 12, 13 •¶Žš ŽÀÛ‚Ì—á‚ðŒ©‚Ä‚Ý‚æ‚¤B
‚±‚Ì—á‚Å‚ÍAObject.class ‚Æ‚¢‚¤–¼‘O‚̃fƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ðŽ¦‚µ‚Ä‚¢‚éB 擪‚Ì 32 Bytes ‚ª LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Å‚ ‚éB ŽŸ‚Ì 32 Bytes ‚ª 8.3 Œ`Ž®‚Ì MS-DOS ŒÝŠ·ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Å‚ ‚é (OBJECT~1.CLA ‚Æ‚¢‚¤–¼‘O‚Æ‚È‚Á‚Ä‚¢‚é)B
—á‚̂悤‚É LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ÌŒã‚É MS-DOS ŒÝŠ·ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ª‘±‚B •¡”‚Ì LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ª•K—v‚ÈꇂÍAŒã‚ë‚Ì•¶Žš‚Ì•û‚©‚çƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ð‹L˜^‚·‚éB
(‚Q‚ˆÈã‚Ì LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ª•K—v‚ÈꇂÍA(2) ‚àŽQÆ‚·‚邱‚Æ) LNF ƒGƒ“ƒgƒŠ‚Ì•”•ª‚ÍAattribute ‚ª 0x0f ‚Å LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Å‚ ‚邱‚Æ‚ðŽ¦‚µA 擪‚Ì LFNSeqNumber ‚ª 0x41 ‚Æ‚È‚Á‚Ä‚¢‚邱‚Æ‚©‚çA擪‚Ì LNF ƒGƒ“ƒgƒŠ‚Å‚©‚ LNF ‚ÌI‚í‚è‚Å‚ ‚邱‚Æ‚ðŽ¦‚µ‚Ä‚¢‚éB
‚Ü‚½AObject.class ‚ª 12 •¶Žš‚Æ 13 •¶Žš‚É–ž‚½‚È‚¢‚Ì‚ÅA13 •¶Žš–Ú‚ð 0x0000 ‚Å–„‚ß‚Ä‚¢‚éB (‚Q•¶ŽšˆÈã‚̋󂪶‚¶‚éê‡A‚Q•¶ŽšˆÈ~ 0xffff ‚Å–„‚ß‚é) checkCodeForShortName ‚Ì’l‚ÍA8.3 Œ`Ž®‚Ì MS-DOS –¼‚©‚ç‹‚ß‚éBŽZo•û–@‚ÍAŽŸ‚̂悤‚É‚È‚Á‚Ä‚¢‚éB ("OBJECT~1.CLA" ‚ðŒvŽZ‚·‚é‚ÆA0x76 ‚É‚È‚é)int shortNameCheckCode(const DirEntry* dir) { unsigned char* p = dir->name; unsigned char* end = p + 11; int ret = 0; while (p < end) ret = (((ret & 1) << 7) | ((ret & 0xfe) >> 1)) + *p++; return ret; }(2) ‚QƒoƒCƒgEƒR[ƒh (“ú–{Œêƒtƒ@ƒCƒ‹–¼)
‚QƒoƒCƒgEƒR[ƒh‚Ì LNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚Ì—á‚ð‰º‚ÉŽ¦‚·B(‚±‚ê‚ÍALNF ‚ª‚QƒGƒ“ƒgƒŠˆÈã‚ ‚é—á‚É‚à‚È‚Á‚Ä‚¢‚é)‚±‚Ì MS-DOS ƒtƒ@ƒCƒ‹–¼‚Í "“ú–{Œê~1.PDF" ‚Å‚ ‚éB
MS-DOS ŒÝŠ·ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚̃tƒ@ƒCƒ‹–¼‚ÍASJIS ‚Å 0x93fa (“ú), 0x967b (–{), 0x8cea (Œê), ... ‚̂悤‚É‚È‚Á‚Ä‚¢‚éB
ˆê•ûALNF ƒfƒBƒŒƒNƒgƒŠEƒGƒ“ƒgƒŠ‚ÍAUnicode ‚Å 0x65e5 (“ú), 0x672c (–{), 0x8a9e (Œê), ... ‚Æ‚È‚éBSJIS ‚Æ Unicode ‚̃oƒCƒg•À‚т̈Ⴂ‚É’ˆÓ‚·‚é•K—v‚ª‚ ‚éB
(‚¿‚È‚Ý‚ÉASJIS ƒR[ƒh‚Æ Unicode ‚Ì‘ŠŒÝ•ÏŠ·‚̓e[ƒuƒ‹ˆø‚«‚Å•ÏŠ·‚·‚é•û–@‚µ‚©‚È‚¢) ‚È‚¨AÅŒã‚Ì LNF ƒGƒ“ƒgƒŠ‚ª 11 •¶ŽšˆÈ“à‚ÌꇂÍA ÅŒã‚Ì•¶Žš‚ÌŒã‚É 0x0000 ‚ÌI’[•¶Žš‚ðŠi”[‚µAŽc‚è‚Ì•¶Žš‚ð 0xffff ‚Å–„‚ß‚éB (ÅŒã‚Ì LNF ƒGƒ“ƒgƒŠ‚ª 12 •¶Žš‚È‚çAÅŒã‚Ì•¶Žš‚ð 0x0000 ‚Å–„‚ß‚é)
home