mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	added virtual address conversion for firmware FW0B
This commit is contained in:
		
							parent
							
								
									535947a0e1
								
							
						
					
					
						commit
						af921daa4c
					
				
					 2 changed files with 11 additions and 5 deletions
				
			
		|  | @ -47,6 +47,8 @@ enum { | ||||||
|     FCRAM_PADDR_END         = (FCRAM_PADDR + FCRAM_SIZE),       ///< FCRAM end of physical space
 |     FCRAM_PADDR_END         = (FCRAM_PADDR + FCRAM_SIZE),       ///< FCRAM end of physical space
 | ||||||
|     FCRAM_VADDR             = 0x08000000,                       ///< FCRAM virtual address
 |     FCRAM_VADDR             = 0x08000000,                       ///< FCRAM virtual address
 | ||||||
|     FCRAM_VADDR_END         = (FCRAM_VADDR + FCRAM_SIZE),       ///< FCRAM end of virtual space
 |     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_PADDR       = 0x10000000,                       ///< IO physical address start
 | ||||||
|     HARDWARE_IO_VADDR       = 0x1EC00000,                       ///< IO virtual 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_heap_gsp_map; | ||||||
| std::map<u32, MemoryBlock> g_shared_map; | std::map<u32, MemoryBlock> g_shared_map; | ||||||
| 
 | 
 | ||||||
| /// Convert a physical address to virtual address
 | /// Convert a physical address (or firmware-specific virtual address) to primary virtual address
 | ||||||
| u32 _AddressPhysicalToVirtual(const u32 addr) { | u32 _VirtualAddress(const u32 addr) { | ||||||
|     // Our memory interface read/write functions assume virtual addresses. Put any physical address 
 |     // 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 
 |     // to virtual address translations here. This is obviously quite hacky... But we're not doing 
 | ||||||
|     // any MMU emulation yet or anything
 |     // any MMU emulation yet or anything
 | ||||||
|     if ((addr >= FCRAM_PADDR) && (addr < FCRAM_PADDR_END)) { |     if ((addr >= FCRAM_PADDR) && (addr < FCRAM_PADDR_END)) { | ||||||
|         return VirtualAddressFromPhysical_FCRAM(addr); |         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
 |     // Hardware IO
 | ||||||
|     // TODO(bunnei): FixMe
 |     // TODO(bunnei): FixMe
 | ||||||
|     // This isn't going to work... The physical address of HARDWARE_IO conflicts with the virtual 
 |     // 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.
 |     // TODO: Make sure this represents the mirrors in a correct way.
 | ||||||
|     // Could just do a base-relative read, too.... TODO
 |     // 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
 |     // 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
 |     // 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> | template <typename T> | ||||||
| inline void _Write(u32 addr, const T data) { | 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
 |     // 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
 |     // 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) { | u8 *GetPointer(const u32 addr) { | ||||||
|     const u32 vaddr = _AddressPhysicalToVirtual(addr); |     const u32 vaddr = _VirtualAddress(addr); | ||||||
| 
 | 
 | ||||||
|     // FCRAM - GSP heap
 |     // FCRAM - GSP heap
 | ||||||
|     if ((vaddr >= HEAP_GSP_VADDR)  && (vaddr < HEAP_GSP_VADDR_END)) { |     if ((vaddr >= HEAP_GSP_VADDR)  && (vaddr < HEAP_GSP_VADDR_END)) { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue