diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp
index eea6c5bf138c0ef6208214b1cc11dfef34333c1b..a14e8303ecb0799445d78dae69715f3a5940d5bd 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 a2ef9d3afec93c5762282336ea7926ada7645ab1..fad40ae0cec41cf7ab44b84602bac12b886ad045 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 fdf382ed64446f1bdd89049e7b338349b1427bc2..97ef1c5a3979801fe544345ff212e2c2a68199be 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) {