summaryrefslogtreecommitdiffstats
path: root/private/ntos/miniport/trantor/include/findpas.h
blob: 758de236e2931425f5421e74f5bfa84d95be0599 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
//==========================================================================
//
// Definitions from findpas.h (card searching)
//
//      01-28-93  KJB   First.
//      03-19-93  JAP   Implemented condition build FAR and NEAR pointers
//==========================================================================



typedef struct {
   USHORT   wBoardRev;
   USHORT   wChipRev;
   union
      {
      struct                                /* Our PAS_16 gives     */
         {
         unsigned long CDInterfaceType:2;   /* 3                    */
         unsigned long EnhancedSCSI:1;      /* 0 - not enhanced SCSI*/
         unsigned long DAC16:1;             /* 1 DAC16              */

         unsigned long OPL_3:1;             /* 1 OPL3               */
         unsigned long Mixer_508:1;         /* 1 Mixer 508          */
         unsigned long DualDAC:1;           /* 1 Dual DAC           */
         unsigned long MPU401:1;            /* 0 NO mpu401          */

         unsigned long Slot16:1;            /* 1 - slot 16          */
         unsigned long MCA:1;               /* 0 - not MCA          */
         unsigned long CDPC:1;              /* 0 - not CDPC         */
         unsigned long SoundBlaster:1;      /* 1 - sound blaster    */

         unsigned long SCSI_IO_16:1;        /* 1 - ?                */
         unsigned long reserved:2;
         unsigned long Did_HW_Init:1;       /* 0 - ?                */
         unsigned long unused:16;
         } CapsBits;
      ULONG dwCaps;
      } Caps;
   ULONG    ProPort;
   UCHAR    ProDMA;
   UCHAR    ProIRQ;
   USHORT   SBPort;
   UCHAR    SBDMA;
   UCHAR    SBIRQ;
   USHORT   MPUPort;
   UCHAR    MPUIRQ;
   UCHAR    CDIRQ;
   ULONG    TranslateCode;
   UCHAR    ReservedB1;
   UCHAR    ReservedB2;
   PUCHAR   PROBase;
} FOUNDINFO, FARP PFOUNDINFO;


// these version numbers are found in 0B8Bh
#define  PAS_VERSION_1           0x000    // original
#define  PAS_PLUS                0x001    // Pro Audio Spectrum Plus with SCSI
#define  PAS_SIXTEEN             0x001    // Pro Audio Spectrum 16   with SCSI
#define  PAS_STUDIO              0x003
#define  PAS_CDPC                0x007    // CDPC 05/06/92 mmq
#define  BOARD_REV_MASK  07


#define  CHIP_REV_B              0x002
#define  CHIP_REV_D              0x004

#define  NO_PAS_INSTALLED        0x000    // can't find board


// CD interface type definitions
#define  NO_INTERFACE    0
#define  MITSUMI_TYPE    1
#define  SONY_TYPE       2
#define  SCSI_TYPE       3
#define  SCSI_TYPE       3

// sound definitions
#define SOUND_DEF_DMACHANNEL 1        // DMA channel no
#define SOUND_DEF_INT        7
#define SOUND_DEF_PORT       0x220

//==========================================================================
//
// Definitions from pasdef.h
//
//==========================================================================

//
// THESE DEFINITIONS FOR CAPABILITIES FILED
//


#define  DEFAULT_BASE            0x388    // default base I/O address of Pro AudioSpectrum

//// THESE ARE BASE REGISTER ATES

//
// Used only during initialization
//

#define  PCM_CONTROL                   0x0f8a  //

#define  ENHANCED_SCSI_DETECT_REG      0x7f89  //

#define  SYSTEM_CONFIG_1               0x8388  //
#define  SYSTEM_CONFIG_2               0x8389  //
#define  SYSTEM_CONFIG_3               0x838a  //
#define  SYSTEM_CONFIG_4               0x838b  //

#define  IO_PORT_CONFIG_1              0xf388  //
#define  IO_PORT_CONFIG_2              0xf389  //
#define  IO_PORT_CONFIG_3              0xf38a  //

#define  COMPATIBLE_REGISTER_ENABLE    0xf788  // SB and MPU emulation
#define  EMULATION_ADDRESS_POINTER     0xf789  // D0-D3 is SB; D4-D7 is MPU

