diff options
author | Benedikt Böhm <bb@xnull.de> | 2009-07-04 10:49:19 +0200 |
---|---|---|
committer | Benedikt Böhm <bb@xnull.de> | 2009-07-04 10:49:19 +0200 |
commit | 6165e2dde32a8f425e54d4f061146b366d5a2e0a (patch) | |
tree | 857b1884e30c5b38ac8c915e37b8ee0bd52d712e /src/emu/mem.c | |
parent | 11545b9e323084482673b8732b89711ae7e19928 (diff) | |
download | swppy-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.c | 36 |
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; +} |