diff --git a/ref/uxnmin.c b/ref/uxnmin.c index 35d74c9..24550d6 100644 --- a/ref/uxnmin.c +++ b/ref/uxnmin.c @@ -28,43 +28,43 @@ emu_deo(Uint8 addr, Uint8 value) { uxn.dev[addr] = value; switch(addr) { - case 0x18: fputc(uxn.dev[0x18], stdout), fflush(stdout); return; - case 0x19: fputc(uxn.dev[0x19], stderr), fflush(stderr); return; + case 0x18: fputc(uxn.dev[0x18], stdout); return; + case 0x19: fputc(uxn.dev[0x19], stderr); return; } } /* Unroll */ #define OPC(opc, init, body) {\ - case 0x00|opc: {enum{_2=0,_r=0}; init; body; break;}\ - case 0x20|opc: {enum{_2=1,_r=0}; init; body; break;}\ - case 0x40|opc: {enum{_2=0,_r=1}; init; body; break;}\ - case 0x60|opc: {enum{_2=1,_r=1}; init; body; break;}\ - case 0x80|opc: {enum{_2=0,_r=0}; k = uxn.wst.ptr; init; uxn.wst.ptr = k; body; break;}\ - case 0xa0|opc: {enum{_2=1,_r=0}; k = uxn.wst.ptr; init; uxn.wst.ptr = k; body; break;}\ - case 0xc0|opc: {enum{_2=0,_r=1}; k = uxn.rst.ptr; init; uxn.rst.ptr = k; body; break;}\ - case 0xe0|opc: {enum{_2=1,_r=1}; k = uxn.rst.ptr; init; uxn.rst.ptr = k; body; break;}\ + case 0x00|opc: {enum{_2=0,_r=0};init;body;} break;\ + case 0x20|opc: {enum{_2=1,_r=0};init;body;} break;\ + case 0x40|opc: {enum{_2=0,_r=1};init;body;} break;\ + case 0x60|opc: {enum{_2=1,_r=1};init;body;} break;\ + case 0x80|opc: {enum{_2=0,_r=0};k=uxn.wst.ptr;init;uxn.wst.ptr= k;body;} break;\ + case 0xa0|opc: {enum{_2=1,_r=0};k=uxn.wst.ptr;init;uxn.wst.ptr= k;body;} break;\ + case 0xc0|opc: {enum{_2=0,_r=1};k=uxn.rst.ptr;init;uxn.rst.ptr= k;body;} break;\ + case 0xe0|opc: {enum{_2=1,_r=1};k=uxn.rst.ptr;init;uxn.rst.ptr= k;body;} break;\ } /* Microcode */ #define INC(s) uxn.s.dat[uxn.s.ptr++] #define DEC(s) uxn.s.dat[--uxn.s.ptr] -#define JMI { pc += uxn.ram[pc++] << 8 | uxn.ram[pc++]; } -#define JMP(x) { if(_2) pc = (x); else pc += (Sint8)(x); } -#define POx(o) { if(_2) { PO2(o) } else PO1(o) } -#define PO2(o) { if(_r) o = DEC(rst) | (DEC(rst) << 8); else o = DEC(wst) | (DEC(wst) << 8); } -#define PO1(o) { if(_r) o = DEC(rst); else o = DEC(wst); } -#define PUx(y) { if(_2) { PU2(y) } else PU1(y) } -#define PU2(y) { tt = (y); PU1(tt >> 8) PU1(tt) } -#define PU1(y) { if(_r) INC(rst) = y; else INC(wst) = y; } -#define PFx(y) { if(_2) { PF2(y) } else PF1(y) } -#define PF2(y) { tt = (y); PF1(tt >> 8) PF1(tt) } -#define PF1(y) { if(_r) INC(wst) = y; else INC(rst) = y; } -#define DEI(p, o) { if(_2) { o = (emu_dei(p) << 8) | emu_dei(p + 1); } else o = emu_dei(p); } -#define DEO(p, y) { if(_2) { emu_deo(p, y >> 8), emu_deo(p + 1, y); } else emu_deo(p, y); } -#define PEK(o, x, r) { if(_2) { r = (x); o = uxn.ram[r++] << 8 | uxn.ram[r]; } else o = uxn.ram[(x)]; } -#define POK(x, y, r) { if(_2) { r = (x); uxn.ram[r++] = y >> 8, uxn.ram[r] = y; } else uxn.ram[(x)] = (y); } +#define JMI pc += uxn.ram[pc++] << 8 | uxn.ram[pc++]; +#define JMP(x) if(_2) pc = (x); else pc += (Sint8)(x); +#define POx(o) if(_2) { PO2(o) } else PO1(o) +#define PO2(o) if(_r) o = DEC(rst) | (DEC(rst) << 8); else o = DEC(wst) | (DEC(wst) << 8); +#define PO1(o) if(_r) o = DEC(rst); else o = DEC(wst); +#define PUx(y) if(_2) { PU2(y) } else PU1(y) +#define PU2(y) tt = (y); PU1(tt >> 8) PU1(tt) +#define PU1(y) if(_r) INC(rst) = y; else INC(wst) = y; +#define PFx(y) if(_2) { PF2(y) } else PF1(y) +#define PF2(y) tt = (y); PF1(tt >> 8) PF1(tt) +#define PF1(y) if(_r) INC(wst) = y; else INC(rst) = y; +#define DEI(p, o) if(_2) { o = (emu_dei(p) << 8) | emu_dei(p + 1); } else o = emu_dei(p); +#define DEO(p, y) if(_2) { emu_deo(p, y >> 8), emu_deo(p + 1, y); } else emu_deo(p, y); +#define PEK(o, x, r) if(_2) { r = (x); o = uxn.ram[r++] << 8 | uxn.ram[r]; } else o = uxn.ram[(x)]; +#define POK(x, y, r) if(_2) { r = (x); uxn.ram[r++] = y >> 8, uxn.ram[r] = y; } else uxn.ram[(x)] = (y); int uxn_eval(Uint16 pc)