diff options
Diffstat (limited to 'i386/i386at/nfdreg.h')
-rw-r--r-- | i386/i386at/nfdreg.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/i386/i386at/nfdreg.h b/i386/i386at/nfdreg.h new file mode 100644 index 00000000..9bdf44d3 --- /dev/null +++ b/i386/i386at/nfdreg.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 1994 Shantanu Goel + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * THE AUTHOR ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. THE AUTHOR DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + */ + +/* + * NEC 765/Intel 8272 floppy disk controller. + */ + +/* + * Ports + */ +#define FD_DOR(p) (p) /* digital output register */ +#define FD_STATUS(p) ((p) + 2) /* status register */ +#define FD_DATA(p) ((p) + 3) /* data register */ +#define FD_RATE(p) ((p) + 5) /* transfer rate register */ +#define FD_DIR(p) ((p) + 5) /* digital input register */ + +/* + * Digital output register. + */ +#define DOR_IENABLE 0x08 /* enable interrupts and DMA */ +#define DOR_RSTCLR 0x04 /* clear reset */ + +/* + * Status register. + */ +#define ST_RQM 0x80 /* request for master */ +#define ST_DIO 0x40 /* direction of data transfer + 1 = fdc to cpu, 0 = cpu to fdc */ +#define ST_NDM 0x20 /* non DMA mode */ +#define ST_CB 0x10 /* controller busy */ + +/* + * Digital input register. + */ +#define DIR_DSKCHG 0x80 /* diskette chnage has occured */ + +/* + * ST0 + */ +#define ST0_IC 0xc0 /* interrupt code */ +#define ST0_SE 0x20 /* seek end */ +#define ST0_EC 0x10 /* equipment check */ +#define ST0_NR 0x08 /* not ready */ +#define ST0_HD 0x04 /* head address */ +#define ST0_US 0x03 /* unit select */ + +/* + * ST1 + */ +#define ST1_EC 0x80 /* end of cylinder */ +#define ST1_DE 0x20 /* CRC data error */ +#define ST1_OR 0x10 /* DMA overrun */ +#define ST1_ND 0x04 /* sector not found */ +#define ST1_NW 0x02 /* write-protected diskette */ +#define ST1_MA 0x01 /* missing address mark */ + +/* + * ST2 + */ +#define ST2_CM 0x40 /* control mark */ +#define ST2_DD 0x20 /* data error */ +#define ST2_WC 0x10 /* wrong cylinder */ +#define ST2_SH 0x08 /* scan equal hit */ +#define ST2_SN 0x04 /* scan not satisfied */ +#define ST2_BC 0x02 /* bad cylinder */ +#define ST2_MD 0x01 /* missing address mark */ + +/* + * ST3 + */ +#define ST3_FT 0x80 /* fault */ +#define ST3_WP 0x40 /* write protect */ +#define ST3_RY 0x20 /* ready */ +#define ST3_T0 0x10 /* track 0 */ +#define ST3_TS 0x08 /* two side */ +#define ST3_HD 0x04 /* head address */ +#define ST3_US 0x03 /* unit select */ + +/* + * Commands. + */ +#define CMD_SPECIFY 0x03 +#define CMD_RECAL 0x07 +#define CMD_SENSEI 0x08 +#define CMD_SEEK 0x0f +#define CMD_FORMAT 0x4d +#define CMD_WRITE 0xc5 +#define CMD_READ 0xe6 + +/* + * Information required by FDC when formatting a diskette. + */ +struct format_info { + unsigned char cyl; + unsigned char head; + unsigned char sector; + unsigned char secsize; +}; |