scemu/mem.c

66 lines
663 B
C

#include <u.h>
#include <libc.h>
#include "dat.h"
#include "fns.h"
u8int *mem;
u8int *romptr;
u8int
memread(u16int a)
{
return mem[a];
}
void
memwrite(u16int a, u8int v)
{
if((void*)a < romptr)
mem[a] = v;
}
void
push8(u8int v)
{
memwrite(0x100 | rS--, v);
}
void
push16(u16int v)
{
memwrite(0x100 | rS--, v >> 8);
memwrite(0x100 | rS--, v);
}
u8int
pop8(void)
{
return memread(0x100 | ++rS);
}
u16int
pop16(void)
{
u16int v;
v = memread(0x100 | ++rS);
v |= memread(0x100 | ++rS) << 8;
return v;
}
u8int
fetch8(void)
{
return memread(pc++);
}
u16int
fetch16(void)
{
u16int r;
r = memread(pc++);
r |= memread(pc++) << 8;
return r;
}