Annotation of ntddk/src/scsi/qic117/mt1defs.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
                      4: All Rights Reserved
                      5: 
                      6: Module Name:
                      7: 
                      8:     mt1defs..h
                      9: 
                     10: Abstract:
                     11: 
                     12: 
                     13: Revision History:          
                     14: 
                     15: 
                     16: 
                     17: 
                     18: --*/
                     19: 
                     20: #define FIRM_VERSION_60             60    // First jumbo B firmware version
                     21: #define FIRM_VERSION_63             63    // Cart in problems
                     22: #define FIRM_VERSION_64             64    // First Firmware version to support Skip_n_Seg through the Erase Gap
                     23: #define FIRM_VERSION_65             65    // First Firmware version to support Pegasus
                     24: #define FIRM_VERSION_80             80    // First Firmware version to support Jumbo c
                     25: #define FIRM_VERSION_87             87    // First Firmware revision to support QIC-117 C
                     26: #define FIRM_VERSION_110            110   // First Firmware version to support Eagle
                     27: 
                     28: // EQU's for QIC-40 firmware commands
                     29: 
                     30: typedef enum _FIRMWARE_CMD {
                     31:     Soft_Reset              =  1,      // soft reset of tape drive
                     32:     Rpt_Next_Bit            =  2,      // report next bit (in report subcontext)
                     33:     Pause                   =  3,      // pause tape motion
                     34:     Micro_Pause             =  4,      // pause and microstep the head
                     35:     Alt_Timeout             =  5,      // set alternate command timeout
                     36:     Report_Status           =  6,      // report drive status
                     37:     Report_Error            =  7,      // report drive error code
                     38:     Report_Confg            =  8,      // report drive configuration
                     39:     Report_ROM              =  9,      // report ROM version
                     40:     Rpt_Signature           =  9,      // report drive signature (model dependant diagnostic mode)
                     41:     Logical_Fwd             = 10,      // move tape in logical forward mo
                     42:     Physical_Rev            = 11,      // move tape in physical reverse mode
                     43:     Physical_Fwd            = 12,      // move tape in physical forward mode
                     44:     Seek_Track              = 13,      // seek head to track position
                     45:     Seek_LP                 = 14,      // seek load point
                     46:     Format_Mode             = 15,      // enter format mode
                     47:     Write_Ref               = 16,      // write reference burst
                     48:     Verify_Mode             = 17,      // enter verify mode
                     49:     Park_Head               = 17,      // park head (model dependant diagnostic mode)
                     50:     Stop_Tape               = 18,      // stop the tape
                     51:     Read_Noise_Code         = 18,      // check noise on drive (model dependent diagnostic mode)
                     52:     Microstep_up            = 21,      // microstep head up
                     53:     Disable_WP              = 21,      // disable write protect line (model dependent diagnostic mode)
                     54:     Microstep_down          = 22,      // microstep head down
                     55:     Set_Gain                = 22,      // set absolute drive gain (model dependant diagnostic mode)
                     56:     Read_Port2              = 23,      // read the drive processor port 2 (diagnostic command)
                     57:     Report_Vendor           = 24,      // report vendor number
                     58:     Skip_N_Rev              = 25,      // skip n segments reverse
                     59:     Skip_N_Fwd              = 26,      // skip n segments forward
                     60:     Select_Speed            = 27,      // select tape speed
                     61:     Diag_1_Mode             = 28,      // enter diagnostic mode 1
                     62:     Diag_2_Mode             = 29,      // enter diagnostic mode 2
                     63:     Primary_Mode            = 30,      // enter primary mode
                     64:     Report_Vendor32         = 32,      // report vendor number (for firmware versions > 33)
                     65:     Report_Tape_Stat        = 33,      // reports the tape format of the currently loaded tape
                     66:     Skip_N_Rev_Ext          = 34,      // skip n segments reverse (extended format)
                     67:     Skip_N_Fwd_Ext          = 35,      // skip n segments forward (extended format)
                     68:     Rpt_CMS_Status          = 37,      // report CMS status byte (model dependant - diagnostic mode)
                     69:     Read_Ram                = 44,      // read tape drive RAM
                     70:     New_Tape                = 45,      // load tape sequence
                     71:     Select_Drive            = 46,      // select the tape drive
                     72:     Deselect_Drive          = 47,      // deselect the tape drive
                     73:     ReportProtoVer          = 50,      // reports firmware prototype version number (model dependant - diagnostic mode)
                     74:     Dtrain_Info             = 53,      // enter Drive Train Information mode (model dependant - diagnostic mode)
                     75:     Mtn_Select_1            = 23,      // Mountain select byte 1
                     76:     Mtn_Select_2            = 20,      // Mountain select byte 2
                     77:     Mtn_Deselect            = 24,      // Mountain deselect byte
                     78:     Rpt_Archive_Native_Mode = 40       // Archive Native Mode diagnostic command
                     79: } FIRMWARE_CMD, *PFIRMWARE_CMD;
                     80: 
                     81: // Parameters for the Drive Training Information Commands
                     82: #define         Gdesp_Info                      5
                     83: 
                     84: // QIC-40 Firmware errors
                     85: 
                     86: typedef enum _FIRMWARE_ERROR {
                     87:     Drv_Not_Rdy     =  1,          // command received while drive not ready
                     88:     No_Cart         =  2,          // cartridge not present or removed
                     89:     Speed_Err       =  3,          // motor speed error
                     90:     Speed_Anom      =  4,          // motor speed anomaly (motor jammed, or gross speed error)
                     91:     Writ_Prot       =  5,          // cartridge write protected
                     92:     Undef_Cmd       =  6,          // undefined or reserved command code
                     93:     Illegal_Trk     =  7,          // illegal track address specified for Seek
                     94:     Cmd_in_Rpt      =  8,          // illegal command in report subcontext
                     95:     Bad_Diag_Entry  =  9,          // illegal entry attempt into a diagnostic mode
                     96:     Broken_Tape     = 10,          // broken tape detected (based on hole and mo
                     97:     Read_Gain_Err   = 11,          // Warning -- read gain setting error
                     98:     Cmd_on_Err      = 12,          // command Received while error status pending
                     99:     Cmd_on_New_Cart = 13,          // command received while new cartridge pendin
                    100:     Bad_Prm_Cmd     = 14,          // command illegal or undefined in primary mo
                    101:     Bad_Fmt_Cmd     = 15,          // command illegal or undefined in format mode
                    102:     Bad_Vfy_Cmd     = 16,          // command illegal or undefined in verify mode
                    103:     Bad_Log_Fwd     = 17,          // logical forward not a logical BOT in format mo
                    104:     Early_Fmt_EOT   = 18,          // logical EOT before all segments generated
                    105:     Cmd_on_No_Ref   = 19,          // command illegal when cartridge not reference
                    106:     Self_Diag       = 20,          // self-diagnostic failed -- NOTE: this error CA
                    107:     Uninit_PROM     = 21,          // Warning -- EEPROM not initialized, default set
                    108:     Bad_PROM        = 22,          // EEPROM contents corrupted or EEPROM hardware m
                    109:     Motion_Timeout  = 23,          // tape motion timeout (max EOT-to-BOT time ex
                    110:     Long_Data_Seg   = 24,          // data segment too long -- logical forward
                    111:     Xmit_Overrun    = 25,          // command transmit overrun (usually a firmware
                    112:     Pwr_On_Reset    = 26,          // power on reset occurred
                    113:     Swre_Reset      = 27,          // software initiated reset occurred
                    114:     Diag_Err_2      = 28,          // model-dependant diagnostic error
                    115:     Diag_Err_1      = 29,          // model-independant diagnostic error
                    116:     Non_Int_Cmd     = 30,          // command received during non-interruptible process
                    117:     Speed_not_Avail = 31,          // speed selection requested is not ava
                    118:     Inval_Media     = 34,          // tape media is invalid for the drive (QIC80 only)
                    119:     Head_Ref_Fail   = 35,          // head reference failure (QIC80 only)
                    120:     Edge_Seek_Fail  = 36,          // seeking to edge tracks failed (QIC80 only)
                    121:     Mssng_Train_Tbl = 37,          // 37 - Missing Training Table
                    122:     Invalid_Format  = 38,          // 38 - Invalid Format
                    123:     EOT_Sensor_Flr  = 39,          // 39 - EOT/BOT Sensor Failure
                    124:     Trn_Tbl_Chksum  = 40,          // 40 - Training Table Checksum Error
                    125:     Wtchdog_Reset   = 41,          // 41 - Watchdog Timer Reset Occurred
                    126:     Illegal_Error   = 42,          // 42 - Illegal Error Number
                    127:     NotRdy          = 106         // Drive Not Ready
                    128: } FIRMWARE_ERROR, *PFIRMWARE_ERROR;
                    129: 
                    130: // Floppy Disk Port constants
                    131: 
                    132: // normal drive B
                    133: #define curb                            1
                    134: #define selb                0x2d    // 00101101: motor B + enable DMA/IRQ/FDC + sel B
                    135: #define dselb               0x0c    // 00001100: enable DMA/IRQ/FDC + sel A
                    136: // unselected drive
                    137: #define curu                            0
                    138: #define selu                0x0d    // 00001101: enable DMA/IRQ/FDC + sel B
                    139: #define dselu               0x0c    // 00001100: enable DMA/IRQ/FDC + sel A
                    140: // normal drive D
                    141: #define curd                            3
                    142: #define seld                0x8f    // 10001111: motor D + enable DMA/IRQ/FDC + sel D
                    143: #define dseld               0x0e    // 00001110  motor D + enable DMA/IRQ/FDC + sel C
                    144: // laptop unselected drive
                    145: #define curub                           0
                    146: #define selub               0x2d    // 00101101: motor B + enable DMA/IRQ/FDC + sel B
                    147: #define dselub              0x0c    // 00001100: enable DMA/IRQ/FDC + sel A
                    148: 
                    149: #define alloff              0x08    // no motor + enable DMA/IRQ + disable FDC + sel A
                    150: #define fdc_idle            0x0c    // no motor + enable DMA/IRQ/FDC + sel A
                    151: 
                    152: #define DRIVE_ID_MASK       0x03
                    153: 
                    154: // Floppy configuration parameters
                    155: 
                    156: #define FDC_FIFO            15      // FIFO size for an 82077
                    157: #define FMT_GPL             233     // gap length for format (QIC-40 205ft & 310ft)
                    158: #define WRT_GPL             109     // gap length for write (QIC-40 205ft & 310ft)
                    159: #define FMT_BPS             03      // bytes per sector for formatting(1024)
                    160: #define WRT_BPS             FMT_BPS // bytes per sector for reading/writing (1024)
                    161: #define FSC_SEG             32      // floppy sectors per segment (QIC-40 205ft & 310ft)
                    162: #define SEG_FTK             4       // segments per floppy track (QIC-40 205ft & 310ft)
                    163: #define FSC_FTK             (FSC_SEG*SEG_FTK)    // floppy sectors per floppy track (QIC-40 205ft & 310ft)
                    164: #define SEG_TTRK_40         68      // segments per tape track (QIC-40 205ft)
                    165: #define SEG_TTRK_40L        102     // segments per tape track (QIC-40 310ft)
                    166: #define SEG_TTRK_80         100     // segments per tape track (QIC-80 205ft)
                    167: #define SEG_TTRK_80L        150     // segments per tape track (QIC-80 310ft)
                    168: #define SEG_TTRK_QICEST_40  365     // segments per tape track (QIC-40 QICEST)
                    169: #define SEG_TTRK_QICEST_80  537     // segments per tape track (QIC-80 QICEST)
                    170: #define SEG_TTRK_500        422     // segments per tape track (QIC-500)
                    171: #define SEG_TTRK_500L       1574    // segments per tape track (QIC-500)
                    172: 
                    173: #define FTK_FSD_40          170     // floppy tracks per floppy side (QIC-40 205ft)
                    174: #define FTK_FSD_40L         255     // floppy tracks per floppy side (QIC-40 310ft)
                    175: #define FTK_FSD_80          150     // floppy tracks per floppy side (QIC-80 205ft)
                    176: #define FTK_FSD_80L         150     // floppy tracks per floppy side (QIC-80 310ft)
                    177: #define FTK_FSD_QICEST_40   254     // floppy tracks per floppy side (QIC-40 QICEST) */
                    178: #define FTK_FSD_QICEST_80   254     // floppy tracks per floppy side (QIC-80 QICEST) */
                    179: #define FTK_FSD_500         254     // floppy tracks per floppy side (QIC-500) */
                    180: #define FTK_FSD_QICEST_500  254     // floppy tracks per floppy side (QIC-500) */
                    181: 
                    182: #define NUM_TTRK_40         20      // number of tape tracks (QIC-40 205ft & 310ft)
                    183: #define NUM_TTRK_80         28      // number of tape tracks (QIC-40 205ft & 310ft)
                    184: #define NUM_TTRK_500        40      // number of tape tracks (QIC-500)
                    185: #define PHY_SIZ             1024    // number of bytes per sector
                    186: 
                    187: //
                    188: // Tape Format Types and lengths/Coercivity
                    189: //
                    190: 
                    191: #define QIC_UNKNOWN         0       // Unknown Tape Format and Length
                    192: #define QIC_40              1       // QIC-40 Tape Format
                    193: #define QIC_80              2       // QIC-80 Tape Format
                    194: #define QIC_500             3       // QIC-500 Tape Format
                    195: #define QIC_SHORT           1       // Length = 205 & Coercivity = 550 Oe
                    196: #define QIC_LONG            2       // Length = 307.5 & Coercivity = 550 Oe
                    197: #define QIC_SHORT_900       3       // Length = 295 & Coercivity = 900 Oe
                    198: #define QICEST              4       // Length = 1100 & Coercivity = 550 Oe
                    199: #define QICEST_900          5       // Length = 1100 & Coercivity = 900 Oe
                    200: 
                    201: // Floppy disk controller misc constants
                    202: 
                    203: // 82077 version number
                    204: #define VALID_NEC_FDC       0x90    // version number
                    205: #define NSC_PRIMARY_VERSION 0x70    // National 8477 verion number
                    206: #define NSC_MASK            0xF0    // mask for National version number
                    207: #define FDC_82078_44_MASK   0x40    // mask for 82078 44 pin part id
                    208: 
                    209: // main status register
                    210: #define MSR_RQM             0x80    // request for master
                    211: #define MSR_DIO             0x40    // data input/output (0=input, 1=output)
                    212: #define MSR_EXM             0x20    // execution mode
                    213: #define MSR_CB              0x10    // FDC busy
                    214: #define MSR_D3B             0x08    // FDD 3 busy
                    215: #define MSR_D2B             0x04    // FDD 2 busy
                    216: #define MSR_D1B             0x02    // FDD 1 busy
                    217: #define MSR_D0B             0x01    // FDD 0 busy
                    218: 
                    219: // status register 0
                    220: #define ST0_IC              0xC0    // Interrupt code (00=Normal, 01=Abnormal, 10=Illegal cmd, 11=Abnormal)
                    221: #define ST0_SE              0x20    // Seek end
                    222: #define ST0_EC              0x10    // Equipment check
                    223: #define ST0_NR              0x08    // Not Ready
                    224: #define ST0_HD              0x04    // Head Address
                    225: #define ST0_US              0x03    // Unit Select (0-3)
                    226: 
                    227: // status register 1
                    228: #define ST1_EN              0x80    // End of Cylinder
                    229: #define ST1_DE              0x20    // Data Error (CRC error)
                    230: #define ST1_OR              0x10    // Over Run
                    231: #define ST1_ND              0x04    // No Data
                    232: #define ST1_NW              0x02    // Not Writable (write protect error)
                    233: #define ST1_MA              0x01    // Missing Address Mark
                    234: 
                    235: // status register 2
                    236: #define ST2_CM              0x40    // Control Mark (Deleted Data Mark)
                    237: #define ST2_DD              0x20    // Data Error in Data Field
                    238: #define ST2_WC              0x10    // Wrong Cylinder
                    239: #define ST2_SH              0x08    // Scan Equal Hit
                    240: #define ST2_SN              0x04    // Scan Not Satisfied
                    241: #define ST2_BC              0x02    // Bad Cylinder
                    242: #define ST2_MD              0x01    // Missing Address Mark in Data Field
                    243: 
                    244: // status register 3
                    245: #define ST3_FT              0x80    // Fault
                    246: #define ST3_WP              0x40    // Write Protected
                    247: #define ST3_RY              0x20    // Ready
                    248: #define ST3_T0              0x10    // Track 0
                    249: #define ST3_TS              0x08    // Two Side
                    250: #define ST3_HD              0x04    // Head address
                    251: #define ST3_US              0x03    // Unit Select (0-3)
                    252: 
                    253: // Misc. constants
                    254: 
                    255: #define FWD                 0       // seek in the logical forward direction
                    256: #define REV                 1       // seek in the logical reverse direction
                    257: #define STOP_LEN            5       // approximate number of blocks used to stop the tape
                    258: #define SEEK_SLOP           3       // number of blocks to overshoot at high speed in a seek
                    259: #define SEEK_TIMED          0x01    // Perform a timed seek
                    260: #define SEEK_SKIP           0x02    // perform a skip N segemnts seek
                    261: #define SEEK_SKIP_EXTENDED  0x03    // perform an extended skip N segemnts seek
                    262: 
                    263: // number of blocks to overshoot when performing a high speed reverve seek
                    264: #define QIC_REV_OFFSET      3
                    265: #define QIC_REV_OFFSET_L        4
                    266: #define QICEST_REV_OFFSET   14
                    267: #define MAX_SKIP            255     // Max number of segments that a Skip N Segs command can skip
                    268: #define MAX_SEEK_NIBBLES    3       // Maximum number of nibbles in an extended mode seek
                    269: 
                    270: #define NumBad              10      // number of bad READ ID's in row for no_data error
                    271: #define OR_TRYS             10      // number of Over Runs ignored per block (system 50)
                    272: 
                    273: #define PRIMARY_MODE        0       // tape drive is in primary mode
                    274: #define FORMAT_MODE         1       // tape drive is in format mode
                    275: #define VERIFY_MODE         2       // tape drive is in verify mode
                    276: #define DIAGNOSTIC_1_MODE   3       // tape drive is in diagnostic mode 1
                    277: #define DIAGNOSTIC_2_MODE   4       // tape drive is in diagnostic mode 2
                    278: 
                    279: #define DMA_WRITE           FALSE   // Program the DMA to write (FDC->DMA->RAM)
                    280: #define DMA_READ            TRUE    // Program the DMA to read (RAM->DMA->FDC)
                    281: 
                    282: #define READ_BYTE           8       // Number of Bytes to receive from the tape
                    283: #define READ_WORD           16      //  drive during communication.
                    284: 
                    285: #define HD_SELECT           0x01    // High Density Select bit from the PS/2 DCR
                    286: 
                    287: #define TAPE_250Kbps        0       // Program drive for 250 Kbps transfer rate
                    288: #define TAPE_2Mbps          1       // Program drive for 2Mbps transfer rate
                    289: #define TAPE_500Kbps        2       // Program drive for 500 Kbps transfer rate
                    290: #define TAPE_1Mbps          3       // Program drive for 1 Mbps transfer rate
                    291: #define FDC_250Kbps         2       // Program FDC for 250 Kbps transfer rate
                    292: #define FDC_500Kbps         0       // Program FDC for 500 Kbps transfer rate
                    293: #define FDC_1Mbps           3       // Program FDC for 1 Mbps transfer rate
                    294: #define FDC_2Mbps           1       // Program FDC for 2 Mbps transfer rate
                    295: #define SRT_250Kbps         0xff    // FDC step rate for 250 Kbps transfer rate
                    296: #define SRT_500Kbps         0xef    // FDC step rate for 500 Kbps transfer rate
                    297: #define SRT_1Mbps           0xdf    // FDC step ratefor 1 Mbps transfer rate
                    298: #define SRT_2Mbps           0xcf    // FDC step rate for 2 Mbps transfer rate
                    299: #define SPEED_MASK          0x03    // FDC speed mask for lower bits
                    300: #define SLOW                0       // current transfer rate is slow
                    301: #define FAST                1       // current transfer rate is fast
                    302: #define FDC_2MBPS_TABLE     2       // 2 Mbps data rate table for the 82078
                    303: 
                    304: #define UNKNOWN             0xFF    // drive_type = unknown
                    305: #define CMS                 0       // drive_type = CMS (command set specific) drive
                    306: #define SUMMIT              1       // drive_type = Summit
                    307: #define WANGTEK             2       // drive_type = Wangtek
                    308: #define CORE                3       // drive_type = Core
                    309: #define ARCHIVE             4       // drive_type = Archive
                    310: #define CMS_ENHANCEMENTS    5       // drive_type = CMS Enhancements
                    311: #define IOMEGA              6       // drive_type = IOMega
                    312: #define UNSUPPORTED         7       // drive_type = Unsupported
                    313: #define CMS_SIG             0xa5    // drive signature for CMS drives
                    314: #define CMS_VEND_NO         0x0047  // CMS vendor number
                    315: #define SUMMIT_VEND_NO      0x0180  // Summit vendor number
                    316: #define IOMEGA_VEND_NO      0x8880  // Iomega vendor number
                    317: #define WANGTEK_VEND_NO     0x01c0  // Wangtek vendor number
                    318: #define TECHMAR_VEND_NO     0x01c0  // Techmar vendor number
                    319: #define CORE_VEND_NO        0x0000  // Core vendor number
                    320: #define ARCHIVE_VEND_NO_OLD 0x0005  // Archive vendor number (old mode)
                    321: #define ARCHIVE_VEND_NO_NEW 0x0140  // Archive vendor number (new mode)
                    322: #define VENDOR_MASK         0xffc0  // Vendor id mask
                    323: #define SUMMIT_QIC80        0x0001  // Summit QIC80 Model #
                    324: #define WANGTEK_QIC80       0x000a  // Wangtek QIC80 Model #
                    325: #define WANGTEK_QIC40       0x0002  // Wangtek QIC40 Model #
                    326: #define CORE_QIC80          0x0021  // Core QIC80 Model #
                    327: 
                    328: 
                    329: //
                    330: // Archive Native mode defines
                    331: //
                    332: 
                    333: #define ARCHIVE_500KB_XFER  0x0400  // 500 KB xfer rate
                    334: #define ARCHIVE_1MB_XFER    0x0800  // 1 MB xfer rate
                    335: #define ARCHIVE_20_TRACK    0x0001  // Drive supports 20 tracks
                    336: #define ARCHIVE_28_TRACK    0x000e  // Drive supports 28 tracks
                    337: #define ARCHIVE_MODEL_5580  0x0002  // Archive Model 5580 series (Hornet)
                    338: #define ARCHIVE_MODEL_XKE   0x0004  // Archive 11250 series (1" drives) XKE
                    339: #define ARCHIVE_MODEL_XKEII 0x0008  // Archive 11250 series (1" drives) XKEII
                    340: 
                    341: 
                    342: 
                    343: 
                    344: #define FDC_PART_ID         0x11    // Part Id Command
                    345: #define READ                0x46    // read data + MFM + do not Skip del. data + not Multi-track
                    346: #define WRITE               0x45    // write data + MFM + not Multi-track
                    347: #define WRTDEL              0x49    // write deleted data + MFM + not Multi-track
                    348: #define FDC_SNS_INT         0x08    // FDC sense interrupt status
                    349: #define FDC_VERSION         0x10    // report FDC version
                    350: #define NSC_VERSION         0x18    // report National 8477 version
                    351: #define FDC_CONFIG          0x13    // configure 82077 FDC
                    352: #define FDC_SPECIFY         0x03    // specify setup parameters
                    353: #define FDC_SAVE            0x4e    // 82078 64 pin save state command
                    354: #define FDC_DRIVE_SPECIFY   0x8e    // 82078 64 pin drive specification command
                    355: #define PERP_MODE_COMMAND   0x12    // Perpendicular Mode Command Byte
                    356: #define FDC_P_MODE2         0x00    // second byte of perpendicular mode cmd
                    357: #define FDC_INVALID_CMD     0x80    // invalid cmd sent to FDC returns this value
                    358: #define RTIMES              3       // times to retry on a read of a sector (retry mode)
                    359: #define NTIMES              2       // times to retry on a read of a sector (normaly)
                    360: #define WTIMES              10      // times to retry on a write of a sector
                    361: #define VTIMES              0       // times to retry on verify
                    362: #define ANTIMES             0
                    363: #define ARTIMES             6
                    364: #define DRIVE_SPEC_SAVE     2       // sizeof the drive spec save command
                    365: 
                    366: #define FIND_RETRIES        2
                    367: #define REPORT_RPT          6       // Number of times to attempt drive communication when
                    368:                                     //  an ESD induced error is suspected.
                    369: #define FDC_MSR_RETRIES     50      // Number of times to read the FDC Main
                    370:                                     //  Status Register before reporting a NECFlt
                    371: 
                    372: #define DRIVEA              0
                    373: #define DRIVEB              1
                    374: #define DRIVEC              2
                    375: #define DRIVED              3
                    376: #define DRIVEU              4
                    377: #define DRIVEUB             5
                    378: 
                    379: #define DISABLE_PRECOMP     1       // Value used by the 82078's Drive Spec
                    380:                                     // command to disable Precomp
                    381: 
                    382: #define FDC_BOOT_MASK     0x06      // Mask used to isolate the Boot Select
                    383:                                     // Bits in the TDR Register
                    384: 
                    385: #define MAX_SEEK_COUNT      10
                    386: 
                    387: #define WRITE_REF_RPT       2
                    388: 
                    389: #define _DISK_RESET         0
                    390: 
                    391: #define WRITE_PROTECT_MASK  0x20    // bit from byte from port 2 of the jumbo B processor that indicates write protect
                    392: 
                    393: // Constants for sense_speed algorithm
                    394: // These ranges are based on 1.5 sec @ 250kb.  The units are 54.95ms (1 IBM PC
                    395: // timer tick (18.2 times a second)) and are +-1 tick from nominal due to time
                    396: // base fluctuation (in FDC and IBM PC TIMER).
                    397: // The threshold for the 750kb transfer rate is < 11 ticks due to the
                    398: // uncertainty of this future transfer rate.
                    399: // If a transfer rate of 750kb is needed code MUST be added to verify that
                    400: // 750kb does exist
                    401: 
                    402: #define sect_cnt            35      // .04285 sec. per sector * 35 = 1.4997 sec.
                    403: #define MIN1000             0
                    404: #define MAX1000             11
                    405: #define MIN500              12
                    406: #define MAX500              15
                    407: #define MIN250              26
                    408: #define MAX250              29
                    409: 
                    410: // Array indices and size for the time_out array. The time out array contains the  *
                    411: // time outs for the QIC-117 commands.
                    412: #define L_SLOW                          0
                    413: #define L_FAST              1
                    414: #define PHYSICAL                2
                    415: #define TIME_OUT_SIZE           3
                    416: 
                    417: // Constants for the arrays defined in the S_O_DGetInfo structure
                    418: #define OEM_LENGTH          20
                    419: #define SERIAL_NUM_LENGTH       4
                    420: #define MAN_DATE_LENGTH     2
                    421: #define PEGASUS_START_DATE  517
                    422: 
                    423: // Constant for the array dimension used in Q117iHighSpeedSeek
                    424: #define  FOUR_NIBS                      4
                    425: 
                    426: // Constants for identifing bytes in a word array
                    427: #define LOW_BYTE            0
                    428: #define HI_BYTE                         1
                    429: 
                    430: // Strings that are sent to DComFirm
                    431: #define DCOMFIRM_READ_RAM_STRING            "\x01\x2C\xFD\x01\x00"
                    432: #define DCOMFIRM_SET_RAM_STRING             "\x04\x2A\x00\x2B\x00\xFD\x00"
                    433: #define DCOMFIRM_WRITE_RAM_STRING           "\x06\x28\x28\x00\x29\x29\x00\xFD\x00"
                    434: 
                    435: // The number of characters in the DComFirm strings
                    436: #define DCOMFIRM_NUM_READ_RAM_CHARS         5
                    437: #define DCOMFIRM_NUM_SET_RAM_CHARS          7
                    438: #define DCOMFIRM_NUM_WRITE_RAM_CHARS        9
                    439: 
                    440: // Numbers used as arguments to Q117iGetComFirmStr to indicate the desired
                    441: // DComfirm String
                    442: #define DCOMFIRM_READ_RAM_REQ               0
                    443: #define DCOMFIRM_SET_RAM_REQ                1
                    444: #define DCOMFIRM_WRITE_RAM_REQ              2
                    445: 
                    446: 
                    447: #define DCOMFIRM_MAX_CHARS  10  // Max number of chars in a DComFirm string
                    448: 
                    449: // Various addresses used as arguments in the set ram command for the Sankyo
                    450: // motor fix hack
                    451: #define DBL_HOLE_CNTER_ADD_UPPER_NIBBLE         5
                    452: #define DBL_HOLE_CNTER_ADD_LOWER_NIBBLE         0xD
                    453: #define HOLE_FLAG_BYTE_ADD_UPPER_NIBBLE         4
                    454: #define HOLE_FLAG_BYTE_ADD_LOWER_NIBBLE         8
                    455: #define TAPE_ZONE_BYTE_ADD_UPPER_NIBBLE         6
                    456: #define TAPE_ZONE_BTYE_ADD_LOWER_NIBBLE         8
                    457: 
                    458: // String indices for key bytes in DComFirm Strings
                    459: #define DCOMFIRM_READ_RTRN_BYTE_INDEX       4
                    460: #define DCOMFIRM_SETRAM_HI_NIB_INDEX            2
                    461: #define DCOMFIRM_SETRAM_LOW_NIB_INDEX           4
                    462: #define DCOMFIRM_WRTRAM_HI_NIB_INDEX            3
                    463: #define DCOMFIRM_WRTRAM_LOW_NIB_INDEX           6
                    464: 
                    465: 
                    466: // Miscellaneous defines used in the Sankyo Motor fix hack
                    467: #define REVERSE                             0
                    468: #define FORWARD                             1
                    469: #define AT_BOT                              0
                    470: #define AT_EOT                              1
                    471: #define HOLE_INDICATOR_MASK                 0X40
                    472: #define EOT_ZONE_COUNTER_UPPER_NIBBLE       2
                    473: #define EOT_ZONE_COUNTER_LOWER_NIBBLE       9
                    474: #define BOT_ZONE_COUNTER_UPPER_NIBBLE       2
                    475: #define BOT_ZONE_COUNTER_LOWER_NIBBLE       3
                    476: #define MAX_DECOMFIRM_CHARS                 10

unix.superglobalmegacorp.com

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