Memory: convert PAddr for N3DS FCRAM extension

This commit is contained in:
Weiyi Wang 2018-11-09 10:40:04 -05:00
parent 2654a679b3
commit d0edb81182

View File

@ -322,9 +322,13 @@ u8* GetPhysicalPointer(PAddr address) {
static std::vector<VAddr> PhysicalToVirtualAddressForRasterizer(PAddr addr) { static std::vector<VAddr> PhysicalToVirtualAddressForRasterizer(PAddr addr) {
if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) {
return {addr - VRAM_PADDR + VRAM_VADDR}; return {addr - VRAM_PADDR + VRAM_VADDR};
} else if (addr >= FCRAM_PADDR && addr < FCRAM_PADDR_END) { }
if (addr >= FCRAM_PADDR && addr < FCRAM_PADDR_END) {
return {addr - FCRAM_PADDR + LINEAR_HEAP_VADDR, addr - FCRAM_PADDR + NEW_LINEAR_HEAP_VADDR}; return {addr - FCRAM_PADDR + LINEAR_HEAP_VADDR, addr - FCRAM_PADDR + NEW_LINEAR_HEAP_VADDR};
} else { }
if (addr >= FCRAM_PADDR_END && addr < FCRAM_N3DS_PADDR_END) {
return {addr - FCRAM_PADDR + NEW_LINEAR_HEAP_VADDR};
}
// While the physical <-> virtual mapping is 1:1 for the regions supported by the cache, // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache,
// some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond
// the end address of VRAM, causing the Virtual->Physical translation to fail when flushing // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing
@ -332,7 +336,6 @@ static std::vector<VAddr> PhysicalToVirtualAddressForRasterizer(PAddr addr) {
LOG_ERROR(HW_Memory, "Trying to use invalid physical address for rasterizer: {:08X}", addr); LOG_ERROR(HW_Memory, "Trying to use invalid physical address for rasterizer: {:08X}", addr);
return {}; return {};
} }
}
void RasterizerMarkRegionCached(PAddr start, u32 size, bool cached) { void RasterizerMarkRegionCached(PAddr start, u32 size, bool cached) {
if (start == 0) { if (start == 0) {