SPU: block reads from ARM7 BIOS region. fixes #1267 (and prolly whatever other stupid game tries to play sound from NULL)

This commit is contained in:
Arisotura 2021-11-25 16:49:43 +01:00
parent c04e43702c
commit 44757a8323
2 changed files with 20 additions and 6 deletions

View File

@ -2516,7 +2516,7 @@ u32 ARM7Read32(u32 addr)
(GBACart::SRAMRead(addr+3) << 24); (GBACart::SRAMRead(addr+3) << 24);
} }
printf("unknown arm7 read32 %08X | %08X\n", addr, ARM7->R[15]); //printf("unknown arm7 read32 %08X | %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }

View File

@ -285,12 +285,26 @@ void Channel::FIFO_BufferData()
if ((FIFOReadOffset + 16) > totallen) if ((FIFOReadOffset + 16) > totallen)
burstlen = totallen - FIFOReadOffset; burstlen = totallen - FIFOReadOffset;
for (u32 i = 0; i < burstlen; i += 4) // sound DMA can't read from the ARM7 BIOS
if ((SrcAddr + FIFOReadOffset) >= 0x00004000)
{ {
FIFO[FIFOWritePos] = BusRead32(SrcAddr + FIFOReadOffset); for (u32 i = 0; i < burstlen; i += 4)
FIFOReadOffset += 4; {
FIFOWritePos++; FIFO[FIFOWritePos] = BusRead32(SrcAddr + FIFOReadOffset);
FIFOWritePos &= 0x7; FIFOReadOffset += 4;
FIFOWritePos++;
FIFOWritePos &= 0x7;
}
}
else
{
for (u32 i = 0; i < burstlen; i += 4)
{
FIFO[FIFOWritePos] = 0;
FIFOReadOffset += 4;
FIFOWritePos++;
FIFOWritePos &= 0x7;
}
} }
FIFOLevel += burstlen; FIFOLevel += burstlen;