Corrected the step size bytes for the start of the DSP accelerator chunk. Patch by hk.konpie

This commit is contained in:
skidau 2014-10-13 22:10:14 +11:00
parent 711a8aa6ad
commit 32dbdbe92f
2 changed files with 12 additions and 11 deletions

View File

@ -15,7 +15,7 @@ static s16 ADPCM_Step(u32& _rSamplePos)
{ {
const s16 *pCoefTable = (const s16 *)&g_dsp.ifx_regs[DSP_COEF_A1_0]; const s16 *pCoefTable = (const s16 *)&g_dsp.ifx_regs[DSP_COEF_A1_0];
if (((_rSamplePos)& 15) == 0) if ((_rSamplePos & 15) == 0)
{ {
g_dsp.ifx_regs[DSP_PRED_SCALE] = DSPHost::ReadHostMemory((_rSamplePos & ~15) >> 1); g_dsp.ifx_regs[DSP_PRED_SCALE] = DSPHost::ReadHostMemory((_rSamplePos & ~15) >> 1);
_rSamplePos += 2; _rSamplePos += 2;
@ -122,10 +122,10 @@ u16 dsp_read_accelerator()
switch (g_dsp.ifx_regs[DSP_FORMAT]) switch (g_dsp.ifx_regs[DSP_FORMAT])
{ {
case 0x00: // ADPCM audio case 0x00: // ADPCM audio
if ((Address & 15) == 0) if ((EndAddress & 15) == 0)
step_size_bytes = 2;
else
step_size_bytes = 1; step_size_bytes = 1;
else
step_size_bytes = 2;
val = ADPCM_Step(Address); val = ADPCM_Step(Address);
break; break;
case 0x0A: // 16-bit PCM audio case 0x0A: // 16-bit PCM audio
@ -139,12 +139,12 @@ u16 dsp_read_accelerator()
val = DSPHost::ReadHostMemory(Address) << 8; val = DSPHost::ReadHostMemory(Address) << 8;
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1]; g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
g_dsp.ifx_regs[DSP_YN1] = val; g_dsp.ifx_regs[DSP_YN1] = val;
step_size_bytes = 1; step_size_bytes = 2;
Address++; Address++;
break; break;
default: default:
ERROR_LOG(DSPLLE, "dsp_read_accelerator() - unknown format 0x%x", g_dsp.ifx_regs[DSP_FORMAT]); ERROR_LOG(DSPLLE, "dsp_read_accelerator() - unknown format 0x%x", g_dsp.ifx_regs[DSP_FORMAT]);
step_size_bytes = 1; step_size_bytes = 2;
Address++; Address++;
val = 0; val = 0;
break; break;

View File

@ -163,13 +163,14 @@ u16 AcceleratorGetSample()
if ((*acc_cur_addr & 15) == 0) if ((*acc_cur_addr & 15) == 0)
{ {
acc_pb->adpcm.pred_scale = DSP::ReadARAM((*acc_cur_addr & ~15) >> 1); acc_pb->adpcm.pred_scale = DSP::ReadARAM((*acc_cur_addr & ~15) >> 1);
step_size_bytes = 2;
*acc_cur_addr += 2; *acc_cur_addr += 2;
} }
else
{ if ((acc_end_addr & 15) == 0)
step_size_bytes = 1; step_size_bytes = 1;
} else
step_size_bytes = 2;
int scale = 1 << (acc_pb->adpcm.pred_scale & 0xF); int scale = 1 << (acc_pb->adpcm.pred_scale & 0xF);
int coef_idx = (acc_pb->adpcm.pred_scale >> 4) & 0x7; int coef_idx = (acc_pb->adpcm.pred_scale >> 4) & 0x7;
@ -205,7 +206,7 @@ u16 AcceleratorGetSample()
ret = DSP::ReadARAM(*acc_cur_addr) << 8; ret = DSP::ReadARAM(*acc_cur_addr) << 8;
acc_pb->adpcm.yn2 = acc_pb->adpcm.yn1; acc_pb->adpcm.yn2 = acc_pb->adpcm.yn1;
acc_pb->adpcm.yn1 = ret; acc_pb->adpcm.yn1 = ret;
step_size_bytes = 1; step_size_bytes = 2;
*acc_cur_addr += 1; *acc_cur_addr += 1;
break; break;