diff options
| author | 2014-03-31 21:05:51 -0400 | |
|---|---|---|
| committer | 2014-03-31 21:05:51 -0400 | |
| commit | a36f9492cca6ae44eb6ca33d29900f78b5b372bf (patch) | |
| tree | a4a23f796c4b38049beb567e08449b18315f711c /src | |
| parent | grabbed ppsspp's MemArena (diff) | |
| download | yuzu-a36f9492cca6ae44eb6ca33d29900f78b5b372bf.tar.gz yuzu-a36f9492cca6ae44eb6ca33d29900f78b5b372bf.tar.xz yuzu-a36f9492cca6ae44eb6ca33d29900f78b5b372bf.zip | |
added support for reading/writing to stack mem
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/src/mem_map.cpp | 34 | ||||
| -rw-r--r-- | src/core/src/mem_map.h | 12 | ||||
| -rw-r--r-- | src/core/src/mem_map_funcs.cpp | 11 |
3 files changed, 40 insertions, 17 deletions
diff --git a/src/core/src/mem_map.cpp b/src/core/src/mem_map.cpp index 6d57b550a..975a0cf08 100644 --- a/src/core/src/mem_map.cpp +++ b/src/core/src/mem_map.cpp | |||
| @@ -37,26 +37,32 @@ u8* g_base = NULL; ///< The base pointer to the auto-mirrored arena. | |||
| 37 | 37 | ||
| 38 | MemArena g_arena; ///< The MemArena class | 38 | MemArena g_arena; ///< The MemArena class |
| 39 | 39 | ||
| 40 | u8* g_bootrom = NULL; ///< Bootrom memory (super secret code/data @ 0x8000) pointer | 40 | u8* g_bootrom = NULL; ///< Bootrom memory (super secret code/data @ 0x8000) pointer |
| 41 | u8* g_fcram = NULL; ///< Main memory (FCRAM) pointer | 41 | u8* g_fcram = NULL; ///< Main memory (FCRAM) pointer |
| 42 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer | 42 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer |
| 43 | u8* g_scratchpad = NULL; ///< [Hack] Seperate mem for stack space because I don't know where this goes | ||
| 43 | 44 | ||
| 44 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory (super secret code/data @ 0x8000) | 45 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory (super secret code/data @ 0x8000) |
| 45 | u8* g_uncached_bootrom = NULL; | 46 | u8* g_uncached_bootrom = NULL; |
| 47 | |||
| 48 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) | ||
| 49 | u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) | ||
| 50 | u8* g_physical_scratchpad = NULL; ///< Scratchpad memory used for main thread stack | ||
| 46 | 51 | ||
| 47 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) | ||
| 48 | u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) | ||
| 49 | 52 | ||
| 50 | // We don't declare the IO region in here since its handled by other means. | 53 | // We don't declare the IO region in here since its handled by other means. |
| 51 | static MemoryView g_views[] = | 54 | static MemoryView g_views[] = |
| 52 | { | 55 | { |
| 53 | {&g_bootrom, &g_physical_bootrom, 0x00000000, MEM_BOOTROM_SIZE, 0}, | 56 | {&g_scratchpad, &g_physical_scratchpad, 0x00000000, MEM_SCRATCHPAD_SIZE, 0 }, |
| 54 | {NULL, &g_uncached_bootrom, 0x00010000, MEM_BOOTROM_SIZE, MV_MIRROR_PREVIOUS}, | 57 | // {&g_bootrom, &g_physical_bootrom, 0x00000000, MEM_BOOTROM_SIZE, 0}, |
| 55 | // //{NULL, NULL, 0x17E00000, MEM_MPCORE_PRIV_SIZE, 0}, | 58 | // {NULL, &g_uncached_bootrom, 0x00010000, MEM_BOOTROM_SIZE, MV_MIRROR_PREVIOUS}, |
| 56 | {&g_vram, &g_physical_vram, 0x18000000, MEM_VRAM_SIZE, 0}, | 59 | // {NULL, NULL, 0x17E00000, MEM_MPCORE_PRIV_SIZE, 0}, |
| 57 | // //{NULL, NULL, 0x1FF00000, MEM_DSP_SIZE, 0}, | 60 | {&g_vram, &g_physical_vram, MEM_VRAM_VADDR, MEM_VRAM_SIZE, MV_IS_PRIMARY_RAM}, |
| 58 | // //{NULL, NULL, 0x1FF80000, MEM_AXI_WRAM_SIZE, 0}, | 61 | // {NULL, NULL, 0x1FF00000, MEM_DSP_SIZE, 0}, |
| 59 | {&g_fcram, &g_physical_fcram, 0x20000000, MEM_FCRAM_SIZE, MV_IS_PRIMARY_RAM}, | 62 | // {NULL, NULL, 0x1FF80000, MEM_AXI_WRAM_SIZE, 0}, |
| 63 | |||
| 64 | {&g_fcram, &g_physical_fcram, MEM_FCRAM_VADDR, MEM_FCRAM_SIZE, MV_IS_PRIMARY_RAM}, | ||
| 65 | |||
| 60 | }; | 66 | }; |
| 61 | 67 | ||
| 62 | /*static MemoryView views[] = | 68 | /*static MemoryView views[] = |
diff --git a/src/core/src/mem_map.h b/src/core/src/mem_map.h index 55f02e285..c72e722df 100644 --- a/src/core/src/mem_map.h +++ b/src/core/src/mem_map.h | |||
| @@ -37,10 +37,17 @@ | |||
| 37 | #define MEM_VRAM_SIZE 0x00600000 ///< VRAM size | 37 | #define MEM_VRAM_SIZE 0x00600000 ///< VRAM size |
| 38 | #define MEM_DSP_SIZE 0x00080000 ///< DSP memory size | 38 | #define MEM_DSP_SIZE 0x00080000 ///< DSP memory size |
| 39 | #define MEM_AXI_WRAM_SIZE 0x00080000 ///< AXI WRAM size | 39 | #define MEM_AXI_WRAM_SIZE 0x00080000 ///< AXI WRAM size |
| 40 | #define MEM_FCRAM_SIZE 0x08000000 ///< FCRAM size | 40 | #define MEM_FCRAM_SIZE 0x08000000 ///< FCRAM size... Really 0x07E00000, but power of 2 |
| 41 | // works much better | ||
| 42 | #define MEM_SCRATCHPAD_SIZE 0x00004000 ///< Typical stack size - TODO: Read from exheader | ||
| 41 | 43 | ||
| 42 | #define MEM_VRAM_MASK 0x007FFFFF | 44 | #define MEM_VRAM_MASK 0x007FFFFF |
| 43 | #define MEM_FCRAM_MASK (MEM_FCRAM_SIZE - 1) ///< FCRAm mask | 45 | #define MEM_FCRAM_MASK (MEM_FCRAM_SIZE - 1) ///< FCRAM mask |
| 46 | #define MEM_SCRATCHPAD_MASK (MEM_SCRATCHPAD_SIZE - 1) ///< Scratchpad memory mask | ||
| 47 | |||
| 48 | #define MEM_FCRAM_VADDR 0x08000000 | ||
| 49 | #define MEM_VRAM_VADDR 0x1F000000 | ||
| 50 | #define MEM_SCRATCHPAD_VADDR (0x10000000 - MEM_SCRATCHPAD_SIZE) ///< Scratchpad virtual address | ||
| 44 | 51 | ||
| 45 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 52 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 46 | 53 | ||
| @@ -60,6 +67,7 @@ extern u8 *g_base; | |||
| 60 | // 32-bit: Same as the corresponding physical/virtual pointers. | 67 | // 32-bit: Same as the corresponding physical/virtual pointers. |
| 61 | extern u8* g_fcram; ///< Main memory | 68 | extern u8* g_fcram; ///< Main memory |
| 62 | extern u8* g_vram; ///< Video memory (VRAM) | 69 | extern u8* g_vram; ///< Video memory (VRAM) |
| 70 | extern u8* g_scratchpad; ///< Stack memory | ||
| 63 | 71 | ||
| 64 | void Init(); | 72 | void Init(); |
| 65 | void Shutdown(); | 73 | void Shutdown(); |
diff --git a/src/core/src/mem_map_funcs.cpp b/src/core/src/mem_map_funcs.cpp index f00d10f87..c8436b2a4 100644 --- a/src/core/src/mem_map_funcs.cpp +++ b/src/core/src/mem_map_funcs.cpp | |||
| @@ -38,7 +38,11 @@ inline void ReadFromHardware(T &var, const u32 addr) | |||
| 38 | 38 | ||
| 39 | if ((addr & 0x3E000000) == 0x08000000) { | 39 | if ((addr & 0x3E000000) == 0x08000000) { |
| 40 | var = *((const T*)&g_fcram[addr & MEM_FCRAM_MASK]); | 40 | var = *((const T*)&g_fcram[addr & MEM_FCRAM_MASK]); |
| 41 | } | 41 | |
| 42 | // Scratchpad memory | ||
| 43 | } else if (addr > MEM_SCRATCHPAD_VADDR && addr <= (MEM_SCRATCHPAD_VADDR + MEM_SCRATCHPAD_SIZE)) { | ||
| 44 | var = *((const T*)&g_scratchpad[addr & MEM_SCRATCHPAD_MASK]); | ||
| 45 | } | ||
| 42 | /*else if ((addr & 0x3F800000) == 0x04000000) { | 46 | /*else if ((addr & 0x3F800000) == 0x04000000) { |
| 43 | var = *((const T*)&m_pVRAM[addr & VRAM_MASK]); | 47 | var = *((const T*)&m_pVRAM[addr & VRAM_MASK]); |
| 44 | }*/ | 48 | }*/ |
| @@ -61,6 +65,11 @@ inline void WriteToHardware(u32 addr, const T data) { | |||
| 61 | // exheader "special memory" flag is set, however this address can be arbitrary. | 65 | // exheader "special memory" flag is set, however this address can be arbitrary. |
| 62 | *(T*)&g_fcram[addr & MEM_FCRAM_MASK] = data; | 66 | *(T*)&g_fcram[addr & MEM_FCRAM_MASK] = data; |
| 63 | NOTICE_LOG(MEMMAP, "Test2"); | 67 | NOTICE_LOG(MEMMAP, "Test2"); |
| 68 | |||
| 69 | // Scratchpad memory | ||
| 70 | } else if (addr > MEM_SCRATCHPAD_VADDR && addr <= (MEM_SCRATCHPAD_VADDR + MEM_SCRATCHPAD_SIZE)) { | ||
| 71 | *(T*)&g_scratchpad[addr & MEM_SCRATCHPAD_MASK] = data; | ||
| 72 | |||
| 64 | // Heap mapped by ControlMemory: | 73 | // Heap mapped by ControlMemory: |
| 65 | } else if ((addr & 0x3E000000) == 0x08000000) { | 74 | } else if ((addr & 0x3E000000) == 0x08000000) { |
| 66 | // TODO(ShizZy): Writes to this virtual address should be put in physical memory at FCRAM + GSP | 75 | // TODO(ShizZy): Writes to this virtual address should be put in physical memory at FCRAM + GSP |