mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge commit upstream/master into issue-7-fix
This commit is contained in:
		
						commit
						237d079aad
					
				
					 5 changed files with 29 additions and 7 deletions
				
			
		|  | @ -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)) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue