📄 fdc.h
字号:
/* fdc.h - Floppy Disk Controller (FDC) Header File *//* Copyright 1984-1998 Wind River Systems, Inc. *//* Copyright 1996,1997,1998 Motorola, Inc. *//*modification history--------------------01a,29Oct97,rbb created by Motorola.*//*DESCRIPTIONThis file contains definitions for the bit fields of the FDC registersin ISA IO space, and for the structures that define the floppy diskcommands.*/#ifndef INCxxxXh#define INCxxxXh#ifdef __cplusplusextern "C" {#endif/* defines * * SRA - status register A bit definitions */#define FDC_SRA_PS2_IP (1<<7) /* IRQ6 signal state status */#define FDC_SRA_PS2_DRV2 (1<<6) /* DRV2* disk interface input status */#define FDC_SRA_PS2_STEP (1<<5) /* STEP disk interface output status */#define FDC_SRA_PS2_TRK0 (1<<4) /* TRK0* disk interface output status */#define FDC_SRA_PS2_HDSEL (1<<3) /* HDSEL disk interface output status */#define FDC_SRA_PS2_INDX (1<<2) /* INDEX* disk interface input status */#define FDC_SRA_PS2_WP (1<<1) /* WP* disk interface input status */#define FDC_SRA_PS2_DIR (1<<0) /* DIR disk interface output status */#define FDC_SRA_M30_IP (1<<7) /* IRQ6 signal state status */#define FDC_SRA_M30_FDRQ (1<<6) /* DMA request signal state status */#define FDC_SRA_M30_STEP (1<<5) /* STEP disk interface output status */#define FDC_SRA_M30_TRK0 (1<<4) /* TRK0 disk interface output status */#define FDC_SRA_M30_HDSEL (1<<3) /* HDSEL* disk IF output status */#define FDC_SRA_M30_INDX (1<<2) /* INDEX disk interface input status */#define FDC_SRA_M30_WP (1<<1) /* WP disk interface input status */#define FDC_SRA_M30_DIR (1<<0) /* DIR* disk interface output status *//* SRB - status register B bit definitions */#define FDC_SRB_PS2_DR0 (1<<5) /* DR0* select status of DOR */#define FDC_SRB_PS2_WDATA (1<<4) /* WDATA disk interface output status */#define FDC_SRB_PS2_RDATA (1<<3) /* RDATA disk interface output status */#define FDC_SRB_PS2_WGATE (1<<2) /* INDEX* disk interface input status */#define FDC_SRB_PS2_MTR1 (1<<1) /* MTR1 disk interface output status */#define FDC_SRB_PS2_MTR0 (1<<0) /* MTR0 disk interface output status */#define FDC_SRB_M30_DRV2 (1<<7) /* DRV2* disk interface input status */#define FDC_SRB_M30_DR1 (1<<6) /* DR1* disk interface output status */#define FDC_SRB_M30_DR0 (1<<5) /* DR0* disk interface output status */#define FDC_SRB_M30_WDATA (1<<4) /* WDATA disk interface output status */#define FDC_SRB_M30_RDATA (1<<3) /* RDATA disk interface output status */#define FDC_SRB_M30_WGATE (1<<2) /* INDEX disk interface input status */#define FDC_SRB_M30_DR3 (1<<1) /* DR3* disk interface output status */#define FDC_SRB_M30_DR2 (1<<0) /* DR2* disk interface output status *//* DOR - digital output register bit definitions */#define FDC_DOR_MTR3 (1<<7) /* motor enable 3 */#define FDC_DOR_MTR2 (1<<6) /* motor enable 2 */#define FDC_DOR_MTR1 (1<<5) /* motor enable 1 */#define FDC_DOR_MTR0 (1<<4) /* motor enable 0 */#define FDC_DOR_DMAEN (1<<3) /* DMA enable (PC-AT or Model 30) */#define FDC_DOR_RESET (1<<2) /* reset controller */#define FDC_DOR_DRIVESEL1 (1<<1) /* drive select, bit #1 */#define FDC_DOR_DRIVESEL0 (1<<0) /* drive select, bit #0 *//* TDR - tape drive register bit definitions */#define FDC_TDR_ED (1<<7) /* extra density */#define FDC_TDR_HD (1<<6) /* high density */#define FDC_TDR_VLDX (1<<5) /* valid data */#define FDC_TDR_DRID1 (1<<5) /* drive identifier #0 */#define FDC_TDR_DRID0 (1<<4) /* drive identifier #1 */#define FDC_TDR_SWP1 (1<<3) /* logical drive exchange bit #1 */#define FDC_TDR_SWP0 (1<<2) /* logical drive exchange bit #0 */#define FDC_TDR_TAPESEL1 (1<<1) /* tape select, bit #1 */#define FDC_TDR_TAPESEL0 (1<<0) /* tape select, bit #0 *//* MSR - main status register bit definitions */#define FDC_MSR_RQM (1<<7) /* request for master */#define FDC_MSR_DIO (1<<6) /* data I/O direction */#define FDC_MSR_NONDMA (1<<5) /* non-DMA execution */#define FDC_MSR_CMDPROG (1<<4) /* command in progress */#define FDC_MSR_DRV3BUSY (1<<3) /* drive 3 busy */#define FDC_MSR_DRV2BUSY (1<<2) /* drive 2 busy */#define FDC_MSR_DRV1BUSY (1<<1) /* drive 1 busy */#define FDC_MSR_DRV0BUSY (1<<0) /* drive 0 busy *//* DSR - data rate select register bit definitions */#define FDC_DSR_SWRESET (1<<7) /* software reset */#define FDC_DSR_LOWPOWER (1<<6) /* low power */#define FDC_DSR_PRECOMP2 (1<<4) /* precompensation select, bit #2 */#define FDC_DSR_PRECOMP1 (1<<3) /* precompensation select, bit #1 */#define FDC_DSR_PRECOMP0 (1<<2) /* precompensation select, bit #0 */#define FDC_DSR_DRATE1 (1<<1) /* date rate select, bit #1 */#define FDC_DSR_DRATE0 (1<<0) /* date rate select, bit #0 *//* DIR - digital input register bit definitions */#define FDC_DIR_AT_DSKCHG (1<<7) /* disk changed */#define FDC_DIR_PS2_DSKCHG (1<<7) /* disk changed */#define FDC_DIR_PS2_DRATE1 (1<<2) /* data rate select #1 */#define FDC_DIR_PS2_DRATE0 (1<<1) /* data rate select #0 */#define FDC_DIR_PS2_HIGHDEN (1<<0) /* high density selected */#define FDC_DIR_M30_DSKCHG (1<<7) /* disk changed */#define FDC_DIR_M30_DMAEN (1<<3) /* DMA enable */#define FDC_DIR_M30_NOPRE (1<<2) /* no precompensation */#define FDC_DIR_M30_DRATE1 (1<<1) /* data rate select #1 */#define FDC_DIR_M30_DRATE0 (1<<0) /* data rate select #0 *//* CCR - configuration control register bit definitions */#define FDC_CCR_DRATE1 (1<<1) /* data rate select #1 */#define FDC_CCR_DRATE0 (1<<0) /* data rate select #0 *//* ST0 - status register 0 bit definitions */#define FDC_ST0_IC1 (1<<7) /* interrupt code bit #1 */#define FDC_ST0_IC0 (1<<6) /* interrupt code bit #0 */#define FDC_ST0_SE (1<<5) /* seek end */#define FDC_ST0_EC (1<<4) /* equipment check */#define FDC_ST0_HDS (1<<2) /* head select */#define FDC_ST0_DS1 (1<<1) /* drive select #1 */#define FDC_ST0_DS0 (1<<0) /* drive select #0 *//* ST1 - status register 1 bit definitions */#define FDC_ST1_ET (1<<7) /* end of track */#define FDC_ST1_CE (1<<5) /* CRC error */#define FDC_ST1_OR (1<<4) /* overrun */#define FDC_ST1_ND (1<<2) /* no data */#define FDC_ST1_NW (1<<1) /* not writable */#define FDC_ST1_MA (1<<0) /* missing address mark *//* ST2 - status register 2 bit definitions */#define FDC_ST2_CM (1<<6) /* control mark */#define FDC_ST2_CD (1<<5) /* CRC error in data field */#define FDC_ST2_WT (1<<4) /* wrong track */#define FDC_ST2_SEH (1<<3) /* scan equal hit */#define FDC_ST2_SNS (1<<2) /* scan not satisfied */#define FDC_ST2_BT (1<<1) /* bad track */#define FDC_ST2_MD (1<<0) /* missing address mark in data field *//* ST3 - status register 3 bit definitions */#define FDC_ST3_WP (1<<6) /* write protect */#define FDC_ST3_TK0 (1<<4) /* track 0 */#define FDC_ST3_HDS (1<<2) /* head select */#define FDC_ST3_DS1 (1<<1) /* drive select #1 */#define FDC_ST3_DS0 (1<<0) /* drive select #0 *//* FDC command set definitions */#define FDC_CS_CONFIGURE 0x13 /* configure */#define FDC_CS_DUMPREG 0x0E /* dump registers */#define FDC_CS_FORMATTRACK 0x0D /* format track */#define FDC_CS_LOCK 0x14 /* lock */#define FDC_CS_MODE 0x01 /* mode */#define FDC_CS_NSC 0x18 /* NSC */#define FDC_CS_PRPNDCLRMODE 0x12 /* perpendicular mode */#define FDC_CS_READDATA 0x06 /* read data */#define FDC_CS_READDELDATA 0x0C /* read deleted data */#define FDC_CS_READID 0x0A /* read identifier */#define FDC_CS_READATRACK 0x02 /* read a track */#define FDC_CS_RECALIBRATE 0x07 /* recalibrate */#define FDC_CS_RELATIVESEEK 0x8F /* relative seek */#define FDC_CS_SCANEQUAL 0x11 /* scan equal */#define FDC_CS_SCANHIOREQUAL 0x1D /* scan high or equal */#define FDC_CS_SCANLOOREQUAL 0x19 /* scan low or equal */#define FDC_CS_SEEK 0x0F /* seek */#define FDC_CS_SENSEDRVSTAT 0x04 /* sense drive status */#define FDC_CS_SENSEINT 0x08 /* sense interrupt */#define FDC_CS_SETTRACK 0x21 /* set track */#define FDC_CS_SPECIFY 0x03 /* specify */#define FDC_CS_VERIFY 0x16 /* verify */#define FDC_CS_VERSION 0x10 /* version */#define FDC_CS_WRITEDATA 0x05 /* write data */#define FDC_CS_WRITEDELDATA 0x09 /* write deleted data *//* command/result phase bit definitions */#define FDC_CP_EIS (1<<6) /* enable implied seeks */#define FDC_CP_FIFO (1<<5) /* enable FIFO for execution phase */#define FDC_CP_POLL (1<<4) /* disable drive polling */#define FDC_CP_TMR (1<<7) /* motor timer mode */#define FDC_CP_IAF (1<<6) /* index address format */#define FDC_CP_IPS_M (1<<5) /* implied seek */#define FDC_CP_ETR (1<<0) /* extended track range */#define FDC_CP_FWR (1<<7) /* FIFO write disable */#define FDC_CP_FRD (1<<6) /* FIFO read disable */#define FDC_CP_BST (1<<5) /* burst mode disable */#define FDC_CP_R255 (1<<4) /* recalibrate step pulses */#define FDC_CP_BFR (1<<5) /* CMOS disk interface buffer enable */#define FDC_CP_WLD (1<<4) /* scan wild card */#define FDC_CP_RG (1<<2) /* read gate diagnostic */#define FDC_CP_PU (1<<0) /* PUMP pulse output diagnostic */#define FDC_CP_MT (1<<7) /* multi-track sector */#define FDC_CP_MFM (1<<6) /* MFM mode */#define FDC_CP_WNR (1<<6)#define FDC_CP_SK (1<<5) /* sector skip */#define FDC_CP_EC (1<<7) /* enable count */#define FDC_CP_IPS (1<<7) /* implied seek */#define FDC_CP_HD (1<<2) /* head address */#define FDC_CP_MSB (1<<2)#define FDC_CP_DR1 (1<<1) /* disk drive select, bit #1 */#define FDC_CP_DR0 (1<<0) /* disk drive select, bit #0 */#define FDC_CP_DMA (1<<0) /* non-DMA mode flag */#define FDC_CP_OW (1<<7) /* overwrite */#define FDC_CP_DC3 (1<<5)#define FDC_CP_DC2 (1<<4)#define FDC_CP_DC1 (1<<3)#define FDC_CP_DC0 (1<<2)#define FDC_CP_GAP (1<<1)#define FDC_CP_WG (1<<0) /* write gate *//* * typedefs * * command (command phase) structure definitions */typedef union fdc_command { struct c_justdata { UCHAR databytes[32]; } c_justdata; struct c_configure { UCHAR opcode; UCHAR cbyte1; UCHAR cbyte2; UCHAR pretrk; } c_configure; struct c_dumpreg { UCHAR opcode; } c_dumpreg; struct c_formattrack { UCHAR opcode; UCHAR cbyte1; UCHAR bytes_per_sector; UCHAR sectors_per_track; UCHAR format_gap; UCHAR data_pattern; } c_formattrack; struct c_lock { UCHAR opcode; } c_lock; struct c_mode { UCHAR opcode; UCHAR cbyte1; UCHAR cbyte2; UCHAR cbyte3; UCHAR cbyte4; } c_mode; struct c_nsc { UCHAR opcode; } c_nsc; struct c_pmode { UCHAR opcode; UCHAR cbyte1; } c_pmode; struct c_readdata { UCHAR opcode; UCHAR cbyte1; UCHAR track_number; UCHAR drive_head_number; UCHAR sector_number; UCHAR bytes_per_sector; UCHAR end_of_track_sector_number; UCHAR intersector_gap_length; UCHAR data_length; } c_readdata; struct c_readdeleteddata { UCHAR opcode; UCHAR cbyte1; UCHAR track_number; UCHAR drive_head_number; UCHAR sector_number; UCHAR bytes_per_sector; UCHAR end_of_track_sector_number; UCHAR intersector_gap_length;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -