Fixed direction of AudioPCI sample counters. Fixes stuttering MIDI in some games (eg Theme Hospital).
This commit is contained in:
parent
a5b59efb3f
commit
803b48ea1c
1 changed files with 8 additions and 14 deletions
|
|
@ -47,7 +47,8 @@ typedef struct es1371_t
|
||||||
uint32_t addr, addr_latch;
|
uint32_t addr, addr_latch;
|
||||||
uint16_t count, size;
|
uint16_t count, size;
|
||||||
|
|
||||||
uint16_t samp_ct, curr_samp_ct;
|
uint16_t samp_ct;
|
||||||
|
int curr_samp_ct;
|
||||||
|
|
||||||
pc_timer_t timer;
|
pc_timer_t timer;
|
||||||
uint64_t latch;
|
uint64_t latch;
|
||||||
|
|
@ -579,8 +580,6 @@ static void es1371_outl(uint16_t port, uint32_t val, void *p)
|
||||||
case 0xc:
|
case 0xc:
|
||||||
es1371->dac[0].size = val & 0xffff;
|
es1371->dac[0].size = val & 0xffff;
|
||||||
es1371->dac[0].count = val >> 16;
|
es1371->dac[0].count = val >> 16;
|
||||||
if (es1371->dac[0].count)
|
|
||||||
es1371->dac[0].count -= 4;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xd:
|
case 0xd:
|
||||||
|
|
@ -1101,16 +1100,13 @@ static void es1371_poll(void *p)
|
||||||
es1371_next_sample_filtered(es1371, 0, es1371->dac[0].f_pos ? 16 : 0);
|
es1371_next_sample_filtered(es1371, 0, es1371->dac[0].f_pos ? 16 : 0);
|
||||||
es1371->dac[0].f_pos = (es1371->dac[0].f_pos + 1) & 1;
|
es1371->dac[0].f_pos = (es1371->dac[0].f_pos + 1) & 1;
|
||||||
|
|
||||||
es1371->dac[0].curr_samp_ct++;
|
es1371->dac[0].curr_samp_ct--;
|
||||||
if (es1371->dac[0].curr_samp_ct == es1371->dac[0].samp_ct)
|
if (es1371->dac[0].curr_samp_ct < 0)
|
||||||
{
|
{
|
||||||
// pclog("DAC1 IRQ\n");
|
// pclog("DAC1 IRQ\n");
|
||||||
es1371->int_status |= INT_STATUS_DAC1;
|
es1371->int_status |= INT_STATUS_DAC1;
|
||||||
es1371_update_irqs(es1371);
|
es1371_update_irqs(es1371);
|
||||||
}
|
es1371->dac[0].curr_samp_ct = es1371->dac[0].samp_ct;
|
||||||
if (es1371->dac[0].curr_samp_ct > es1371->dac[0].samp_ct)
|
|
||||||
{
|
|
||||||
es1371->dac[0].curr_samp_ct = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1134,16 +1130,14 @@ static void es1371_poll(void *p)
|
||||||
es1371_next_sample_filtered(es1371, 1, es1371->dac[1].f_pos ? 16 : 0);
|
es1371_next_sample_filtered(es1371, 1, es1371->dac[1].f_pos ? 16 : 0);
|
||||||
es1371->dac[1].f_pos = (es1371->dac[1].f_pos + 1) & 1;
|
es1371->dac[1].f_pos = (es1371->dac[1].f_pos + 1) & 1;
|
||||||
|
|
||||||
es1371->dac[1].curr_samp_ct++;
|
es1371->dac[1].curr_samp_ct--;
|
||||||
if (es1371->dac[1].curr_samp_ct == es1371->dac[1].samp_ct)
|
if (es1371->dac[1].curr_samp_ct < 0)
|
||||||
{
|
{
|
||||||
// es1371->dac[1].curr_samp_ct = 0;
|
|
||||||
// pclog("DAC2 IRQ\n");
|
// pclog("DAC2 IRQ\n");
|
||||||
es1371->int_status |= INT_STATUS_DAC2;
|
es1371->int_status |= INT_STATUS_DAC2;
|
||||||
es1371_update_irqs(es1371);
|
es1371_update_irqs(es1371);
|
||||||
|
es1371->dac[1].curr_samp_ct = es1371->dac[1].samp_ct;
|
||||||
}
|
}
|
||||||
if (es1371->dac[1].curr_samp_ct > es1371->dac[1].samp_ct)
|
|
||||||
es1371->dac[1].curr_samp_ct = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue