view emulator/mem.h @ 20:ddeae9d3fff4

clean up
author james <jb302@eecs.qmul.ac.uk>
date Sun, 23 Feb 2014 14:52:31 +0000
parents 2b8eb2c86602
children a542cd390efd
line wrap: on
line source
/*  mem.h
 *  emultor memory structure and access function definitions  */
#ifndef MEM_H
#define MEM_H

/* data types
 *  - 8 bit BYTE
 *  - 16 bit WIDE */
typedef unsigned char BYTE;
typedef unsigned short WIDE;

/* current opcode */
BYTE op;

/* emulator memory
 *  - registers
 *  - 64kB 16-bit main memory */

struct
registers {
    /* 16 bit registers */
    WIDE PC;
    /* DPTR */
    BYTE DPH;
    BYTE DPL;
    /* SP */
    BYTE SPH;
    BYTE SPL;
    /*  8 bit registers
     *   bank 0: R[0x00 - 0x02]
     *   bank 1: R[0x03 - 0x06] */ 
    BYTE R[0x06];
    BYTE A;

    /* 7 6 5  4 3 2  1 0
     * C Z AC P S OV IE BS */
    BYTE flags;
    
} registers;

BYTE
memory[0x10000];

/* memory access function definitions
 *  - fetch() returns BYTE
 *  - read_mem(WIDE) returns BYTE
 *  - write_mem(WIDE, BYTE)
 *  - get_R(BYTE, BOOL) returns BYTE
 *  - set_R(BYTE, BOOL, BYTE)
 *  - get_DPTR() returns WIDE
 *  - set_DPTR(WIDE)
 *  - get_SP() returns WIDE
 *  - set_SP(WIDE) */

BYTE
fetch(void);

BYTE
read_mem(WIDE addr);

void
write_mem(WIDE addr, BYTE data);

BYTE
get_R(BYTE reg, _Bool bank);

void
set_R(BYTE reg, _Bool bank, BYTE data);

WIDE
get_DPTR(void);

void
set_DPTR(WIDE data);

WIDE
get_SP(void);

void
set_SP(WIDE data);

#endif