From f938db54d3dfb982c93d73eaeda40aef7644e062 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 7 Nov 2023 21:27:56 -0300 Subject: [PATCH 1/2] snd_sb: Unify SB16 and ViBRA PnP functions --- src/sound/snd_sb.c | 94 +++++----------------------------------------- 1 file changed, 9 insertions(+), 85 deletions(-) diff --git a/src/sound/snd_sb.c b/src/sound/snd_sb.c index 14afb2740..dbf242e59 100644 --- a/src/sound/snd_sb.c +++ b/src/sound/snd_sb.c @@ -1599,8 +1599,14 @@ sb_16_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv) sb_dsp_setdma8(&sb->dsp, val); val = config->dma[1].dma; - if (val != ISAPNP_DMA_DISABLED) - sb_dsp_setdma16(&sb->dsp, val); + sb_dsp_setdma16_enabled(&sb->dsp, val != ISAPNP_DMA_DISABLED); + sb_dsp_setdma16_translate(&sb->dsp, val < ISAPNP_DMA_DISABLED); + if (val != ISAPNP_DMA_DISABLED) { + if (sb->dsp.sb_16_dma_supported) + sb_dsp_setdma16(&sb->dsp, val); + else + sb_dsp_setdma16_8(&sb->dsp, val); + } } break; @@ -1635,90 +1641,8 @@ sb_vibra16_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void * switch (ld) { case 0: /* Audio */ - io_removehandler(addr, 0x0004, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - io_removehandler(addr + 8, 0x0002, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - io_removehandler(addr + 4, 0x0002, - sb_ct1745_mixer_read, NULL, NULL, - sb_ct1745_mixer_write, NULL, NULL, - sb); - - addr = sb->opl_pnp_addr; - if (addr) { - sb->opl_pnp_addr = 0; - io_removehandler(addr, 0x0004, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - } - - sb_dsp_setaddr(&sb->dsp, 0); - sb_dsp_setirq(&sb->dsp, 0); - sb_dsp_setdma8(&sb->dsp, ISAPNP_DMA_DISABLED); - sb_dsp_setdma16(&sb->dsp, ISAPNP_DMA_DISABLED); - - mpu401_change_addr(sb->mpu, 0); - - if (config->activate) { - addr = config->io[0].base; - if (addr != ISAPNP_IO_DISABLED) { - io_sethandler(addr, 0x0004, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - io_sethandler(addr + 8, 0x0002, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - io_sethandler(addr + 4, 0x0002, - sb_ct1745_mixer_read, NULL, NULL, - sb_ct1745_mixer_write, NULL, NULL, - sb); - - sb_dsp_setaddr(&sb->dsp, addr); - } - - addr = config->io[1].base; - if (addr != ISAPNP_IO_DISABLED) - mpu401_change_addr(sb->mpu, addr); - - addr = config->io[2].base; - if (addr != ISAPNP_IO_DISABLED) { - sb->opl_pnp_addr = addr; - io_sethandler(addr, 0x0004, - sb->opl.read, NULL, NULL, - sb->opl.write, NULL, NULL, - sb->opl.priv); - } - - val = config->irq[0].irq; - if (val != ISAPNP_IRQ_DISABLED) - sb_dsp_setirq(&sb->dsp, val); - - val = config->dma[0].dma; - if (val != ISAPNP_DMA_DISABLED) - sb_dsp_setdma8(&sb->dsp, val); - - val = config->dma[1].dma; - sb_dsp_setdma16_enabled(&sb->dsp, val != ISAPNP_DMA_DISABLED); - sb_dsp_setdma16_translate(&sb->dsp, val < ISAPNP_DMA_DISABLED); - if (val != ISAPNP_DMA_DISABLED) { - if (sb->dsp.sb_16_dma_supported) - sb_dsp_setdma16(&sb->dsp, val); - else - sb_dsp_setdma16_8(&sb->dsp, val); - } - } - - break; - case 1: /* Game */ - gameport_remap(sb->gameport, (config->activate && (config->io[0].base != ISAPNP_IO_DISABLED)) ? config->io[0].base : 0); + sb_16_pnp_config_changed(ld * 3, config, sb); break; default: From e6ce96a169d3700dc6d11d3800cc5878ba621bf9 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 7 Nov 2023 22:29:53 -0300 Subject: [PATCH 2/2] snd_sb: Fix small IDE initialization oversight --- src/sound/snd_sb.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sound/snd_sb.c b/src/sound/snd_sb.c index dbf242e59..5efb56bd1 100644 --- a/src/sound/snd_sb.c +++ b/src/sound/snd_sb.c @@ -2230,7 +2230,7 @@ sb_16_pnp_init(UNUSED(const device_t *info)) sb_dsp_setdma16(&sb->dsp, ISAPNP_DMA_DISABLED); mpu401_change_addr(sb->mpu, 0); - ide_remove_handlers(2); + ide_remove_handlers(3); sb->gameport_addr = 0; gameport_remap(sb->gameport, 0); @@ -2559,7 +2559,8 @@ sb_awe32_pnp_init(const device_t *info) sb_dsp_setdma16(&sb->dsp, ISAPNP_DMA_DISABLED); mpu401_change_addr(sb->mpu, 0); - ide_remove_handlers(2); + if ((info->local != 2) && (info->local != 3) && (info->local != 4)) + ide_remove_handlers(3); emu8k_change_addr(&sb->emu8k, 0);