Annotation of Gnu-Mach/chips/fdc_82077.h, revision 1.1

1.1     ! root        1: /* 
        !             2:  * Mach Operating System
        !             3:  * Copyright (c) 1992 Carnegie Mellon University
        !             4:  * All Rights Reserved.
        !             5:  * 
        !             6:  * Permission to use, copy, modify and distribute this software and its
        !             7:  * documentation is hereby granted, provided that both the copyright
        !             8:  * notice and this permission notice appear in all copies of the
        !             9:  * software, derivative works or modified versions, and any portions
        !            10:  * thereof, and that both notices appear in supporting documentation.
        !            11:  * 
        !            12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !            14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            15:  * 
        !            16:  * Carnegie Mellon requests users of this software to return to
        !            17:  * 
        !            18:  *  Software Distribution Coordinator  or  [email protected]
        !            19:  *  School of Computer Science
        !            20:  *  Carnegie Mellon University
        !            21:  *  Pittsburgh PA 15213-3890
        !            22:  * 
        !            23:  * any improvements or extensions that they make and grant Carnegie Mellon
        !            24:  * the rights to redistribute these changes.
        !            25:  */
        !            26: /*
        !            27:  *     File: fdi_82077_hdw.h
        !            28:  *     Author: Alessandro Forin, Carnegie Mellon University
        !            29:  *     Date:   1/92
        !            30:  *
        !            31:  *     Defines for the Intel 82077 Floppy Disk Controller chip.
        !            32:  *     Includes defines for 8272A and 82072.
        !            33:  */
        !            34: 
        !            35: #ifndef        _FDC_82077_H_
        !            36: #define        _FDC_82077_H_
        !            37: 
        !            38: /*
        !            39:  * Chips we claim to understand, and their modes
        !            40:  */
        !            41: #define        fdc_8272a       0
        !            42: #define        fdc_82072       1
        !            43: #define        fdc_82077aa     2
        !            44: 
        !            45: #define        at_mode         0
        !            46: #define        ps2_mode        1
        !            47: #define        mod30_mode      2
        !            48: 
        !            49: #define        DRIVES_PER_FDC  4
        !            50: 
        !            51: /*
        !            52:  * Register maps
        !            53:  */
        !            54: typedef struct {
        !            55:        volatile unsigned char  fd_sra;         /* r:  status register A */
        !            56:        volatile unsigned char  fd_srb;         /* r:  status register B */
        !            57:        volatile unsigned char  fd_dor;         /* rw: digital output reg */
        !            58:        volatile unsigned char  fd_tdr;         /* rw: tape drive register */
        !            59:        volatile unsigned char  fd_msr;         /* r:  main status register */
        !            60: #define                                fd_dsr  fd_msr  /* w:  data rate select reg */
        !            61:        volatile unsigned char  fd_data;        /* rw: fifo */
        !            62:        volatile unsigned char  fd_xxx;         /* --reserved-- */
        !            63:        volatile unsigned char  fd_dir;         /* r:  digital input reg */
        !            64: #define                                fd_ccr  fd_dir  /* w:  config control reg */
        !            65: } fd_regmap_t;
        !            66: 
        !            67: typedef struct {
        !            68:        volatile unsigned char  fd_msr;         /* r:  main status register */
        !            69:        volatile unsigned char  fd_data;        /* rw: data register */
        !            70: } fd_8272a_regmap_t;
        !            71: 
        !            72: typedef fd_8272a_regmap_t      fd_82072_regmap_t;
        !            73: /*#define                      fd_dsr  fd_msr  /* w:  data rate select reg */
        !            74: 
        !            75: /*
        !            76:  * Status register A (82077AA only)
        !            77:  *
        !            78:  * Only available in PS/2 (ps2) and Model 30 (m30) modes,
        !            79:  * not available in PC/AT (at) mode.
        !            80:  * Some signals have inverted polarity (~) on mod30
        !            81:  */
        !            82: 
        !            83: #define        FD_SRA_INT              0x80    /* interrupt  */
        !            84: #define        FD_SRA_DRV2             0x40    /* 2nd drive installed (ps2) */
        !            85: #define        FD_SRA_DRQ              0x40    /* dma request (mod30) */
        !            86: #define        FD_SRA_STEP             0x20    /* step pulse (~mod30) */
        !            87: #define        FD_SRA_TRK0             0x10    /* Track 0 (~mod30) */
        !            88: #define        FD_SRA_HDSEL            0x08    /* select head 1 (~mod30) */
        !            89: #define        FD_SRA_INDX             0x04    /* Index hole (~mod30) */
        !            90: #define        FD_SRA_WP               0x02    /* write protect (~mod30) */
        !            91: #define        FD_SRA_DIR              0x01    /* step dir, 1->center (~mod30) */
        !            92: 
        !            93: /*
        !            94:  * Status register B (82077AA only)
        !            95:  * Not available in at mode.
        !            96:  */
        !            97: 
        !            98: #define        FD_SRB_DRV2             0x80    /* 2nd drive installed (mod30) */
        !            99:                                        /* wired 1 on ps2 */
        !           100: 
        !           101: #define        FD_SRB_DS1              0x40    /* drive select 1 (mod30) */
        !           102:                                        /* wired 1 on ps2 */
        !           103: 
        !           104: #define        FD_SRB_DS0              0x20    /* drive select 0 */
        !           105: #define        FD_SRB_WRDATA           0x10    /* out data (toggle or ~trigger) */
        !           106: #define        FD_SRB_RDDATA           0x08    /*  in data (toggle or ~trigger) */
        !           107: #define        FD_SRB_WE               0x04    /* write enable (~mod30) */
        !           108: #define        FD_SRB_MOT_1            0x02    /* motor enable drive 1 (ps2) */
        !           109: #define        FD_SRB_DS3              0x02    /* drive select 3 (mod30) */
        !           110: #define        FD_SRB_MOT_0            0x01    /* motor enable drive 0 (ps2) */
        !           111: #define        FD_SRB_DS2              0x01    /* drive select 2 (mod30) */
        !           112: 
        !           113: /*
        !           114:  * Digital output register (82077AA only)
        !           115:  */
        !           116: 
        !           117: #define        FD_DOR_MOT_3            0x80    /* motor enable drive 3 */
        !           118: #define        FD_DOR_MOT_2            0x40
        !           119: #define        FD_DOR_MOT_1            0x20
        !           120: #define        FD_DOR_MOT_0            0x10
        !           121: #define        FD_DOR_DMA_GATE         0x08    /* enable dma (mod30,at) */
        !           122: #define        FD_DOR_ENABLE           0x04    /* chip reset (inverted) */
        !           123: #define        FD_DOR_DRIVE_0          0x00    /* select drive no 0 */
        !           124: #define        FD_DOR_DRIVE_1          0x01
        !           125: #define        FD_DOR_DRIVE_2          0x02
        !           126: #define        FD_DOR_DRIVE_3          0x03
        !           127: 
        !           128: /*
        !           129:  * Tape drive register (82077AA only)
        !           130:  */
        !           131: 
        !           132: #define        FD_TDR_TAPE_1           0x01    /* unit 1 is a tape */
        !           133: #define        FD_TDR_TAPE_2           0x02
        !           134: #define        FD_TDR_TAPE_3           0x03
        !           135: #define        FD_TDR_xxx              0xfc
        !           136: 
        !           137: /*
        !           138:  * Data-rate select register (82077AA and 82072)
        !           139:  */
        !           140: 
        !           141: #define        FD_DSR_RESET            0x80    /* self-clearing reset */
        !           142: #define        FD_DSR_POWER_DOWN       0x40    /* stop clocks and oscill */
        !           143: #define        FD_DSR_zero             0x20    /* wired zero on 82077AA */
        !           144: #define        FD_DSR_EPLL             0x20    /* enable PLL on 82072 */
        !           145: 
        !           146: #define        FD_DSR_PRECOMP_MASK     0x1c    /* precompensation value */
        !           147: #      define  FD_DSR_PRECOMP_SHIFT    2
        !           148: 
        !           149: #      define  FD_DSR_PRECOMP_DEFAULT  0       /* 41.67@1Mbps else 125ns */
        !           150: #      define  FD_DSR_PRECOMP_41_67    1
        !           151: #      define  FD_DSR_PRECOMP_83_34    2
        !           152: #      define  FD_DSR_PRECOMP_125_00   3
        !           153: #      define  FD_DSR_PRECOMP_166_67   4
        !           154: #      define  FD_DSR_PRECOMP_208_33   5
        !           155: #      define  FD_DSR_PRECOMP_250_00   6
        !           156: #      define  FD_DSR_PRECOMP_DISABLE  7       /* 0.00ns */
        !           157: 
        !           158: #define        FD_DSR_DATA_RATE_MASK   0x03
        !           159: #define        FD_DSR_SD_250           0x00    /* fm modulation, 250Kbps bit clock */
        !           160: #define        FD_DSR_SD_150           0x01
        !           161: #define        FD_DSR_SD_125           0x02
        !           162: 
        !           163: #define        FD_DSR_DD_500           0x00    /* mfm modulation, 500Kbps */
        !           164: #define        FD_DSR_DD_300           0x01
        !           165: #define        FD_DSR_DD_250           0x02
        !           166: #define        FD_DSR_DD_1000          0x03    /* illegal for 82077 */
        !           167: 
        !           168: /*
        !           169:  * Main status register (all chips)
        !           170:  */
        !           171: 
        !           172: #define FD_MSR_RQM             0x80    /* request from master (allowed) */
        !           173: #define FD_MSR_DIO             0x40    /* data in/out, 1->master read */
        !           174: #define FD_MSR_NON_DMA         0x20    /* dma disabled */
        !           175: #define FD_MSR_CMD_BSY         0x10    /* command in progress */
        !           176: #define FD_MSR_DRV_3_BSY       0x08    /* drive busy seeking */
        !           177: #define FD_MSR_DRV_2_BSY       0x04
        !           178: #define FD_MSR_DRV_1_BSY       0x02
        !           179: #define FD_MSR_DRV_0_BSY       0x01
        !           180: 
        !           181: /*
        !           182:  * FIFO (82077AA and 82072)
        !           183:  *
        !           184:  * Service delay is
        !           185:  *             Threshold * 8
        !           186:  *     delay = -------------  -  1.5 usecs
        !           187:  *               Data-rate
        !           188:  */
        !           189: 
        !           190: #define        FD_FIFO_DEEP            16
        !           191: 
        !           192: /*
        !           193:  * Digital input register (82077AA only)
        !           194:  */
        !           195: 
        !           196: #define FD_DIR_DSK_CHG         0x80    /* disk was changed (~mod30) */
        !           197: 
        !           198: #define FD_DIR_ones            0x78    /* wired ones for ps2 */
        !           199: #define FD_DIR_zeroes          0x70    /* wired zeroes for mod30 */
        !           200: #define FD_DIR_undef           0x7f    /* undefined for at */
        !           201: 
        !           202: #define FD_DIR_DR_MASK_PS2     0x06    /* current data rate (ps2) */
        !           203: #      define  FD_DIR_DR_SHIFT_PS2     1
        !           204: #define FD_DIR_LOW_DENS                0x01    /* zero for 500/1M dr (ps2) */
        !           205: 
        !           206: #define FD_DIR_DMA_GATE                0x08    /* same as DOR (mod30) */
        !           207: #define FD_DIR_NOPREC          0x04    /* same as CCR (mod30) */
        !           208: #define FD_DIR_DR_MASK_M30     0x03    /* current data rate (mod30) */
        !           209: #      define  FD_DIR_DR_SHIFT_M30     0
        !           210: 
        !           211: /*
        !           212:  * Configuration control register (82077AA only)
        !           213:  */
        !           214: 
        !           215: #define        FD_CCR_DATA_RATE_MASK   0x03    /* see DSR for values */
        !           216: #define        FD_CCR_NOPREC           0x04    /* "has no function" (mod30) */
        !           217: 
        !           218: 
        !           219: /*
        !           220:  * Programming
        !           221:  *
        !           222:  * Legend for command bytes, when applicable
        !           223:  *
        !           224:  *     hds     bit 2 of byte 1, head select (1 -> head 1)
        !           225:  *     ds      bits 0-1 of byte 1, drive select
        !           226:  *     c       cylinder number (max 76 for 8272A, else 255)
        !           227:  *     h       head number
        !           228:  *     r       sector number
        !           229:  *     n       number of bytes in sector
        !           230:  *     eot     end-of-track, e.g. final sector number
        !           231:  *     gpl     gap length
        !           232:  *     dtl     data length (for partial sectors)
        !           233:  *     st0-3   status byte
        !           234:  *     srt     step rate time
        !           235:  *     hut     head unload time
        !           236:  *     hlt     head load time
        !           237:  *     nd      disable DMA
        !           238:  *     mot     do not turn motor on before checking drive status
        !           239:  *     pcn     present cylinder number
        !           240:  *     ncn     new cylinder number
        !           241:  *     rcn     relative cylinder number (new=present+rcn)
        !           242:  *     sc      sectors/cylinder
        !           243:  *     d       filler byte
        !           244:  *     ?       undefined
        !           245:  *     hsda    high-speed disk adjust (doubles motor on/off delays)
        !           246:  *     moff    motor off timer, one disk revolution increments
        !           247:  *     mon     motor on timer, ditto
        !           248:  *     eis     enable implied seeks
        !           249:  *     dfifo   disable fifo
        !           250:  *     poll    disable poll
        !           251:  *     fifthr  fifo threshold (1 to 16 bytes)
        !           252:  *     pretrk  precomp starts on this trackno (0-255)
        !           253:  *     wgate   change timings of WE signal, in perpendicular mode
        !           254:  *     gap     change gap2 length, in perpendicular mode
        !           255:  *     ec      in verify, qualify terminating conditions (sc viz eot)
        !           256:  */
        !           257: 
        !           258: /* First byte of command, qualifiers */
        !           259: #define        FD_CMD_MT               0x80    /* Multi-track */
        !           260: #define        FD_CMD_MFM              0x40    /* Double density */
        !           261: #define        FD_CMD_SK               0x20    /* skip deleted data address mark */
        !           262: #define        FD_CMD_DIR              0x40    /* relative seek direction (up) */
        !           263: 
        !           264: /* command codes and description */
        !           265: 
        !           266: /*
        !           267:  * Read an entire track.
        !           268:  *     Qualifiers:     MFM, SK (8272A only)
        !           269:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           270:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           271:  */
        !           272: #define        FD_CMD_READ_TRACK               0x02
        !           273: 
        !           274: /*
        !           275:  * Specify timers
        !           276:  *     Qualifiers:
        !           277:  *     Bytes total:    3       code,srt+hut,hlt+nd
        !           278:  *     Result total:
        !           279:  */
        !           280: #define        FD_CMD_SPECIFY                  0x03
        !           281: 
        !           282: /*
        !           283:  * Sense status of drive
        !           284:  *     Qualifiers:
        !           285:  *     Bytes total:    2       code,hds+ds +mot(82072 only)
        !           286:  *     Result total:   1       st3
        !           287:  */
        !           288: #define        FD_CMD_SENSE_DRIVE_STATUS       0x04
        !           289: #      define FD_CMD_SDS_NO_MOT                0x80
        !           290: 
        !           291: /*
        !           292:  * Write
        !           293:  *     Qualifiers:     MT, MFM
        !           294:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           295:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           296:  */
        !           297: #define        FD_CMD_WRITE_DATA               0x05
        !           298: 
        !           299: /*
        !           300:  * Read
        !           301:  *     Qualifiers:     MT, MFM, SK
        !           302:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           303:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           304:  */
        !           305: #define        FD_CMD_READ_DATA                0x06
        !           306: 
        !           307: /*
        !           308:  * Seek to track 0
        !           309:  *     Qualifiers:
        !           310:  *     Bytes total:    2       code,ds
        !           311:  *     Result total:
        !           312:  */
        !           313: #define        FD_CMD_RECALIBRATE              0x07
        !           314: 
        !           315: /*
        !           316:  * Sense interrupt status
        !           317:  *     Qualifiers:
        !           318:  *     Bytes total:    1       code
        !           319:  *     Result total:   2       st0,pcn
        !           320:  */
        !           321: #define        FD_CMD_SENSE_INT_STATUS         0x08
        !           322: 
        !           323: /*
        !           324:  * Write data and mark deleted
        !           325:  *     Qualifiers:     MT, MFM
        !           326:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           327:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           328:  */
        !           329: #define        FD_CMD_WRITE_DELETED_DATA       0x09
        !           330: 
        !           331: /*
        !           332:  * Read current head position
        !           333:  *     Qualifiers:     MFM
        !           334:  *     Bytes total:    2       code,hds+ds
        !           335:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           336:  */
        !           337: #define        FD_CMD_READ_ID                  0x0a
        !           338: 
        !           339: /*
        !           340:  * Set value of MOT pin, unconditionally
        !           341:  *     Qualifiers:     see
        !           342:  *     Bytes total:    1       code+..
        !           343:  *     Result total:   none    returns to command phase
        !           344:  */
        !           345: #define        FD_CMD_MOTOR_ON_OFF             0x0b    /* 82072 only */
        !           346: 
        !           347: #      define  FD_CMD_MOT_ON                   0x80
        !           348: #      define  FD_CMD_MOT_DS                   0x60
        !           349: #      define  FD_CMD_MOT_DS_SHIFT             5
        !           350: 
        !           351: /*
        !           352:  * Read data despite deleted address mark
        !           353:  *     Qualifiers:     MT, MFM, SK
        !           354:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           355:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           356:  */
        !           357: #define        FD_CMD_READ_DELETED_DATA        0x0c
        !           358: 
        !           359: /*
        !           360:  * Media initialization
        !           361:  *     Qualifiers:     MFM
        !           362:  *     Bytes total:    6       code,hds+ds,n,sc,gpl,d
        !           363:  *     Data:           4*sc/2  c,h,r,n
        !           364:  *     Result total:   7       st0,st1,st2,?,?,?,?
        !           365:  */
        !           366: #define        FD_CMD_FORMAT_TRACK             0x0d
        !           367: 
        !           368: /*
        !           369:  * Dump internal register status
        !           370:  *     Qualifiers:
        !           371:  *     Bytes total:    1       code
        !           372:  *     Result total:   10      pcn0,pcn1,pcn2,pcn3,srt+hut,hlt+nd,
        !           373:  *                             sc/eot,hsda+moff+mon,
        !           374:  *                             eis+dfifo+poll+fifothr, pretrk
        !           375:  *     Notes:                  82077AA does not provide for hsda+moff+mon
        !           376:  */
        !           377: #define        FD_CMD_DUMPREG                  0x0e    /* not 8272a */
        !           378: 
        !           379: /*
        !           380:  * Move head
        !           381:  *     Qualifiers:
        !           382:  *     Bytes total:    3       code,hds+ds,ncn
        !           383:  *     Result total:
        !           384:  */
        !           385: #define        FD_CMD_SEEK                     0x0f
        !           386: 
        !           387: /*
        !           388:  * 
        !           389:  *     Qualifiers:
        !           390:  *     Bytes total:    1       code
        !           391:  *     Result total:   1       version
        !           392:  */
        !           393: #define        FD_CMD_VERSION                  0x10    /* 82077AA only */
        !           394: #      define  FD_VERSION_82077AA              0x90
        !           395: 
        !           396: /*
        !           397:  * Scan disk data
        !           398:  *     Qualifiers:     MT, MFM, SK
        !           399:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           400:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           401:  */
        !           402: #define        FD_CMD_SCAN_EQUAL               0x11    /* 8272A only */
        !           403: 
        !           404: /*
        !           405:  * Specify timers
        !           406:  *     Qualifiers:
        !           407:  *     Bytes total:    2       code,wgate+gap
        !           408:  *     Result total:
        !           409:  */
        !           410: #define        FD_CMD_PERPENDICULAR_MODE       0x12    /* 82077AA only */
        !           411: 
        !           412: /*
        !           413:  * Set configuration parameters
        !           414:  *     Qualifiers:
        !           415:  *     Bytes total:    4       code,hsda+moff+mon,eis+dfifo+poll+fifothr,
        !           416:  *                             pretrk
        !           417:  *     Result total:
        !           418:  *     Notes:                  82077AA does not provide for hsda+moff+mon
        !           419:  */
        !           420: #define        FD_CMD_CONFIGURE                0x13    /* not 8272a */
        !           421: 
        !           422: /*
        !           423:  * Verify CRC of disk data
        !           424:  *     Qualifiers:     MT, MFM, SK
        !           425:  *     Bytes total:    9       code,ec+hds+ds,c,h,r,n,eot,gpl,dtl/sc
        !           426:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           427:  */
        !           428: #define        FD_CMD_VERIFY                   0x16    /* 82077AA only */
        !           429: 
        !           430: /*
        !           431:  * Scan disk data (disk less-or-equal memory)
        !           432:  *     Qualifiers:     MT, MFM, SK
        !           433:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           434:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           435:  */
        !           436: #define        FD_CMD_SCAN_LOW_OR_EQUAL        0x19    /* 8272A only */
        !           437: 
        !           438: /*
        !           439:  * Scan disk data (disk greater-or-equal memory)
        !           440:  *     Qualifiers:     MT, MFM, SK
        !           441:  *     Bytes total:    9       code,hds+ds,c,h,r,n,eot,gpl,dtl
        !           442:  *     Result total:   7       st0,st1,st2,c,h,r,n
        !           443:  */
        !           444: #define        FD_CMD_SCAN_HIGH_OR_EQUAL       0x1d    /* 8272A only */
        !           445: 
        !           446: /*
        !           447:  * Specify timers
        !           448:  *     Qualifiers:     DIR
        !           449:  *     Bytes total:    3       code,hds+ds,rcn
        !           450:  *     Result total:
        !           451:  */
        !           452: #define        FD_CMD_RELATIVE_SEEK            0x8f    /* not 8272a */
        !           453: 
        !           454: /*
        !           455:  * Any invalid command code
        !           456:  *     Qualifiers:
        !           457:  *     Bytes total:    1       code
        !           458:  *     Result total:   1       st0 (st0 == 0x80)
        !           459:  */
        !           460: #define        FD_CMD_INVALID                  0xff
        !           461: 
        !           462: 
        !           463: /*
        !           464:  * Results and statii
        !           465:  *
        !           466:  * The typical command returns three status bytes,
        !           467:  * followed by four drive status bytes.
        !           468:  */
        !           469: 
        !           470: /*
        !           471:  * Status register 0
        !           472:  */
        !           473: #define        FD_ST0_IC_MASK          0xc0    /* interrupt completion code */
        !           474: 
        !           475: #      define  FD_ST0_IC_OK            0x00    /* terminated ok */
        !           476: #      define  FD_ST0_IC_AT            0x40    /* exec phase ended sour */
        !           477: #      define  FD_ST0_IC_BAD_CMD       0x80    /* didnt grok */
        !           478: #      define  FD_ST0_IC_AT_POLL       0xc0    /* polling got in the way */
        !           479: 
        !           480: #define        FD_ST0_SE               0x20    /* (implied) seek ended */
        !           481: #define        FD_ST0_EC               0x10    /* equipment check */
        !           482: #define        FD_ST0_NR               0x08    /* not ready (raz for 82077aa) */
        !           483: #define        FD_ST0_H                0x04    /* currently selected head */
        !           484: #define        FD_ST0_DS               0x03    /* currently selected drive */
        !           485: 
        !           486: /*
        !           487:  * Status register 1
        !           488:  */
        !           489: 
        !           490: #define        FD_ST1_EN               0x80    /* end of cylinder (TC not set?) */
        !           491: #define        FD_ST1_zero             0x48
        !           492: #define        FD_ST1_DE               0x20    /* data error, bad CRC */
        !           493: #define        FD_ST1_OR               0x10    /* overrun/underrun
        !           494: #define        FD_ST1_ND               0x04    /* no data, sector not found */
        !           495: #define        FD_ST1_NW               0x02    /* write protect signal */
        !           496: #define        FD_ST1_MA               0x01    /* missing address mark */
        !           497: 
        !           498: /*
        !           499:  * Status register 2
        !           500:  */
        !           501: 
        !           502: #define        FD_ST2_zero             0x80
        !           503: #define        FD_ST2_CM               0x40    /* control mark, improper read */
        !           504: #define        FD_ST2_DD               0x20    /* the CRC error was for data  */
        !           505: #define        FD_ST2_WC               0x10    /* wrong cylinder */
        !           506: #define        FD_ST2_SH               0x08    /* scan hit (8272a only) */
        !           507: #define        FD_ST2_SN               0x04    /* scan not met (8272a only) */
        !           508: #define        FD_ST2_BC               0x02    /* bad cylinder, has 0xff mark */
        !           509: #define        FD_ST2_MD               0x01    /* missing data mark */
        !           510: 
        !           511: /*
        !           512:  * Status register 3
        !           513:  * (sense drive status)
        !           514:  */
        !           515: 
        !           516: #define        FD_ST3_FT               0x80    /* fault pin (0 if not 8272a) */
        !           517: #define        FD_ST3_WP               0x40    /* write protect pin */
        !           518: #define        FD_ST3_RDY              0x20    /* ready pin (1 on 82077aa) */
        !           519: #define        FD_ST3_T0               0x10    /* track0 pin */
        !           520: #define        FD_ST3_TS               0x08    /* two-sided pin (1 if not 8272a) */
        !           521: #define        FD_ST3_HD               0x04    /* hdsel pin */
        !           522: #define        FD_ST3_DS               0x03    /* drive select pins (1&0) */
        !           523: 
        !           524: 
        !           525: #endif /* _FDC_82077_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.