mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-22 11:17:19 +00:00
1fa24a09c7
This is based on Voxware 3.5, and corresponds to Amancio's `guspnp21'. Bug reports to Amancio, please!
713 lines
32 KiB
C
713 lines
32 KiB
C
/*#######################################################################*/
|
|
/* 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
|