SPU: delay channel start until whenever it can actually start. fixes maxmod interpolated mode.
This commit is contained in:
parent
3827fa562f
commit
2f9a6b7c03
|
@ -493,7 +493,7 @@ void Reset()
|
|||
printf("ARM7 BIOS loaded\n");
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
||||
#ifdef JIT_ENABLED
|
||||
ARMJIT::Reset();
|
||||
#endif
|
||||
|
|
|
@ -160,6 +160,8 @@ void Channel::Reset()
|
|||
else
|
||||
BusRead32 = NDS::ARM7Read32;
|
||||
|
||||
KeyOn = false;
|
||||
|
||||
SetCnt(0);
|
||||
SrcAddr = 0;
|
||||
TimerReload = 0;
|
||||
|
@ -187,6 +189,7 @@ void Channel::DoSavestate(Savestate* file)
|
|||
file->Var8(&VolumeShift);
|
||||
file->Var8(&Pan);
|
||||
|
||||
file->Var8((u8*)&KeyOn);
|
||||
file->Var32(&Timer);
|
||||
file->Var32((u32*)&Pos);
|
||||
file->Var16((u16*)&CurSample);
|
||||
|
@ -417,6 +420,12 @@ void Channel::Run(s32* buf, u32 samples)
|
|||
{
|
||||
if (!(Cnt & (1<<31))) return;
|
||||
|
||||
if (KeyOn)
|
||||
{
|
||||
Start();
|
||||
KeyOn = false;
|
||||
}
|
||||
|
||||
for (u32 s = 0; s < samples; s++)
|
||||
{
|
||||
Timer += 512; // 1 sample = 512 cycles at 16MHz
|
||||
|
|
Loading…
Reference in New Issue