DSPLLE - AX PCM16 fix
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5191 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
3ccbd152fd
commit
34d1d7a41e
|
@ -133,17 +133,24 @@ u16 dsp_read_accelerator()
|
||||||
val = ADPCM_Step(Address);
|
val = ADPCM_Step(Address);
|
||||||
break;
|
break;
|
||||||
case 0x0A: // 16-bit PCM audio
|
case 0x0A: // 16-bit PCM audio
|
||||||
val = (DSPHost_ReadHostMemory(Address) << 8) | DSPHost_ReadHostMemory(Address + 1);
|
val = (DSPHost_ReadHostMemory(Address*2) << 8) | DSPHost_ReadHostMemory(Address*2 + 1);
|
||||||
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;
|
||||||
Address += 2;
|
Address += 1;
|
||||||
break;
|
break;
|
||||||
|
case 0x19: // 8-bit PCM audio
|
||||||
|
val = DSPHost_ReadHostMemory(Address) << 8; // probably wrong
|
||||||
|
g_dsp.ifx_regs[DSP_YN2] = g_dsp.ifx_regs[DSP_YN1];
|
||||||
|
g_dsp.ifx_regs[DSP_YN1] = val;
|
||||||
|
Address += 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ERROR_LOG(DSPLLE, "Unknown DSP Format %x", g_dsp.ifx_regs[DSP_FORMAT]);
|
ERROR_LOG(DSPLLE, "Unknown DSP Format %x", g_dsp.ifx_regs[DSP_FORMAT]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Take GAIN into account, whatever it is.
|
// TODO: Take GAIN into account, whatever it is.
|
||||||
|
// It looks like its always 0x800 for PCM8/PCM16 and 0x0 for adpcm
|
||||||
if (g_dsp.ifx_regs[DSP_GAIN] > 0)
|
if (g_dsp.ifx_regs[DSP_GAIN] > 0)
|
||||||
{
|
{
|
||||||
//NOTICE_LOG(DSPLLE,"format: 0x%04x - val: 0x%04x - gain: 0x%04x", g_dsp.ifx_regs[DSP_FORMAT], val, g_dsp.ifx_regs[DSP_GAIN]);
|
//NOTICE_LOG(DSPLLE,"format: 0x%04x - val: 0x%04x - gain: 0x%04x", g_dsp.ifx_regs[DSP_FORMAT], val, g_dsp.ifx_regs[DSP_GAIN]);
|
||||||
|
|
|
@ -73,7 +73,7 @@ u16 ReadCR()
|
||||||
|
|
||||||
void Step()
|
void Step()
|
||||||
{
|
{
|
||||||
DSPCore_CheckExternalInterrupt();
|
//DSPCore_CheckExternalInterrupt();
|
||||||
DSPCore_CheckExceptions();
|
DSPCore_CheckExceptions();
|
||||||
|
|
||||||
g_dsp.step_counter++;
|
g_dsp.step_counter++;
|
||||||
|
@ -109,7 +109,7 @@ void Run()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// This number (500) is completely arbitrary. TODO: tweak.
|
// This number (500) is completely arbitrary. TODO: tweak.
|
||||||
RunCyclesDebug(500);
|
RunCycles(500);
|
||||||
|
|
||||||
if (!gdsp_running)
|
if (!gdsp_running)
|
||||||
break;
|
break;
|
||||||
|
@ -136,9 +136,9 @@ int RunCyclesDebug(int cycles)
|
||||||
if (cycles < 0)
|
if (cycles < 0)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//DSPCore_CheckExternalInterrupt();
|
|
||||||
|
|
||||||
|
DSPCore_CheckExternalInterrupt();
|
||||||
|
|
||||||
// Now, let's run a few cycles with idle skipping.
|
// Now, let's run a few cycles with idle skipping.
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
|
@ -177,8 +177,6 @@ int RunCyclesDebug(int cycles)
|
||||||
// Used by non-thread mode. Meant to be efficient.
|
// Used by non-thread mode. Meant to be efficient.
|
||||||
int RunCycles(int cycles)
|
int RunCycles(int cycles)
|
||||||
{
|
{
|
||||||
//DSPCore_CheckExternalInterrupt();
|
|
||||||
|
|
||||||
// First, let's run a few cycles with no idle skipping so that things can progress a bit.
|
// First, let's run a few cycles with no idle skipping so that things can progress a bit.
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
|
@ -188,6 +186,8 @@ int RunCycles(int cycles)
|
||||||
cycles--;
|
cycles--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DSPCore_CheckExternalInterrupt();
|
||||||
|
|
||||||
// Next, let's run a few cycles with idle skipping, so that we can skip
|
// Next, let's run a few cycles with idle skipping, so that we can skip
|
||||||
// idle loops.
|
// idle loops.
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
|
|
Loading…
Reference in New Issue