* Written by Paul Popelka (paulp@uts.amdahl.com)
* You can do anything you want with this software,
* just don't say you wrote it,
* and don't remove this notice.
* This software is provided "as is".
* The author supplies this software to be publicly
* redistributed on the understanding that the author
* is not responsible for the correct functioning of
* this software in any circumstances and is not liable
* for any damages caused by this software.
* $Header: /usr/src/CVS/sys/pcfs/bpb.h,v 1.1.2.1 1993/02/07 21:57:08 friedl Exp $
* BIOS Parameter Block (BPB) for DOS 3.3
u_short bpbBytesPerSec
; /* bytes per sector */
u_char bpbSecPerClust
; /* sectors per cluster */
u_short bpbResSectors
; /* number of reserved sectors */
u_char bpbFATs
; /* number of FATs */
u_short bpbRootDirEnts
; /* number of root directory entries */
u_short bpbSectors
; /* total number of sectors */
u_char bpbMedia
; /* media descriptor */
u_short bpbFATsecs
; /* number of sectors per FAT */
u_short bpbSecPerTrack
; /* sectors per track */
u_short bpbHeads
; /* number of heads */
u_short bpbHiddenSecs
; /* number of hidden sectors */
* The difference is bpbHiddenSecs is a short for DOS 3.3,
* and bpbHugeSectors is not in the 3.3 bpb.
u_short bpbBytesPerSec
; /* bytes per sector */
u_char bpbSecPerClust
; /* sectors per cluster */
u_short bpbResSectors
; /* number of reserved sectors */
u_char bpbFATs
; /* number of FATs */
u_short bpbRootDirEnts
; /* number of root directory entries */
u_short bpbSectors
; /* total number of sectors */
u_char bpbMedia
; /* media descriptor */
u_short bpbFATsecs
; /* number of sectors per FAT */
u_short bpbSecPerTrack
; /* sectors per track */
u_short bpbHeads
; /* number of heads */
u_long bpbHiddenSecs
; /* number of hidden sectors */
u_long bpbHugeSectors
; /* number of sectrs if bpbSectors == 0 */
* The following structures represent how the bpb's look
* on disk. shorts and longs are just character arrays
* of the appropriate length. This is because the compiler
* forces shorts and longs to align on word or halfword
#include <machine/endian.h>
#if BYTE_ORDER == LITTLE_ENDIAN
#define getushort(x) *((u_short *)(x))
#define getulong(x) *((u_long *)(x))
#define putushort(p, v) (*((u_short *)(p)) = (v))
#define putulong(p, v) (*((u_long *)(p)) = (v))
* BIOS Parameter Block (BPB) for DOS 3.3
char bpbBytesPerSec
[2]; /* bytes per sector */
char bpbSecPerClust
; /* sectors per cluster */
char bpbResSectors
[2]; /* number of reserved sectors */
char bpbFATs
; /* number of FATs */
char bpbRootDirEnts
[2]; /* number of root directory entries */
char bpbSectors
[2]; /* total number of sectors */
char bpbMedia
; /* media descriptor */
char bpbFATsecs
[2]; /* number of sectors per FAT */
char bpbSecPerTrack
[2]; /* sectors per track */
char bpbHeads
[2]; /* number of heads */
char bpbHiddenSecs
[2]; /* number of hidden sectors */
* The difference is bpbHiddenSecs is a short for DOS 3.3,
* and bpbHugeSectors is not in the 3.3 bpb.
char bpbBytesPerSec
[2]; /* bytes per sector */
char bpbSecPerClust
; /* sectors per cluster */
char bpbResSectors
[2]; /* number of reserved sectors */
char bpbFATs
; /* number of FATs */
char bpbRootDirEnts
[2]; /* number of root directory entries */
char bpbSectors
[2]; /* total number of sectors */
char bpbMedia
; /* media descriptor */
char bpbFATsecs
[2]; /* number of sectors per FAT */
char bpbSecPerTrack
[2]; /* sectors per track */
char bpbHeads
[2]; /* number of heads */
char bpbHiddenSecs
[4]; /* number of hidden sectors */
char bpbHugeSectors
[4]; /* number of sectrs if bpbSectors == 0 */