summaryrefslogtreecommitdiff
path: root/src/core/mem_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/mem_map.h')
-rw-r--r--src/core/mem_map.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/core/mem_map.h b/src/core/mem_map.h
new file mode 100644
index 000000000..ad5abd16d
--- /dev/null
+++ b/src/core/mem_map.h
@@ -0,0 +1,73 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2
3// Refer to the license.txt file included.
4
5#pragma once
6
7////////////////////////////////////////////////////////////////////////////////////////////////////
8
9#include "common.h"
10#include "common_types.h"
11
12////////////////////////////////////////////////////////////////////////////////////////////////////
13
14enum {
15 MEM_BOOTROM_SIZE = 0x00010000, ///< Bootrom (super secret code/data @ 0x8000) size
16 MEM_MPCORE_PRIV_SIZE = 0x00002000, ///< MPCore private memory region size
17 MEM_VRAM_SIZE = 0x00600000, ///< VRAM size
18 MEM_DSP_SIZE = 0x00080000, ///< DSP memory size
19 MEM_AXI_WRAM_SIZE = 0x00080000, ///< AXI WRAM size
20 MEM_FCRAM_SIZE = 0x08000000, ///< FCRAM size... Really 0x07E00000, but power of 2
21 // works much better
22 MEM_SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader
23
24 MEM_VRAM_MASK = 0x007FFFFF,
25 MEM_FCRAM_MASK = (MEM_FCRAM_SIZE - 1), ///< FCRAM mask
26 MEM_SCRATCHPAD_MASK = (MEM_SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask
27
28 MEM_FCRAM_PADDR = 0x20000000, ///< FCRAM physical address
29 MEM_FCRAM_PADDR_END = (MEM_FCRAM_PADDR + MEM_FCRAM_SIZE), ///< FCRAM end of physical space
30 MEM_FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address
31 MEM_FCRAM_VADDR_END = (MEM_FCRAM_VADDR + MEM_FCRAM_SIZE), ///< FCRAM end of virtual space
32
33 MEM_VRAM_VADDR = 0x1F000000,
34 MEM_SCRATCHPAD_VADDR = (0x10000000 - MEM_SCRATCHPAD_SIZE), ///< Scratchpad virtual address
35};
36
37////////////////////////////////////////////////////////////////////////////////////////////////////
38
39namespace Memory {
40
41// Base is a pointer to the base of the memory map. Yes, some MMU tricks
42// are used to set up a full GC or Wii memory map in process memory. on
43// 32-bit, you have to mask your offsets with 0x3FFFFFFF. This means that
44// some things are mirrored too many times, but eh... it works.
45
46// In 64-bit, this might point to "high memory" (above the 32-bit limit),
47// so be sure to load it into a 64-bit register.
48extern u8 *g_base;
49
50// These are guaranteed to point to "low memory" addresses (sub-32-bit).
51// 64-bit: Pointers to low-mem (sub-0x10000000) mirror
52// 32-bit: Same as the corresponding physical/virtual pointers.
53extern u8* g_fcram; ///< Main memory
54extern u8* g_vram; ///< Video memory (VRAM)
55extern u8* g_scratchpad; ///< Stack memory
56
57void Init();
58void Shutdown();
59
60u8 Read8(const u32 addr);
61u16 Read16(const u32 addr);
62u32 Read32(const u32 addr);
63
64u32 Read8_ZX(const u32 addr);
65u32 Read16_ZX(const u32 addr);
66
67void Write8(const u32 addr, const u8 data);
68void Write16(const u32 addr, const u16 data);
69void Write32(const u32 addr, const u32 data);
70
71u8* GetPointer(const u32 Address);
72
73} // namespace