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

📄 fat.h

📁 Yet Another MP3 Player source code. It can be usefull as reference source for any project.
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
  Copyright (C) 2001 Jesper Hansen <jesperh@telia.com>.

  Rewritten by:	Nikolai Vorontsov <nickviz@mail.be>

  This file is part of the yampp system.

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License
  as published by the Free Software Foundation; either version 2
  of the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software Foundation, 
  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#ifndef __FAT_H__
#define __FAT_H__

#include "types.h"
#include "Constants.h"
#include "ata_if.h"


// Some useful cluster numbers.
#define MSDOSFSROOT     0               /* cluster 0 means the root dir */
#define CLUST_FREE      0               /* cluster 0 also means a free cluster */
#define MSDOSFSFREE     CLUST_FREE
#define CLUST_FIRST     2               /* first legal cluster number */
#define CLUST_RSRVD     0xfffffff6      /* reserved cluster range */
#define CLUST_BAD       0xfffffff7      /* a cluster with a defect */
#define CLUST_EOFS      0xfffffff8      /* start of eof cluster range */
#define CLUST_EOFE      0xffffffff      /* end of eof cluster range */

#define FAT12_MASK      0x00000fff      /* mask for 12 bit cluster numbers */
#define FAT16_MASK      0x0000ffff      /* mask for 16 bit cluster numbers */
#define FAT32_MASK      0x0fffffff      /* mask for FAT32 cluster numbers */


/* Partition Type used in the partition record */

#define PART_TYPE_UNKNOWN	0x00
#define PART_TYPE_FAT12		0x01
#define PART_TYPE_XENIX		0x02
#define PART_TYPE_DOSFAT16	0x04
#define PART_TYPE_EXTDOS	0x05
#define PART_TYPE_FAT16		0x06
#define PART_TYPE_NTFS		0x07
#define PART_TYPE_FAT32		0x0B
#define PART_TYPE_FAT32LBA	0x0C
#define PART_TYPE_FAT16LBA	0x0E
#define PART_TYPE_EXTDOSLBA	0x0F
#define PART_TYPE_ONTRACK	0x33
#define PART_TYPE_NOVELL	0x40
#define PART_TYPE_PCIX		0x4B
#define PART_TYPE_PHOENIXSAVE	0xA0
#define PART_TYPE_CPM		0xDB
#define PART_TYPE_DBFS		0xE0
#define PART_TYPE_BBT		0xFF



struct partrecord /* length 16 bytes */
{			
	BYTE	prIsActive;					/* 0x80 indicates active partition */
	BYTE	prStartHead;				/* starting head for partition */
	WORD	prStartCylSect;				/* starting cylinder and sector */
	BYTE	prPartType;					/* partition type (see above) */
	BYTE  	prEndHead;					/* ending head for this partition */
	WORD	prEndCylSect;				/* ending cylinder and sector */
	DWORD	prStartLBA;					/* first LBA sector for this partition */
	DWORD	prSize;						/* size of this partition (bytes or sectors ?) */
};

        
struct partsector
{
	CHAR	psPartCode[BPS-64-2];		/* pad so struct is 512b */
	BYTE	psPart[64];					/* four partition records (64 bytes) */
    BYTE	psBootSectSig0;				/* two signature bytes (2 bytes) */ 
    BYTE	psBootSectSig1;
#define BOOTSIG0	0x55
#define BOOTSIG1	0xaa
};



/*
 * Format of a boot sector.  This is the first sector on a DOS floppy disk
 * or the fist sector of a partition on a hard disk.  But, it is not the
 * first sector of a partitioned hard disk.
 */
struct bootsector33 {
	BYTE	bsJump[3];					/* jump inst E9xxxx or EBxx90 */
	CHAR	bsOemName[8];				/* OEM name and version */
	CHAR	bsBPB[19];					/* BIOS parameter block */
	CHAR	bsDriveNumber;				/* drive number (0x80) */
	CHAR	bsBootCode[479];			/* pad so struct is 512b */
	BYTE	bsBootSectSig0;
	BYTE	bsBootSectSig1;
#define BOOTSIG0	0x55
#define BOOTSIG1	0xaa
};

struct extboot {
	CHAR	exDriveNumber;				/* drive number (0x80) */
	CHAR	exReserved1;				/* reserved */
	CHAR	exBootSignature;			/* ext. boot signature (0x29) */
#define EXBOOTSIG	0x29
	CHAR	exVolumeID[4];				/* volume ID number */
	CHAR	exVolumeLabel[11];			/* volume label */
	CHAR	exFileSysType[8];			/* fs type (FAT12 or FAT16) */
};

