summaryrefslogtreecommitdiffstats
path: root/src/emu/mem.c
diff options
context:
space:
mode:
authorBenedikt Böhm <bb@xnull.de>2009-07-04 10:49:19 +0200
committerBenedikt Böhm <bb@xnull.de>2009-07-04 10:49:19 +0200
commit6165e2dde32a8f425e54d4f061146b366d5a2e0a (patch)
tree857b1884e30c5b38ac8c915e37b8ee0bd52d712e /src/emu/mem.c
parent11545b9e323084482673b8732b89711ae7e19928 (diff)
downloadswppy-6165e2dde32a8f425e54d4f061146b366d5a2e0a.tar.gz
swppy-6165e2dde32a8f425e54d4f061146b366d5a2e0a.tar.xz
swppy-6165e2dde32a8f425e54d4f061146b366d5a2e0a.zip
adapt emulator for generator changes:
- new instructions (push, pop, call, ret) - new pseudo-registers (bp, sp, rv) - new binary format - dynamic register file size - removed obsolete instructions
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;
+}