#define  EMULATION_INTERRUPT_POINTER   0xfb8a  // MPU and SB IRQ and SB DMA settings

#define  CHIP_REV                      0xff88  // MV101 chip revision number
#define  MASTER_MODE_READ              0xff8b  // aka Master Address Pointer

//
// Used for volume setting
//

#define  MIXER_508_REG                 0x078b  // Mixer 508             1 port

#define  SERIAL_MIXER                  0x0b88  // for Pas 1 and Pas 8
#define  FEATURE_ENABLE                0x0b88  // for Pas 16 boards only
#define  INTERRUPT_ENABLE              0x0b89  //
#define  FILTER_REGISTER               0x0b8a  //
#define  INTERRUPT_CTRL_REG            0x0b8b  //


//
// Only one of each of these
//

#define  PAS_2_WAKE_UP_REG             0x9a01  // aka Master Address Pointer


//
// Not used here
//

#define  TIMEOUT_COUNTER               0x4388  //
#define  TIMEOUT_STATUS                0x4389  //
#define  WAIT_STATE                    0xbf88  //
#define  PRESCALE_DIVIDER              0xbf8A  //

#define  SLAVE_MODE_READ               0xef8b  // bits D0-D1



#define READ_PAS(pGDI, port) \
        READ_PORT_UCHAR((PUCHAR)((port) ^ (pGDI->TranslateCode)))

#define WRITE_PAS(pGDI, port, data) \
        WRITE_PORT_UCHAR((PUCHAR)((port) ^ (pGDI->TranslateCode)), (UCHAR)(data))


// useful bit definitions
#define  D0 (1<<0)
#define  D1 (1<<1)
#define  D2 (1<<2)
#define  D3 (1<<3)
#define  D4 (1<<4)
#define  D5 (1<<5)
#define  D6 (1<<6)
#define  D7 (1<<7)


//// BIT FIELDS FOR COMPATIBLE_REGISTER_ENABLE
#define  MPU_ENABLE_BIT       D0
#define  SB_ENABLE_BIT        D1
#define  SB_IRQ_ENABLE_BIT    D2    // read only

//// BIT FIELDS FOR FEATURE_ENABLE (0xb88)
#define  PCM_FEATURE_ENABLE      D0
#define  FM_FEATURE_ENABLE       D1
#define  MIXER_FEATURE_ENABLE    D2
#define  SB_FEATURE_ENABLE       D4

/// BIT FIELDS FOR PCM CONTROL
#define  PCM_STEREO              D0+D3
#define  PCM_DAC                 D4
#define  PCM_MONO                D5
#define  PCM_ENGINE              D6
#define  PCM_DRQ                 D7

/// BIT FIELDS FOR SYSTEM CONFIG 3
#define  C3_ENHANCED_TIMER       D0
#define  C3_SB_CLOCK_EMUL        D1    // don't set!  see Brian Colvin
#define  C3_VCO_INVERT           D2
#define  C3_INVERT_BCLK          D3
#define  C3_SYNC_PULSE           D4
#define  C3_PSEUDO_PCM_STEREO    D5

/// BIT FIELDS FOR INTERRUPT ENABLE
#define  INT_LEFT_FM             D0
#define  INT_RIGHT_FM            D1
#define  INT_SB                  D1
#define  INT_SAMPLE_RATE         D2
#define  INT_SAMPLE_BUFFER       D3
#define  INT_MIDI                D4



/// BIT FIELDS FOR COMPATIBLE REGISTER ENABLE
#define  COMPAT_MPU              D0
#define  COMPAT_SB               D1


/// IRQ POINTER VALUES FOR EMULATION INTERRUPT POINTER
#define  EMUL_IRQ_NONE           0
#define  EMUL_IRQ_2              1
#define  EMUL_IRQ_3              2
#define  EMUL_IRQ_5              3
#define  EMUL_IRQ_7              4
#define  EMUL_IRQ_10             5
#define  EMUL_IRQ_11             6
#define  EMUL_IRQ_12             7