struct bootsector50 {
        BYTE        bsJump[3];              /* jump inst E9xxxx or EBxx90 */
        CHAR          bsOemName[8];           /* OEM name and version */
        CHAR          bsBPB[25];              /* BIOS parameter block */
        CHAR          bsExt[26];              /* Bootsector Extension */
        CHAR          bsBootCode[448];        /* pad so structure is 512b */
        BYTE        bsBootSectSig0;
        BYTE        bsBootSectSig1;
#define BOOTSIG0        0x55
#define BOOTSIG1        0xaa
};

struct bootsector710 {
        BYTE        bsJump[3];              /* jump inst E9xxxx or EBxx90 */
        CHAR          bsOEMName[8];           /* OEM name and version */
        CHAR          bsBPB[53];              /* BIOS parameter block */
        CHAR          bsExt[26];              /* Bootsector Extension */
        CHAR          bsBootCode[418];        /* pad so structure is 512b */
        BYTE        bsBootSectSig2;         /* 2 & 3 are only defined for FAT32? */
        BYTE        bsBootSectSig3;
        BYTE        bsBootSectSig0;
        BYTE        bsBootSectSig1;
#define BOOTSIG0        0x55
#define BOOTSIG1        0xaa
#define BOOTSIG2        0
#define BOOTSIG3        0
};


/***************************************************************/
/***************************************************************/


/*
 * BIOS Parameter Block (BPB) for DOS 3.3
 */
struct bpb33 {
        WORD		bpbBytesPerSec; /* bytes per sector */
        BYTE        bpbSecPerClust; /* sectors per cluster */
        WORD       	bpbResSectors;  /* number of reserved sectors */
        BYTE        bpbFATs;        /* number of FATs */
        WORD       	bpbRootDirEnts; /* number of root directory entries */
        WORD       	bpbSectors;     /* total number of sectors */
        BYTE       	bpbMedia;       /* media descriptor */
        WORD       	bpbFATsecs;     /* number of sectors per FAT */
        WORD       	bpbSecPerTrack; /* sectors per track */
        WORD       	bpbHeads;       /* number of heads */
        WORD       	bpbHiddenSecs;  /* number of hidden sectors */
};

/*
 * BPB for DOS 5.0 The difference is bpbHiddenSecs is a short for DOS 3.3,
 * and bpbHugeSectors is not in the 3.3 bpb.
 */
struct bpb50 {
        WORD       	bpbBytesPerSec; /* bytes per sector */
        BYTE        bpbSecPerClust; /* sectors per cluster */
        WORD       	bpbResSectors;  /* number of reserved sectors */
        BYTE        bpbFATs;        /* number of FATs */
        WORD       	bpbRootDirEnts; /* number of root directory entries */
        WORD       	bpbSectors;     /* total number of sectors */
        BYTE        bpbMedia;       /* media descriptor */
        WORD       	bpbFATsecs;     /* number of sectors per FAT */
        WORD       	bpbSecPerTrack; /* sectors per track */
        WORD       	bpbHeads;       /* number of heads */
        DWORD       bpbHiddenSecs;  /* # of hidden sectors */
/* 3.3 compat ends here */
        DWORD       bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
};

/*
 * BPB for DOS 7.10 (FAT32).  This one has a few extensions to bpb50.
 */
struct bpb710 {
        WORD    	bpbBytesPerSec; /* bytes per sector */
        BYTE        bpbSecPerClust; /* sectors per cluster */
        WORD       	bpbResSectors;  /* number of reserved sectors */
        BYTE        bpbFATs;        /* number of FATs */
        WORD       	bpbRootDirEnts; /* number of root directory entries */
        WORD       	bpbSectors;     /* total number of sectors */
        BYTE        bpbMedia;       /* media descriptor */
        WORD       	bpbFATsecs;     /* number of sectors per FAT */
        WORD       	bpbSecPerTrack; /* sectors per track */
        WORD       	bpbHeads;       /* number of heads */
        DWORD       bpbHiddenSecs;  /* # of hidden sectors */
/* 3.3 compat ends here */
        DWORD       bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
/* 5.0 compat ends here */

        DWORD       bpbBigFATsecs;  /* like bpbFATsecs for FAT32 */
        WORD       	bpbExtFlags;    /* extended flags: */
#define FATNUM          0xf         /* mask for numbering active FAT */
#define FATMIRROR       0x80        /* FAT is mirrored (like it always was) */

⌨️ 快捷键说明

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