diff options
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index f96ae6e9e..a8e0fed07 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -18,40 +18,40 @@ namespace Memory { | |||
| 18 | static std::map<u32, MemoryBlock> heap_map; | 18 | static std::map<u32, MemoryBlock> heap_map; |
| 19 | static std::map<u32, MemoryBlock> heap_linear_map; | 19 | static std::map<u32, MemoryBlock> heap_linear_map; |
| 20 | 20 | ||
| 21 | /// Convert a physical address to virtual address | 21 | PAddr VirtualToPhysicalAddress(const VAddr addr) { |
| 22 | VAddr PhysicalToVirtualAddress(const PAddr addr) { | ||
| 23 | // Our memory interface read/write functions assume virtual addresses. Put any physical address | ||
| 24 | // to virtual address translations here. This is quite hacky, but necessary until we implement | ||
| 25 | // proper MMU emulation. | ||
| 26 | // TODO: Screw it, I'll let bunnei figure out how to do this properly. | ||
| 27 | if (addr == 0) { | 22 | if (addr == 0) { |
| 28 | return 0; | 23 | return 0; |
| 29 | } else if ((addr >= VRAM_PADDR) && (addr < VRAM_PADDR_END)) { | 24 | } else if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) { |
| 30 | return addr - VRAM_PADDR + VRAM_VADDR; | 25 | return addr - VRAM_VADDR + VRAM_PADDR; |
| 31 | } else if ((addr >= FCRAM_PADDR) && (addr < FCRAM_PADDR_END)) { | 26 | } else if (addr >= LINEAR_HEAP_VADDR && addr < LINEAR_HEAP_VADDR_END) { |
| 32 | return addr - FCRAM_PADDR + LINEAR_HEAP_VADDR; | 27 | return addr - LINEAR_HEAP_VADDR + FCRAM_PADDR; |
| 28 | } else if (addr >= DSP_RAM_VADDR && addr < DSP_RAM_VADDR_END) { | ||
| 29 | return addr - DSP_RAM_VADDR + DSP_RAM_PADDR; | ||
| 30 | } else if (addr >= IO_AREA_VADDR && addr < IO_AREA_VADDR_END) { | ||
| 31 | return addr - IO_AREA_VADDR + IO_AREA_PADDR; | ||
| 33 | } | 32 | } |
| 34 | 33 | ||
| 35 | LOG_ERROR(HW_Memory, "Unknown physical address @ 0x%08x", addr); | 34 | LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08x", addr); |
| 36 | return addr; | 35 | // To help with debugging, set bit on address so that it's obviously invalid. |
| 36 | return addr | 0x80000000; | ||
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | /// Convert a physical address to virtual address | 39 | VAddr PhysicalToVirtualAddress(const PAddr addr) { |
| 40 | PAddr VirtualToPhysicalAddress(const VAddr addr) { | ||
| 41 | // Our memory interface read/write functions assume virtual addresses. Put any physical address | ||
| 42 | // to virtual address translations here. This is quite hacky, but necessary until we implement | ||
| 43 | // proper MMU emulation. | ||
| 44 | // TODO: Screw it, I'll let bunnei figure out how to do this properly. | ||
| 45 | if (addr == 0) { | 40 | if (addr == 0) { |
| 46 | return 0; | 41 | return 0; |
| 47 | } else if ((addr >= VRAM_VADDR) && (addr < VRAM_VADDR_END)) { | 42 | } else if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { |
| 48 | return addr - VRAM_VADDR + VRAM_PADDR; | 43 | return addr - VRAM_PADDR + VRAM_VADDR; |
| 49 | } else if ((addr >= LINEAR_HEAP_VADDR) && (addr < LINEAR_HEAP_VADDR_END)) { | 44 | } else if (addr >= FCRAM_PADDR && addr < FCRAM_PADDR_END) { |
| 50 | return addr - LINEAR_HEAP_VADDR + FCRAM_PADDR; | 45 | return addr - FCRAM_PADDR + LINEAR_HEAP_VADDR; |
| 46 | } else if (addr >= DSP_RAM_PADDR && addr < DSP_RAM_PADDR_END) { | ||
| 47 | return addr - DSP_RAM_PADDR + DSP_RAM_VADDR; | ||
| 48 | } else if (addr >= IO_AREA_PADDR && addr < IO_AREA_PADDR_END) { | ||
| 49 | return addr - IO_AREA_PADDR + IO_AREA_VADDR; | ||
| 51 | } | 50 | } |
| 52 | 51 | ||
| 53 | LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08x", addr); | 52 | LOG_ERROR(HW_Memory, "Unknown physical address @ 0x%08x", addr); |
| 54 | return addr; | 53 | // To help with debugging, set bit on address so that it's obviously invalid. |
| 54 | return addr | 0x80000000; | ||
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | template <typename T> | 57 | template <typename T> |