Refactoring.
h3rald h3rald@h3rald.com
Sun, 07 Dec 2025 08:21:28 +0100
1 files changed,
6 insertions(+),
26 deletions(-)
jump to
M
xywrun.c
→
xywrun.c
@@ -239,18 +239,6 @@ case XYW_MODE_X|XYW_MODE_W|opc: { const int w=1, rx=1, ry=0; init; body; } break; \
case XYW_MODE_Y|XYW_MODE_W|opc: { const int w=1, rx=0, ry=1; init; 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; \@@ -271,16 +259,6 @@ case XYW_MODE_X|XYW_MODE_W|opc: { us_pushw(*xw); } break; \
case XYW_MODE_Y|XYW_MODE_W|opc: { us_pushw(*yw); } break; \ } -//// Increment/decrement operations -#define OPC_IDC(opc, delta) { \ - case opc: { us_push(us_pop() + delta);} break; \ - case XYW_MODE_X|opc: { *x = *x + delta; } break; \ - case XYW_MODE_Y|opc: { *y = *y + delta; } break; \ - case XYW_MODE_W|opc: { us_pushw(us_popw() + delta); } break; \ - case XYW_MODE_X|XYW_MODE_W|opc: { *xw = *xw + delta; } break; \ - case XYW_MODE_Y|XYW_MODE_W|opc: { *yw = *yw + delta; } break; \ -} - //// SWP operations #define OPC_SWP(opc) { \ case opc: { xyw_byte a = us_pop(); xyw_byte b = us_pop(); us_push(a); us_push(b); } break; \@@ -301,6 +279,8 @@ // Pop value from stack
#define POP() (w ? us_popw() : (xyw_word)us_pop()) // Get argument from x or y register or stack #define ARG (rx ? (w ? *xw : *x) : (ry ? (w ? *yw : *y) : (w ? us_popw() : us_pop()))) +// Set value to x or y register or push to stack +#define SET(v) (rx ? ((w) ? (*xw = v) : (*x = v)) : (ry ? ((w) ? (*yw = v) : (*y = v)) : (w ? us_pushw(v) : us_push(v)))) //// Initialize devices@@ -342,13 +322,13 @@ // clang-format off
/* BRK */ case 0x00: return 0; // Halting execution for now /* PSH */ OPC_PSH(0x01); /* POP */ OPC_POP(0x02); - /* CLR */ OPC_CLR(0x03); + /* CLR */ OPC_SR1_new(0x03, , SET(0)); /* 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() )); /* STW */ OPC_SR1(0x07, writew( ADDR(a), us_popw() )); - /* INC */ OPC_IDC(0x08, +1); - /* DEC */ OPC_IDC(0x09, -1); + /* INC */ OPC_SR1_new(0x08, , SET(ARG + 1)); + /* DEC */ OPC_SR1_new(0x09, , SET(ARG - 1)); /* SHL */ OPC_SR1_new(0x0A, xyw_byte b = us_pop(), PUSH(ARG << b)); /* SHR */ OPC_SR1_new(0x0B, xyw_byte b = us_pop(), PUSH(ARG >> b)); /* ADD */ OPC_SR2(0x0C, PUSH(a + b));@@ -362,7 +342,7 @@ /* LTH */ OPC_SR2(0x13, PUSH(a < b));
/* AND */ OPC_SR2(0x14, PUSH(a & b)); /* IOR */ OPC_SR2(0x15, PUSH(a | b)); /* XOR */ OPC_SR2(0x16, PUSH(a ^ b)); - /* NOT */ OPC_SR1(0x17, PUSH(~a)); + /* NOT */ OPC_SR1_new(0x17, , SET(~ARG)); /* SWP */ OPC_SWP(0x18); /* DUP */ OPC_SR1(0x19, PUSH(a)); /* OVR */ OPC_SR2(0x1A, PUSH(b); PUSH(a); PUSH(b));