X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dos_auplay;a=blobdiff_plain;f=src%2Fau_sb.c;h=63fb49d2e4959d0bec53a65ce6b564b2ad801c4d;hp=eb587627b2cb4c3722abec889929fbb6e97705ce;hb=64ccc281a2b08911685ac3a8d611f0ff28641517;hpb=ea5991d4cd397583ea9058ae995e34ccb099c8f2 diff --git a/src/au_sb.c b/src/au_sb.c index eb58762..63fb49d 100644 --- a/src/au_sb.c +++ b/src/au_sb.c @@ -92,7 +92,7 @@ static void start_dsp4(int bits, unsigned int mode, int num_samples); static void start_dsp(int nchan, int num_samples); static void write_dsp(unsigned char val); static unsigned char read_dsp(void); -static void write_mix(unsigned char val, int reg); +static void write_mix(int reg, unsigned char val); static unsigned char read_mix(int reg); static int get_dsp_version(void); static int dsp4_detect_irq(void); @@ -224,16 +224,12 @@ static void start(int rate, int bits, int nchan) return; } - printf("DBG allocated seg: %x, addr: %lx\n", (unsigned int)seg, - (unsigned long)seg << 4); - addr = (uint32_t)seg << 4; next64k = (addr + 0x10000) & 0xffff0000; if(next64k - addr < BUFSIZE) { addr = next64k; } - printf("DBG aligned: %lx (mid: %lx)\n", (unsigned long)addr, (unsigned long)(addr + BUFSIZE / 2)); buffer[0] = (void*)addr; buffer[1] = (void*)(addr + BUFSIZE / 2); wrbuf = 0; @@ -334,11 +330,11 @@ static void setvolume(int ctl, int vol) /* DSP 4.x - SB16 */ val = vol & 0xf8; if(ctl == AUDIO_PCM) { - write_mix(MIX_SB16_VOICE_L, vol); - write_mix(MIX_SB16_VOICE_R, vol); + write_mix(MIX_SB16_VOICE_L, val); + write_mix(MIX_SB16_VOICE_R, val); } else { - write_mix(MIX_SB16_MASTER_L, vol); - write_mix(MIX_SB16_MASTER_R, vol); + write_mix(MIX_SB16_MASTER_L, val); + write_mix(MIX_SB16_MASTER_R, val); } } else if(VER_MAJOR(dsp_ver) >= 3) { @@ -381,9 +377,9 @@ static int getvolume(int ctl) } val = read_mix(lreg); - left = (val & 0xf8) | ((val >> 3) & 7); /* duplicate last 3 bits */ + left = (val & 0xf8) | (val >> 5); val = read_mix(rreg); - right = (val & 0xf8) | ((val >> 3) & 7); + right = (val & 0xf8) | (val >> 5); } else if(VER_MAJOR(dsp_ver) >= 3) { /* DSP 3.x - SBPro */ @@ -454,7 +450,7 @@ static unsigned char read_dsp(void) return inp(REG_RDATA); } -static void write_mix(unsigned char val, int reg) +static void write_mix(int reg, unsigned char val) { outp(REG_MIXPORT, reg); outp(REG_MIXDATA, val); @@ -492,7 +488,7 @@ static int dsp4_detect_irq(void) } if(!irq) { /* try to force IRQ 5 */ - write_mix(2, MIX_SB16_IRQ_SEL); /* bit1 selects irq 5 */ + write_mix(MIX_SB16_IRQ_SEL, 2); /* bit1 selects irq 5 */ /* re-read to verify */ irqsel = read_mix(MIX_SB16_IRQ_SEL); @@ -535,7 +531,7 @@ static int dsp4_detect_dma(void) } if(dma_chan == -1 || dma16_chan == -1) { - write_mix(dmasel, MIX_SB16_DMA_SEL); + write_mix(MIX_SB16_DMA_SEL, dmasel); /* re-read to verify */ tmp = read_mix(MIX_SB16_DMA_SEL);