Add AWE64 CT4380 no IDE variant

This commit is contained in:
Jasmine Iwanek
2024-11-24 20:10:29 -05:00
parent 3bb62f59b8
commit e11743c521
3 changed files with 63 additions and 27 deletions

View File

@@ -157,6 +157,7 @@ extern const device_t sb_awe32_device;
extern const device_t sb_awe32_pnp_device; extern const device_t sb_awe32_pnp_device;
extern const device_t sb_awe64_value_device; extern const device_t sb_awe64_value_device;
extern const device_t sb_awe64_device; extern const device_t sb_awe64_device;
extern const device_t sb_awe64_ide_device;
extern const device_t sb_awe64_gold_device; extern const device_t sb_awe64_gold_device;
/* Crystal CS423x */ /* Crystal CS423x */

View File

@@ -43,13 +43,21 @@
#include <86box/snd_sb.h> #include <86box/snd_sb.h>
#include <86box/plat_unused.h> #include <86box/plat_unused.h>
#define SB_32_PNP 0
#define SB_AWE32_PNP 1
#define SB_AWE64_VALUE 2
#define SB_AWE64_NOIDE 3
#define SB_AWE64_IDE 4
#define SB_AWE64_GOLD 5
#define PNP_ROM_SB_16_PNP "roms/sound/creative/CTL0024A.BIN" #define PNP_ROM_SB_16_PNP "roms/sound/creative/CTL0024A.BIN"
#define PNP_ROM_SB_VIBRA16XV "roms/sound/creative/CT4170 PnP.BIN" #define PNP_ROM_SB_VIBRA16XV "roms/sound/creative/CT4170 PnP.BIN"
#define PNP_ROM_SB_VIBRA16C "roms/sound/creative/CT4180 PnP.BIN" #define PNP_ROM_SB_VIBRA16C "roms/sound/creative/CT4180 PnP.BIN"
#define PNP_ROM_SB_32_PNP "roms/sound/creative/CT3600 PnP.BIN" #define PNP_ROM_SB_32_PNP "roms/sound/creative/CT3600 PnP.BIN"
#define PNP_ROM_SB_AWE32_PNP "roms/sound/creative/CT3980 PnP.BIN" #define PNP_ROM_SB_AWE32_PNP "roms/sound/creative/CT3980 PnP.BIN"
#define PNP_ROM_SB_AWE64_VALUE "roms/sound/creative/CT4520 PnP.BIN" #define PNP_ROM_SB_AWE64_VALUE "roms/sound/creative/CT4520 PnP.BIN"
#define PNP_ROM_SB_AWE64 "roms/sound/creative/CTL009DA.BIN" #define PNP_ROM_SB_AWE64_NOIDE "roms/sound/creative/CT4380 PnP noIDE.BIN"
#define PNP_ROM_SB_AWE64_IDE "roms/sound/creative/CTL009DA.BIN"
#define PNP_ROM_SB_AWE64_GOLD "roms/sound/creative/CT4540 PnP.BIN" #define PNP_ROM_SB_AWE64_GOLD "roms/sound/creative/CT4540 PnP.BIN"
/* TODO: Find real ESS PnP ROM dumps. */ /* TODO: Find real ESS PnP ROM dumps. */
#define PNP_ROM_ESS0100 "roms/sound/ess/ESS0100.BIN" #define PNP_ROM_ESS0100 "roms/sound/ess/ESS0100.BIN"
@@ -2219,7 +2227,7 @@ sb_awe32_pnp_config_changed(const uint8_t ld, isapnp_device_config_t *config, vo
} }
static void static void
sb_awe64_pnp_config_changed(const uint8_t ld, isapnp_device_config_t *config, void *priv) sb_awe64_pnp_ide_config_changed(const uint8_t ld, isapnp_device_config_t *config, void *priv)
{ {
sb_t *sb = (sb_t *) priv; sb_t *sb = (sb_t *) priv;
@@ -2240,7 +2248,7 @@ sb_awe64_pnp_config_changed(const uint8_t ld, isapnp_device_config_t *config, vo
} }
static void static void
sb_awe64_gold_pnp_config_changed(const uint8_t ld, isapnp_device_config_t *config, void *priv) sb_awe64_pnp_noide_config_changed(const uint8_t ld, isapnp_device_config_t *config, void *priv)
{ {
sb_t *sb = (sb_t *) priv; sb_t *sb = (sb_t *) priv;
@@ -3495,9 +3503,15 @@ sb_awe64_value_available(void)
} }
static int static int
sb_awe64_available(void) sb_awe64_noide_available(void)
{ {
return sb_awe32_available() && rom_present(PNP_ROM_SB_AWE64); return sb_awe32_available() && rom_present(PNP_ROM_SB_AWE64_NOIDE);
}
static int
sb_awe64_ide_available(void)
{
return sb_awe32_available() && rom_present(PNP_ROM_SB_AWE64_IDE);
} }
static int static int
@@ -3592,7 +3606,7 @@ sb_awe32_pnp_init(const device_t *info)
sb->opl_enabled = 1; sb->opl_enabled = 1;
fm_driver_get(FM_YMF262, &sb->opl); fm_driver_get(FM_YMF262, &sb->opl);
sb_dsp_init(&sb->dsp, ((info->local == 2) || (info->local == 3) || (info->local == 4)) ? sb_dsp_init(&sb->dsp, (info->local >= SB_AWE64_VALUE) ?
SBAWE64 : SBAWE32PNP, SB_SUBTYPE_DEFAULT, sb); SBAWE64 : SBAWE32PNP, SB_SUBTYPE_DEFAULT, sb);
sb_dsp_setdma16_supported(&sb->dsp, 1); sb_dsp_setdma16_supported(&sb->dsp, 1);
sb_ct1745_mixer_reset(sb); sb_ct1745_mixer_reset(sb);
@@ -3619,30 +3633,35 @@ sb_awe32_pnp_init(const device_t *info)
sb->gameport = gameport_add(&gameport_pnp_device); sb->gameport = gameport_add(&gameport_pnp_device);
if ((info->local != 2) && (info->local != 4)) { // Does it have IDE?
if ((info->local != SB_AWE64_VALUE) && (info->local != SB_AWE64_NOIDE) && (info->local != SB_AWE64_GOLD)) {
device_add(&ide_qua_pnp_device); device_add(&ide_qua_pnp_device);
other_ide_present++; other_ide_present++;
} }
const char *pnp_rom_file = NULL; const char *pnp_rom_file = NULL;
switch (info->local) { switch (info->local) {
case 0: case SB_32_PNP:
pnp_rom_file = PNP_ROM_SB_32_PNP; pnp_rom_file = PNP_ROM_SB_32_PNP;
break; break;
case 1: case SB_AWE32_PNP:
pnp_rom_file = PNP_ROM_SB_AWE32_PNP; pnp_rom_file = PNP_ROM_SB_AWE32_PNP;
break; break;
case 2: case SB_AWE64_VALUE:
pnp_rom_file = PNP_ROM_SB_AWE64_VALUE; pnp_rom_file = PNP_ROM_SB_AWE64_VALUE;
break; break;
case 3: case SB_AWE64_NOIDE:
pnp_rom_file = PNP_ROM_SB_AWE64; pnp_rom_file = PNP_ROM_SB_AWE64_NOIDE;
break; break;
case 4: case SB_AWE64_IDE:
pnp_rom_file = PNP_ROM_SB_AWE64_IDE;
break;
case SB_AWE64_GOLD:
pnp_rom_file = PNP_ROM_SB_AWE64_GOLD; pnp_rom_file = PNP_ROM_SB_AWE64_GOLD;
break; break;
@@ -3661,21 +3680,22 @@ sb_awe32_pnp_init(const device_t *info)
} }
switch (info->local) { switch (info->local) {
case 0: case SB_32_PNP:
isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_16_pnp_config_changed, NULL, NULL, NULL, sb); isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_16_pnp_config_changed, NULL, NULL, NULL, sb);
break; break;
case 1: case SB_AWE32_PNP:
isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe32_pnp_config_changed, NULL, NULL, NULL, sb); isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe32_pnp_config_changed, NULL, NULL, NULL, sb);
break; break;
case 3: case SB_AWE64_IDE:
isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe64_pnp_config_changed, NULL, NULL, NULL, sb); isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe64_pnp_ide_config_changed, NULL, NULL, NULL, sb);
break; break;
case 2: case SB_AWE64_VALUE:
case 4: case SB_AWE64_NOIDE:
isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe64_gold_pnp_config_changed, NULL, NULL, NULL, sb); case SB_AWE64_GOLD:
isapnp_add_card(pnp_rom, sizeof(sb->pnp_rom), sb_awe64_pnp_noide_config_changed, NULL, NULL, NULL, sb);
break; break;
default: default:
@@ -3688,7 +3708,7 @@ sb_awe32_pnp_init(const device_t *info)
sb_dsp_setdma16(&sb->dsp, ISAPNP_DMA_DISABLED); sb_dsp_setdma16(&sb->dsp, ISAPNP_DMA_DISABLED);
mpu401_change_addr(sb->mpu, 0); mpu401_change_addr(sb->mpu, 0);
if ((info->local != 2) && (info->local != 4)) if ((info->local != SB_AWE64_VALUE) && (info->local != SB_AWE64_NOIDE) && (info->local != SB_AWE64_GOLD))
ide_remove_handlers(3); ide_remove_handlers(3);
emu8k_change_addr(&sb->emu8k, 0); emu8k_change_addr(&sb->emu8k, 0);
@@ -5772,7 +5792,7 @@ const device_t sb_32_pnp_device = {
.name = "Sound Blaster 32 PnP", .name = "Sound Blaster 32 PnP",
.internal_name = "sb32_pnp", .internal_name = "sb32_pnp",
.flags = DEVICE_ISA | DEVICE_AT, .flags = DEVICE_ISA | DEVICE_AT,
.local = 0, .local = SB_32_PNP,
.init = sb_awe32_pnp_init, .init = sb_awe32_pnp_init,
.close = sb_awe32_close, .close = sb_awe32_close,
.reset = NULL, .reset = NULL,
@@ -5800,7 +5820,7 @@ const device_t sb_awe32_pnp_device = {
.name = "Sound Blaster AWE32 PnP", .name = "Sound Blaster AWE32 PnP",
.internal_name = "sbawe32_pnp", .internal_name = "sbawe32_pnp",
.flags = DEVICE_ISA | DEVICE_AT, .flags = DEVICE_ISA | DEVICE_AT,
.local = 1, .local = SB_AWE32_PNP,
.init = sb_awe32_pnp_init, .init = sb_awe32_pnp_init,
.close = sb_awe32_close, .close = sb_awe32_close,
.reset = NULL, .reset = NULL,
@@ -5814,7 +5834,7 @@ const device_t sb_awe64_value_device = {
.name = "Sound Blaster AWE64 Value", .name = "Sound Blaster AWE64 Value",
.internal_name = "sbawe64_value", .internal_name = "sbawe64_value",
.flags = DEVICE_ISA | DEVICE_AT, .flags = DEVICE_ISA | DEVICE_AT,
.local = 2, .local = SB_AWE64_VALUE,
.init = sb_awe32_pnp_init, .init = sb_awe32_pnp_init,
.close = sb_awe32_close, .close = sb_awe32_close,
.reset = NULL, .reset = NULL,
@@ -5828,11 +5848,25 @@ const device_t sb_awe64_device = {
.name = "Sound Blaster AWE64", .name = "Sound Blaster AWE64",
.internal_name = "sbawe64", .internal_name = "sbawe64",
.flags = DEVICE_ISA | DEVICE_AT, .flags = DEVICE_ISA | DEVICE_AT,
.local = 3, .local = SB_AWE64_NOIDE,
.init = sb_awe32_pnp_init, .init = sb_awe32_pnp_init,
.close = sb_awe32_close, .close = sb_awe32_close,
.reset = NULL, .reset = NULL,
.available = sb_awe64_available, { .available = sb_awe64_noide_available },
.speed_changed = sb_speed_changed,
.force_redraw = NULL,
.config = sb_awe64_config
};
const device_t sb_awe64_ide_device = {
.name = "Sound Blaster AWE64 (IDE)",
.internal_name = "sbawe64_ide",
.flags = DEVICE_ISA | DEVICE_AT,
.local = SB_AWE64_IDE,
.init = sb_awe32_pnp_init,
.close = sb_awe32_close,
.reset = NULL,
.available = sb_awe64_ide_available,
.speed_changed = sb_speed_changed, .speed_changed = sb_speed_changed,
.force_redraw = NULL, .force_redraw = NULL,
.config = sb_awe64_config .config = sb_awe64_config
@@ -5842,7 +5876,7 @@ const device_t sb_awe64_gold_device = {
.name = "Sound Blaster AWE64 Gold", .name = "Sound Blaster AWE64 Gold",
.internal_name = "sbawe64_gold", .internal_name = "sbawe64_gold",
.flags = DEVICE_ISA | DEVICE_AT, .flags = DEVICE_ISA | DEVICE_AT,
.local = 4, .local = SB_AWE64_GOLD,
.init = sb_awe32_pnp_init, .init = sb_awe32_pnp_init,
.close = sb_awe32_close, .close = sb_awe32_close,
.reset = NULL, .reset = NULL,

View File

@@ -127,6 +127,7 @@ static const SOUND_CARD sound_cards[] = {
{ &sb_awe32_pnp_device }, { &sb_awe32_pnp_device },
{ &sb_awe64_value_device }, { &sb_awe64_value_device },
{ &sb_awe64_device }, { &sb_awe64_device },
{ &sb_awe64_ide_device },
{ &sb_awe64_gold_device }, { &sb_awe64_gold_device },
{ &sb_vibra16c_device }, { &sb_vibra16c_device },
{ &sb_vibra16s_device }, { &sb_vibra16s_device },