view emulator/mem.c @ 14:2b8eb2c86602

Major update to assembler design, now handles labels proper. Next step unit test Added boot procedure and experimental function look up table to emulator Started implementing operations tested SET and CLR operations with success
author james <jb302@eecs.qmul.ac.uk>
date Wed, 29 Jan 2014 20:11:07 +0000
parents e9dc055a0f8b
children 26044ed126fb
line wrap: on
line source
/* mem.c
 * functions for accessing emulator memory */
#include "mem.h"

BYTE
fetch(void) {
    return memory[registers.PC];
}

BYTE
read_mem(WIDE addr) {
    return memory[addr];
}

void
write_mem(WIDE addr, BYTE data) {
    memory[addr] = data;
}

BYTE
get_R(BYTE reg, _Bool bank) {
    switch(bank) {
        case 0:
            return registers.R[reg];
        case 1:
            return registers.R[reg + 0x03];
    }
}

void
set_R(BYTE reg, _Bool bank, BYTE data) {
    switch(bank) {
        case 0:
            registers.R[reg] = data;
        case 1:
            registers.R[reg + 0x03] = data;
    }
}

WIDE
get_DPTR(void) {
    return (((WIDE)registers.DPH) << 8) | registers.DPL;
}

void
set_DPTR(WIDE data) {
    registers.DPH = (BYTE)((data & 0xFF00) >> 8);
    registers.DPL = (BYTE)(data & 0x00FF);
}

WIDE
get_SP(void) {
    return (((WIDE)registers.SPH) << 8) | registers.SPL;
}

void
set_SP(WIDE data) {
    registers.SPH = (BYTE)((data & 0xFF00) >> 8);
    registers.SPL = (BYTE)(data & 0x00FF);
}