From d5049cbba53d242b8461859fd02000b294164e77 Mon Sep 17 00:00:00 2001
From: purpasmart96 <kanzoconfigz@hotmail.com>
Date: Mon, 29 Dec 2014 19:35:06 -0800
Subject: [PATCH] MemMap: Add support for DSP Read & Writes in the memory map

---
 src/core/mem_map.cpp       |  3 +++
 src/core/mem_map.h         |  1 +
 src/core/mem_map_funcs.cpp | 10 ++++++++--
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp
index eea6c5bf13..a14e8303ec 100644
--- a/src/core/mem_map.cpp
+++ b/src/core/mem_map.cpp
@@ -21,6 +21,7 @@ u8* g_heap                      = nullptr;   ///< Application heap (main memory)
 u8* g_heap_linear               = nullptr;   ///< Linear heap
 u8* g_vram                      = nullptr;   ///< Video memory (VRAM) pointer
 u8* g_shared_mem                = nullptr;   ///< Shared memory
+u8* g_dsp_mem                   = nullptr;   ///< DSP memory
 u8* g_kernel_mem;                              ///< Kernel memory
 
 static u8* physical_bootrom     = nullptr;   ///< Bootrom physical memory
@@ -32,6 +33,7 @@ static u8* physical_fcram       = nullptr;   ///< Main physical memory (FCRAM)
 static u8* physical_heap_gsp    = nullptr;   ///< GSP heap physical memory
 static u8* physical_vram        = nullptr;   ///< Video physical memory (VRAM)
 static u8* physical_shared_mem  = nullptr;   ///< Physical shared memory
+static u8* physical_dsp_mem     = nullptr;   ///< Physical DSP memory
 static u8* physical_kernel_mem;              ///< Kernel memory
 
 // We don't declare the IO region in here since its handled by other means.
@@ -41,6 +43,7 @@ static MemoryView g_views[] = {
     {&g_heap,           &physical_fcram,        HEAP_VADDR,             HEAP_SIZE,          MV_IS_PRIMARY_RAM},
     {&g_shared_mem,     &physical_shared_mem,   SHARED_MEMORY_VADDR,    SHARED_MEMORY_SIZE, 0},
     {&g_system_mem,     &physical_system_mem,   SYSTEM_MEMORY_VADDR,    SYSTEM_MEMORY_SIZE, 0},
+    {&g_dsp_mem,        &physical_dsp_mem,      DSP_MEMORY_VADDR,       DSP_MEMORY_SIZE,    0},
     {&g_kernel_mem,     &physical_kernel_mem,   KERNEL_MEMORY_VADDR,    KERNEL_MEMORY_SIZE, 0},
     {&g_heap_linear,    &physical_heap_gsp,     HEAP_LINEAR_VADDR,      HEAP_LINEAR_SIZE,   0},
 };
diff --git a/src/core/mem_map.h b/src/core/mem_map.h
index a2ef9d3afe..fad40ae0ce 100644
--- a/src/core/mem_map.h
+++ b/src/core/mem_map.h
@@ -134,6 +134,7 @@ extern u8* g_heap;          ///< Application heap (main memory)
 extern u8* g_vram;          ///< Video memory (VRAM)
 extern u8* g_shared_mem;    ///< Shared memory
 extern u8* g_kernel_mem;    ///< Kernel memory
+extern u8* g_dsp_mem;       ///< DSP memory
 extern u8* g_system_mem;    ///< System memory
 extern u8* g_exefs_code;    ///< ExeFS:/.code is loaded here
 
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index fdf382ed64..97ef1c5a39 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -82,6 +82,10 @@ inline void Read(T &var, const VAddr vaddr) {
     } else if ((vaddr >= CONFIG_MEMORY_VADDR)  && (vaddr < CONFIG_MEMORY_VADDR_END)) {
         ConfigMem::Read<T>(var, vaddr);
 
+    // DSP memory
+    } else if ((vaddr >= DSP_MEMORY_VADDR)  && (vaddr < DSP_MEMORY_VADDR_END)) {
+        var = *((const T*)&g_dsp_mem[vaddr - DSP_MEMORY_VADDR]);
+
     // VRAM
     } else if ((vaddr >= VRAM_VADDR)  && (vaddr < VRAM_VADDR_END)) {
         var = *((const T*)&g_vram[vaddr - VRAM_VADDR]);
@@ -122,8 +126,10 @@ inline void Write(const VAddr vaddr, const T data) {
     } else if ((vaddr >= VRAM_VADDR)  && (vaddr < VRAM_VADDR_END)) {
         *(T*)&g_vram[vaddr - VRAM_VADDR] = data;
 
-    //} else if ((vaddr & 0xFFF00000) == 0x1FF00000) {
-    //    _assert_msg_(MEMMAP, false, "umimplemented write to DSP memory");
+    // DSP memory
+    } else if ((vaddr >= DSP_MEMORY_VADDR)  && (vaddr < DSP_MEMORY_VADDR_END)) {
+        *(T*)&g_dsp_mem[vaddr - DSP_MEMORY_VADDR] = data;
+
     //} else if ((vaddr & 0xFFFF0000) == 0x1FF80000) {
     //    _assert_msg_(MEMMAP, false, "umimplemented write to Configuration Memory");
     //} else if ((vaddr & 0xFFFFF000) == 0x1FF81000) {
-- 
GitLab