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

📄 device.h

📁 DOS操作系统的C语言源代码 强烈推荐!!! 可以用来学习基于字符界面的操作系统的设计
💻 H
📖 第 1 页 / 共 2 页
字号:
#define BPB_MDESC       10
#define BPB_NFSECT      11
#define BPB_NSECS       13
#define BPB_NHEADS      15
#define BPB_HIDDEN      17
#define BPB_HUGE        21
#define BPB_SIZEOF      25

typedef struct
{
	UWORD   bpb_nbyte;              /* Bytes per Sector             */
	UBYTE   bpb_nsector;            /* Sectors per Allocation Unit  */
	UWORD   bpb_nreserved;          /* # Reserved Sectors           */
	UBYTE   bpb_nfat;               /* # FAT's                      */
	UWORD   bpb_ndirent;            /* # Root Directory entries     */
	UWORD   bpb_nsize;              /* Size in sectors              */
	UBYTE   bpb_mdesc;              /* MEDIA Descriptor Byte        */
	UWORD   bpb_nfsect;             /* FAT size in sectors          */
	UWORD   bpb_nsecs;              /* Sectors per track            */
	UWORD   bpb_nheads;             /* Number of heads              */
	ULONG   bpb_hidden;             /* Hidden sectors               */
	ULONG   bpb_huge;               /* Size in sectors if           */
					/* bpb_nsize== 0                                */
} bpb;


/*                                                                      */
/* Boot Block (Super Block)                                             */
/*                                                                      */
/* See BPB comments for the offsets below                               */
/*                                                                      */
#define BT_JUMP         0
#define BT_OEM          3
#define BT_BPB          11
#define BT_SIZEOF       36

typedef struct
{
	BYTE    bt_jump[3];             /* Boot Jump opcodes            */
	BYTE    bt_oem[8];              /* OEM Name                     */
	bpb     bt_bpb;                 /* BPB for this media/device    */
	WORD    bt_nsecs;               /* # Sectors per Track          */
	WORD    bt_nheads;              /* # Heads                      */
	WORD    bt_hidden;              /* # Hidden sectors             */
	LONG    bt_huge;                /* use if nsecs == 0            */
} boot;

typedef boot    super;          /* Alias for boot structure             */

typedef struct
{
	BYTE    r_length;       /*  Request Header length               */
	BYTE    r_unit;         /*  Unit Code                           */
	BYTE    r_command;      /*  Command Code                        */
	WORD    r_status;       /*  Status                              */
	BYTE    r_reserved[8];  /*  DOS Reserved Area                   */
	union
	{
		struct
		{
			BYTE    _r_nunits;      /*  number of units     */
			BYTE FAR
				*_r_endaddr;    /*  Ending Address      */
			bpb                     /*  ptr to BPB array    */
				* FAR *_r_bpbptr;

			BYTE    _r_firstunit;
		} _r_init;
		struct
		{
			BYTE    _r_meddesc;     /*  MEDIA Descriptor    */
			BYTE    _r_retcode;     /*  Return Code         */
			BYTE FAR
				*_r_vid;        /* volume id */
		} _r_media;
		struct
		{
			BYTE    _r_meddesc;     /*  MEDIA Descriptor    */
			boot FAR
				*_r_fat;        /*  boot sector pointer */
			bpb FAR
				*_r_bpbpt;      /*  ptr to BPB table    */
		} _r_bpb;
		struct
		{
			BYTE    _r_meddesc;     /*  MEDIA Descriptor    */
			BYTE FAR
				*_r_trans;      /*  Transfer Address    */
			UWORD   _r_count;       /*  Byte/Sector Count   */
			UWORD   _r_start;       /*  Starting Sector No. */
			BYTE FAR
				*_r_vid;        /* Pointer to volume id */
			LONG    _r_huge;        /* for > 32Mb drives    */
		} _r_rw;
		struct
		{
			BYTE    _r_ndbyte;      /*  Byte Read From Device       */
		} _r_nd;
	} _r_x;
} request;

#define HUGECOUNT       0xffff
#define MAXSHORT        0xffffl

/*
 * Macros to assist request structure legibility
 */

/* Init packet macros                                                   */
#define r_nunits        _r_x._r_init._r_nunits
#define r_endaddr       _r_x._r_init._r_endaddr
#define r_bpbptr        _r_x._r_init._r_bpbptr
#define r_firstunit     _r_x._r_init._r_firstunit

/* MEDIA Check packet macros                                            */
#define r_mcmdesc       _r_x._r_media._r_meddesc
#define r_mcretcode     _r_x._r_media._r_retcode
#define r_mcvid         _r_x._r_media._r_vid

/* Build BPB packet macros                                              */
#define r_bpmdesc       _r_x._r_bpb._r_meddesc
#define r_bpfat         _r_x._r_bpb._r_fat
#define r_bpptr         _r_x._r_bpb._r_bpbpt

/* rw packet macros                                                     */
#define r_meddesc       _r_x._r_rw._r_meddesc
#define r_trans         _r_x._r_rw._r_trans
#define r_count         _r_x._r_rw._r_count
#define r_start         _r_x._r_rw._r_start
#define r_rwvid         _r_x._r_rw._r_vid
#define r_huge          _r_x._r_rw._r_huge

/* ndread packet macros                                                 */
#define r_ndbyte        _r_x._r_nd._r_ndbyte


/* 
 *interrupt support (spl & splx) support - IBM style
 */

#define I_NONE          0               /* Initial value                */

/* predefined interrupt levels - 8259 support                           */
#define IRQ0            0x01            /* Level 0 - highest            */
#define IRQ1            0x02
#define IRQ2            0x04
#define IRQ3            0x08
#define IRQ4            0x10
#define IRQ5            0x20
#define IRQ6            0x40
#define IRQ7            0x80            /* Level 7 - lowest             */

/* standard hardware configuration                                      */
#define I_RTC           IRQ0            /* Timer                        */
#define I_KBD           IRQ1            /* Keyboard                     */
#define I_COM2          IRQ3            /* COM1:                        */
#define I_COM1          IRQ4            /* COM2:                        */
#define I_HDC           IRQ5            /* Fixed disk                   */
#define I_FDC           IRQ6            /* Diskette                     */
#define I_PRT           IRQ7            /* Printer                      */

/* standard hardware vectors - 8259 defined                             */
#define V_RTC           0x08            /* Timer                        */
#define V_KBD           0x09            /* Keyboard                     */
#define V_LEV2          0x0a            /* Level 2 - uncomitted         */
#define V_COM2          0x0b            /* COM1:                        */
#define V_COM1          0x0c            /* COM2:                        */
#define V_HDC           0x0d            /* Fixed disk                   */
#define V_FDC           0x0e            /* Diskette                     */
#define V_PRT           0x0f            /* Printer                      */

#define V_LEV0          0x08            /* Level 0 - highest            */
#define V_LEV1          0x09
#define V_LEV2          0x0a            /* Level 2 - uncomitted         */
#define V_LEV3          0x0b
#define V_LEV4          0x0c
#define V_LEV5          0x0d
#define V_LEV6          0x0e
#define V_LEV7          0x0f            /* Level 7 - lowest             */

/*
 */
typedef request FAR *rqptr;
typedef bpb FAR *bpbptr;
typedef BYTE FAR *byteptr;
typedef struct dhdr FAR *dhdrptr;

/*
 *      externals
 */


extern BYTE FAR *device_end();

/*
 *      end of device.h
 */

⌨️ 快捷键说明

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