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:
@@ -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
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
@@ -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:
|
||||||
@@ -1702,7 +1708,8 @@ ess_mixer_read(uint16_t addr, void *priv)
|
|||||||
|
|
||||||
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:
|
||||||
@@ -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[] = {
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user