|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.