diff --git a/cli/uxncore/src/b.c b/cli/uxncore/src/b.c index 86a5832..5cced2e 100644 --- a/cli/uxncore/src/b.c +++ b/cli/uxncore/src/b.c @@ -11,7 +11,7 @@ main(int argc, char **argv) uxn.ram[0x104] = 0x80; uxn.ram[0x105] = 0x56; - uxn.ram[0x106] = 0x06; + uxn.ram[0x106] = 0x0b; if(uxn_eval(0x0100) && (uxn.dev[0x10] << 8 | uxn.dev[0x11])) while(!uxn.dev[0x0f]) ; return uxn.dev[0x0f] & 0x7f; diff --git a/cli/uxncore/src/core.c b/cli/uxncore/src/core.c index e3ba69e..ca8208f 100644 --- a/cli/uxncore/src/core.c +++ b/cli/uxncore/src/core.c @@ -3,17 +3,17 @@ uxn_eval(Uint16 pc) { for(;;) { switch(uxn.ram[pc]) { case 0x00: /* BRK */ return 1; break; - case 0x01: /* INC */ uxn.wst.dat[uxn.wst.ptr - 1]++; pc++; break; + case 0x01: /* INC */ uxn.wst.dat[uxn.wst.ptr-1]++; pc++; break; case 0x02: /* POP */ uxn.wst.ptr--; pc++; break; - case 0x03: /* NIP */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr - 1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; + case 0x03: /* NIP */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr-1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; case 0x04: /* SWP */ break; case 0x05: /* ROT */ break; - case 0x06: /* DUP */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr - 1]; uxn.wst.ptr++; pc++; break; - case 0x07: /* OVR */ break; - case 0x08: /* EQU */ return 1; break; - case 0x09: /* NEQ */ return 1; break; - case 0x0a: /* GTH */ return 1; break; - case 0x0b: /* LTH */ return 1; break; + case 0x06: /* DUP */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x07: /* OVR */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2]; uxn.wst.ptr++; pc++; break; + case 0x08: /* EQU */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] == uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x09: /* NEQ */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] != uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x0a: /* GTH */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] > uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x0b: /* LTH */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] < uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; case 0x0c: /* JMP */ return 1; break; case 0x0d: /* JCN */ return 1; break; case 0x0e: /* JSR */ return 1; break; @@ -35,17 +35,17 @@ uxn_eval(Uint16 pc) { case 0x1e: /* EOR */ return 1; break; case 0x1f: /* SFT */ return 1; break; case 0x20: /* JCI */ return 1; break; - case 0x21: /* INC2 */ uxn.wst.dat[uxn.wst.ptr - 1]++; pc++; break; + case 0x21: /* INC2 */ uxn.wst.dat[uxn.wst.ptr-1]++; pc++; break; case 0x22: /* POP2 */ uxn.wst.ptr--; pc++; break; - case 0x23: /* NIP2 */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr - 1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; + case 0x23: /* NIP2 */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr-1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; case 0x24: /* SWP2 */ break; case 0x25: /* ROT2 */ break; - case 0x26: /* DUP2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr - 1]; uxn.wst.ptr++; pc++; break; - case 0x27: /* OVR2 */ break; - case 0x28: /* EQU2 */ return 1; break; - case 0x29: /* NEQ2 */ return 1; break; - case 0x2a: /* GTH2 */ return 1; break; - case 0x2b: /* LTH2 */ return 1; break; + case 0x26: /* DUP2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x27: /* OVR2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2]; uxn.wst.ptr++; pc++; break; + case 0x28: /* EQU2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] == uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x29: /* NEQ2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] != uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x2a: /* GTH2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] > uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x2b: /* LTH2 */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] < uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; case 0x2c: /* JMP2 */ return 1; break; case 0x2d: /* JCN2 */ return 1; break; case 0x2e: /* JSR2 */ return 1; break; @@ -67,17 +67,17 @@ uxn_eval(Uint16 pc) { case 0x3e: /* EOR2 */ return 1; break; case 0x3f: /* SFT2 */ return 1; break; case 0x40: /* JMI */ return 1; break; - case 0x41: /* INCr */ uxn.rst.dat[uxn.rst.ptr - 1]++; pc++; break; + case 0x41: /* INCr */ uxn.rst.dat[uxn.rst.ptr-1]++; pc++; break; case 0x42: /* POPr */ uxn.rst.ptr--; pc++; break; - case 0x43: /* NIPr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr - 1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; + case 0x43: /* NIPr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr-1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; case 0x44: /* SWPr */ break; case 0x45: /* ROTr */ break; - case 0x46: /* DUPr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr - 1]; uxn.rst.ptr++; pc++; break; - case 0x47: /* OVRr */ break; - case 0x48: /* EQUr */ return 1; break; - case 0x49: /* NEQr */ return 1; break; - case 0x4a: /* GTHr */ return 1; break; - case 0x4b: /* LTHr */ return 1; break; + case 0x46: /* DUPr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x47: /* OVRr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2]; uxn.rst.ptr++; pc++; break; + case 0x48: /* EQUr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] == uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x49: /* NEQr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] != uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x4a: /* GTHr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] > uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x4b: /* LTHr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] < uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; case 0x4c: /* JMPr */ return 1; break; case 0x4d: /* JCNr */ return 1; break; case 0x4e: /* JSRr */ return 1; break; @@ -99,17 +99,17 @@ uxn_eval(Uint16 pc) { case 0x5e: /* EORr */ return 1; break; case 0x5f: /* SFTr */ return 1; break; case 0x60: /* JSI */ return 1; break; - case 0x61: /* INC2r */ uxn.rst.dat[uxn.rst.ptr - 1]++; pc++; break; + case 0x61: /* INC2r */ uxn.rst.dat[uxn.rst.ptr-1]++; pc++; break; case 0x62: /* POP2r */ uxn.rst.ptr--; pc++; break; - case 0x63: /* NIP2r */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr - 1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; + case 0x63: /* NIP2r */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr-1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; case 0x64: /* SWP2r */ break; case 0x65: /* ROT2r */ break; - case 0x66: /* DUP2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr - 1]; uxn.rst.ptr++; pc++; break; - case 0x67: /* OVR2r */ break; - case 0x68: /* EQU2r */ return 1; break; - case 0x69: /* NEQ2r */ return 1; break; - case 0x6a: /* GTH2r */ return 1; break; - case 0x6b: /* LTH2r */ return 1; break; + case 0x66: /* DUP2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x67: /* OVR2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2]; uxn.rst.ptr++; pc++; break; + case 0x68: /* EQU2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] == uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x69: /* NEQ2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] != uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x6a: /* GTH2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] > uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0x6b: /* LTH2r */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] < uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; case 0x6c: /* JMP2r */ return 1; break; case 0x6d: /* JCN2r */ return 1; break; case 0x6e: /* JSR2r */ return 1; break; @@ -131,17 +131,17 @@ uxn_eval(Uint16 pc) { case 0x7e: /* EOR2r */ return 1; break; case 0x7f: /* SFT2r */ return 1; break; case 0x80: /* LITk */ uxn.wst.dat[uxn.wst.ptr++] = uxn.ram[++pc]; pc++; break; - case 0x81: /* INCk */ uxn.wst.dat[uxn.wst.ptr - 1]++; pc++; break; + case 0x81: /* INCk */ uxn.wst.dat[uxn.wst.ptr-1]++; pc++; break; case 0x82: /* POPk */ uxn.wst.ptr--; pc++; break; - case 0x83: /* NIPk */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr - 1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; + case 0x83: /* NIPk */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr-1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; case 0x84: /* SWPk */ break; case 0x85: /* ROTk */ break; - case 0x86: /* DUPk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr - 1]; uxn.wst.ptr++; pc++; break; - case 0x87: /* OVRk */ break; - case 0x88: /* EQUk */ return 1; break; - case 0x89: /* NEQk */ return 1; break; - case 0x8a: /* GTHk */ return 1; break; - case 0x8b: /* LTHk */ return 1; break; + case 0x86: /* DUPk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x87: /* OVRk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2]; uxn.wst.ptr++; pc++; break; + case 0x88: /* EQUk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] == uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x89: /* NEQk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] != uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x8a: /* GTHk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] > uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0x8b: /* LTHk */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] < uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; case 0x8c: /* JMPk */ return 1; break; case 0x8d: /* JCNk */ return 1; break; case 0x8e: /* JSRk */ return 1; break; @@ -163,17 +163,17 @@ uxn_eval(Uint16 pc) { case 0x9e: /* EORk */ return 1; break; case 0x9f: /* SFTk */ return 1; break; case 0xa0: /* LIT2k */ break; - case 0xa1: /* INC2k */ uxn.wst.dat[uxn.wst.ptr - 1]++; pc++; break; + case 0xa1: /* INC2k */ uxn.wst.dat[uxn.wst.ptr-1]++; pc++; break; case 0xa2: /* POP2k */ uxn.wst.ptr--; pc++; break; - case 0xa3: /* NIP2k */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr - 1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; + case 0xa3: /* NIP2k */ uxn.wst.ptr--; uxn.wst.dat[uxn.wst.ptr-1] = uxn.wst.dat[uxn.wst.ptr]; pc++; break; case 0xa4: /* SWP2k */ break; case 0xa5: /* ROT2k */ break; - case 0xa6: /* DUP2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr - 1]; uxn.wst.ptr++; pc++; break; - case 0xa7: /* OVR2k */ break; - case 0xa8: /* EQU2k */ return 1; break; - case 0xa9: /* NEQ2k */ return 1; break; - case 0xaa: /* GTH2k */ return 1; break; - case 0xab: /* LTH2k */ return 1; break; + case 0xa6: /* DUP2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0xa7: /* OVR2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2]; uxn.wst.ptr++; pc++; break; + case 0xa8: /* EQU2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] == uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0xa9: /* NEQ2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] != uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0xaa: /* GTH2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] > uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; + case 0xab: /* LTH2k */ uxn.wst.dat[uxn.wst.ptr] = uxn.wst.dat[uxn.wst.ptr-2] < uxn.wst.dat[uxn.wst.ptr-1]; uxn.wst.ptr++; pc++; break; case 0xac: /* JMP2k */ return 1; break; case 0xad: /* JCN2k */ return 1; break; case 0xae: /* JSR2k */ return 1; break; @@ -195,17 +195,17 @@ uxn_eval(Uint16 pc) { case 0xbe: /* EOR2k */ return 1; break; case 0xbf: /* SFT2k */ return 1; break; case 0xc0: /* LITkr */ uxn.rst.dat[uxn.rst.ptr++] = uxn.ram[++pc]; pc++; break; - case 0xc1: /* INCkr */ uxn.rst.dat[uxn.rst.ptr - 1]++; pc++; break; + case 0xc1: /* INCkr */ uxn.rst.dat[uxn.rst.ptr-1]++; pc++; break; case 0xc2: /* POPkr */ uxn.rst.ptr--; pc++; break; - case 0xc3: /* NIPkr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr - 1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; + case 0xc3: /* NIPkr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr-1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; case 0xc4: /* SWPkr */ break; case 0xc5: /* ROTkr */ break; - case 0xc6: /* DUPkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr - 1]; uxn.rst.ptr++; pc++; break; - case 0xc7: /* OVRkr */ break; - case 0xc8: /* EQUkr */ return 1; break; - case 0xc9: /* NEQkr */ return 1; break; - case 0xca: /* GTHkr */ return 1; break; - case 0xcb: /* LTHkr */ return 1; break; + case 0xc6: /* DUPkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xc7: /* OVRkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2]; uxn.rst.ptr++; pc++; break; + case 0xc8: /* EQUkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] == uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xc9: /* NEQkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] != uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xca: /* GTHkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] > uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xcb: /* LTHkr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] < uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; case 0xcc: /* JMPkr */ return 1; break; case 0xcd: /* JCNkr */ return 1; break; case 0xce: /* JSRkr */ return 1; break; @@ -227,17 +227,17 @@ uxn_eval(Uint16 pc) { case 0xde: /* EORkr */ return 1; break; case 0xdf: /* SFTkr */ return 1; break; case 0xe0: /* LIT2kr */ return 1; break; - case 0xe1: /* INC2kr */ uxn.rst.dat[uxn.rst.ptr - 1]++; pc++; break; + case 0xe1: /* INC2kr */ uxn.rst.dat[uxn.rst.ptr-1]++; pc++; break; case 0xe2: /* POP2kr */ uxn.rst.ptr--; pc++; break; - case 0xe3: /* NIP2kr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr - 1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; + case 0xe3: /* NIP2kr */ uxn.rst.ptr--; uxn.rst.dat[uxn.rst.ptr-1] = uxn.rst.dat[uxn.rst.ptr]; pc++; break; case 0xe4: /* SWP2kr */ break; case 0xe5: /* ROT2kr */ break; - case 0xe6: /* DUP2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr - 1]; uxn.rst.ptr++; pc++; break; - case 0xe7: /* OVR2kr */ break; - case 0xe8: /* EQU2kr */ return 1; break; - case 0xe9: /* NEQ2kr */ return 1; break; - case 0xea: /* GTH2kr */ return 1; break; - case 0xeb: /* LTH2kr */ return 1; break; + case 0xe6: /* DUP2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xe7: /* OVR2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2]; uxn.rst.ptr++; pc++; break; + case 0xe8: /* EQU2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] == uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xe9: /* NEQ2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] != uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xea: /* GTH2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] > uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; + case 0xeb: /* LTH2kr */ uxn.rst.dat[uxn.rst.ptr] = uxn.rst.dat[uxn.rst.ptr-2] < uxn.rst.dat[uxn.rst.ptr-1]; uxn.rst.ptr++; pc++; break; case 0xec: /* JMP2kr */ return 1; break; case 0xed: /* JCN2kr */ return 1; break; case 0xee: /* JSR2kr */ return 1; break; diff --git a/cli/uxncore/src/uxncore.tal b/cli/uxncore/src/uxncore.tal index 2f64cfb..24978cc 100644 --- a/cli/uxncore/src/uxncore.tal +++ b/cli/uxncore/src/uxncore.tal @@ -82,7 +82,7 @@ @opc-lut [ =op-brk =op-inc =op-pop =op-nip =op-swp =op-rot =op-dup =op-ovr - =op-brk =op-brk =op-brk =op-brk + =op-equ =op-neq =op-gth =op-lth =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk =op-brk @@ -99,8 +99,7 @@ @op-lit ( byte -- ) [ LIT2 "[ 18 ] DEO - - + [ LIT2 "] 18 ] DEO @@ -166,13 +165,113 @@ #01 [ LIT2 "] 18 ] DEO - - + POP ! @op-ovr ( byte -- ) - POP JMP2r + + [ LIT2 "[ 18 ] DEO + + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #02 + [ LIT2 "] 18 ] DEO + + + + POP ! + +@op-equ ( byte -- ) + + [ LIT2 "[ 18 ] DEO + + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #02 + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #01 + [ LIT2 "] 18 ] DEO + + + + POP ! + +@op-neq ( byte -- ) + + [ LIT2 "[ 18 ] DEO + + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #02 + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #01 + [ LIT2 "] 18 ] DEO + + + + POP ! + +@op-gth ( byte -- ) + + [ LIT2 "[ 18 ] DEO + + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #02 + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #01 + [ LIT2 "] 18 ] DEO + + + + POP ! + +@op-lth ( byte -- ) + + [ LIT2 "[ 18 ] DEO + + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #02 + [ LIT2 "] 18 ] DEO + + + [ LIT2 "[ 18 ] DEO + + #01 + [ LIT2 "] 18 ] DEO + + + + POP ! ( @|framework ) @@ -185,6 +284,31 @@ [ LIT2 "- 18 ] DEOk DEO JMP2r +@ ( -- ) + #2018 DEO + [ LIT2 "= 18 ] DEOk DEO + #2018 DEO + JMP2r + +@ ( -- ) + #2018 DEO + [ LIT2 "! 18 ] DEO + [ LIT2 "= 18 ] DEO + #2018 DEO + JMP2r + +@ ( -- ) + #2018 DEO + [ LIT2 "> 18 ] DEO + #2018 DEO + JMP2r + +@ ( -- ) + #2018 DEO + [ LIT2 "< 18 ] DEO + #2018 DEO + JMP2r + @ ( -- ) [ LIT2 "t 18 ] DEO @@ -199,9 +323,7 @@ JMP2r @ ( numchar -- ) - #2018 DEO [ LIT2 "- 18 ] DEO - #2018 DEO [ LIT "0 ] ADD #18 DEO JMP2r @@ -220,6 +342,10 @@ DUP #40 AND ?{ ;dict/uxn-wst-ptr ! } ;dict/uxn-rst-ptr ! +@ ( byte -- byte ) + + ! + @ ( -- ) ;dict/uxn-ram !