all repos — xyw @ 389a1ce3662b767abcf89b2e11c310f757accadc

A minimal virtual machine and assembler for terminals.

Implemented CLR.
h3rald h3rald@h3rald.com
Sat, 06 Dec 2025 18:20:43 +0100
commit

389a1ce3662b767abcf89b2e11c310f757accadc

parent

9bd4e20e3c1b513b306f994b0d4f95763baccc04

1 files changed, 13 insertions(+), 0 deletions(-)

jump to
M xywrun.cxywrun.c

@@ -229,6 +229,18 @@ case XYW_MODE_X|XYW_MODE_W|opc: { const int w=1; xyw_word a = *xw; body; } break; \

case XYW_MODE_Y|XYW_MODE_W|opc: { const int w=1; xyw_word a = *yw; body; } break; \ } +//// CLR operations +#define OPC_CLR(opc) { \ + case opc: { us_pop(); us_push(0); } break; \ + case XYW_MODE_X|opc: {*x = 0; } break; \ + case XYW_MODE_Y|opc: { *y = 0; } break; \ + case XYW_MODE_W|opc: { us_popw(); us_pushw(0); } break; \ + case XYW_MODE_X|XYW_MODE_W|opc: { *xw = 0; } break; \ + case XYW_MODE_Y|XYW_MODE_W|opc: { *yw = 0; } break; \ + case XYW_MODE_X|XYW_MODE_Y|opc: { *x = 0; *y = 0; } break; \ + case XYW_MODE_X|XYW_MODE_Y|XYW_MODE_W|opc: { *xw = 0; *yw = 0; } break; \ +} + //// POP operations #define OPC_POP(opc) { \ case opc: { us_pop(); } break; \

@@ -318,6 +330,7 @@ // clang-format off

/* BRK */ case 0x00: return 0; // Halting execution for now /* PSH */ OPC_PSH(0x01); /* POP */ OPC_POP(0x02); + /* CLR */ OPC_CLR(0x03); /* LDB */ OPC_SR1(0x04, us_push(read( ADDR(a)) )); /* LDW */ OPC_SR1(0x05, us_pushw(readw( ADDR(a)) )); /* STB */ OPC_SR1(0x06, write( ADDR(a), us_pop() ));