Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix missing notes in musics with DSPHLE.
Tales of Symphonia and Skies of Arcadia Legends now have working musics with
DSPHLE. Some other games with the same symptoms (missing instruments) should
probably be fixed by that change too.
  • Loading branch information
delroth committed Nov 13, 2012
1 parent 8eb6f90 commit 1606029
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions Source/Core/Core/Src/HW/DSPHLE/UCodes/UCode_AX.cpp
Expand Up @@ -172,8 +172,6 @@ void CUCode_AX::MixAdd(short* _pBuffer, int _iSize)
if (!ReadPB(blockAddr, PB))
break;

ProcessUpdates(PB);

if (m_CRC != 0x3389a79e)
VoiceHacks(PB);

Expand Down Expand Up @@ -335,6 +333,24 @@ bool CUCode_AX::AXTask(u32& _uMail)
PBaddr[numPBaddr] = HLEMemory_Read_U32(uAddress);
numPBaddr++;

// HACK: process updates right now instead of waiting until
// Premix is called. Some games using sequenced music (Tales of
// Symphonia for example) thought PBs were unused because we
// were too slow to update them and set them as running. This
// happens because Premix is basically completely desync-ed
// from the emulation core (it's running in the audio thread).
// Fixing this would require rewriting most of the AX HLE.
u32 block_addr = uAddress;
AXPB pb;
while (block_addr)
{
if (!ReadPB(block_addr, pb))
break;
ProcessUpdates(pb);
WritePB(block_addr, pb);
block_addr = (pb.next_pb_hi << 16) | pb.next_pb_lo;
}

m_addressPBs = HLEMemory_Read_U32(uAddress); // left in for now
uAddress += 4;
soundStream->GetMixer()->SetHLEReady(true);
Expand Down

0 comments on commit 1606029

Please sign in to comment.