|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 - Colorado Memory Systems, Inc.
4: All Rights Reserved
5:
6: Module Name:
7:
8: pgmfdc.c
9:
10: Abstract:
11:
12: FDC program logic.
13:
14: Revision History:
15:
16:
17:
18:
19: --*/
20:
21: //
22: // include files
23: //
24:
25: #include <ntddk.h> // various NT definitions
26: #include <ntdddisk.h> // disk device driver I/O control codes
27: #include <ntiologc.h>
28: #include "common.h"
29: #include "drvtask.h" // this driver's data declarations
30: #include "mt1defs.h" // this driver's data declarations
31: #include "mt1strc.h" // this driver's data declarations
32: #include "q117data.h" // this driver's data declarations
33:
34:
35: STATUS
36: Q117iProgramFDC(
37: IN PTAPE_EXTENSION TapeExtension,
38: IN OUT UCHAR *Command,
39: IN SHORT Length,
40: IN BOOLEAN Result
41: )
42:
43: /*++
44:
45: Routine Description:
46:
47: Send a command to the Floppy Disk Controller. Commands are of
48: various lengths as defined by the FDC spec (NEC uPD765A).
49:
50: For each byte in the command string, program_nec must wait for the
51: FDC to become ready to read command data. Program_nec will wait
52: up to approx. 3 msecs before giving up and declaring an error.
53:
54: Arguments:
55:
56: TapeExtension -
57:
58: Command -
59:
60: Length -
61:
62: Result -
63:
64: Return Value:
65:
66:
67:
68: --*/
69:
70: {
71: SHORT i;
72: SHORT waitCount;
73:
74: TapeExtension->QControllerData->CommandHasResultPhase = Result;
75:
76: DbgAddEntry(0x12345678);
77:
78: for (i = 0; i < Length; i++) {
79:
80: waitCount = FDC_MSR_RETRIES;
81:
82: do {
83:
84: if ((READ_CONTROLLER(
85: &TapeExtension->QControllerData->FDC_Addr->MSDSR.msr) &
86: (MSR_RQM | MSR_DIO)) == MSR_RQM) {
87:
88: break;
89:
90: }
91:
92: Q117iShortTimer(t0012us);
93:
94: } while (--waitCount > 0);
95:
96: if (waitCount == 0) {
97:
98: return(NECFlt);
99:
100: }
101:
102: WRITE_CONTROLLER(
103: &TapeExtension->QControllerData->FDC_Addr->dr,
104: (SHORT)Command[i]);
105:
106: DbgAddEntry(Command[i]);
107:
108: Q117iShortTimer(t0012us);
109: }
110:
111: return(NoErr);
112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.