pvr: mask low address bits according to 32-bit vram access size

Avoid crash when accessing the very last vram byte with short or int.
Correct behavior should be to raise an sh4 address exception.
Fixes MINIDUMP-N2
This commit is contained in:
Flyinghead 2023-03-24 11:53:38 +01:00
parent f2f8f3ccd2
commit 068861d0cc
1 changed files with 2 additions and 1 deletions

View File

@ -202,7 +202,7 @@ void YUV_deserialize(Deserializer& deser)
template<typename T>
T DYNACALL pvr_read32p(u32 addr)
{
return *(T *)&vram[pvr_map32(addr)];
return *(T *)&vram[pvr_map32(addr) & ~(sizeof(T) - 1)];
}
template u8 pvr_read32p<u8>(u32 addr);
template u16 pvr_read32p<u16>(u32 addr);
@ -218,6 +218,7 @@ void DYNACALL pvr_write32p(u32 addr, T data)
INFO_LOG(MEMORY, "%08x: 8-bit VRAM writes are not possible", addr);
return;
}
addr &= ~(sizeof(T) - 1);
u32 vaddr = addr & VRAM_MASK;
if (vaddr >= fb_watch_addr_start && vaddr < fb_watch_addr_end)
fb_dirty = true;