summaryrefslogtreecommitdiffstats
path: root/src/emu/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/mem.c')
-rw-r--r--src/emu/mem.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/emu/mem.c b/src/emu/mem.c
index e102eaf..cdbf2ae 100644
--- a/src/emu/mem.c
+++ b/src/emu/mem.c
@@ -1,3 +1,37 @@
+#include <stdint.h>
+#include <sys/types.h>
+#include <string.h>
+
+#include "cpu.h"
#include "mem.h"
-uint8_t MEM[4096];
+uint8_t *MEM;
+
+void store(size_t addr, uint32_t value)
+{
+ if (addr & 0x2)
+ trap(TRP_UNALIGNED);
+ memcpy(&MEM[addr], &value, 4);
+}
+
+uint32_t load(size_t addr)
+{
+ uint32_t tmp32;
+ if (addr & 0x2)
+ trap(TRP_UNALIGNED);
+ memcpy(&tmp32, &MEM[addr], 4);
+ return tmp32;
+}
+
+void push(uint32_t value)
+{
+ GPR[SP] -= 4;
+ store(GPR[SP], value);
+}
+
+uint32_t pop(void)
+{
+ uint32_t tmp32 = load(GPR[SP]);
+ GPR[SP] += 4;
+ return tmp32;
+}