Mercurial > hg > ede
view emulator/mem.h @ 27:a542cd390efd
long overdue update
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Wed, 02 Apr 2014 14:11:50 +0100 |
parents | 2b8eb2c86602 |
children |
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; /* emulator memory * * 8 bit registers: * bank 0: R[0x00 - 0x02] * bank 1: R[0x03 - 0x06] * DPH, DPL * SPH, SPL * A * flags * * 16 bit registers: * DPTR * SP * * 64KB Von Neumann memory */ /* program counter stored seperately for ease of use */ WIDE PC; struct registers { BYTE R[0x06]; /* DPTR */ BYTE DPH; BYTE DPL; /* SP */ BYTE SPH; BYTE SPL; 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 * - fetch_wide() returns WIDE * - read_mem(WIDE) returns BYTE * - write_mem(WIDE, BYTE) * - get_flag(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); WIDE fetch_wide(void); BYTE read_mem(WIDE addr, WIDE len); void write_mem(WIDE addr, WIDE len, BYTE data); /* MCS-51 - can use bit type here */ BYTE get_flags(BYTE flag); BYTE get_R(BYTE reg, BYTE bank); void set_R(BYTE reg, BYTE bank, BYTE data); WIDE get_DPTR(void); void set_DPTR(WIDE data); WIDE get_SP(void); void set_SP(WIDE data); #endif