Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / msdosfs / bootsect.h @ 14

History | View | Annotate | Download (3.42 KB)

1 13 up20180614
/*        $NetBSD: bootsect.h,v 1.5 2012/11/04 17:57:59 jakllsch Exp $        */
2
3
/*
4
 * Written by Paul Popelka (paulp@uts.amdahl.com)
5
 *
6
 * You can do anything you want with this software, just don't say you wrote
7
 * it, and don't remove this notice.
8
 *
9
 * This software is provided "as is".
10
 *
11
 * The author supplies this software to be publicly redistributed on the
12
 * understanding that the author is not responsible for the correct
13
 * functioning of this software in any circumstances and is not liable for
14
 * any damages caused by this software.
15
 *
16
 * October 1992
17
 */
18
#ifndef _MSDOSFS_BOOTSECT_H_
19
#define _MSDOSFS_BOOTSECT_H_
20
21
/*
22
 * Format of a boot sector.  This is the first sector on a DOS floppy disk
23
 * or the fist sector of a partition on a hard disk.  But, it is not the
24
 * first sector of a partitioned hard disk.
25
 */
26
struct bootsector33 {
27
        u_int8_t        bsJump[3];                /* jump inst E9xxxx or EBxx90 */
28
        int8_t                bsOemName[8];                /* OEM name and version */
29
        int8_t                bsBPB[19];                /* BIOS parameter block */
30
        int8_t                bsDriveNumber;                /* drive number (0x80) */
31
        int8_t                bsBootCode[479];        /* pad so struct is 512b */
32
        u_int8_t        bsBootSectSig0;
33
        u_int8_t        bsBootSectSig1;
34
#define        BOOTSIG0        0x55
35
#define        BOOTSIG1        0xaa
36
};
37
38
struct extboot {
39
        int8_t                exDriveNumber;                /* drive number (0x80) */
40
        int8_t                exReserved1;                /* reserved */
41
        int8_t                exBootSignature;        /* ext. boot signature (0x29) */
42
#define        EXBOOTSIG        0x29
43
        int8_t                exVolumeID[4];                /* volume ID number */
44
        int8_t                exVolumeLabel[11];        /* volume label */
45
        int8_t                exFileSysType[8];        /* fs type (FAT12 or FAT16) */
46
};
47
48
struct bootsector50 {
49
        u_int8_t        bsJump[3];                /* jump inst E9xxxx or EBxx90 */
50
        int8_t                bsOemName[8];                /* OEM name and version */
51
        int8_t                bsBPB[25];                /* BIOS parameter block */
52
        int8_t                bsExt[26];                /* Bootsector Extension */
53
        int8_t                bsBootCode[448];        /* pad so structure is 512b */
54
        u_int8_t        bsBootSectSig0;
55
        u_int8_t        bsBootSectSig1;
56
#define        BOOTSIG0        0x55
57
#define        BOOTSIG1        0xaa
58
};
59
60
struct bootsector710 {
61
        u_int8_t        bsJump[3];                /* jump inst E9xxxx or EBxx90 */
62
        int8_t                bsOEMName[8];                /* OEM name and version */
63
        int8_t                bsBPB[53];                /* BIOS parameter block */
64
        int8_t                bsExt[26];                /* Bootsector Extension */
65
        int8_t                bsBootCode[420];        /* pad so structure is 512b */
66
        u_int8_t        bsBootSectSig0;
67
        u_int8_t        bsBootSectSig1;
68
#define        BOOTSIG0        0x55
69
#define        BOOTSIG1        0xaa
70
};
71
#ifdef        atari
72
/*
73
 * The boot sector on a GEMDOS FS is a little bit different from the MSDOS FS
74
 * format. Currently there is no need to declare a separate structure, the
75
 * bootsector33 struct will do.
76
 */
77
#if 0
78
struct bootsec_atari {
79
        u_int8_t        bsBranch[2];                /* branch inst if auto-boot        */
80
        int8_t                bsFiller[6];                /* anything or nothing                */
81
        int8_t                bsSerial[3];                /* serial no. for mediachange        */
82
        int8_t                bsBPB[19];                /* BIOS parameter block                */
83
        int8_t                bsBootCode[482];        /* pad so struct is 512b        */
84
};
85
#endif
86
#endif /* atari */
87
88
union bootsector {
89
        struct bootsector33 bs33;
90
        struct bootsector50 bs50;
91
        struct bootsector710 bs710;
92
};
93
94
#if 0
95
/*
96
 * Shorthand for fields in the bpb.
97
 */
98
#define        bsBytesPerSec        bsBPB.bpbBytesPerSec
99
#define        bsSectPerClust        bsBPB.bpbSectPerClust
100
#define        bsResSectors        bsBPB.bpbResSectors
101
#define        bsFATS                bsBPB.bpbFATS
102
#define        bsRootDirEnts        bsBPB.bpbRootDirEnts
103
#define        bsSectors        bsBPB.bpbSectors
104
#define        bsMedia                bsBPB.bpbMedia
105
#define        bsFATsecs        bsBPB.bpbFATsecs
106
#define        bsSectPerTrack        bsBPB.bpbSectPerTrack
107
#define        bsHeads                bsBPB.bpbHeads
108
#define        bsHiddenSecs        bsBPB.bpbHiddenSecs
109
#define        bsHugeSectors        bsBPB.bpbHugeSectors
110
#endif
111
112
#endif /* _MSDOSFS_BOOTSECT_H_ */