/// DMA POINTER VALUES FOR EMULATION DMA POINTER
#define  EMUL_DMA_NONE           0
#define  EMUL_DMA_1              1
#define  EMUL_DMA_2              2
#define  EMUL_DMA_3              3


/// BIT VALUES FOR FILTER REGISTER
#define  FILTER_NOMUTE           D5


#define  MIXCROSSCAPS_NORMAL_STEREO    0   // Left->Left, Right->Right
#define  MIXCROSSCAPS_RIGHT_TO_BOTH    1   // Right->Left, Right->Right
#define  MIXCROSSCAPS_LEFT_TO_BOTH     2   // Left->Left, Left->Right
#define  MIXCROSSCAPS_REVERSE_STEREO   4   // Left->Right, Right->Left
#define  MIXCROSSCAPS_RIGHT_TO_LEFT    8   // Right->Left, Right->Right
#define  MIXCROSSCAPS_LEFT_TO_RIGHT    0x10   // Left->Left, Left->Right

#define  OUT_AMPLIFIER  0
#define  OUT_PCM        1

#define  _LEFT          1
#define  _RIGHT         2

#define  _BASS          0
#define  _TREBLE        1


#define  MV_508_ADDRESS D7
#define  MV_508_INPUT   D4
#define  MV_508_SWAP    D6
#define  MV_508_BASS    (D0+D1)
#define  MV_508_TREBLE  (D2)
#define  MV_508_EQMODE  (D2+D0)

#define  MV_508_LOUDNESS   D2
#define  MV_508_ENHANCE (D1+D0)

/// DEFINES FOR SERIAL MIXER
#define  NATIONAL_SELECTMUTE_REG 0x40
#define  NATIONAL_LOUD_ENH_REG   0x41
#define  NATIONAL_BASS_REG       0x42
#define  NATIONAL_TREB_REG       0x43
#define  NATIONAL_LEFT_VOL_REG   0x44
#define  NATIONAL_RIGHT_VOL_REG  0x45
#define  NATIONAL_MODESELECT_REG 0x46

#define  NATIONAL_COMMAND  D7
#define  NATIONAL_LOUDNESS D0
#define  NATIONAL_ENHANCE  D1

#define  SERIAL_MIX_LEVEL  D0
#define  SERIAL_MIX_CLOCK  D1
#define  SERIAL_MIX_STROBE D2
#define  SERIAL_MIX_MASTER D4
#define  SERIAL_MIX_REALSOUND D6
#define  SERIAL_MIX_DUALFM D7


// FILTER_REGISTER
#define  fFIdatabits       0x1f        // 00011111B  filter select and decode field bits
#define  fFImutebits       D5          // filter mute field bit
#define  fFIpcmbits        (D7+D6)     // 11000000B  filter sample rate field bits
#define  bFImute           D5          // filter mute bit
#define  bFIsrate          D6          // filter sample rate timer mask
#define  bFIsbuff          D7          // filter sample buffer counter mask

#define  FILTERMAX         6           // six possible settings

#define FILTER_MUTE        0           // mute - goes to PC speaker
#define FILTER_LEVEL_1     1           // 20hz to  2.9khz
#define FILTER_LEVEL_2     2           // 20hz to  5.9khz
#define FILTER_LEVEL_3     3           // 20hz to  8.9khz
#define FILTER_LEVEL_4     4           // 20hz to 11.9khz
#define FILTER_LEVEL_5     5           // 20hz to 15.9khz
#define FILTER_LEVEL_6     6           // 20hz to 17.8khz


/// SLAVE_MODE_READ BITS
#define SLAVE_MODE_OPL3    D2
#define SLAVE_MODE_16      D3

#define PASX_IN(pFI, port) \
        ScsiPortReadPortUchar(pFI->PROBase + ( (port) ^ pFI->TranslateCode) )

#define PASX_OUT(pFI, port, data) \
        ScsiPortWritePortUchar(pFI->PROBase + ((port) ^ pFI->TranslateCode), (UCHAR)(data))

#define WRITE_PORT_UCHAR ScsiPortWritePortUchar
#define READ_PORT_UCHAR ScsiPortReadPortUchar

//
// Exported routines
//
int FindPasHardware(PFOUNDINFO pFoundInfo);
void InitProHardware(PFOUNDINFO pFI);