📄 device.h
字号:
#define DF_DPCHANGED 0x080#define DF_REFORMAT 0x100#define DF_NOACCESS 0x200/* freedos specific flag bits */#define DF_LBA 0x400#define DF_WRTVERIFY 0x800/* typedef struct ddtstruct ddt;*/struct gblkio { UBYTE gbio_spcfunbit; UBYTE gbio_devtype; UWORD gbio_devattrib; UWORD gbio_ncyl; UBYTE gbio_media; bpb gbio_bpb; UWORD gbio_nsecs;};struct gblkfv /* for format / verify track */{ UBYTE gbfv_spcfunbit; UWORD gbfv_head; UWORD gbfv_cyl; UWORD gbfv_ntracks;};struct gblkrw /* for read / write track */{ UBYTE gbrw_spcfunbit; UWORD gbrw_head; UWORD gbrw_cyl; UWORD gbrw_sector; UWORD gbrw_nsecs; UBYTE FAR *gbrw_buffer;};struct Gioc_media { WORD ioc_level; ULONG ioc_serialno; BYTE ioc_volume[11]; BYTE ioc_fstype[8];};struct Access_info { BYTE AI_spec; BYTE AI_Flag;};/* *//* 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 36typedef 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 */ BYTE bt_drvno; BYTE bt_reserv; BYTE bt_btid; ULONG bt_serialno; BYTE bt_volume[11]; BYTE bt_fstype[8];} boot;/* File system information structure */struct fsinfo { UDWORD fi_signature; /* must be 0x61417272 */ DWORD fi_nfreeclst; /* number of free clusters, -1 if unknown */ DWORD fi_cluster; /* most recently allocated cluster, -1 if unknown */ UBYTE fi_reserved[12];};typedef boot super; /* Alias for boot structure */typedef struct { UBYTE r_length; /* Request Header length */ UBYTE r_unit; /* Unit Code */ UBYTE r_command; /* Command Code */ UWORD r_status; /* Status */ BYTE r_reserved[8]; /* DOS Reserved Area */ union { struct { UBYTE _r_nunits; /* number of units */ BYTE FAR *_r_endaddr; /* Ending Address */ bpb *FAR * _r_bpbptr; /* ptr to BPB array */ UBYTE _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 { unsigned char _r_ndbyte; /* Byte Read From Device */ } _r_nd; struct { UBYTE _r_cat; /* Category code */ UBYTE _r_fun; /* Function code */ UWORD _r_si; /* Contents of SI and DI */ UWORD _r_di; /* (PC DOS 7 Technical Update, pp 104,105) */ union { struct gblkio FAR *_r_io; struct gblkrw FAR *_r_rw; struct gblkfv FAR *_r_fv; struct Gioc_media FAR *_r_gioc; struct Access_info FAR *_r_ai; } _r_par; /* Pointer to param. block from 440C/440D */ } _r_gen; } _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/* generic IOCTL and IOCTL query macros */#define r_cat _r_x._r_gen._r_cat#define r_fun _r_x._r_gen._r_fun#define r_si _r_x._r_gen._r_si#define r_di _r_x._r_gen._r_di#define r_rw _r_x._r_gen._r_par._r_rw#define r_io _r_x._r_gen._r_par._r_io#define r_fv _r_x._r_gen._r_par._r_fv#define r_gioc _r_x._r_gen._r_par._r_gioc#define r_ai _r_x._r_gen._r_par._r_ai/* *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;extern request /* I/O Request packets */ ASM CharReqHdr, ASM IoReqHdr, ASM MediaReqHdr;/* dsk.c */COUNT ASMCFUNC FAR blk_driver(rqptr rp);ddt * getddt(int dev);/* error.c */COUNT char_error(request * rq, struct dhdr FAR * lpDevice);COUNT block_error(request * rq, COUNT nDrive, struct dhdr FAR * lpDevice, int mode);/* sysclk.c */WORD ASMCFUNC FAR clk_driver(rqptr rp);/* execrh.asm */WORD ASMPASCAL execrh(request FAR *, struct dhdr FAR *);/* * end of device.h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -