Levels fixed. Audigy now supported.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4038 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2003-07-21 08:44:01 +00:00
parent 6202b8bf70
commit ce020bad2c
2 changed files with 116 additions and 132 deletions

View File

@ -337,8 +337,9 @@ emuxki_chanparms_set_defaults(emuxki_channel *chan)
chan->fxsend.c.level = chan->fxsend.d.level =
/* for audigy */
chan->fxsend.e.level = chan->fxsend.f.level =
chan->fxsend.g.level = chan->fxsend.h.level = 0xc0; /* not max */
chan->fxsend.g.level = chan->fxsend.h.level =
IS_AUDIGY(&chan->voice->stream->card->config) ? 0xc0 : 0xff; /* not max */
chan->fxsend.a.dest = 0x0;
chan->fxsend.b.dest = 0x1;
chan->fxsend.c.dest = 0x2;
@ -454,10 +455,6 @@ static void
emuxki_channel_set_bufparms(emuxki_channel *chan,
uint32 start, uint32 end)
{
//uint8 shift;
//emuxki_voice *voice = chan->voice;
//shift = voice->stereo + voice->b16;
chan->loop.start = start & EMU_CHAN_PSST_LOOPSTARTADDR_MASK;
chan->loop.end = end & EMU_CHAN_DSL_LOOPENDADDR_MASK;
}
@ -705,7 +702,7 @@ emuxki_voice_dataloc_create(emuxki_voice *voice)
if ((error = emuxki_voice_channel_create(voice)))
return (error);
} else {
//return B_ERROR;
}
return B_OK;
}
@ -743,6 +740,9 @@ static void
emuxki_voice_fxupdate(emuxki_voice *voice)
{
emuxki_chanparms_fxsend fxsend;
uint8 maxlevel =
IS_AUDIGY(&voice->stream->card->config) ? 0xc0 : 0xff; /* not max */
if (voice->use & EMU_USE_PLAY) {
fxsend.a.dest = 0x3f;
@ -763,18 +763,18 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 2:
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if((voice->stream->nstereo == 2) ||
((voice->stream->nstereo == 3)&&(voice->voicenum < 2))) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum > 1 - 1)
fxsend.a.dest-=2;
} else if(voice->stream->nstereo == 3 && voice->voicenum > 1) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 2 badly managed\n"));
}
@ -782,18 +782,18 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 4:
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum * 2 + 2;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
} else if((voice->stream->nstereo == 2) ||
((voice->stream->nstereo == 3)&&(voice->voicenum < 2))) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if(voice->stream->nstereo == 3 && voice->voicenum > 1) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 4 badly managed\n"));
}
@ -801,25 +801,25 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 6: // only on audigy
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum * 2 + 2;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
fxsend.c.dest = 0x4;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
fxsend.d.dest = 0x5;
fxsend.d.level = 0xc0 / 2;
fxsend.d.level = maxlevel / 2;
} else if(voice->stream->nstereo == 2) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum < 1) {
fxsend.b.dest = 0x4;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
fxsend.c.dest = 0x5;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
}
} else if(voice->stream->nstereo == 3) {
fxsend.a.dest = voice->voicenum * 2;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else {
LOG(("emuxki_voice_set_stereo case 6 badly managed\n"));
}
@ -833,18 +833,18 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 2:
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if((voice->stream->nstereo == 2) ||
((voice->stream->nstereo == 3)&&(voice->voicenum < 2))) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum > 1 - 1)
fxsend.a.dest-=2;
} else if(voice->stream->nstereo == 3 && voice->voicenum > 1) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 2 badly managed\n"));
}
@ -852,18 +852,18 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 4:
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum * 2 + 3;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
} else if((voice->stream->nstereo == 2) ||
((voice->stream->nstereo == 3)&&(voice->voicenum < 2))) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if(voice->stream->nstereo == 3 && voice->voicenum > 1) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 4 badly managed\n"));
}
@ -871,25 +871,25 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 6: // only on audigy
if(voice->stream->nstereo == 1) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum * 2 + 3;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
fxsend.c.dest = 0x4;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
fxsend.d.dest = 0x5;
fxsend.d.level = 0xc0 / 2;
fxsend.d.level = maxlevel / 2;
} else if(voice->stream->nstereo == 2) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum < 1) {
fxsend.b.dest = 0x4;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
fxsend.c.dest = 0x5;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
}
} else if(voice->stream->nstereo == 3) {
fxsend.a.dest = voice->voicenum * 2 + 1;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else {
LOG(("emuxki_voice_set_stereo case 6 badly managed\n"));
}
@ -903,23 +903,23 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 2:
if(voice->stream->nmono == 1) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum + 1;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
} else if(voice->stream->nmono == 2) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if((voice->stream->nmono == 4) ||
((voice->stream->nmono == 6)&&(voice->voicenum < 4))) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum > 2 - 1)
fxsend.a.dest-=2;
} else if(voice->stream->nmono == 6 && voice->voicenum > 3) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 2 badly managed\n"));
}
@ -927,27 +927,27 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 4:
if(voice->stream->nmono == 1) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum + 1;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
fxsend.c.dest = voice->voicenum + 2;
fxsend.c.level = 0xc0;
fxsend.c.level = maxlevel;
fxsend.d.dest = voice->voicenum + 3;
fxsend.d.level = 0xc0;
fxsend.d.level = maxlevel;
} else if(voice->stream->nmono == 2) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum + 2;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
} else if((voice->stream->nmono == 4) ||
((voice->stream->nmono == 6)&&(voice->voicenum < 4))) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else if(voice->stream->nmono == 6 && voice->voicenum > 3) {
fxsend.a.dest = 0x0;
fxsend.a.level = 0xc0 / 2;
fxsend.a.level = maxlevel / 2;
fxsend.b.dest = 0x1;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
} else {
LOG(("emuxki_voice_set_stereo case 4 badly managed\n"));
}
@ -955,38 +955,38 @@ emuxki_voice_fxupdate(emuxki_voice *voice)
case 6: // only on audigy
if(voice->stream->nmono == 1) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum + 1;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
fxsend.c.dest = voice->voicenum + 2;
fxsend.c.level = 0xc0;
fxsend.c.level = maxlevel;
fxsend.d.dest = voice->voicenum + 3;
fxsend.d.level = 0xc0;
fxsend.d.level = maxlevel;
fxsend.e.dest = voice->voicenum + 4;
fxsend.e.level = 0xc0;
fxsend.e.level = maxlevel;
fxsend.f.dest = voice->voicenum + 5;
fxsend.f.level = 0xc0;
fxsend.f.level = maxlevel;
} else if(voice->stream->nmono == 2) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
fxsend.b.dest = voice->voicenum + 2;
fxsend.b.level = 0xc0;
fxsend.b.level = maxlevel;
fxsend.c.dest = 0x4;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
fxsend.d.dest = 0x5;
fxsend.d.level = 0xc0 / 2;
fxsend.d.level = maxlevel / 2;
} else if(voice->stream->nmono == 4) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
if(voice->voicenum < 2) {
fxsend.b.dest = 0x4;
fxsend.b.level = 0xc0 / 2;
fxsend.b.level = maxlevel / 2;
fxsend.c.dest = 0x5;
fxsend.c.level = 0xc0 / 2;
fxsend.c.level = maxlevel / 2;
}
} else if(voice->stream->nmono == 6) {
fxsend.a.dest = voice->voicenum;
fxsend.a.level = 0xc0;
fxsend.a.level = maxlevel;
} else {
LOG(("emuxki_voice_set_stereo case 6 badly managed\n"));
}
@ -1331,13 +1331,6 @@ emuxki_voice_start(emuxki_voice *voice)
voice->state |= EMU_STATE_STARTED;
if (voice->use & EMU_USE_PLAY) {
emuxki_resched_timer(voice->stream->card);
//emuxki_chan_write(&voice->stream->card->config, 0, 0x66, 1);
//emuxki_chan_write(&voice->stream->card->config, 0, EMU_CLIEL, 1);
/*emuxki_chan_write(&voice->stream->card->config, 0, EMU_MKSUBREG(1, 0,
EMU_CLIEL + (0 >> 5)), 1);*/
}
}
@ -1375,8 +1368,6 @@ emuxki_voice_halt(emuxki_voice *voice)
voice->state &= ~EMU_STATE_STARTED;
if (voice->use & EMU_USE_PLAY) {
emuxki_resched_timer(voice->stream->card);
//emuxki_chan_write(&voice->stream->card->config, 0, EMU_CLIEL, 0);
}
}
@ -1879,7 +1870,7 @@ int32 emuxki_int(void *arg)
while ((ipr = emuxki_reg_read_32(&card->config, EMU_IPR))) {
gotone = true;
if (ipr & EMU_IPR_INTERVALTIMER) {
TRACE(("EMU_IPR_INTERVALTIMER\n"));
//TRACE(("EMU_IPR_INTERVALTIMER\n"));
LIST_FOREACH(stream, &card->streams, next) {
if ((stream->use & EMU_USE_PLAY) == 0 ||
(stream->state & EMU_STATE_STARTED) == 0 ||
@ -1887,7 +1878,7 @@ int32 emuxki_int(void *arg)
continue;
voice = stream->first_voice;
TRACE(("voice %p\n", voice));
//TRACE(("voice %p\n", voice));
curblk = emuxki_voice_curaddr(voice) /
voice->blksize;
//TRACE(("EMU_IPR_INTERVALTIMER at trigblk %lu\n", curblk));
@ -1896,7 +1887,7 @@ int32 emuxki_int(void *arg)
//TRACE(("EMU_IPR_INTERVALTIMER at trigblk %lu\n", curblk));
//dump_voice(voice);
//trace_hardware_regs(&card->config);
TRACE(("voice pointer %p\n", voice));
//TRACE(("voice pointer %p\n", voice));
if(stream->inth)
stream->inth(stream->inthparam);
@ -1924,7 +1915,8 @@ int32 emuxki_int(void *arg)
LIST_FOREACH(stream, &card->streams, next) {
if ((stream->use & EMU_USE_RECORD) == 0 ||
(stream->state & EMU_STATE_STARTED) == 0 ||
(stream->inth == NULL))
(stream->inth == NULL) ||
(stream->first_voice == NULL))
continue;
voice = stream->first_voice;
curblk = emuxki_voice_curaddr(voice) /
@ -2018,8 +2010,7 @@ static void
make_device_names(
emuxki_dev * card)
{
/*char * name = card->name;
sprintf(name, "emuxki/%ld", card-cards+1);*/
#if MIDI
sprintf(card->midi.name, "midi/emuxki/%ld", card-cards+1);
names[num_names++] = card->midi.name;
@ -2090,6 +2081,9 @@ emuxki_setup(emuxki_dev * card)
emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
EMU_HCFG_AC3ENABLE_CDSPDIF | EMU_HCFG_AC3ENABLE_GPSPDIF|
EMU_HCFG_JOYENABLE | EMU_HCFG_AUTOMUTE);
} else if(IS_AUDIGY(&card->config)) {
emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
EMU_HCFG_JOYENABLE | EMU_HCFG_AUTOMUTE);
} else {
emuxki_reg_write_32(&card->config, EMU_HCFG, EMU_HCFG_AUDIOENABLE |
EMU_HCFG_LOCKTANKCACHE_MASK | EMU_HCFG_JOYENABLE | EMU_HCFG_AUTOMUTE);
@ -2104,9 +2098,6 @@ emuxki_setup(emuxki_dev * card)
dump_hardware_regs(&card->config);
PRINT(("installing interrupt : %x\n", card->config.irq));
install_io_interrupt_handler(card->config.irq, emuxki_int, card, 0);
/*PRINT(("codec master output = %#04x\n",emuxki_codec_read(&card->config, 0x02)));
PRINT(("codec aux output = %#04x\n",emuxki_codec_read(&card->config, 0x04)));
PRINT(("codec mono output = %#04x\n",emuxki_codec_read(&card->config, 0x06)));
@ -2169,6 +2160,9 @@ emuxki_setup(emuxki_dev * card)
card->play_mode = 4; // mode 4.0
}
PRINT(("installing interrupt : %x\n", card->config.irq));
install_io_interrupt_handler(card->config.irq, emuxki_int, card, 0);
PRINT(("init_driver done\n"));
return err;
@ -2273,35 +2267,35 @@ emuxki_initfx(emuxki_dev * card)
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_A_DSP_INR(EMU_DSP_IN_CDSPDIF), EMU_A_DSP_GPR(p_cd_in_gpr->gpr + 1));
/* Front GPR(l/r) = DSP_IN_GPR(l/r) + FX(0/1) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Front GPR(l/r) = DSP_IN_GPR(l/r) + FX(0/1) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_FRONT_LEFT),
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_L),
EMU_DSP_FX(0), EMU_A_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(0), EMU_A_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_FRONT_RIGHT),
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_DSP_FX(1), EMU_A_DSP_CST(0));
EMU_DSP_FX(1), EMU_A_DSP_CST(4));
/* Rear GPR(l/r) = DSP_IN_GPR(l/r) + FX(2/3) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Rear GPR(l/r) = DSP_IN_GPR(l/r) + FX(2/3) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_REAR_LEFT),
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_L),
EMU_DSP_FX(2), EMU_A_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(2), EMU_A_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_REAR_RIGHT),
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_DSP_FX(3), EMU_A_DSP_CST(0));
EMU_DSP_FX(3), EMU_A_DSP_CST(4));
/* Center/Sub GPR = 0 + FX(4/5) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Center/Sub GPR = 0 + FX(4/5) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_CENTER),
EMU_A_DSP_CST(0),
EMU_DSP_FX(4), EMU_A_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(4), EMU_A_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_A_DSP_GPR(EMU_DSP_TMPGPR_SUB),
EMU_A_DSP_CST(0),
EMU_DSP_FX(5), EMU_A_DSP_CST(0));
EMU_DSP_FX(5), EMU_A_DSP_CST(4));
/* Analog Front Output l/r = 0 + Front GPR(l/r) * A_FRONT_GPR(l/r) */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
@ -2422,35 +2416,35 @@ emuxki_initfx(emuxki_dev * card)
EMU_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_DSP_INR(EMU_DSP_IN_CDSPDIF), EMU_DSP_GPR(p_cd_in_gpr->gpr + 1));
/* Front GPR(l/r) = DSP_IN_GPR(l/r) + FX(0/1) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Front GPR(l/r) = DSP_IN_GPR(l/r) + FX(0/1) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_FRONT_LEFT),
EMU_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_L),
EMU_DSP_FX(0), EMU_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(0), EMU_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_FRONT_RIGHT),
EMU_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_DSP_FX(1), EMU_DSP_CST(0));
EMU_DSP_FX(1), EMU_DSP_CST(4));
/* Rear GPR(l/r) = DSP_IN_GPR(l/r) + FX(2/3) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Rear GPR(l/r) = DSP_IN_GPR(l/r) + FX(2/3) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_REAR_LEFT),
EMU_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_L),
EMU_DSP_FX(2), EMU_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(2), EMU_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_REAR_RIGHT),
EMU_DSP_GPR(EMU_DSP_TMPGPR_DSP_IN_R),
EMU_DSP_FX(3), EMU_DSP_CST(0));
EMU_DSP_FX(3), EMU_DSP_CST(4));
/* Center/Sub GPR = 0 + FX(4/5) + 0 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
/* Center/Sub GPR = 0 + FX(4/5) * 4 */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_CENTER),
EMU_DSP_CST(0),
EMU_DSP_FX(4), EMU_DSP_CST(0));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_ACC3,
EMU_DSP_FX(4), EMU_DSP_CST(4));
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACINTS,
EMU_DSP_GPR(EMU_DSP_TMPGPR_SUB),
EMU_DSP_CST(0),
EMU_DSP_FX(5), EMU_DSP_CST(0));
EMU_DSP_FX(5), EMU_DSP_CST(4));
/* Analog Front Output l/r = 0 + Front GPR(l/r) * A_FRONT_GPR(l/r) */
emuxki_dsp_addop(&card->config, &pc, EMU_DSP_OP_MACS,
@ -2579,6 +2573,7 @@ emuxki_init(emuxki_dev * card)
if(IS_AUDIGY(&card->config)) {
emuxki_chan_write(&card->config, 0, EMU_SPBYPASS, EMU_SPBYPASS_24_BITS);
emuxki_chan_write(&card->config, 0, EMU_AC97SLOT, EMU_AC97SLOT_CENTER | EMU_AC97SLOT_LFE);
}
/* Initialize all channels to stopped and no effects */
@ -2740,17 +2735,12 @@ init_driver(void)
ix++;
}
if (!num_cards) {
PRINT(("no cards\n"));
put_module(mpu401_name);
put_module(pci_name);
PRINT(("emuxki: no suitable cards found\n"));
return ENODEV;
}
#if DEBUG
//add_debugger_command("emuxki", emuxki_debug, "emuxki [card# (1-n)]");
#endif
return B_OK;
}
@ -2828,8 +2818,7 @@ uninit_driver(void)
num_cards = 0;
PRINT(("uninit_driver()\n"));
//remove_debugger_command("emuxki", emuxki_debug);
for (ix=0; ix<cnt; ix++) {
emuxki_shutdown(&cards[ix]);
}

View File

@ -31,12 +31,10 @@
#include <OS.h>
#include <MediaDefs.h>
#include <strings.h>
#include "multi_audio.h"
#include "multi.h"
#include "ac97.h"
//#define DEBUG 1
#include "debug.h"
#include "emuxki.h"
#include "util.h"
@ -908,8 +906,7 @@ emuxki_get_buffers(emuxki_dev *card, multi_buffer_list *data)
ASSERT(BUFFER_COUNT == 2);
data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD; // XXX ???
// data->flags = 0;
data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD;
data->return_playback_buffers = BUFFER_COUNT; /* playback_buffers[b][] */
data->return_playback_channels = pchannels + pchannels2; /* playback_buffers[][c] */
@ -1060,7 +1057,6 @@ emuxki_buffer_exchange(emuxki_dev *card, multi_buffer_info *data)
static status_t
emuxki_buffer_force_stop(emuxki_dev *card)
{
//emuxki_voice_halt(card->pvoice);
return B_OK;
}
@ -1211,7 +1207,6 @@ emuxki_open(const char *name, uint32 flags, void** cookie)
emuxki_stream_set_audioparms(card->rstream2, true, 2, true, 48000);
recparams.efx_voices[0] = 3; // channels 1,2
recparams.efx_voices[1] = 0;
//emuxki_voice_set_recparms(card->rvoice, EMU_RECSRC_FX, &recparams);
emuxki_stream_set_recparms(card->rstream, EMU_RECSRC_ADC, NULL);
emuxki_stream_set_recparms(card->rstream2, EMU_RECSRC_FX, &recparams);