Merge pull request #5099 from jriwanek-forks/es1370

More fixes to parens and normalization of es1370, and cleaning in snd_sb.c too
This commit is contained in:
Miran Grča
2025-01-03 06:05:13 +01:00
committed by GitHub
2 changed files with 297 additions and 298 deletions

View File

@@ -156,15 +156,17 @@ typedef struct es137x_t {
} es137x_t; } es137x_t;
static const double akm4531_att_2dbstep_5bits[] = { static const double akm4531_att_2dbstep_5bits[] = {
// clang-format off
25.0, 32.0, 41.0, 51.0, 65.0, 82.0, 103.0, 130.0, 25.0, 32.0, 41.0, 51.0, 65.0, 82.0, 103.0, 130.0,
164.0, 206.0, 260.0, 327.0, 412.0, 519.0, 653.0, 822.0, 164.0, 206.0, 260.0, 327.0, 412.0, 519.0, 653.0, 822.0,
1036.0, 1304.0, 1641.0, 2067.0, 2602.0, 3276.0, 4125.0, 5192.0, 1036.0, 1304.0, 1641.0, 2067.0, 2602.0, 3276.0, 4125.0, 5192.0,
6537.0, 8230.0, 10362.0, 13044.0, 16422.0, 20674.0, 26027.0, 32767.0 6537.0, 8230.0, 10362.0, 13044.0, 16422.0, 20674.0, 26027.0, 32767.0
// clang-format on
}; };
static double akm4531_gain_2dbstep_5bits[0x20]; static double akm4531_gain_2dbstep_5bits[0x20];
#define AUDIOPCI_ES1370 0x50001271 #define AUDIOPCI_ES1370 0x50000000
#define AUDIOPCI_ES1371 0x13710200 #define AUDIOPCI_ES1371 0x13710200
#define AUDIOPCI_ES1373 0x13710400 #define AUDIOPCI_ES1373 0x13710400
#define AUDIOPCI_CT5880 0x58800400 #define AUDIOPCI_CT5880 0x58800400
@@ -365,7 +367,7 @@ es137x_reset_fifo(es137x_t *dev)
static void static void
akm4531_reset(es137x_t *dev) akm4531_reset(es137x_t *dev)
{ {
akm4531_t* codec = &dev->akm_codec; akm4531_t *codec = &dev->akm_codec;
memset(codec->registers, 0, sizeof(codec->registers)); memset(codec->registers, 0, sizeof(codec->registers));
@@ -382,7 +384,9 @@ akm4531_reset(es137x_t *dev)
codec->registers[0x16] = 0x3; codec->registers[0x16] = 0x3;
} }
static double lerp(double v0, double v1, double t) { static double
lerp(double v0, double v1, double t)
{
return (1. - t) * v0 + t * v1; return (1. - t) * v0 + t * v1;
} }
@@ -394,7 +398,7 @@ es1370_calc_sample_rate(es137x_t *dev)
dev->calc_sample_rate = 1411200 / (((dev->int_ctrl >> 16) & 0x1fff) + 2); dev->calc_sample_rate = 1411200 / (((dev->int_ctrl >> 16) & 0x1fff) + 2);
//pclog("ES1370 calc sample rate %u\n", dev->calc_sample_rate); // pclog("ES1370 calc sample rate %u\n", dev->calc_sample_rate);
dev->interp_factor = 1.0; dev->interp_factor = 1.0;
dev->interp_step = 1; dev->interp_step = 1;
@@ -420,7 +424,7 @@ es1370_calc_sample_rate(es137x_t *dev)
} }
dev->calc_sample_rate_synth = 44100 / (1 << ((dev->int_ctrl >> 12) & 3)); dev->calc_sample_rate_synth = 44100 / (1 << ((dev->int_ctrl >> 12) & 3));
dev->interp_factor_synth = 1. / (double)(1 << ((dev->int_ctrl >> 12) & 3)); dev->interp_factor_synth = 1. / (double) (1 << ((dev->int_ctrl >> 12) & 3));
dev->interp_step_synth = (1 << ((dev->int_ctrl >> 12) & 3)); dev->interp_step_synth = (1 << ((dev->int_ctrl >> 12) & 3));
} }
@@ -444,7 +448,7 @@ es137x_reset(void *priv)
Addressable as longword only */ Addressable as longword only */
if (dev->type >= AUDIOPCI_CT5880) if (dev->type >= AUDIOPCI_CT5880)
dev->int_status = 0x52080ec0; dev->int_status = 0x52080ec0;
else if (dev->type >= AUDIOPCI_ES1373 && dev->type != AUDIOPCI_ES1370) else if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
dev->int_status = 0x7f080ec0; dev->int_status = 0x7f080ec0;
else else
dev->int_status = 0x7ffffec0; dev->int_status = 0x7ffffec0;
@@ -780,7 +784,7 @@ es137x_inb(uint16_t port, void *priv)
break; break;
case 0x03: case 0x03:
ret = dev->int_ctrl >> 24; ret = dev->int_ctrl >> 24;
if (dev->type < AUDIOPCI_ES1373 && dev->type != AUDIOPCI_ES1370) if ((dev->type < AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret |= 0xfc; ret |= 0xfc;
break; break;
@@ -853,19 +857,19 @@ es137x_inb(uint16_t port, void *priv)
/* S/PDIF Channel Status Control Register, Address 1CH /* S/PDIF Channel Status Control Register, Address 1CH
Addressable as byte, word, longword */ Addressable as byte, word, longword */
case 0x1c: case 0x1c:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus & 0xff; ret = dev->spdif_chstatus & 0xff;
break; break;
case 0x1d: case 0x1d:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus >> 8; ret = dev->spdif_chstatus >> 8;
break; break;
case 0x1e: case 0x1e:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus >> 16; ret = dev->spdif_chstatus >> 16;
break; break;
case 0x1f: case 0x1f:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus >> 24; ret = dev->spdif_chstatus >> 24;
break; break;
@@ -906,7 +910,7 @@ es137x_inw(uint16_t port, void *priv)
break; break;
case 0x02: case 0x02:
ret = (dev->int_ctrl >> 16) & 0xff0f; ret = (dev->int_ctrl >> 16) & 0xff0f;
if (dev->type < AUDIOPCI_ES1373 && dev->type != AUDIOPCI_ES1370) if ((dev->type < AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret |= 0xfc00; ret |= 0xfc00;
break; break;
@@ -931,11 +935,11 @@ es137x_inw(uint16_t port, void *priv)
/* S/PDIF Channel Status Control Register, Address 1CH /* S/PDIF Channel Status Control Register, Address 1CH
Addressable as byte, word, longword */ Addressable as byte, word, longword */
case 0x1c: case 0x1c:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus & 0xffff; ret = dev->spdif_chstatus & 0xffff;
break; break;
case 0x1e: case 0x1e:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus >> 16; ret = dev->spdif_chstatus >> 16;
break; break;
@@ -1003,7 +1007,7 @@ es137x_inl(uint16_t port, void *priv)
es137x_t *dev = (es137x_t *) priv; es137x_t *dev = (es137x_t *) priv;
uint32_t ret = 0xffffffff; uint32_t ret = 0xffffffff;
if (dev->type == AUDIOPCI_ES1370 && (port & 0x3c) == 0x14) if ((dev->type == AUDIOPCI_ES1370) && (port & 0x3c) == 0x14)
port = 0x10; port = 0x10;
switch (port & 0x3c) { switch (port & 0x3c) {
@@ -1011,7 +1015,7 @@ es137x_inl(uint16_t port, void *priv)
Addressable as byte, word, longword */ Addressable as byte, word, longword */
case 0x00: case 0x00:
ret = dev->int_ctrl & 0xff0fffff; ret = dev->int_ctrl & 0xff0fffff;
if (ret < AUDIOPCI_ES1373 && ret != AUDIOPCI_ES1370) if ((ret < AUDIOPCI_ES1373) && (ret != AUDIOPCI_ES1370))
ret |= 0xfc000000; ret |= 0xfc000000;
break; break;
@@ -1052,7 +1056,7 @@ es137x_inl(uint16_t port, void *priv)
/* S/PDIF Channel Status Control Register, Address 1CH /* S/PDIF Channel Status Control Register, Address 1CH
Addressable as byte, word, longword */ Addressable as byte, word, longword */
case 0x1c: case 0x1c:
if (dev->type >= AUDIOPCI_ES1373 || dev->type == AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) || (dev->type != AUDIOPCI_ES1370))
ret = dev->spdif_chstatus; ret = dev->spdif_chstatus;
break; break;
@@ -1123,7 +1127,7 @@ es137x_outb(uint16_t port, uint8_t val, void *priv)
dev->dac[1].prev_out_r = 0; dev->dac[1].prev_out_r = 0;
es137x_fetch(dev, 1); es137x_fetch(dev, 1);
} }
//pclog("INTCTRL 0x%02X\n", val & 0xff); // audiopci_log("INTCTRL 0x%02X\n", val & 0xff);
dev->int_ctrl = (dev->int_ctrl & 0xffffff00) | val; dev->int_ctrl = (dev->int_ctrl & 0xffffff00) | val;
break; break;
case 0x01: case 0x01:
@@ -1144,11 +1148,11 @@ es137x_outb(uint16_t port, uint8_t val, void *priv)
Addressable as longword only, but PCem implements byte access, which Addressable as longword only, but PCem implements byte access, which
must be for a reason */ must be for a reason */
case 0x06: case 0x06:
if (dev->type >= AUDIOPCI_ES1373 || dev->type == AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) || (dev->type != AUDIOPCI_ES1370))
dev->int_status = (dev->int_status & 0xff08ffff) | (val << 16); dev->int_status = (dev->int_status & 0xff08ffff) | (val << 16);
break; break;
case 0x07: case 0x07:
if (dev->type >= AUDIOPCI_CT5880 || dev->type == AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_CT5880) || (dev->type != AUDIOPCI_ES1370))
dev->int_status = (dev->int_status & 0xd2ffffff) | (val << 24); dev->int_status = (dev->int_status & 0xd2ffffff) | (val << 24);
break; break;
@@ -1278,7 +1282,7 @@ es137x_outw(uint16_t port, uint16_t val, void *priv)
dev->step_pcm = dev->interp_step; dev->step_pcm = dev->interp_step;
es137x_fetch(dev, 1); es137x_fetch(dev, 1);
} }
//pclog("INTCTRL 0x%02X\n", val & 0xff); // audiopci_log("INTCTRL 0x%02X\n", val & 0xff);
dev->int_ctrl = (dev->int_ctrl & 0xffff0000) | val; dev->int_ctrl = (dev->int_ctrl & 0xffff0000) | val;
break; break;
case 0x02: case 0x02:
@@ -1377,7 +1381,9 @@ es137x_outl(uint16_t port, uint32_t val, void *priv)
Addressable as byte, word, longword */ Addressable as byte, word, longword */
case 0x00: case 0x00:
{ {
uint8_t dac1start = 0, dac2start = 0; uint8_t dac1start = 0;
uint8_t dac2start = 0;
if (!(dev->int_ctrl & INT_DAC1_EN) && (val & INT_DAC1_EN)) { if (!(dev->int_ctrl & INT_DAC1_EN) && (val & INT_DAC1_EN)) {
dev->dac[0].addr = dev->dac[0].addr_latch; dev->dac[0].addr = dev->dac[0].addr_latch;
dev->dac[0].buffer_pos = 0; dev->dac[0].buffer_pos = 0;
@@ -1396,7 +1402,7 @@ es137x_outl(uint16_t port, uint32_t val, void *priv)
dac2start = 1; dac2start = 1;
es137x_fetch(dev, 1); es137x_fetch(dev, 1);
} }
//pclog("INTCTRL 0x%02X\n", val & 0xff); // audiopci_log("INTCTRL 0x%02X\n", val & 0xff);
dev->int_ctrl = val; dev->int_ctrl = val;
gameport_remap(dev->gameport, 0x200 | ((val & 0x03000000) >> 21)); gameport_remap(dev->gameport, 0x200 | ((val & 0x03000000) >> 21));
es1370_calc_sample_rate(dev); es1370_calc_sample_rate(dev);
@@ -1413,7 +1419,7 @@ es137x_outl(uint16_t port, uint32_t val, void *priv)
audiopci_log("[W] STATUS = %08X\n", val); audiopci_log("[W] STATUS = %08X\n", val);
if (dev->type >= AUDIOPCI_CT5880) if (dev->type >= AUDIOPCI_CT5880)
dev->int_status = (dev->int_status & 0xd208ffff) | (val & 0x2df70000); dev->int_status = (dev->int_status & 0xd208ffff) | (val & 0x2df70000);
else if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) else if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
dev->int_status = (dev->int_status & 0xff08ffff) | (val & 0x00f70000); dev->int_status = (dev->int_status & 0xff08ffff) | (val & 0x00f70000);
break; break;
@@ -1426,8 +1432,7 @@ es137x_outl(uint16_t port, uint32_t val, void *priv)
/* Sample Rate Converter Interface Register, Address 10H /* Sample Rate Converter Interface Register, Address 10H
Addressable as longword only */ Addressable as longword only */
case 0x10: case 0x10:
if (dev->type == AUDIOPCI_ES1370) if (dev->type == AUDIOPCI_ES1370) {
{
dev->akm_codec.registers[(val >> 8) & 0xFF] = val & 0xFF; dev->akm_codec.registers[(val >> 8) & 0xFF] = val & 0xFF;
if ((val >> 8) == 0x16 && !(val & 1)) if ((val >> 8) == 0x16 && !(val & 1))
akm4531_reset(dev); akm4531_reset(dev);
@@ -1882,9 +1887,9 @@ es1370_pci_read(int func, int addr, void *priv)
return 0x12; return 0x12;
case 0x02: /* Device ID */ case 0x02: /* Device ID */
return 0x00; /* ES1370 */ return dev->type >> 16; /* ES1370 */
case 0x03: case 0x03:
return 0x50; return dev->type >> 24;
case 0x04: /* Command TODO */ case 0x04: /* Command TODO */
return dev->pci_command; return dev->pci_command;
@@ -1897,7 +1902,7 @@ es1370_pci_read(int func, int addr, void *priv)
return 0x00; return 0x00;
case 0x08: /* Class Code & Revision ID */ case 0x08: /* Class Code & Revision ID */
return 0x00; /* Revision ID - 0x00 is actual Ensoniq-branded ES1370 */ return dev->type >> 8; /* Revision ID - 0x00 is actual Ensoniq-branded ES1370 */
case 0x09: case 0x09:
return 0x00; /* Multimedia audio device */ return 0x00; /* Multimedia audio device */
case 0x0a: case 0x0a:
@@ -1919,14 +1924,8 @@ es1370_pci_read(int func, int addr, void *priv)
case 0x13: case 0x13:
return dev->base_addr >> 24; return dev->base_addr >> 24;
case 0x2c: case 0x2c ... 0x2f:
return 0x42; /* Subsystem vendor ID */ return dev->subsys_id[addr & 3]; /* Subsystem vendor ID */
case 0x2d:
return 0x49;
case 0x2e:
return 0x4c; /* Subsystem product ID */
case 0x2f:
return 0x4c;
#if 0 #if 0
case 0x34: // TODO case 0x34: // TODO
@@ -2033,7 +2032,7 @@ es1371_pci_read(int func, int addr, void *priv)
return 0x80; /* Maximum latency */ return 0x80; /* Maximum latency */
case 0x40: case 0x40:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
return dev->subsys_lock; return dev->subsys_lock;
break; break;
@@ -2164,7 +2163,7 @@ es1371_pci_write(int func, int addr, uint8_t val, void *priv)
break; break;
case 0x40: case 0x40:
if (dev->type >= AUDIOPCI_ES1373 && dev->type < AUDIOPCI_ES1370) if ((dev->type >= AUDIOPCI_ES1373) && (dev->type != AUDIOPCI_ES1370))
dev->subsys_lock = val; dev->subsys_lock = val;
break; break;
@@ -2387,9 +2386,8 @@ es137x_poll(void *priv)
es137x_update(dev); es137x_update(dev);
if (dev->int_ctrl & INT_DAC1_EN) { if (dev->int_ctrl & INT_DAC1_EN) {
if (((dev->type >= AUDIOPCI_ES1373) && (dev->int_ctrl & INT_DAC1_BYPASS)) || dev->type == AUDIOPCI_ES1370) { if (((dev->type >= AUDIOPCI_ES1373) && (dev->int_ctrl & INT_DAC1_BYPASS)) || (dev->type == AUDIOPCI_ES1370)) {
if (dev->calc_sample_rate_synth != 44100 && dev->type == AUDIOPCI_ES1370) if ((dev->calc_sample_rate_synth != 44100) && (dev->type == AUDIOPCI_ES1370)) {
{
if ((dev->dac[0].buffer_pos - dev->dac[0].buffer_pos_end) >= 0 && dev->step_synth >= dev->interp_step_synth) if ((dev->dac[0].buffer_pos - dev->dac[0].buffer_pos_end) >= 0 && dev->step_synth >= dev->interp_step_synth)
es137x_fetch(dev, 0); es137x_fetch(dev, 0);
@@ -2446,9 +2444,8 @@ dac0_count:
} }
if (dev->int_ctrl & INT_DAC2_EN) { if (dev->int_ctrl & INT_DAC2_EN) {
if (((dev->type >= AUDIOPCI_ES1373) && (dev->int_ctrl & INT_DAC2_BYPASS)) || dev->type == AUDIOPCI_ES1370) { if (((dev->type >= AUDIOPCI_ES1373) && (dev->int_ctrl & INT_DAC2_BYPASS)) || (dev->type == AUDIOPCI_ES1370)) {
if (dev->calc_sample_rate != 44100 && dev->type == AUDIOPCI_ES1370) if ((dev->calc_sample_rate != 44100) && (dev->type == AUDIOPCI_ES1370)) {
{
if ((dev->dac[1].buffer_pos - dev->dac[1].buffer_pos_end) >= 0 && dev->step_pcm >= dev->interp_step) if ((dev->dac[1].buffer_pos - dev->dac[1].buffer_pos_end) >= 0 && dev->step_pcm >= dev->interp_step)
es137x_fetch(dev, 1); es137x_fetch(dev, 1);
@@ -2619,6 +2616,7 @@ es1370_init(const device_t *info)
{ {
es137x_t *dev = malloc(sizeof(es137x_t)); es137x_t *dev = malloc(sizeof(es137x_t));
memset(dev, 0x00, sizeof(es137x_t)); memset(dev, 0x00, sizeof(es137x_t));
dev->type = info->local;
if (device_get_config_int("receive_input")) if (device_get_config_int("receive_input"))
midi_in_handler(1, es137x_input_msg, es137x_input_sysex, dev); midi_in_handler(1, es137x_input_msg, es137x_input_sysex, dev);
@@ -2645,8 +2643,6 @@ es1370_init(const device_t *info)
dev->master_vol_l = 1 << 15; dev->master_vol_l = 1 << 15;
dev->master_vol_r = 1 << 15; dev->master_vol_r = 1 << 15;
dev->type = AUDIOPCI_ES1370;
es137x_reset(dev); es137x_reset(dev);
es137x_speed_changed(dev); es137x_speed_changed(dev);
@@ -2706,7 +2702,7 @@ es137x_speed_changed(void *priv)
{ {
es137x_t *dev = (es137x_t *) priv; es137x_t *dev = (es137x_t *) priv;
dev->dac[1].latch = (uint64_t) ((double) TIMER_USEC * (1000000.0 / (double) (dev->type == AUDIOPCI_ES1370 ? WT_FREQ : SOUND_FREQ))); dev->dac[1].latch = (uint64_t) ((double) TIMER_USEC * (1000000.0 / (double) ((dev->type == AUDIOPCI_ES1370) ? WT_FREQ : SOUND_FREQ)));
} }
static const device_config_t es1370_config[] = { static const device_config_t es1370_config[] = {
@@ -2833,7 +2829,7 @@ const device_t es1370_device = {
.name = "Ensoniq AudioPCI (ES1370)", .name = "Ensoniq AudioPCI (ES1370)",
.internal_name = "es1370", .internal_name = "es1370",
.flags = DEVICE_PCI, .flags = DEVICE_PCI,
.local = 0, .local = AUDIOPCI_ES1370,
.init = es1370_init, .init = es1370_init,
.close = es137x_close, .close = es137x_close,
.reset = es137x_reset, .reset = es137x_reset,

View File

@@ -508,7 +508,6 @@ sb_get_music_buffer_sb16_awe32(int32_t *buffer, const int len, void *priv)
sb->opl.reset_buffer(sb->opl.priv); sb->opl.reset_buffer(sb->opl.priv);
} }
// TODO: Goldfinch
static void static void
sb_get_wavetable_buffer_goldfinch(int32_t *buffer, const int len, void *priv) sb_get_wavetable_buffer_goldfinch(int32_t *buffer, const int len, void *priv)
{ {
@@ -1416,7 +1415,7 @@ sb_ct1745_mixer_reset(sb_t *sb)
static void static void
ess_base_write(uint16_t addr, uint8_t val, void *priv) ess_base_write(uint16_t addr, uint8_t val, void *priv)
{ {
sb_t * ess = (sb_t *) priv; sb_t *ess = (sb_t *) priv;
switch (addr & 0x000f) { switch (addr & 0x000f) {
case 0x0002: case 0x0002:
@@ -1435,7 +1434,7 @@ ess_base_write(uint16_t addr, uint8_t val, void *priv)
static uint8_t static uint8_t
ess_base_read(uint16_t addr, void *priv) ess_base_read(uint16_t addr, void *priv)
{ {
sb_t * ess = (sb_t *) priv; sb_t *ess = (sb_t *) priv;
switch (addr & 0x000f) { switch (addr & 0x000f) {
case 0x0002: case 0x0002:
@@ -1462,7 +1461,7 @@ ess_base_read(uint16_t addr, void *priv)
static void static void
ess_fm_midi_write(uint16_t addr, uint8_t val, void *priv) ess_fm_midi_write(uint16_t addr, uint8_t val, void *priv)
{ {
sb_t * ess = (sb_t *) priv; sb_t *ess = (sb_t *) priv;
ess->dsp.activity &= 0x7f; ess->dsp.activity &= 0x7f;
} }
@@ -1470,7 +1469,7 @@ ess_fm_midi_write(uint16_t addr, uint8_t val, void *priv)
static uint8_t static uint8_t
ess_fm_midi_read(uint16_t addr, void *priv) ess_fm_midi_read(uint16_t addr, void *priv)
{ {
sb_t * ess = (sb_t *) priv; sb_t *ess = (sb_t *) priv;
ess->dsp.activity &= 0x7f; ess->dsp.activity &= 0x7f;
@@ -1586,12 +1585,18 @@ ess_mixer_write(uint16_t addr, uint8_t val, void *priv)
/* More compatibility: /* More compatibility:
SoundBlaster Pro selects register 020h for 030h, 022h for 032h, SoundBlaster Pro selects register 020h for 030h, 022h for 032h,
026h for 036h, and 028h for 038h. */ 026h for 036h, and 028h for 038h. */
case 0x30: case 0x32: case 0x36: case 0x38: case 0x30:
case 0x32:
case 0x36:
case 0x38:
case 0x3e: case 0x3e:
mixer->regs[mixer->index - 0x10] = (val & 0xee); mixer->regs[mixer->index - 0x10] = (val & 0xee);
break; break;
case 0x00: case 0x04: case 0x3a: case 0x3c: case 0x00:
case 0x04:
case 0x3a:
case 0x3c:
break; break;
case 0x64: case 0x64:
@@ -1625,7 +1630,8 @@ ess_mixer_write(uint16_t addr, uint8_t val, void *priv)
} }
} }
if (ess->mpu != NULL) switch ((mixer->regs[0x40] >> 5) & 0x7) { if (ess->mpu != NULL)
switch ((mixer->regs[0x40] >> 5) & 0x7) {
default: default:
break; break;
case 0: case 0:
@@ -1696,13 +1702,14 @@ ess_mixer_write(uint16_t addr, uint8_t val, void *priv)
uint8_t uint8_t
ess_mixer_read(uint16_t addr, void *priv) ess_mixer_read(uint16_t addr, void *priv)
{ {
const sb_t * ess = (sb_t *) priv; const sb_t *ess = (sb_t *) priv;
const ess_mixer_t *mixer = &ess->mixer_ess; const ess_mixer_t *mixer = &ess->mixer_ess;
uint8_t ret = 0x0a; uint8_t ret = 0x0a;
if (!(addr & 1)) if (!(addr & 1))
ret = mixer->index; ret = mixer->index;
else switch (mixer->index) { else
switch (mixer->index) {
case 0x00: case 0x00:
case 0x0a: case 0x0a:
case 0x0c: case 0x0c:
@@ -2811,7 +2818,7 @@ sb_1_init(UNUSED(const device_t *info))
2x0 to 2x3 -> CMS chip 2x0 to 2x3 -> CMS chip
2x6, 2xA, 2xC, 2xE -> DSP chip 2x6, 2xA, 2xC, 2xE -> DSP chip
2x8, 2x9, 388 and 389 FM chip */ 2x8, 2x9, 388 and 389 FM chip */
sb_t * sb = malloc(sizeof(sb_t)); sb_t *sb = malloc(sizeof(sb_t));
const uint16_t addr = device_get_config_hex16("base"); const uint16_t addr = device_get_config_hex16("base");
memset(sb, 0, sizeof(sb_t)); memset(sb, 0, sizeof(sb_t));
@@ -2862,7 +2869,7 @@ sb_15_init(UNUSED(const device_t *info))
2x0 to 2x3 -> CMS chip 2x0 to 2x3 -> CMS chip
2x6, 2xA, 2xC, 2xE -> DSP chip 2x6, 2xA, 2xC, 2xE -> DSP chip
2x8, 2x9, 388 and 389 FM chip */ 2x8, 2x9, 388 and 389 FM chip */
sb_t * sb = malloc(sizeof(sb_t)); sb_t *sb = malloc(sizeof(sb_t));
const uint16_t addr = device_get_config_hex16("base"); const uint16_t addr = device_get_config_hex16("base");
memset(sb, 0, sizeof(sb_t)); memset(sb, 0, sizeof(sb_t));
@@ -3447,7 +3454,6 @@ sb_vibra16xv_available(void)
return rom_present(PNP_ROM_SB_VIBRA16XV); return rom_present(PNP_ROM_SB_VIBRA16XV);
} }
static void * static void *
sb_vibra16_pnp_init(UNUSED(const device_t *info)) sb_vibra16_pnp_init(UNUSED(const device_t *info))
{ {
@@ -5584,7 +5590,6 @@ static const device_config_t ess_688_config[] = {
}, },
{ .name = "", .description = "", .type = CONFIG_END } { .name = "", .description = "", .type = CONFIG_END }
}; };
// clang-format on
static const device_config_t ess_1688_config[] = { static const device_config_t ess_1688_config[] = {
{ {
@@ -5722,7 +5727,6 @@ static const device_config_t ess_1688_config[] = {
}, },
{ .name = "", .description = "", .type = CONFIG_END } { .name = "", .description = "", .type = CONFIG_END }
}; };
// clang-format on
static const device_config_t ess_688_pnp_config[] = { static const device_config_t ess_688_pnp_config[] = {
{ {
@@ -5734,7 +5738,6 @@ static const device_config_t ess_688_pnp_config[] = {
}, },
{ .name = "", .description = "", .type = CONFIG_END } { .name = "", .description = "", .type = CONFIG_END }
}; };
// clang-format on
static const device_config_t ess_1688_pnp_config[] = { static const device_config_t ess_1688_pnp_config[] = {
{ {