all repos — xyw @ 8f9fd6bc840cbf233b5eac4ba798cd041bdfc518

A minimal virtual machine and assembler for terminals.

Implemented more instructions, fixes.
h3rald h3rald@h3rald.com
Sat, 29 Nov 2025 17:31:52 +0100
commit

8f9fd6bc840cbf233b5eac4ba798cd041bdfc518

parent

d7a215a6ec18fefd1f668e46a96a015d70b6fe99

1 files changed, 22 insertions(+), 2 deletions(-)

jump to
M xywvm.cxywvm.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;