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:
Marko Pusljar 2010-03-13 02:28:21 +00:00
parent 3ccbd152fd
commit 34d1d7a41e
2 changed files with 15 additions and 8 deletions

View File

@ -133,17 +133,24 @@ u16 dsp_read_accelerator()
val = ADPCM_Step(Address);
break;
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_YN1] = val;
Address += 2;
Address += 1;
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:
ERROR_LOG(DSPLLE, "Unknown DSP Format %x", g_dsp.ifx_regs[DSP_FORMAT]);
break;
}
// 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)
{
//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]);

View File

@ -73,7 +73,7 @@ u16 ReadCR()
void Step()
{
DSPCore_CheckExternalInterrupt();
//DSPCore_CheckExternalInterrupt();
DSPCore_CheckExceptions();
g_dsp.step_counter++;
@ -109,7 +109,7 @@ void Run()
break;
// This number (500) is completely arbitrary. TODO: tweak.
RunCyclesDebug(500);
RunCycles(500);
if (!gdsp_running)
break;
@ -136,9 +136,9 @@ int RunCyclesDebug(int cycles)
if (cycles < 0)
return 0;
}
//DSPCore_CheckExternalInterrupt();
DSPCore_CheckExternalInterrupt();
// Now, let's run a few cycles with idle skipping.
for (int i = 0; i < 8; i++)
{
@ -177,8 +177,6 @@ int RunCyclesDebug(int cycles)
// Used by non-thread mode. Meant to be efficient.
int RunCycles(int cycles)
{
//DSPCore_CheckExternalInterrupt();
// 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++)
{
@ -188,6 +186,8 @@ int RunCycles(int cycles)
cycles--;
}
DSPCore_CheckExternalInterrupt();
// Next, let's run a few cycles with idle skipping, so that we can skip
// idle loops.
for (int i = 0; i < 8; i++)