Mercurial > hg > ede
view emu/mem.c @ 28:6d32e54e5c16
emulator overhauled really, new a better memory structure
also cleaned up the file system some what.
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Fri, 11 Apr 2014 14:38:09 +0100 |
parents | |
children | 83e80c2c489c |
line wrap: on
line source
/* mem.c * functions for accessing emulator memory */ #include "mem.h" /* get flag value * if invalid flag is requested value is 0 */ BYTE get_flag(BYTE flag) { if (flag > 7) { return 0; } else { return GBIT(flags, flag); } } /* set flag to 0 if on == 0 * otherwise set flag to 1 */ void set_flag(BYTE flag, BYTE on) { if (flag <= 7) { switch (on) { case 0: flags = CBIT(flags, flag); default: flags = SBIT(flags, flag); } } } WIDE get_wide(BYTE reg) { /* low | (high << 8) */ return (regs[reg + 12] | (regs[reg + 4] << 8)); } void set_wide(BYTE reg, WIDE val) { regs[reg + 4] = (val >> 8) & 0xFF; /* high */ regs[reg + 12] = val & 0xFF; /* low */ } void inc_pc(BYTE n) { if ((regs[PCL] + n) > 0xFF) { regs[PCH]++; } regs[PCL] += n; } BYTE fetch(void) { BYTE val = mem[get_wide(PC)]; inc_pc(1); return val; } WIDE fetch_wide(void) { WIDE val = mem[get_wide(PC)] | (mem[get_wide(PC + 1)] << 8); inc_pc(2); return val; }