diff options
Diffstat (limited to 'sys/i386/isa/sound/iwdefs.h')
-rw-r--r-- | sys/i386/isa/sound/iwdefs.h | 712 |
1 files changed, 712 insertions, 0 deletions
diff --git a/sys/i386/isa/sound/iwdefs.h b/sys/i386/isa/sound/iwdefs.h new file mode 100644 index 000000000000..60f50fc50028 --- /dev/null +++ b/sys/i386/isa/sound/iwdefs.h @@ -0,0 +1,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 |