Implemented more instructions, fixes.
h3rald h3rald@h3rald.com
Sat, 29 Nov 2025 17:31:52 +0100
1 files changed,
22 insertions(+),
2 deletions(-)
jump to
M
xywvm.c
→
xywvm.c
@@ -323,6 +323,26 @@ madd(addr, -1);
return r; } +static void STR(xyw_word addr, xyw_byte val) +{ + xyw_memory[addr] = val; +} + +static void STRw(xyw_word addr, xyw_word val) +{ + mset(addr, val); +} + +static void STP(xyw_byte addr, xyw_byte val) +{ + xyw_memory[((xyw_word)xyw_memory[SYSTEM_PAGE] << 8) | addr] = val; +} + +static void STPw(xyw_byte addr, xyw_word val) +{ + mset(((xyw_word)xyw_memory[SYSTEM_PAGE] << 8) | addr, val); +} + //// Macro helpers // Infix operation@@ -348,9 +368,9 @@ /* POP */ case 0x02: is_w() ? POPw(1) : POP(1); break;
/* NOT */ case 0x03: UOP(!); break; /* LDR */ case 0x04: is_w() ? UOP(LDRw) : UOP(LDR); break; - /* STR */ case 0x05: break; // TODO + /* STR */ case 0x05: is_w() ? STRw(POPw(1), POPw(0)) : STR(POP(1), POP(0)); break; /* LDP */ case 0x06: is_w() ? UOP(LDPw) : UOP(LDP); break; - /* STP */ case 0x07: break; // TODO + /* STP */ case 0x07: is_w() ? STPw(POPw(1), POPw(0)) : STP(POP(1), POP(0)); break; /* ILD */ case 0x08: is_w() ? UOP(ILD) : UOP(ILDw); break; /* LDI */ case 0x09: is_w() ? UOP(LDI) : UOP(LDIw); break;