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;
|
|
|
|
}
|