summaryrefslogtreecommitdiff
path: root/src/core/mem_map_funcs.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2014-05-07 21:04:55 -0400
committerGravatar bunnei2014-05-07 21:04:55 -0400
commit72622a1b5a13083e1b4eda3d4584bfa2f04dc55c (patch)
tree1a230947b66fd7001c58f96a47f352532d64e4ec /src/core/mem_map_funcs.cpp
parentadded kernel memory to mem_map (diff)
downloadyuzu-72622a1b5a13083e1b4eda3d4584bfa2f04dc55c.tar.gz
yuzu-72622a1b5a13083e1b4eda3d4584bfa2f04dc55c.tar.xz
yuzu-72622a1b5a13083e1b4eda3d4584bfa2f04dc55c.zip
- removed HLE mem "hack" and replaced with kernel mem region
- added a helper function for getting command buffer for services - fixed bug where GSP DMA was incorrectly being done in DataSynchronizationBarrier (instead of gsp_TriggerCmdReqQueue)
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
-rw-r--r--src/core/mem_map_funcs.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index 4812a8d22..8ab647714 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -48,11 +48,9 @@ inline void _Read(T &var, const u32 addr) {
48 48
49 const u32 vaddr = _VirtualAddress(addr); 49 const u32 vaddr = _VirtualAddress(addr);
50 50
51 // Memory allocated for HLE use that can be addressed from the emulated application 51 // Kernel memory command buffer
52 // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE 52 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
53 // core running the user application (appcore) 53 var = *((const T*)&g_kernel_mem[vaddr & KERNEL_MEMORY_MASK]);
54 if (vaddr >= HLE::CMD_BUFFER_ADDR && vaddr < HLE::CMD_BUFFER_ADDR_END) {
55 HLE::Read<T>(var, vaddr);
56 54
57 // Hardware I/O register reads 55 // Hardware I/O register reads
58 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space 56 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space
@@ -92,11 +90,9 @@ template <typename T>
92inline void _Write(u32 addr, const T data) { 90inline void _Write(u32 addr, const T data) {
93 u32 vaddr = _VirtualAddress(addr); 91 u32 vaddr = _VirtualAddress(addr);
94 92
95 // Memory allocated for HLE use that can be addressed from the emulated application 93 // Kernel memory command buffer
96 // The primary use of this is sharing a commandbuffer between the HLE OS (syscore) and the LLE 94 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
97 // core running the user application (appcore) 95 *(T*)&g_kernel_mem[vaddr & KERNEL_MEMORY_MASK] = data;
98 if (vaddr >= HLE::CMD_BUFFER_ADDR && vaddr < HLE::CMD_BUFFER_ADDR_END) {
99 HLE::Write<T>(vaddr, data);
100 96
101 // Hardware I/O register writes 97 // Hardware I/O register writes
102 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space 98 // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space
@@ -140,8 +136,12 @@ inline void _Write(u32 addr, const T data) {
140u8 *GetPointer(const u32 addr) { 136u8 *GetPointer(const u32 addr) {
141 const u32 vaddr = _VirtualAddress(addr); 137 const u32 vaddr = _VirtualAddress(addr);
142 138
139 // Kernel memory command buffer
140 if (vaddr >= KERNEL_MEMORY_VADDR && vaddr < KERNEL_MEMORY_VADDR_END) {
141 return g_kernel_mem + (vaddr & KERNEL_MEMORY_MASK);
142
143 // ExeFS:/.code is loaded here 143 // ExeFS:/.code is loaded here
144 if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) { 144 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
145 return g_exefs_code + (vaddr & EXEFS_CODE_MASK); 145 return g_exefs_code + (vaddr & EXEFS_CODE_MASK);
146 146
147 // FCRAM - GSP heap 147 // FCRAM - GSP heap