Removed unnecessary code.
h3rald h3rald@h3rald.com
Tue, 02 Dec 2025 16:04:34 +0100
1 files changed,
24 insertions(+),
29 deletions(-)
jump to
M
xywrun.c
→
xywrun.c
@@ -149,45 +149,40 @@ }
// clang-format off -// w = 0: 1-byte operation -// w = 1: 2-byte operation -// r = 0: value from stack -// r = 1: value from register - //// Operations that support stack and all registers #define OPC_SR2(opc, body) { \ - case opc: { const xyw_byte w = 0, r = 0, a = us_pop(), b = us_pop(); body; } break; \ - case XYW_MODE_X|opc: { const xyw_byte w = 0, r = 1, a = *x, b = us_pop(); body; } break; \ - case XYW_MODE_Y|opc: { const xyw_byte w = 0, r = 1, a = *y, b = us_pop(); body; } break; \ - case XYW_MODE_X|XYW_MODE_Y|opc: { const xyw_byte w = 0, r = 1, a = *x, b = *y; body; } break; \ - case XYW_MODE_W|opc: { const xyw_byte w = 1, r = 0; xyw_word a = us_popw(); xyw_word b = us_popw(); body; } break; \ - case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *xw; xyw_word b = us_popw(); body; } break; \ - case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *yw; xyw_word b = us_popw(); body; } break; \ - case XYW_MODE_X|XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *xw; xyw_word b = *yw; body; } break; \ + case opc: { const xyw_byte w = 0, a = us_pop(), b = us_pop(); body; } break; \ + case XYW_MODE_X|opc: { const xyw_byte w = 0, a = *x, b = us_pop(); body; } break; \ + case XYW_MODE_Y|opc: { const xyw_byte w = 0, a = *y, b = us_pop(); body; } break; \ + case XYW_MODE_X|XYW_MODE_Y|opc: { const xyw_byte w = 0, a = *x, b = *y; body; } break; \ + case XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = us_popw(); xyw_word b = us_popw(); body; } break; \ + case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *xw; xyw_word b = us_popw(); body; } break; \ + case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *yw; xyw_word b = us_popw(); body; } break; \ + case XYW_MODE_X|XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *xw; xyw_word b = *yw; body; } break; \ } //// Operations that support stack and one register #define OPC_SR1(opc, body) { \ - case opc: { const xyw_byte w = 0, r = 0, a = us_pop(); body; } break; \ - case XYW_MODE_X|opc: { const xyw_byte w = 0, r = 1, a = *x; body; } break; \ - case XYW_MODE_Y|opc: { const xyw_byte w = 0, r = 1, a = *y; body; } break; \ - case XYW_MODE_W|opc: { const xyw_byte w = 1, r = 0; xyw_word a = us_popw(); body; } break; \ - case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *xw; body; } break; \ - case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *yw; body; } break; \ + case opc: { const xyw_byte w = 0, a = us_pop(); body; } break; \ + case XYW_MODE_X|opc: { const xyw_byte w = 0, a = *x; body; } break; \ + case XYW_MODE_Y|opc: { const xyw_byte w = 0, a = *y; body; } break; \ + case XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = us_popw(); body; } break; \ + case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *xw; body; } break; \ + case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *yw; body; } break; \ } //// Operations that support one register only and no stack #define OPC_R1(opc, body) { \ - case XYW_MODE_X|opc: { const xyw_byte w = 0, r = 1, a = *x; body; } break; \ - case XYW_MODE_Y|opc: { const xyw_byte w = 0, r = 1, a = *y; body; } break; \ - case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *xw; body; } break; \ - case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1, r = 1; xyw_word a = *yw; body; } break; \ + case XYW_MODE_X|opc: { const xyw_byte w = 0, a = *x; body; } break; \ + case XYW_MODE_Y|opc: { const xyw_byte w = 0, a = *y; body; } break; \ + case XYW_MODE_X|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *xw; body; } break; \ + case XYW_MODE_Y|XYW_MODE_W|opc: { const xyw_byte w = 1; xyw_word a = *yw; body; } break; \ } //// Operations that support stack only #define OPC_S(opc, body) { \ - case opc: { const xyw_byte w = 0, r = 0; body; } break; \ - case XYW_MODE_W|opc: { const xyw_byte w = 1, r = 0; body; } break; \ + case opc: { const xyw_byte w = 0; body; } break; \ + case XYW_MODE_W|opc: { const xyw_byte w = 1; body; } break; \ } //// POP operations@@ -233,13 +228,13 @@ }
//// "Microcode" similar to Uxn's, to be used with above macros // Push a value to stack -#define PUSH(n) do { if(w && !!r) { us_pushw(n); } else { us_push(n); } } while(0) +#define PUSH(n) do { if (w) { us_pushw(n); } else { us_push(n); } } while(0) // Pop value from stack #define POP() (w ? us_popw() : (xyw_word)us_pop()) // Read value from address -#define READ(addr) (w && !!r ? mget(addr) : (xyw_byte)xyw_memory[addr]) +#define READ(addr) (w ? mget(addr) : (xyw_byte)xyw_memory[addr]) // Write value as word or byte depending on width flag 'w' -#define WRITE(addr, val) do { if(w && !!r) { mset(addr, val); } else { xyw_memory[addr] = val; } } while(0) +#define WRITE(addr, val) do { if (w) { mset(addr, val); } else { xyw_memory[addr] = val; } } while(0) // clang-format on int run(const char *input)@@ -309,7 +304,7 @@ /* DUP */ OPC_SR1(0x19, PUSH(a));
/* OVR */ OPC_SR2(0x1A, PUSH(b); PUSH(a); PUSH(b)); /* ROT */ OPC_SR2(0x1B, PUSH(b); PUSH(POP()); PUSH(a)); /* JMP */ case 0x1C: *pc = us_popw(); break; - /* JCN */ OPC_SR1(0x1D, if (a && !!r) { *pc = POP(); } ); + /* JCN */ OPC_SR1(0x1D, if (a) { *pc = POP(); } ); /* JSR */ case 0x1E: xyw_word addr = us_popw(); ss_pushw(*pc); *pc = addr; break; /* RTS */ case 0x1F: *pc = ss_popw(); break; // clang-format on