diff options
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; +} |