jb302@28: /* mem.c jb302@28: * functions for accessing emulator memory */ jb302@28: #include "mem.h" jb302@28: jb302@28: /* get flag value jb302@28: * if invalid flag is requested value is 0 */ jb302@28: BYTE jb302@28: get_flag(BYTE flag) { jb302@28: if (flag > 7) { jb302@28: return 0; jb302@28: } jb302@28: else { jb302@28: return GBIT(flags, flag); jb302@28: } jb302@28: } jb302@28: jb302@28: /* set flag to 0 if on == 0 jb302@28: * otherwise set flag to 1 */ jb302@28: void jb302@28: set_flag(BYTE flag, BYTE on) { jb302@28: if (flag <= 7) { jb302@28: switch (on) { jb302@28: jb302@28: case 0: jb302@28: flags = CBIT(flags, flag); jb302@28: jb302@28: default: jb302@28: flags = SBIT(flags, flag); jb302@28: } jb302@28: } jb302@28: } jb302@28: jb302@28: WIDE jb302@28: get_wide(BYTE reg) { jb302@28: /* low | (high << 8) */ jb302@28: return (regs[reg + 12] | (regs[reg + 4] << 8)); jb302@28: } jb302@28: jb302@28: void jb302@28: set_wide(BYTE reg, WIDE val) { jb302@28: regs[reg + 4] = (val >> 8) & 0xFF; /* high */ jb302@28: regs[reg + 12] = val & 0xFF; /* low */ jb302@28: } jb302@28: jb302@28: void jb302@28: inc_pc(BYTE n) { jb302@28: if ((regs[PCL] + n) > 0xFF) { jb302@28: regs[PCH]++; jb302@28: } jb302@28: regs[PCL] += n; jb302@28: } jb302@28: jb302@28: BYTE jb302@28: fetch(void) { jb302@28: BYTE val = mem[get_wide(PC)]; jb302@28: inc_pc(1); jb302@28: return val; jb302@28: } jb302@28: jb302@28: WIDE jb302@28: fetch_wide(void) { jb302@28: WIDE val = mem[get_wide(PC)] | (mem[get_wide(PC + 1)] << 8); jb302@28: inc_pc(2); jb302@28: return val; jb302@28: } jb302@28: jb302@28: