#include #include #include #include "cpu.h" #include "mem.h" 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; }