added virtual address conversion for firmware FW0B
This commit is contained in:
		| @@ -47,6 +47,8 @@ enum { | ||||
|     FCRAM_PADDR_END         = (FCRAM_PADDR + FCRAM_SIZE),       ///< FCRAM end of physical space | ||||
|     FCRAM_VADDR             = 0x08000000,                       ///< FCRAM virtual address | ||||
|     FCRAM_VADDR_END         = (FCRAM_VADDR + FCRAM_SIZE),       ///< FCRAM end of virtual space | ||||
|     FRAM_VADDR_FW0B         = 0xF0000000,                       ///< FCRAM adress for firmare FW0B | ||||
|     FRAM_VADDR_FW0B_END     = (FRAM_VADDR_FW0B + FCRAM_SIZE),   ///< FCRAM adress end for FW0B | ||||
|  | ||||
|     HARDWARE_IO_PADDR       = 0x10000000,                       ///< IO physical address start | ||||
|     HARDWARE_IO_VADDR       = 0x1EC00000,                       ///< IO virtual address start | ||||
|   | ||||
| @@ -16,14 +16,18 @@ std::map<u32, MemoryBlock> g_heap_map; | ||||
| std::map<u32, MemoryBlock> g_heap_gsp_map; | ||||
| std::map<u32, MemoryBlock> g_shared_map; | ||||
|  | ||||
| /// Convert a physical address to virtual address | ||||
| u32 _AddressPhysicalToVirtual(const u32 addr) { | ||||
| /// Convert a physical address (or firmware-specific virtual address) to primary virtual address | ||||
| u32 _VirtualAddress(const u32 addr) { | ||||
|     // Our memory interface read/write functions assume virtual addresses. Put any physical address  | ||||
|     // to virtual address translations here. This is obviously quite hacky... But we're not doing  | ||||
|     // any MMU emulation yet or anything | ||||
|     if ((addr >= FCRAM_PADDR) && (addr < FCRAM_PADDR_END)) { | ||||
|         return VirtualAddressFromPhysical_FCRAM(addr); | ||||
|  | ||||
|     // Virtual address mapping FW0B | ||||
|     } else if ((addr >= FRAM_VADDR_FW0B) && (addr < FRAM_VADDR_FW0B_END)) { | ||||
|         return VirtualAddressFromPhysical_FCRAM(addr); | ||||
|  | ||||
|     // Hardware IO | ||||
|     // TODO(bunnei): FixMe | ||||
|     // This isn't going to work... The physical address of HARDWARE_IO conflicts with the virtual  | ||||
| @@ -41,7 +45,7 @@ inline void _Read(T &var, const u32 addr) { | ||||
|     // TODO: Make sure this represents the mirrors in a correct way. | ||||
|     // Could just do a base-relative read, too.... TODO | ||||
|  | ||||
|     const u32 vaddr = _AddressPhysicalToVirtual(addr); | ||||
|     const u32 vaddr = _VirtualAddress(addr); | ||||
|      | ||||
|     // Memory allocated for HLE use that can be addressed from the emulated application | ||||
|     // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE | ||||
| @@ -77,7 +81,7 @@ inline void _Read(T &var, const u32 addr) { | ||||
|  | ||||
| template <typename T> | ||||
| inline void _Write(u32 addr, const T data) { | ||||
|     u32 vaddr = _AddressPhysicalToVirtual(addr); | ||||
|     u32 vaddr = _VirtualAddress(addr); | ||||
|      | ||||
|     // Memory allocated for HLE use that can be addressed from the emulated application | ||||
|     // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE | ||||
| @@ -121,7 +125,7 @@ inline void _Write(u32 addr, const T data) { | ||||
| } | ||||
|  | ||||
| u8 *GetPointer(const u32 addr) { | ||||
|     const u32 vaddr = _AddressPhysicalToVirtual(addr); | ||||
|     const u32 vaddr = _VirtualAddress(addr); | ||||
|  | ||||
|     // FCRAM - GSP heap | ||||
|     if ((vaddr >= HEAP_GSP_VADDR)  && (vaddr < HEAP_GSP_VADDR_END)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei