|
|
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.