blob: 60f50fc50028eb564673bf6fd8ecd74e048b1ff0 (
plain)
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
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
|
/*#######################################################################*/
/* FILE : iwdefs.h*/
/**/
/* REMARKS: This file contains all defines used by DDK functions. It*/
/* should be included by all applications and should be*/
/* referenced by programmers to make their code easy to read*/
/* and understand.*/
/**/
/* UPDATE: 3/21/95*/
/* 7/10/95 --- added #def DRAM_HOLES*/
/*#######################################################################*/
#ifndef IWDEFS
#define IWDEFS
/*#######################################################################*/
/**/
/* Macros for use in loading Synth Addr Regs*/
/**/
/*#######################################################################*/
#define ADDR_HIGH(x) (short)(x>>7)
#define ADDR_LOW(x) (short)(x<<9)
/*#######################################################################*/
/**/
/* Defines for DMA Controllers*/
/**/
/*#######################################################################*/
/* DMA Controler #1 (8-bit controller) */
#define DMA1_STAT 0x08 /* read status register */
#define DMA1_WCMD 0x08 /* write command register */
#define DMA1_WREQ 0x09 /* write request register */
#define DMA1_SNGL 0x0A /* write single bit register */
#define DMA1_MODE 0x0B /* write mode register */
#define DMA1_CLRFF 0x0C /* clear byte ptr flip/flop */
#define DMA1_MCLR 0x0D /* master clear register */
#define DMA1_CLRM 0x0E /* clear mask register */
#define DMA1_WRTALL 0x0F /* write all mask register */
/* DMA Controler #2 (16-bit controller) */
#define DMA2_STAT 0xD0 /* read status register */
#define DMA2_WCMD 0xD0 /* write command register */
#define DMA2_WREQ 0xD2 /* write request register */
#define DMA2_SNGL 0xD4 /* write single bit register */
#define DMA2_MODE 0xD6 /* write mode register */
#define DMA2_CLRFF 0xD8 /* clear byte ptr flip/flop */
#define DMA2_MCLR 0xDA /* master clear register */
#define DMA2_CLRM 0xDC /* clear mask register */
#define DMA2_WRTALL 0xDE /* write all mask register */
#define DMA0_ADDR 0x00 /* chan 0 base adddress */
#define DMA0_CNT 0x01 /* chan 0 base count */
#define DMA1_ADDR 0x02 /* chan 1 base adddress */
#define DMA1_CNT 0x03 /* chan 1 base count */
#define DMA2_ADDR 0x04 /* chan 2 base adddress */
#define DMA2_CNT 0x05 /* chan 2 base count */
#define DMA3_ADDR 0x06 /* chan 3 base adddress */
#define DMA3_CNT 0x07 /* chan 3 base count */
#define DMA4_ADDR 0xC0 /* chan 4 base adddress */
#define DMA4_CNT 0xC2 /* chan 4 base count */
#define DMA5_ADDR 0xC4 /* chan 5 base adddress */
#define DMA5_CNT 0xC6 /* chan 5 base count */
#define DMA6_ADDR 0xC8 /* chan 6 base adddress */
#define DMA6_CNT 0xCA /* chan 6 base count */
#define DMA7_ADDR 0xCC /* chan 7 base adddress */
#define DMA7_CNT 0xCE /* chan 7 base count */
#define DMA0_PAGE 0x87 /* chan 0 page register (refresh)*/
#define DMA1_PAGE 0x83 /* chan 1 page register */
#define DMA2_PAGE 0x81 /* chan 2 page register */
#define DMA3_PAGE 0x82 /* chan 3 page register */
#define DMA4_PAGE 0x8F /* chan 4 page register (unusable)*/
#define DMA5_PAGE 0x8B /* chan 5 page register */
#define DMA6_PAGE 0x89 /* chan 6 page register */
#define DMA7_PAGE 0x8A /* chan 7 page register */
/*#######################################################################*/
/**/
/* Defines for register UISR (Interrupt Status)*/
/**/
/*#######################################################################*/
#define MIDI_TX_IRQ 0x01
#define MIDI_RX_IRQ 0x02
#define ALIB_TIMER1_IRQ 0x04
#define ALIB_TIMER2_IRQ 0x08
#define _UASBCI 0x45 /* UASBCI index */
#define SAMPLE_CONTROL 0x49 /* Not used by IW */
#define SET_VOICES 0x0E
#define WAVETABLE_IRQ 0x20
#define ENVELOPE_IRQ 0x40
#define DMA_TC_IRQ 0x80
/*#######################################################################*/
/**/
/* Synthesizer-related defines*/
/**/
/*#######################################################################*/
#define GEN_INDEX 0x03 /* IGIDX offset into p3xr */
#define VOICE_SELECT 0x02 /* SVSR offset into p3xr */
#define VOICE_IRQS 0x8F /* SVII index (read) */
#define _URSTI 0x4C /* URSTI index */
#define GF1_SET 0x01 /* URSTI[0] */
#define GF1_OUT_ENABLE 0x02 /* URSTI[1] */
#define GF1_IRQ_ENABLE 0x04 /* URSTI[2] */
#define GF1_RESET 0xFE /* URSTI[0]=0 */
#define VOICE_VOLUME_IRQ 0x04 /* SVII[2] */
#define VOICE_WAVE_IRQ 0x08 /* SVII[3] */
#define VC_IRQ_ENABLE 0x20 /* SACI[5] or SVCI[5]*/
#define VOICE_NUMBER 0x1F /* Mask for SVII[4:0] */
#define VC_IRQ_PENDING 0x80 /* SACI[7] or SVCI[7] */
#define VC_DIRECT 0x40 /* SACI[6] or SVCI[6]*/
#define VC_DATA_WIDTH 0x04 /* SACI[2] */
#define VOICE_STOP 0x02 /* SACI[1] */
#define VOICE_STOPPED 0x01 /* SACI[0] */
#define VOLUME_STOP 0x02 /* SVCI[1] */
#define VOLUME_STOPPED 0x01 /* SVCI[0] */
#define VC_ROLLOVER 0x04 /* SVCI[2] */
#define VC_LOOP_ENABLE 0x08 /* SVCI[3] or SACI[3]*/
#define VC_BI_LOOP 0x10 /* SVCI[4] or SACI[4]*/
#define VOICE_OFFSET 0x20 /* SMSI[5] */
#define VOLUME_RATE0 0x00 /* SVRI[7:6]=(0,0) */
#define VOLUME_RATE1 0x40 /* SVRI[7:6]=(0,1) */
#define VOLUME_RATE2 0x80 /* SVRI[7:6]=(1,0) */
#define VOLUME_RATE3 0xC0 /* SVRI[7:6]=(1,1) */
/*#######################################################################*/
/**/
/* Power-Mode Control Defines*/
/**/
/*#######################################################################*/
#define SHUT_DOWN 0x7E /* shuts InterWave down */
#define POWER_UP 0xFE /* enables all modules */
#define CODEC_PWR_UP 0x81 /* enables Codec Analog Ckts */
#define CODEC_PWR_DOWN 0x01 /* disables Codec Analog Ckts */
#define CODEC_REC_UP 0x82 /* Enables Record Path */
#define CODEC_REC_DOWN 0x02 /* Disables Record Path */
#define CODEC_PLAY_UP 0x84 /* Enables Playback Path */
#define CODEC_PLAY_DOWN 0x04 /* Disables Playback Path */
#define CODEC_IRQ_ENABLE 0x02 /* CEXTI[2] */
#define CODEC_TIMER_IRQ 0x40 /* CSR3I[6] */
#define CODEC_REC_IRQ 0x20 /* CSR3I[5] */
#define CODEC_PLAY_IRQ 0x10 /* CSR3I[4] */
#define CODEC_INT 0x01 /* CSR1R[0] */
#define MONO_INPUT 0x80 /* CMONOI[7] */
#define MONO_OUTPUT 0x40 /* CMONOI[6] */
#define MIDI_UP 0x88 /* Enables MIDI ports */
#define MIDI_DOWN 0x08 /* Disables MIDI ports */
#define SYNTH_UP 0x90 /* Enables Synthesizer */
#define SYNTH_DOWN 0x10 /* Disables Synthesizer */
#define LMC_UP 0xA0 /* Enables LM Module */
#define LMC_DOWN 0x20 /* Disbales LM Module */
#define XTAL24_UP 0xC0 /* Enables 24MHz Osc */
#define XTAL24_DOWN 0x40 /* Disables 24MHz Osc */
#define _PPWRI 0xF2 /* PPWRI index */
#define PLAY 0x0F
#define REC 0x1F
#define LEFT_AUX1_INPUT 0x02
#define RIGHT_AUX1_INPUT 0x03
#define LEFT_AUX2_INPUT 0x04
#define RIGHT_AUX2_INPUT 0x05
#define LEFT_LINE_IN 0x12
#define RIGHT_LINE_IN 0x13
#define LEFT_LINE_OUT 0x19
#define RIGHT_LINE_OUT 0x1B
#define LEFT_SOURCE 0x00
#define RIGHT_SOURCE 0x01
#define LINE_IN 0x00
#define AUX1_IN 0x40
#define MIC_IN 0x80
#define MIX_IN 0xC0
#define LEFT_DAC 0x06
#define RIGHT_DAC 0x07
#define LEFT_MIC_IN 0x16
#define RIGHT_MIC_IN 0x17
#define _CUPCTI 0x0E
#define _CLPCTI 0x0F
#define _CURCTI 0x1E
#define _CLRCTI 0x1F
#define _CLAX1I 0x02
#define _CRAX1I 0x03
#define _CLAX2I 0x04
#define _CRAX2I 0x05
#define _CLLICI 0x12
#define _CRLICI 0x13
#define _CLOAI 0x19
#define _CROAI 0x1B
#define _CLICI 0x00
#define _CRICI 0x01
#define _CLDACI 0x06
#define _CRDACI 0x07
#define _CPVFI 0x1D
/*#######################################################################*/
/**/
/* Defines for DMA transfer related operations*/
/**/
/*#######################################################################*/
#define MAX_DMA 0x07
#define DMA_DECREMENT 0x20
#define AUTO_INIT 0x10
#define DMA_READ 0x01
#define DMA_WRITE 0x02
#define AUTO_READ 0x03
#define AUTO_WRITE 0x04
#define IDMA_INV 0x0400
#define IDMA_WIDTH_16 0x0100
/*#######################################################################*/
/**/
/* Bits for dma flags within a DMA structure.*/
/**/
/*#######################################################################*/
#define DMA_USED 0x0001
#define DMA_SPLIT 0x0004 /* DMA Controller Page Crossover*/
#define CODEC_DMA 0x0008 /* Indicates a Codec DMA*/
#define DMA_WAIT 0x0020 /* Wait for DMA xfer to complete*/
#define DMA_DOWN 0x0040 /* DMA xfer from PC to InterWave*/
#define DRAM_HOLES 0x8000 /* Indicates Non-contiguous RAM configuration*/
#define DMA_UP 0xFFBF /* DMA xfer from InterWave to PC */
/*#######################################################################*/
/**/
/* Bits for DMA Control Register (LDMACI)*/
/**/
/*#######################################################################*/
#define _LDMACI 0x41 /* Index */
#define DMA_INV 0x80
#define DMA_IRQ_ENABLE 0x20
#define DMA_IRQ_PENDING 0x40 /* on reads of LDMACI[6] */
#define DMA_DATA_16 0x40 /* on writes to LDMACI[6] */
#define DMA_WIDTH_16 0x04 /* 1=16-bit, 0=8-bit (DMA channel) */
#define DMA_RATE 0x18 /* 00=fastest,...,11=slowest */
#define DMA_UPLOAD 0x02 /* From LM to PC */
#define DMA_ENABLE 0x01
/*#######################################################################*/
/**/
/* DMA Transfer Rates*/
/**/
/*#######################################################################*/
#define DMA_R0 0xE7 /* Fastest (use ANDing to set) */
#define DMA_R1 0x08
#define DMA_R2 0x10
#define DMA_R3 0x18 /* Slowest */
/*#######################################################################*/
/**/
/* Interrupt Controller Defines*/
/**/
/*#######################################################################*/
#define IW_HANDLERS_ON 0x80 /* Flag for when IVT is modified */
#define EOI 0x20
#define OCR1 0x20 /* 8259-1 Operation Control Reg. */
#define IMR1 0x21 /* 8259-1 Interrupt Mask Reg. */
#define OCR2 0xA0 /* 8259-2 Operation Control Reg. */
#define IMR2 0xA1 /* 8259-2 Interrupt Mask Reg. */
#define IRQ0_UNMASK 0xFE /* Mask to clear bit 0 in IMR */
#define IRQ1_UNMASK 0xFD
#define IRQ2_UNMASK 0xFB
#define IRQ3_UNMASK 0xF7
#define IRQ4_UNMASK 0xEF
#define IRQ5_UNMASK 0xDF
#define IRQ6_UNMASK 0xBF
#define IRQ7_UNMASK 0x7F
#define IRQ8_UNMASK 0xFE /* Mask to clear bit 0 in IMR */
#define IRQ9_UNMASK 0xFD
#define IRQ10_UNMASK 0xFB
#define IRQ11_UNMASK 0xF7
#define IRQ12_UNMASK 0xEF
#define IRQ13_UNMASK 0xDF
#define IRQ14_UNMASK 0xBF
#define IRQ15_UNMASK 0x7F
#define IRQ0_EOI 0x60 /* Spec EOI for IRQ0 */
#define IRQ1_EOI 0x61
#define IRQ2_EOI 0x62
#define IRQ3_EOI 0x63
#define IRQ4_EOI 0x64
#define IRQ5_EOI 0x65
#define IRQ6_EOI 0x66
#define IRQ7_EOI 0x67
#define IRQ8_EOI 0x60 /* Spec EOI for IRQ8 */
#define IRQ9_EOI 0x61
#define IRQ10_EOI 0x62
#define IRQ11_EOI 0x63
#define IRQ12_EOI 0x64
#define IRQ13_EOI 0x65
#define IRQ14_EOI 0x66
#define IRQ15_EOI 0x67
/*#######################################################################*/
/**/
/* Generic defines*/
/**/
/*#######################################################################*/
/**/
#define MEMBANK0 0L /* Addr of Memory Bank 0*/
#define MEMBANK1 4194304L /* Addr of Memory Bank 1*/
#define MEMBANK2 8388608L /* Addr of Memory Bank 2*/
#define MEMBANK3 12582912L /* Addr of Memory Bank 3*/
#define IRQ_UNAVAIL 0x0000
#define IRQ_AVAIL 0x0001
#define IRQ_USED 0x0002
#define MAX_IRQ 16
#define NEXT_OFFSET 0L
#define PREV_OFFSET 4L
#define SIZE_OFFSET 8L
#define MEM_HEADER_SIZE 12L
#define GF1_POOL (usigned long)(256L*1024L)
#define GUS_MODE 0x00 /* SGMI[0]=0*/
#define ENH_MODE 0x01 /* SGMI[0]=1*/
#define ENABLE_LFOS 0x02 /* SGMI[1]*/
#define NO_WAVETABLE 0x04 /* SGMI[2]*/
#define RAM_TEST 0x08 /* SGMI[3]*/
#define TRUE 1
#define FALSE 0
#define ON 1
#define OFF 0
#define AUDIO 0
#define EXT 1
#define GAME 2
#define EMULATION 3
#define MPU401 4
#define AUDIO_EXT 2
#define ALLOC_FAILURE 0xFFFFFFFFL
#define MEM_EXHAUSTED 0xFFFFFFFFL
#define RAM_MAX 16777216L
#define RAM_STEP 65536L
#define BANK_MAX 4194304L
#define ILLEGAL_SIZE -1
#define MEM_INIT 1
#define NO_NEXT 0xFFFFFFFFL
#define NO_PREV NO_NEXT
#define DMA_BAD_ADDR -1
#define DMA_ON -1
#define DMA_OK 1
#define MIDI_TX_IRQ 0x01
#define MIDI_RX_IRQ 0x02
#define ALIB_TIMER1_IRQ 0x04
#define ALIB_TIMER2_IRQ 0x08
#define WAVETABLE_IRQ 0x20
#define ENVELOPE_IRQ 0x40
#define DMA_TC_IRQ 0x80
#define DMA_SET_MASK 0x04
#define PNP_DATA_RDY 1 /* PRESSI[0] */
#define IWAVE_ABSENT 2
#define IWAVE_OPEN 4
#define IWAVE_OK 5
#define BAD_VOICES -1
#define PNP_ABSENT 0xFF /* No PNP cards in system */
#define DPMI_INT 0x31
#define _PCCCI 0x02
#define _PCSNI 0x06
#define _PIDXR 0x279
#define _PNPWRP 0xA79
#define _LDSALI 0x42
#define _LDSAHI 0x50
#define _LMALI 0x43
#define _LMAHI 0x44
#define _LMCFI 0x52
#define _LMCI 0x53
#define _LDIBI 0x58
#define _LDICI 0x57
#define _LMSBAI 0x51
#define _SVCI_RD 0x8D
#define _SVCI_WR 0x0D
#define _SACI_RD 0x80
#define _SACI_WR 0x00
#define _SALI_RD 0x8B
#define _SALI_WR 0x0B
#define _SAHI_RD 0x8A
#define _SAHI_WR 0x0A
#define _SASHI_RD 0x82
#define _SASHI_WR 0x02
#define _SASLI_RD 0x83
#define _SASLI_WR 0x03
#define _SAEHI_RD 0x84
#define _SAEHI_WR 0x04
#define _SAELI_RD 0x85
#define _SAELI_WR 0x05
#define _SVRI_RD 0x86
#define _SVRI_WR 0x06
#define _SVSI_RD 0x87
#define _SVSI_WR 0x07
#define _SVEI_RD 0x88
#define _SVEI_WR 0x08
#define _SVLI_RD 0x89
#define _SVLI_WR 0x09
#define _SROI_RD 0x8C
#define _SROI_WR 0x0C
#define _SLOI_RD 0x93
#define _SLOI_WR 0x13
#define _SMSI_RD 0x95
#define _SMSI_WR 0x15
#define _SGMI_RD 0x99
#define _SGMI_WR 0x19
#define _SFCI_RD 0x81
#define _SFCI_WR 0x01
#define _SUAI_RD 0x90
#define _SUAI_WR 0x10
#define _SVII 0x8F
#define _CMODEI 0x0C /* index for CMODEI */
#define _CFIG3I 0x11
#define _CFIG2I 0x10
#define _CLTIMI 0x14
#define _CUTIMI 0x15
#define _CSR3I 0x18 /* Index to CSR3I (Interrupt Status) */
#define _CEXTI 0x0A /* Index to External Control Register */
#define _CFIG1I 0x09 /* Index to Codec Conf Reg 1 */
#define _CSR2I 0x0B /* Index to Codec Stat Reg 2 */
#define _CPDFI 0x08 /* Index to Play Data Format Reg */
#define _CRDFI 0x1C /* Index to Rec Data Format Reg */
#define _CLMICI 0x16 /* Index to Left Mic Input Ctrl Register */
#define _CRMICI 0x17 /* Index to Right Mic Input Ctrl Register */
#define _CLCI 0x0D /* Index to Loopback Ctrl Register */
#define _IVERI 0x5B /* Index to register IVERI */
#define CODEC_MODE1 0x00
#define CODEC_MODE2 0x40
#define CODEC_MODE3 0x6C /* Enhanced Mode */
#define CODEC_STATUS1 0x01
#define CODEC_STATUS2 0x0B /* Index to CSR2I */
#define CODEC_STATUS3 0x18 /* Index to CSR3I */
#define PLAYBACK 0x01 /* Enable playback path CFIG1I[0]=1*/
#define RECORD 0x02 /* Enable Record path CFIG1I[1]=1*/
#define TIMER_ENABLE 0x40 /* CFIG2I[6] */
#define CODEC_MCE 0x40 /* CIDXR[6] */
#define CALIB_IN_PROGRESS 0x20 /* CSR2I[5] */
#define CODEC_INIT 0x80 /* CIDXR[7] */
#define BIT16_BIG 0xC0 /* 16-bit signed, big endian */
#define IMA_ADPCM 0xA0 /* IMA-compliant ADPCM */
#define BIT8_ALAW 0x60 /* 8-bit A-law */
#define BIT16_LITTLE 0x40 /* 16-bit signed, lillte endian */
#define BIT8_ULAW 0x20 /* 8-bit u-law */
#define BIT8_LINEAR 0x00 /* 8-bit unsigned */
#define REC_DFORMAT 0x1C
#define PLAY_DFORMAT 0x08
#define DMA_ACCESS 0x00
#define PIO_ACCESS 0xC0
#define DMA_SIMPLEX 0x04
#define STEREO 0x10 /* CxDFI[4] */
#define XTAL1 0x00 /* CxDFI[4]=0 selects 24.5Mhz XTAL */
#define XTAL2 0x01 /* CxDFI[4]=1 selects 16.9Mhz XTAL */
#define AUTOCALIB 0x08 /* CFIG1I[3] */
#define ROM_IO 0x02 /* ROM I/O cycles - LMCI[1]=1 */
#define DRAM_IO 0x4D /* DRAM I/O cycles - LMCI[1]=0 */
#define AUTOI 0x01 /* LMCI[0]=1 */
#define _PLDNI 0x07
#define ACTIVATE_DEV 0x30
#define _PWAKEI 0x03 /* Index for PWAKEI */
#define _PISOCI 0x01 /* Index for PISOCI */
#define _PSECI 0xF1 /* Index for PSECI */
#define RANGE_IOCHK 0x31 /* PURCI or PRRCI Index */
#define MIDI_RESET 0x03
#define IO_OK 5 /* No IO conflict flag */
#define IO_CONFLICT 6 /* IO Conflict detected */
#define IO_0x55 0x01
#define IO_0xAA 0xFE
/*#######################################################################*/
/**/
/* Defines for Sound Handlers in "iw".*/
/**/
/*#######################################################################*/
#define PLAY_DMA_HANDLER 0x01
#define REC_DMA_HANDLER 0x02
#define MIDI_TX_HANDLER 0x03
#define MIDI_RX_HANDLER 0x04
#define TIMER1_HANDLER 0x05
#define TIMER2_HANDLER 0x06
#define WAVE_HANDLER 0x07
#define VOLUME_HANDLER 0x08
#define CODEC_TIMER_HANDLER 0x09
#define CODEC_PLAY_HANDLER 0x0A
#define CODEC_REC_HANDLER 0x0B
#define AUX_HANDLER 0x0C
/*#######################################################################*/
/**/
/* Mapping for System Control Regs.*/
/**/
/*#######################################################################*/
#define UMCR 0x00010000 /* Mix Control Reg.*/
#define UISR 0x00020006 /* IRQ Stat Reg. (read) */
#define U2X6R 0x00030006 /* SB 2X6 reg */
#define UACWR 0x00040008 /* AdLib Command Write Reg */
#define UASRR 0x00050008 /* AdLib Stat Read Reg */
#define UADR 0x00060009 /* AdLib Data Register */
#define UACRR 0x0007000A /* AdLib Cmd Read Reg */
#define UASWR 0x0008000A /* AdLib Stat Write Reg */
#define UHRDP 0x0009000B /* Hidden Reg Data Port */
#define UI2XCR 0x000A000C /* SB IRQ 2xC Reg */
#define U2XCR 0x000B000D /* SB 2xC Reg. (No IRQ) */
#define U2XER 0x000C000E /* SB 2xE Reg. */
#define URCR 0x000D000F /* Reg Control Register */
#define USRR 0x000E000F /* Status Read Register */
#define UDCI 0x000F000B /* DMA Channel Control Reg */
#define UICI 0x0010000B /* Interrupt Ctrl Reg */
#define UGP1I 0x0011010B /* GP Reg 1 (Back Door) */
#define UGP2I 0x0012020B /* GP Reg 2 (Back Door) */
#define UGPA1I 0x0013030B /* GP reg 1 Address */
#define UGPA2I 0x0014040B /* GP reg 2 Address */
#define UCLRII 0x0015050B /* Clear Interrupt Reg */
#define UJMPI 0x0016060B /* Jumper Register */
#define UGP1II 0x0017000B /* Gen. Purp Reg 1(Emulation) */
#define UGP2II 0x0018000B /* Gen. Purp Reg 2(Emulation) */
#define GGCR 0x00190201 /* Game Control Register */
#define GMCR 0x001A0000 /* MIDI Control Register */
#define GMSR 0x001B0000 /* MIDI Status Reg. */
#define GMTDR 0x001C0001 /* MIDI xmit data reg */
#define GMRDR 0x001D0001 /* MIDI rcv data reg */
#define SVSR 0x001E0002 /* Synth Voice Select Reg */
#define IGIDXR 0x001F0003 /* General Index Register */
#define I16DP 0x00200004 /* General 16-bit Data Port */
#define I8DP 0x00210005 /* General 8-bit Data Port */
/*#######################################################################*/
/**/
/* Synth defines*/
/**/
/*#######################################################################*/
#define SACI 0x00220005 /* Synth Addr Control */
#define SFCI 0x00230104 /* Synth Freq Control */
#define SASHI 0x00240204 /* Synth Addr Start High */
#define SASLI 0x00250304 /* Synth Addr Start Low */
#define SAEHI 0x00260404 /* Synth Addr End High */
#define SAELI 0x00270504 /* Synth Addr End Low */
#define SVRI 0x00280605 /* Synth Volume Rate */
#define SVSI 0x00290705 /* Synth Volume Start */
#define SVEI 0x002A0805 /* Synth Volume End */
#define SVLI 0x002B0904 /* Synth Volume Level */
#define SAHI 0x002C0A04 /* Synth Address High */
#define SALI 0x002D0B04 /* Synth Address Low */
#define SROI 0x002E0C04 /* Synth Right Offset */
#define SVCI 0x002F0D05 /* Synth Volume Control */
#define SAVI 0x00300E05 /* Synth Active Voices */
#define SVII 0x00318F05 /* Synth Voice IRQ */
#define SUAI 0x00321005 /* Synth Upper Addr */
#define SEAHI 0x00331104 /* Synth Effect Addr High */
#define SEALI 0x00341204 /* Synth Effect Addr Low */
#define SLOI 0x00351304 /* Synth Left Offset */
#define SEASI 0x00361405 /* Synth Effects Accum Sel */
#define SMSI 0x00371505 /* Synth Mode Select */
#define SEVI 0x00381604 /* Synth Effect Volume */
#define SFLFOI 0x00391705 /* Synth Freq LFO */
#define SVLFOI 0x003A1805 /* Synth Vol LFO */
#define SGMI 0x003B1905 /* Synth Global Mode */
#define SLFOBI 0x003C1A04 /* Synth LFO Base Address */
#define SROFI 0x003D1B04
#define SLOFI 0x003E1C04
#define SEVFI 0x003F1D04
#define SVIRI 0x00409F05 /* Synth Voice Read IRQ */
#define LDMACI 0x00414105 /* DMA Control Reg. */
#define LDSALI 0x00424204 /* LMC DMA Start Addr. Low Reg. */
#define LMALI 0x00434304 /* LMC Addr Low (I/O) */
#define LMAHI 0x00444405 /* LMC Addr High (I/O) */
#define UASBCI 0x00454505 /* Adlib-SB Control */
#define UAT1I 0x00464605 /* AdLib Timer 1 Count */
#define UAT2I 0x00474705 /* AdLib Timer 2 Count */
#define USCI 0x00484905 /* Sample Control Reg */
#define GJTDI 0x00494B05
#define URSTI 0x004A4C05
#define LDSAHI 0x004B5005
#define LMSBAI 0x004C5104
#define LMCFI 0x004D5204
#define LMCI 0x004E5305
#define LMRFAI 0x004F5404
#define LMPFAI 0x00505504
#define LMSFI 0x00515604
#define LDICI 0x00525704
#define LDIBI 0x00535804
#define ICMPTI 0x00545905
#define IDECI 0x00555A05
#define IVERI 0x00565B05
#define IEMUAI 0x00575C05
#define IEMUBI 0x00585D05
#define GMRFAI 0x00595E05
#define ITCI 0x005A5F05
#define IEIRQI 0x005B6005
#define LMBDR 0x005C0007
/*##########################################################*/
/* Mnemonics for Codec Registers*/
/*##########################################################*/
#define CIDXR 0x005D0000
#define CDATAP 0x005E0001
#define CSR1R 0x005F0002
#define CPDR 0x00600003
#define CRDR 0x00610003
#define CLICI 0x00620001
#define CRICI 0x00630101
#define CLAX1I 0x00640201
#define CRAX1I 0x00650301
#define CLAX2I 0x00660401
#define CRAX2I 0x00670501
#define CLDACI 0x00680601
#define CRDACI 0x00690701
#define CPDFI 0x006A0801
#define CFIG1I 0x006B0901
#define CEXTI 0x006C0A01
#define CSR2I 0x006D0B01
#define CMODEI 0x006E0C01
#define CLCI 0x006F0D01
#define CUPCTI 0x00700E01
#define CLPCTI 0x00710F01
#define CFIG2I 0x00721001
#define CFIG3I 0x00731101
#define CLLICI 0x00741201
#define CRLICI 0x00751301
#define CLTIMI 0x00761401
#define CUTIMI 0x00771501
#define CLMICI 0x00781601
#define CRMICI 0x00791701
#define CSR3I 0x007A1801
#define CLOAI 0x007B1901
#define CMONOI 0x007C1A01
#define CROAI 0x007D1B01
#define CRDFI 0x007E1C01
#define CPVFI 0x007F1D01
#define CURCTI 0x00801E01
#define CLRCTI 0x00811F01
/*##########################################################*/
/* Mnemonics for PnP Registers*/
/*##########################################################*/
#define PCSNBR 0x00820201
#define PIDXR 0x00830279
#define PNPWRP 0x00840A79
#define PNPRDP 0x00850000
#define PSRPAI 0x00860000
#define PISOCI 0x00870100
#define PCCCI 0x00880200
#define PWAKEI 0x00890300
#define PRESDI 0x008A0400
#define PRESSI 0x008B0500
#define PCSNI 0x008C0600
#define PLDNI 0x008D0700
#define PUACTI 0x008E3000
#define PURCI 0x008F3100
#define P2X0HI 0x00906000
#define P2X0LI 0x00916100
#define P3X0HI 0x00926200
#define P3X0LI 0x00936300
#define PHCAI 0x00946400
#define PLCAI 0x00956500
#define PUI1SI 0x00967000
#define PUI1TI 0x00977100
#define PUI2SI 0x00987200
#define PUI2TI 0x00997300
#define PUD1SI 0x009A7400
#define PUD2SI 0x009B7500
#define PSEENI 0x009CF000
#define PSECI 0x009DF100
#define PPWRI 0x009EF200
#define PRACTI 0x009F3001
#define PRRCI 0x00A03101
#define PRAHI 0x00A16001
#define PRALI 0x00A26101
#define PATAHI 0x00A36201
#define PATALI 0x00A46301
#define PRISI 0x00A57001
#define PRITI 0x00A67101
#define PRDSI 0x00A77401
#define PGACTI 0x00A83002
#define PGRCI 0x00A93102
#define P201HI 0x00AA6002
#define P201LI 0x00AB6102
#define PSACTI 0x00AC3003
#define PSRCI 0x00AD3103
#define P388HI 0x00AE6003
#define P388LI 0x00AF6103
#define PSBISI 0x00B07003
#define PSBITI 0x00B17103
#define PMACTI 0x00B23004
#define PMRCI 0x00B33104
#define P401HI 0x00B46004
#define P401LI 0x00B56104
#define PMISI 0x00B67004
#define PMITI 0x00B77104
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned short PORT;
typedef unsigned long DWORD;
typedef unsigned long ADDRESS;
typedef int BOOL;
typedef int FLAG;
typedef struct
{
short flags; /* InterWave stat flags */
PORT pcodar; /* Base Port for Codec */
PORT pcdrar; /* Base Port for Ext Device */
PORT p2xr; /* Compatibility Base Port */
PORT p3xr; /* MIDI and Synth Base Port */
PORT p401ar; /* Gen Purpose Reg. 1 address */
PORT p201ar; /* Game Ctrl normally at 0x201 */
PORT pataar; /* Base Address for ATAPI I/O Space */
PORT p388ar; /* Base Port for AdLib. It should be 388h */
PORT pnprdp; /* PNP read data port */
PORT igidxr; /* Gen Index Reg at P3XR+0x03 */
PORT i16dp; /* 16-bit data port at P3XR+0x04 */
PORT i8dp; /* 8-bit data port at P3XR+0x05 */
PORT svsr; /* Synth Voice Select at P3XR+0x02 */
PORT cdatap; /* Codec Indexed Data Port at PCODAR+0x01 */
PORT csr1r; /* Codec Stat Reg 1 at PCODAR+0x02 */
PORT cxdr; /* Play or Record Data Reg at PCODAR+0x03 */
PORT gmxr; /* GMCR or GMSR at P3XR+0x00 */
PORT gmxdr; /* GMTDR or GMRDR at P3XR+0x01 */
PORT lmbdr; /* LMBDR at P3XR+0x07 */
BYTE csn; /* Card Select Number */
BYTE cmode; /* Codec Operation Mode */
int dma1_chan; /* DMA channel 1 (local DMA & codec rec) */
int dma2_chan; /* DMA channel 2 (codec play) */
int ext_chan; /* Ext Dev DMA channel */
BYTE voices; /* Number of active voices */
DWORD vendor; /* Vendor ID and Product Identifier */
int synth_irq; /* Synth IRQ number */
int midi_irq; /* MIDI IRQ number */
int ext_irq; /* Ext Dev IRQ */
int mpu_irq; /* MPU401 Dev IRQ */
int emul_irq; /* Sound Blaster/AdLib Dev IRQ */
ADDRESS free_mem; /* Address of First Free LM Block */
DWORD reserved_mem; /* Amount of LM reserved by app. */
BYTE smode; /* Synth Mode */
WORD size_mem; /* Total LM in Kbytes */
} IWAVE;
#endif
|