... | ... |
@@ -917,9 +917,9 @@ |
917 | 917 |
@asma-opcodes |
918 | 918 |
&BRK :&AND :&DEI &_disasm "BRK 00 |
919 | 919 |
&_entry :&EQU :&ROT "LIT 00 |
920 |
- &NIP :&MUL :&OVR "NIP 00 |
|
921 | 920 |
&POP $2 $2 "POP 00 |
922 | 921 |
&DUP :&DIV :&EOR "DUP 00 |
922 |
+ &NIP :&MUL :&OVR "NIP 00 |
|
923 | 923 |
&SWP $2 $2 "SWP 00 |
924 | 924 |
&OVR :&ORA :&POP "OVR 00 |
925 | 925 |
&ROT :&NIP :&STR "ROT 00 |
... | ... |
@@ -81,23 +81,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
81 | 81 |
u->wst.ptr += 1; |
82 | 82 |
} |
83 | 83 |
break; |
84 |
- case 0x02: /* NIP */ |
|
85 |
- __asm__("evaluxn_02_NIP:"); |
|
86 |
- { |
|
87 |
- Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
|
88 |
- u->wst.dat[u->wst.ptr - 2]; |
|
89 |
- u->wst.dat[u->wst.ptr - 2] = a; |
|
90 |
-#ifndef NO_STACK_CHECKS |
|
91 |
- if(__builtin_expect(u->wst.ptr < 2, 0)) { |
|
92 |
- u->wst.error = 1; |
|
93 |
- goto error; |
|
94 |
- } |
|
95 |
-#endif |
|
96 |
- u->wst.ptr -= 1; |
|
97 |
- } |
|
98 |
- break; |
|
99 |
- case 0x03: /* POP */ |
|
100 |
- __asm__("evaluxn_03_POP:"); |
|
84 |
+ case 0x02: /* POP */ |
|
85 |
+ __asm__("evaluxn_02_POP:"); |
|
101 | 86 |
{ |
102 | 87 |
u->wst.dat[u->wst.ptr - 1]; |
103 | 88 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -109,8 +94,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
109 | 94 |
u->wst.ptr -= 1; |
110 | 95 |
} |
111 | 96 |
break; |
112 |
- case 0x04: /* DUP */ |
|
113 |
- __asm__("evaluxn_04_DUP:"); |
|
97 |
+ case 0x03: /* DUP */ |
|
98 |
+ __asm__("evaluxn_03_DUP:"); |
|
114 | 99 |
{ |
115 | 100 |
Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
116 | 101 |
u->wst.dat[u->wst.ptr] = a; |
... | ... |
@@ -127,6 +112,21 @@ uxn_eval(Uxn *u, Uint16 vec) |
127 | 112 |
u->wst.ptr += 1; |
128 | 113 |
} |
129 | 114 |
break; |
115 |
+ case 0x04: /* NIP */ |
|
116 |
+ __asm__("evaluxn_04_NIP:"); |
|
117 |
+ { |
|
118 |
+ Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
|
119 |
+ u->wst.dat[u->wst.ptr - 2]; |
|
120 |
+ u->wst.dat[u->wst.ptr - 2] = a; |
|
121 |
+#ifndef NO_STACK_CHECKS |
|
122 |
+ if(__builtin_expect(u->wst.ptr < 2, 0)) { |
|
123 |
+ u->wst.error = 1; |
|
124 |
+ goto error; |
|
125 |
+ } |
|
126 |
+#endif |
|
127 |
+ u->wst.ptr -= 1; |
|
128 |
+ } |
|
129 |
+ break; |
|
130 | 130 |
case 0x05: /* SWP */ |
131 | 131 |
__asm__("evaluxn_05_SWP:"); |
132 | 132 |
{ |
... | ... |
@@ -548,24 +548,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
548 | 548 |
u->wst.ptr += 2; |
549 | 549 |
} |
550 | 550 |
break; |
551 |
- case 0x22: /* NIP2 */ |
|
552 |
- __asm__("evaluxn_22_NIP2:"); |
|
553 |
- { |
|
554 |
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
|
555 |
- (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8)); |
|
556 |
- u->wst.dat[u->wst.ptr - 4] = a >> 8; |
|
557 |
- u->wst.dat[u->wst.ptr - 3] = a & 0xff; |
|
558 |
-#ifndef NO_STACK_CHECKS |
|
559 |
- if(__builtin_expect(u->wst.ptr < 4, 0)) { |
|
560 |
- u->wst.error = 1; |
|
561 |
- goto error; |
|
562 |
- } |
|
563 |
-#endif |
|
564 |
- u->wst.ptr -= 2; |
|
565 |
- } |
|
566 |
- break; |
|
567 |
- case 0x23: /* POP2 */ |
|
568 |
- __asm__("evaluxn_23_POP2:"); |
|
551 |
+ case 0x22: /* POP2 */ |
|
552 |
+ __asm__("evaluxn_22_POP2:"); |
|
569 | 553 |
{ |
570 | 554 |
(u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
571 | 555 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -577,8 +561,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
577 | 561 |
u->wst.ptr -= 2; |
578 | 562 |
} |
579 | 563 |
break; |
580 |
- case 0x24: /* DUP2 */ |
|
581 |
- __asm__("evaluxn_24_DUP2:"); |
|
564 |
+ case 0x23: /* DUP2 */ |
|
565 |
+ __asm__("evaluxn_23_DUP2:"); |
|
582 | 566 |
{ |
583 | 567 |
Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2]; |
584 | 568 |
u->wst.dat[u->wst.ptr] = b; |
... | ... |
@@ -596,6 +580,22 @@ uxn_eval(Uxn *u, Uint16 vec) |
596 | 580 |
u->wst.ptr += 2; |
597 | 581 |
} |
598 | 582 |
break; |
583 |
+ case 0x24: /* NIP2 */ |
|
584 |
+ __asm__("evaluxn_24_NIP2:"); |
|
585 |
+ { |
|
586 |
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
|
587 |
+ (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8)); |
|
588 |
+ u->wst.dat[u->wst.ptr - 4] = a >> 8; |
|
589 |
+ u->wst.dat[u->wst.ptr - 3] = a & 0xff; |
|
590 |
+#ifndef NO_STACK_CHECKS |
|
591 |
+ if(__builtin_expect(u->wst.ptr < 4, 0)) { |
|
592 |
+ u->wst.error = 1; |
|
593 |
+ goto error; |
|
594 |
+ } |
|
595 |
+#endif |
|
596 |
+ u->wst.ptr -= 2; |
|
597 |
+ } |
|
598 |
+ break; |
|
599 | 599 |
case 0x25: /* SWP2 */ |
600 | 600 |
__asm__("evaluxn_25_SWP2:"); |
601 | 601 |
{ |
... | ... |
@@ -1049,23 +1049,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
1049 | 1049 |
u->rst.ptr += 1; |
1050 | 1050 |
} |
1051 | 1051 |
break; |
1052 |
- case 0x42: /* NIPr */ |
|
1053 |
- __asm__("evaluxn_42_NIPr:"); |
|
1054 |
- { |
|
1055 |
- Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
|
1056 |
- u->rst.dat[u->rst.ptr - 2]; |
|
1057 |
- u->rst.dat[u->rst.ptr - 2] = a; |
|
1058 |
-#ifndef NO_STACK_CHECKS |
|
1059 |
- if(__builtin_expect(u->rst.ptr < 2, 0)) { |
|
1060 |
- u->rst.error = 1; |
|
1061 |
- goto error; |
|
1062 |
- } |
|
1063 |
-#endif |
|
1064 |
- u->rst.ptr -= 1; |
|
1065 |
- } |
|
1066 |
- break; |
|
1067 |
- case 0x43: /* POPr */ |
|
1068 |
- __asm__("evaluxn_43_POPr:"); |
|
1052 |
+ case 0x42: /* POPr */ |
|
1053 |
+ __asm__("evaluxn_42_POPr:"); |
|
1069 | 1054 |
{ |
1070 | 1055 |
u->rst.dat[u->rst.ptr - 1]; |
1071 | 1056 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -1077,8 +1062,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
1077 | 1062 |
u->rst.ptr -= 1; |
1078 | 1063 |
} |
1079 | 1064 |
break; |
1080 |
- case 0x44: /* DUPr */ |
|
1081 |
- __asm__("evaluxn_44_DUPr:"); |
|
1065 |
+ case 0x43: /* DUPr */ |
|
1066 |
+ __asm__("evaluxn_43_DUPr:"); |
|
1082 | 1067 |
{ |
1083 | 1068 |
Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
1084 | 1069 |
u->rst.dat[u->rst.ptr] = a; |
... | ... |
@@ -1095,6 +1080,21 @@ uxn_eval(Uxn *u, Uint16 vec) |
1095 | 1080 |
u->rst.ptr += 1; |
1096 | 1081 |
} |
1097 | 1082 |
break; |
1083 |
+ case 0x44: /* NIPr */ |
|
1084 |
+ __asm__("evaluxn_44_NIPr:"); |
|
1085 |
+ { |
|
1086 |
+ Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
|
1087 |
+ u->rst.dat[u->rst.ptr - 2]; |
|
1088 |
+ u->rst.dat[u->rst.ptr - 2] = a; |
|
1089 |
+#ifndef NO_STACK_CHECKS |
|
1090 |
+ if(__builtin_expect(u->rst.ptr < 2, 0)) { |
|
1091 |
+ u->rst.error = 1; |
|
1092 |
+ goto error; |
|
1093 |
+ } |
|
1094 |
+#endif |
|
1095 |
+ u->rst.ptr -= 1; |
|
1096 |
+ } |
|
1097 |
+ break; |
|
1098 | 1098 |
case 0x45: /* SWPr */ |
1099 | 1099 |
__asm__("evaluxn_45_SWPr:"); |
1100 | 1100 |
{ |
... | ... |
@@ -1516,24 +1516,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
1516 | 1516 |
u->rst.ptr += 2; |
1517 | 1517 |
} |
1518 | 1518 |
break; |
1519 |
- case 0x62: /* NIP2r */ |
|
1520 |
- __asm__("evaluxn_62_NIP2r:"); |
|
1521 |
- { |
|
1522 |
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
|
1523 |
- (u->rst.dat[u->rst.ptr - 3] | (u->rst.dat[u->rst.ptr - 4] << 8)); |
|
1524 |
- u->rst.dat[u->rst.ptr - 4] = a >> 8; |
|
1525 |
- u->rst.dat[u->rst.ptr - 3] = a & 0xff; |
|
1526 |
-#ifndef NO_STACK_CHECKS |
|
1527 |
- if(__builtin_expect(u->rst.ptr < 4, 0)) { |
|
1528 |
- u->rst.error = 1; |
|
1529 |
- goto error; |
|
1530 |
- } |
|
1531 |
-#endif |
|
1532 |
- u->rst.ptr -= 2; |
|
1533 |
- } |
|
1534 |
- break; |
|
1535 |
- case 0x63: /* POP2r */ |
|
1536 |
- __asm__("evaluxn_63_POP2r:"); |
|
1519 |
+ case 0x62: /* POP2r */ |
|
1520 |
+ __asm__("evaluxn_62_POP2r:"); |
|
1537 | 1521 |
{ |
1538 | 1522 |
(u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
1539 | 1523 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -1545,8 +1529,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
1545 | 1529 |
u->rst.ptr -= 2; |
1546 | 1530 |
} |
1547 | 1531 |
break; |
1548 |
- case 0x64: /* DUP2r */ |
|
1549 |
- __asm__("evaluxn_64_DUP2r:"); |
|
1532 |
+ case 0x63: /* DUP2r */ |
|
1533 |
+ __asm__("evaluxn_63_DUP2r:"); |
|
1550 | 1534 |
{ |
1551 | 1535 |
Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2]; |
1552 | 1536 |
u->rst.dat[u->rst.ptr] = b; |
... | ... |
@@ -1564,6 +1548,22 @@ uxn_eval(Uxn *u, Uint16 vec) |
1564 | 1548 |
u->rst.ptr += 2; |
1565 | 1549 |
} |
1566 | 1550 |
break; |
1551 |
+ case 0x64: /* NIP2r */ |
|
1552 |
+ __asm__("evaluxn_64_NIP2r:"); |
|
1553 |
+ { |
|
1554 |
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
|
1555 |
+ (u->rst.dat[u->rst.ptr - 3] | (u->rst.dat[u->rst.ptr - 4] << 8)); |
|
1556 |
+ u->rst.dat[u->rst.ptr - 4] = a >> 8; |
|
1557 |
+ u->rst.dat[u->rst.ptr - 3] = a & 0xff; |
|
1558 |
+#ifndef NO_STACK_CHECKS |
|
1559 |
+ if(__builtin_expect(u->rst.ptr < 4, 0)) { |
|
1560 |
+ u->rst.error = 1; |
|
1561 |
+ goto error; |
|
1562 |
+ } |
|
1563 |
+#endif |
|
1564 |
+ u->rst.ptr -= 2; |
|
1565 |
+ } |
|
1566 |
+ break; |
|
1567 | 1567 |
case 0x65: /* SWP2r */ |
1568 | 1568 |
__asm__("evaluxn_65_SWP2r:"); |
1569 | 1569 |
{ |
... | ... |
@@ -2003,54 +2003,54 @@ uxn_eval(Uxn *u, Uint16 vec) |
2003 | 2003 |
u->rst.ptr -= 1; |
2004 | 2004 |
} |
2005 | 2005 |
break; |
2006 |
- case 0x82: /* NIPk */ |
|
2007 |
- __asm__("evaluxn_82_NIPk:"); |
|
2006 |
+ case 0x82: /* POPk */ |
|
2007 |
+ __asm__("evaluxn_82_POPk:"); |
|
2008 | 2008 |
{ |
2009 |
- Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
|
2010 |
- u->wst.dat[u->wst.ptr - 2]; |
|
2011 |
- u->wst.dat[u->wst.ptr] = a; |
|
2009 |
+ u->wst.dat[u->wst.ptr - 1]; |
|
2012 | 2010 |
#ifndef NO_STACK_CHECKS |
2013 |
- if(__builtin_expect(u->wst.ptr < 2, 0)) { |
|
2011 |
+ if(__builtin_expect(u->wst.ptr < 1, 0)) { |
|
2014 | 2012 |
u->wst.error = 1; |
2015 | 2013 |
goto error; |
2016 | 2014 |
} |
2017 |
- if(__builtin_expect(u->wst.ptr > 254, 0)) { |
|
2018 |
- u->wst.error = 2; |
|
2019 |
- goto error; |
|
2020 |
- } |
|
2021 | 2015 |
#endif |
2022 |
- u->wst.ptr += 1; |
|
2023 | 2016 |
} |
2024 | 2017 |
break; |
2025 |
- case 0x83: /* POPk */ |
|
2026 |
- __asm__("evaluxn_83_POPk:"); |
|
2018 |
+ case 0x83: /* DUPk */ |
|
2019 |
+ __asm__("evaluxn_83_DUPk:"); |
|
2027 | 2020 |
{ |
2028 |
- u->wst.dat[u->wst.ptr - 1]; |
|
2021 |
+ Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
|
2022 |
+ u->wst.dat[u->wst.ptr] = a; |
|
2023 |
+ u->wst.dat[u->wst.ptr + 1] = a; |
|
2029 | 2024 |
#ifndef NO_STACK_CHECKS |
2030 | 2025 |
if(__builtin_expect(u->wst.ptr < 1, 0)) { |
2031 | 2026 |
u->wst.error = 1; |
2032 | 2027 |
goto error; |
2033 | 2028 |
} |
2029 |
+ if(__builtin_expect(u->wst.ptr > 253, 0)) { |
|
2030 |
+ u->wst.error = 2; |
|
2031 |
+ goto error; |
|
2032 |
+ } |
|
2034 | 2033 |
#endif |
2034 |
+ u->wst.ptr += 2; |
|
2035 | 2035 |
} |
2036 | 2036 |
break; |
2037 |
- case 0x84: /* DUPk */ |
|
2038 |
- __asm__("evaluxn_84_DUPk:"); |
|
2037 |
+ case 0x84: /* NIPk */ |
|
2038 |
+ __asm__("evaluxn_84_NIPk:"); |
|
2039 | 2039 |
{ |
2040 | 2040 |
Uint8 a = u->wst.dat[u->wst.ptr - 1]; |
2041 |
+ u->wst.dat[u->wst.ptr - 2]; |
|
2041 | 2042 |
u->wst.dat[u->wst.ptr] = a; |
2042 |
- u->wst.dat[u->wst.ptr + 1] = a; |
|
2043 | 2043 |
#ifndef NO_STACK_CHECKS |
2044 |
- if(__builtin_expect(u->wst.ptr < 1, 0)) { |
|
2044 |
+ if(__builtin_expect(u->wst.ptr < 2, 0)) { |
|
2045 | 2045 |
u->wst.error = 1; |
2046 | 2046 |
goto error; |
2047 | 2047 |
} |
2048 |
- if(__builtin_expect(u->wst.ptr > 253, 0)) { |
|
2048 |
+ if(__builtin_expect(u->wst.ptr > 254, 0)) { |
|
2049 | 2049 |
u->wst.error = 2; |
2050 | 2050 |
goto error; |
2051 | 2051 |
} |
2052 | 2052 |
#endif |
2053 |
- u->wst.ptr += 2; |
|
2053 |
+ u->wst.ptr += 1; |
|
2054 | 2054 |
} |
2055 | 2055 |
break; |
2056 | 2056 |
case 0x85: /* SWPk */ |
... | ... |
@@ -2526,28 +2526,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
2526 | 2526 |
u->wst.ptr += 1; |
2527 | 2527 |
} |
2528 | 2528 |
break; |
2529 |
- case 0xa2: /* NIP2k */ |
|
2530 |
- __asm__("evaluxn_a2_NIP2k:"); |
|
2531 |
- { |
|
2532 |
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
|
2533 |
- (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8)); |
|
2534 |
- u->wst.dat[u->wst.ptr] = a >> 8; |
|
2535 |
- u->wst.dat[u->wst.ptr + 1] = a & 0xff; |
|
2536 |
-#ifndef NO_STACK_CHECKS |
|
2537 |
- if(__builtin_expect(u->wst.ptr < 4, 0)) { |
|
2538 |
- u->wst.error = 1; |
|
2539 |
- goto error; |
|
2540 |
- } |
|
2541 |
- if(__builtin_expect(u->wst.ptr > 253, 0)) { |
|
2542 |
- u->wst.error = 2; |
|
2543 |
- goto error; |
|
2544 |
- } |
|
2545 |
-#endif |
|
2546 |
- u->wst.ptr += 2; |
|
2547 |
- } |
|
2548 |
- break; |
|
2549 |
- case 0xa3: /* POP2k */ |
|
2550 |
- __asm__("evaluxn_a3_POP2k:"); |
|
2529 |
+ case 0xa2: /* POP2k */ |
|
2530 |
+ __asm__("evaluxn_a2_POP2k:"); |
|
2551 | 2531 |
{ |
2552 | 2532 |
(u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
2553 | 2533 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -2558,8 +2538,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
2558 | 2538 |
#endif |
2559 | 2539 |
} |
2560 | 2540 |
break; |
2561 |
- case 0xa4: /* DUP2k */ |
|
2562 |
- __asm__("evaluxn_a4_DUP2k:"); |
|
2541 |
+ case 0xa3: /* DUP2k */ |
|
2542 |
+ __asm__("evaluxn_a3_DUP2k:"); |
|
2563 | 2543 |
{ |
2564 | 2544 |
Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2]; |
2565 | 2545 |
u->wst.dat[u->wst.ptr] = b; |
... | ... |
@@ -2579,6 +2559,26 @@ uxn_eval(Uxn *u, Uint16 vec) |
2579 | 2559 |
u->wst.ptr += 4; |
2580 | 2560 |
} |
2581 | 2561 |
break; |
2562 |
+ case 0xa4: /* NIP2k */ |
|
2563 |
+ __asm__("evaluxn_a4_NIP2k:"); |
|
2564 |
+ { |
|
2565 |
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)); |
|
2566 |
+ (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8)); |
|
2567 |
+ u->wst.dat[u->wst.ptr] = a >> 8; |
|
2568 |
+ u->wst.dat[u->wst.ptr + 1] = a & 0xff; |
|
2569 |
+#ifndef NO_STACK_CHECKS |
|
2570 |
+ if(__builtin_expect(u->wst.ptr < 4, 0)) { |
|
2571 |
+ u->wst.error = 1; |
|
2572 |
+ goto error; |
|
2573 |
+ } |
|
2574 |
+ if(__builtin_expect(u->wst.ptr > 253, 0)) { |
|
2575 |
+ u->wst.error = 2; |
|
2576 |
+ goto error; |
|
2577 |
+ } |
|
2578 |
+#endif |
|
2579 |
+ u->wst.ptr += 2; |
|
2580 |
+ } |
|
2581 |
+ break; |
|
2582 | 2582 |
case 0xa5: /* SWP2k */ |
2583 | 2583 |
__asm__("evaluxn_a5_SWP2k:"); |
2584 | 2584 |
{ |
... | ... |
@@ -3073,54 +3073,54 @@ uxn_eval(Uxn *u, Uint16 vec) |
3073 | 3073 |
u->wst.ptr += 2; |
3074 | 3074 |
} |
3075 | 3075 |
break; |
3076 |
- case 0xc2: /* NIPkr */ |
|
3077 |
- __asm__("evaluxn_c2_NIPkr:"); |
|
3076 |
+ case 0xc2: /* POPkr */ |
|
3077 |
+ __asm__("evaluxn_c2_POPkr:"); |
|
3078 | 3078 |
{ |
3079 |
- Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
|
3080 |
- u->rst.dat[u->rst.ptr - 2]; |
|
3081 |
- u->rst.dat[u->rst.ptr] = a; |
|
3079 |
+ u->rst.dat[u->rst.ptr - 1]; |
|
3082 | 3080 |
#ifndef NO_STACK_CHECKS |
3083 |
- if(__builtin_expect(u->rst.ptr < 2, 0)) { |
|
3081 |
+ if(__builtin_expect(u->rst.ptr < 1, 0)) { |
|
3084 | 3082 |
u->rst.error = 1; |
3085 | 3083 |
goto error; |
3086 | 3084 |
} |
3087 |
- if(__builtin_expect(u->rst.ptr > 254, 0)) { |
|
3088 |
- u->rst.error = 2; |
|
3089 |
- goto error; |
|
3090 |
- } |
|
3091 | 3085 |
#endif |
3092 |
- u->rst.ptr += 1; |
|
3093 | 3086 |
} |
3094 | 3087 |
break; |
3095 |
- case 0xc3: /* POPkr */ |
|
3096 |
- __asm__("evaluxn_c3_POPkr:"); |
|
3088 |
+ case 0xc3: /* DUPkr */ |
|
3089 |
+ __asm__("evaluxn_c3_DUPkr:"); |
|
3097 | 3090 |
{ |
3098 |
- u->rst.dat[u->rst.ptr - 1]; |
|
3091 |
+ Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
|
3092 |
+ u->rst.dat[u->rst.ptr] = a; |
|
3093 |
+ u->rst.dat[u->rst.ptr + 1] = a; |
|
3099 | 3094 |
#ifndef NO_STACK_CHECKS |
3100 | 3095 |
if(__builtin_expect(u->rst.ptr < 1, 0)) { |
3101 | 3096 |
u->rst.error = 1; |
3102 | 3097 |
goto error; |
3103 | 3098 |
} |
3099 |
+ if(__builtin_expect(u->rst.ptr > 253, 0)) { |
|
3100 |
+ u->rst.error = 2; |
|
3101 |
+ goto error; |
|
3102 |
+ } |
|
3104 | 3103 |
#endif |
3104 |
+ u->rst.ptr += 2; |
|
3105 | 3105 |
} |
3106 | 3106 |
break; |
3107 |
- case 0xc4: /* DUPkr */ |
|
3108 |
- __asm__("evaluxn_c4_DUPkr:"); |
|
3107 |
+ case 0xc4: /* NIPkr */ |
|
3108 |
+ __asm__("evaluxn_c4_NIPkr:"); |
|
3109 | 3109 |
{ |
3110 | 3110 |
Uint8 a = u->rst.dat[u->rst.ptr - 1]; |
3111 |
+ u->rst.dat[u->rst.ptr - 2]; |
|
3111 | 3112 |
u->rst.dat[u->rst.ptr] = a; |
3112 |
- u->rst.dat[u->rst.ptr + 1] = a; |
|
3113 | 3113 |
#ifndef NO_STACK_CHECKS |
3114 |
- if(__builtin_expect(u->rst.ptr < 1, 0)) { |
|
3114 |
+ if(__builtin_expect(u->rst.ptr < 2, 0)) { |
|
3115 | 3115 |
u->rst.error = 1; |
3116 | 3116 |
goto error; |
3117 | 3117 |
} |
3118 |
- if(__builtin_expect(u->rst.ptr > 253, 0)) { |
|
3118 |
+ if(__builtin_expect(u->rst.ptr > 254, 0)) { |
|
3119 | 3119 |
u->rst.error = 2; |
3120 | 3120 |
goto error; |
3121 | 3121 |
} |
3122 | 3122 |
#endif |
3123 |
- u->rst.ptr += 2; |
|
3123 |
+ u->rst.ptr += 1; |
|
3124 | 3124 |
} |
3125 | 3125 |
break; |
3126 | 3126 |
case 0xc5: /* SWPkr */ |
... | ... |
@@ -3596,28 +3596,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
3596 | 3596 |
u->rst.ptr += 1; |
3597 | 3597 |
} |
3598 | 3598 |
break; |
3599 |
- case 0xe2: /* NIP2kr */ |
|
3600 |
- __asm__("evaluxn_e2_NIP2kr:"); |
|
3601 |
- { |
|
3602 |
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
|
3603 |
- (u->rst.dat[u->rst.ptr - 3] | (u->rst.dat[u->rst.ptr - 4] << 8)); |
|
3604 |
- u->rst.dat[u->rst.ptr] = a >> 8; |
|
3605 |
- u->rst.dat[u->rst.ptr + 1] = a & 0xff; |
|
3606 |
-#ifndef NO_STACK_CHECKS |
|
3607 |
- if(__builtin_expect(u->rst.ptr < 4, 0)) { |
|
3608 |
- u->rst.error = 1; |
|
3609 |
- goto error; |
|
3610 |
- } |
|
3611 |
- if(__builtin_expect(u->rst.ptr > 253, 0)) { |
|
3612 |
- u->rst.error = 2; |
|
3613 |
- goto error; |
|
3614 |
- } |
|
3615 |
-#endif |
|
3616 |
- u->rst.ptr += 2; |
|
3617 |
- } |
|
3618 |
- break; |
|
3619 |
- case 0xe3: /* POP2kr */ |
|
3620 |
- __asm__("evaluxn_e3_POP2kr:"); |
|
3599 |
+ case 0xe2: /* POP2kr */ |
|
3600 |
+ __asm__("evaluxn_e2_POP2kr:"); |
|
3621 | 3601 |
{ |
3622 | 3602 |
(u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
3623 | 3603 |
#ifndef NO_STACK_CHECKS |
... | ... |
@@ -3628,8 +3608,8 @@ uxn_eval(Uxn *u, Uint16 vec) |
3628 | 3608 |
#endif |
3629 | 3609 |
} |
3630 | 3610 |
break; |
3631 |
- case 0xe4: /* DUP2kr */ |
|
3632 |
- __asm__("evaluxn_e4_DUP2kr:"); |
|
3611 |
+ case 0xe3: /* DUP2kr */ |
|
3612 |
+ __asm__("evaluxn_e3_DUP2kr:"); |
|
3633 | 3613 |
{ |
3634 | 3614 |
Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2]; |
3635 | 3615 |
u->rst.dat[u->rst.ptr] = b; |
... | ... |
@@ -3649,6 +3629,26 @@ uxn_eval(Uxn *u, Uint16 vec) |
3649 | 3629 |
u->rst.ptr += 4; |
3650 | 3630 |
} |
3651 | 3631 |
break; |
3632 |
+ case 0xe4: /* NIP2kr */ |
|
3633 |
+ __asm__("evaluxn_e4_NIP2kr:"); |
|
3634 |
+ { |
|
3635 |
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8)); |
|
3636 |
+ (u->rst.dat[u->rst.ptr - 3] | (u->rst.dat[u->rst.ptr - 4] << 8)); |
|
3637 |
+ u->rst.dat[u->rst.ptr] = a >> 8; |
|
3638 |
+ u->rst.dat[u->rst.ptr + 1] = a & 0xff; |
|
3639 |
+#ifndef NO_STACK_CHECKS |
|
3640 |
+ if(__builtin_expect(u->rst.ptr < 4, 0)) { |
|
3641 |
+ u->rst.error = 1; |
|
3642 |
+ goto error; |
|
3643 |
+ } |
|
3644 |
+ if(__builtin_expect(u->rst.ptr > 253, 0)) { |
|
3645 |
+ u->rst.error = 2; |
|
3646 |
+ goto error; |
|
3647 |
+ } |
|
3648 |
+#endif |
|
3649 |
+ u->rst.ptr += 2; |
|
3650 |
+ } |
|
3651 |
+ break; |
|
3652 | 3652 |
case 0xe5: /* SWP2kr */ |
3653 | 3653 |
__asm__("evaluxn_e5_SWP2kr:"); |
3654 | 3654 |
{ |
... | ... |
@@ -35,9 +35,9 @@ static Uint16 devpeek16(Device *d, Uint16 a) { return (devpeek8(d, a) << 8) + de |
35 | 35 |
/* Stack */ |
36 | 36 |
static void op_brk(Uxn *u) { u->ram.ptr = 0; } |
37 | 37 |
static void op_lit(Uxn *u) { push8(u->src, mempeek8(u->ram.dat, u->ram.ptr++)); } |
38 |
-static void op_nip(Uxn *u) { Uint8 a = pop8(u->src); pop8(u->src); push8(u->src, a); } |
|
39 | 38 |
static void op_pop(Uxn *u) { pop8(u->src); } |
40 | 39 |
static void op_dup(Uxn *u) { Uint8 a = pop8(u->src); push8(u->src, a); push8(u->src, a); } |
40 |
+static void op_nip(Uxn *u) { Uint8 a = pop8(u->src); pop8(u->src); push8(u->src, a); } |
|
41 | 41 |
static void op_swp(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, a); push8(u->src, b); } |
42 | 42 |
static void op_ovr(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b); push8(u->src, a); push8(u->src, b); } |
43 | 43 |
static void op_rot(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src), c = pop8(u->src); push8(u->src, b); push8(u->src, a); push8(u->src, c); } |
... | ... |
@@ -70,9 +70,9 @@ static void op_eor(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u-> |
70 | 70 |
static void op_sft(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b >> (a & 0x07) << ((a & 0x70) >> 4)); } |
71 | 71 |
/* Stack */ |
72 | 72 |
static void op_lit16(Uxn *u) { push16(u->src, mempeek16(u->ram.dat, u->ram.ptr++)); u->ram.ptr++; } |
73 |
-static void op_nip16(Uxn *u) { Uint16 a = pop16(u->src); pop16(u->src); push16(u->src, a); } |
|
74 | 73 |
static void op_pop16(Uxn *u) { pop16(u->src); } |
75 | 74 |
static void op_dup16(Uxn *u) { Uint16 a = pop16(u->src); push16(u->src, a); push16(u->src, a); } |
75 |
+static void op_nip16(Uxn *u) { Uint16 a = pop16(u->src); pop16(u->src); push16(u->src, a); } |
|
76 | 76 |
static void op_swp16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, a); push16(u->src, b); } |
77 | 77 |
static void op_ovr16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b); push16(u->src, a); push16(u->src, b); } |
78 | 78 |
static void op_rot16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src), c = pop16(u->src); push16(u->src, b); push16(u->src, a); push16(u->src, c); } |
... | ... |
@@ -105,12 +105,12 @@ static void op_eor16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push |
105 | 105 |
static void op_sft16(Uxn *u) { Uint8 a = pop8(u->src); Uint16 b = pop16(u->src); push16(u->src, b >> (a & 0x0f) << ((a & 0xf0) >> 4)); } |
106 | 106 |
|
107 | 107 |
static void (*ops[])(Uxn *u) = { |
108 |
- op_brk, op_lit, op_nip, op_pop, op_dup, op_swp, op_ovr, op_rot, |
|
108 |
+ op_brk, op_lit, op_pop, op_dup, op_nip, op_swp, op_ovr, op_rot, |
|
109 | 109 |
op_equ, op_neq, op_gth, op_lth, op_jmp, op_jnz, op_jsr, op_sth, |
110 | 110 |
op_pek, op_pok, op_ldr, op_str, op_lda, op_sta, op_dei, op_deo, |
111 | 111 |
op_add, op_sub, op_mul, op_div, op_and, op_ora, op_eor, op_sft, |
112 | 112 |
/* 16-bit */ |
113 |
- op_brk, op_lit16, op_nip16, op_pop16, op_dup16, op_swp16, op_ovr16, op_rot16, |
|
113 |
+ op_brk, op_lit16, op_pop16, op_dup16, op_nip16, op_swp16, op_ovr16, op_rot16, |
|
114 | 114 |
op_equ16, op_neq16, op_gth16, op_lth16, op_jmp16, op_jnz16, op_jsr16, op_sth16, |
115 | 115 |
op_pek16, op_pok16, op_ldr16, op_str16, op_lda16, op_sta16, op_dei16, op_deo16, |
116 | 116 |
op_add16, op_sub16, op_mul16, op_div16, op_and16, op_ora16, op_eor16, op_sft16 |
... | ... |
@@ -40,7 +40,7 @@ Program p; |
40 | 40 |
/* clang-format off */ |
41 | 41 |
|
42 | 42 |
static char ops[][4] = { |
43 |
- "BRK", "LIT", "NIP", "POP", "DUP", "SWP", "OVR", "ROT", |
|
43 |
+ "BRK", "LIT", "POP", "DUP", "NIP", "SWP", "OVR", "ROT", |
|
44 | 44 |
"EQU", "NEQ", "GTH", "LTH", "JMP", "JCN", "JSR", "STH", |
45 | 45 |
"LDZ", "STZ", "LDR", "STR", "LDA", "STA", "DEI", "DEO", |
46 | 46 |
"ADD", "SUB", "MUL", "DIV", "AND", "ORA", "EOR", "SFT" |