summaryrefslogtreecommitdiff
path: root/i386/i386at/nfdreg.h
diff options
context:
space:
mode:
authorThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
committerThomas Bushnell <thomas@gnu.org>1997-02-25 21:28:37 +0000
commitf07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch)
tree12b07c7e578fc1a5f53dbfde2632408491ff2a70 /i386/i386at/nfdreg.h
Initial source
Diffstat (limited to 'i386/i386at/nfdreg.h')
-rw-r--r--i386/i386at/nfdreg.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/i386/i386at/nfdreg.h b/i386/i386at/nfdreg.h
new file mode 100644
index 0000000..9bdf44d
--- /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;
+};