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

📄 device.h

📁 开源DOS的C代码源程序
💻 H
📖 第 1 页 / 共 2 页
字号:
#define DF_CURLOG     0x020
#define DF_DISKCHANGE 0x040
#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       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            */
  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 */
      UBYTE unused[4];          /* SI or DI contents or DS:reqhdr */
      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_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 + -