scemu/mem.c

67 lines
663 B
C
Raw Permalink Normal View History

2025-09-09 15:29:39 +00:00
#include <u.h>
#include <libc.h>
#include "dat.h"
#include "fns.h"
2025-09-09 15:43:34 +00:00
u8int *mem;
u8int *romptr;
2025-09-09 15:29:39 +00:00
u8int
memread(u16int a)
{
return mem[a];
}
void
memwrite(u16int a, u8int v)
{
2025-09-09 15:43:34 +00:00
if((void*)a < romptr)
2025-09-09 15:29:39 +00:00
mem[a] = v;
}
2025-09-09 15:45:42 +00:00
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;
}