commit 6337990fe016a4135812670814e13d4996db84af
parent 4f6a29f57d19256d31854d177a4fdbd1fcbfedca
Author: Andrew Alderwick <andrew@alderwick.co.uk>
Date: Mon, 30 Aug 2021 18:45:04 +0100
Reverted flags in uxn-fast.c
Diffstat:
M | src/uxn-fast.c | | | 1903 | +++++++++++++++++++++++++++++++++++++++---------------------------------------- |
1 file changed, 951 insertions(+), 952 deletions(-)
diff --git a/src/uxn-fast.c b/src/uxn-fast.c
@@ -22,8 +22,7 @@ See etc/mkuxn-fast.moon for instructions.
*/
-#define MODE_RETURN 0x20
-#define MODE_SHORT 0x40
+#define MODE_RETURN 0x40
#define MODE_KEEP 0x80
#pragma mark - Operations
@@ -501,935 +500,935 @@ uxn_eval(Uxn *u, Uint16 vec)
u->wst.ptr -= 1;
}
break;
- case 0x20: /* LITr */
- case 0xa0: /* LITkr */
+ case 0x20: /* LIT2 */
+ case 0xa0: /* LIT2k */
{
- u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, u->ram.ptr++);
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr++);
+ u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, u->ram.ptr++);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0x21: /* INCr */
+ case 0x21: /* INC2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 1] = a + 1;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->wst.dat[u->wst.ptr - 2] = (a + 1) >> 8;
+ u->wst.dat[u->wst.ptr - 1] = (a + 1) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0x22: /* POPr */
+ case 0x22: /* POP2 */
{
- u->rst.dat[u->rst.ptr - 1];
+ (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x23: /* DUPr */
+ case 0x23: /* DUP2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
+ u->wst.dat[u->wst.ptr] = b;
+ u->wst.dat[u->wst.ptr + 1] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0x24: /* NIPr */
+ case 0x24: /* NIP2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = a >> 8;
+ u->wst.dat[u->wst.ptr - 3] = a & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x25: /* SWPr */
+ case 0x25: /* SWP2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = a;
- u->rst.dat[u->rst.ptr - 1] = b;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr - 4] = b;
+ u->wst.dat[u->wst.ptr - 3] = a;
+ u->wst.dat[u->wst.ptr - 2] = d;
+ u->wst.dat[u->wst.ptr - 1] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0x26: /* OVRr */
+ case 0x26: /* OVR2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = d;
+ u->wst.dat[u->wst.ptr + 1] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0x27: /* ROTr */
+ case 0x27: /* ROT2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2], c = u->rst.dat[u->rst.ptr - 3];
- u->rst.dat[u->rst.ptr - 3] = b;
- u->rst.dat[u->rst.ptr - 2] = a;
- u->rst.dat[u->rst.ptr - 1] = c;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4], e = u->wst.dat[u->wst.ptr - 5], f = u->wst.dat[u->wst.ptr - 6];
+ u->wst.dat[u->wst.ptr - 6] = d;
+ u->wst.dat[u->wst.ptr - 5] = c;
+ u->wst.dat[u->wst.ptr - 4] = b;
+ u->wst.dat[u->wst.ptr - 3] = a;
+ u->wst.dat[u->wst.ptr - 2] = f;
+ u->wst.dat[u->wst.ptr - 1] = e;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 3, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 6, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0x28: /* EQUr */
+ case 0x28: /* EQU2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b == a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = b == a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 3;
}
break;
- case 0x29: /* NEQr */
+ case 0x29: /* NEQ2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b != a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = b != a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 3;
}
break;
- case 0x2a: /* GTHr */
+ case 0x2a: /* GTH2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b > a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = b > a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 3;
}
break;
- case 0x2b: /* LTHr */
+ case 0x2b: /* LTH2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b < a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = b < a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 3;
}
break;
- case 0x2c: /* JMPr */
+ case 0x2c: /* JMP2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->ram.ptr += (Sint8)a;
+ u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x2d: /* JCNr */
+ case 0x2d: /* JCN2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- if(u->rst.dat[u->rst.ptr - 2]) u->ram.ptr += (Sint8)a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ if(u->wst.dat[u->wst.ptr - 3]) u->ram.ptr = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 2;
+ u->wst.ptr -= 3;
}
break;
- case 0x2e: /* JSRr */
+ case 0x2e: /* JSR2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->wst.dat[u->wst.ptr] = u->ram.ptr >> 8;
- u->wst.dat[u->wst.ptr + 1] = u->ram.ptr & 0xff;
- u->ram.ptr += (Sint8)a;
+ u->rst.dat[u->rst.ptr] = u->ram.ptr >> 8;
+ u->rst.dat[u->rst.ptr + 1] = u->ram.ptr & 0xff;
+ u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 2;
}
break;
- case 0x2f: /* STHr */
+ case 0x2f: /* STH2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->wst.dat[u->wst.ptr] = a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b;
+ u->rst.dat[u->rst.ptr + 1] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 2;
}
break;
- case 0x30: /* LDZr */
+ case 0x30: /* LDZ2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 1] = peek8(u->ram.dat, a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, a);
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
+ goto error;
+ }
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
+ u->wst.ptr += 1;
}
break;
- case 0x31: /* STZr */
+ case 0x31: /* STZ2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- Uint8 b = u->rst.dat[u->rst.ptr - 2];
- poke8(u->ram.dat, a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ poke16(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 2;
+ u->wst.ptr -= 3;
}
break;
- case 0x32: /* LDRr */
+ case 0x32: /* LDR2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
+ goto error;
+ }
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
+ u->wst.ptr += 1;
}
break;
- case 0x33: /* STRr */
+ case 0x33: /* STR2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- Uint8 b = u->rst.dat[u->rst.ptr - 2];
- poke8(u->ram.dat, u->ram.ptr + (Sint8)a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ poke16(u->ram.dat, u->ram.ptr + (Sint8)a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 2;
+ u->wst.ptr -= 3;
}
break;
- case 0x34: /* LDAr */
+ case 0x34: /* LDA2 */
{
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
- u->rst.dat[u->rst.ptr - 2] = peek8(u->ram.dat, a);
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->wst.dat[u->wst.ptr - 2] = peek8(u->ram.dat, a);
+ u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
}
break;
- case 0x35: /* STAr */
+ case 0x35: /* STA2 */
{
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
- Uint8 b = u->rst.dat[u->rst.ptr - 3];
- poke8(u->ram.dat, a, b);
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint16 b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ poke16(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 3, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 3;
+ u->wst.ptr -= 4;
}
break;
- case 0x36: /* DEIr */
+ case 0x36: /* DEI2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 1] = devr8(&u->dev[a >> 4], a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr - 1] = devr8(&u->dev[a >> 4], a);
+ u->wst.dat[u->wst.ptr] = devr8(&u->dev[a >> 4], a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
+ goto error;
+ }
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
+ u->wst.ptr += 1;
}
break;
- case 0x37: /* DEOr */
+ case 0x37: /* DEO2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- devw8(&u->dev[a >> 4], a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ devw16(&u->dev[a >> 4], a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 2;
+ u->wst.ptr -= 3;
}
break;
- case 0x38: /* ADDr */
+ case 0x38: /* ADD2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b + a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = (b + a) >> 8;
+ u->wst.dat[u->wst.ptr - 3] = (b + a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x39: /* SUBr */
+ case 0x39: /* SUB2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b - a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = (b - a) >> 8;
+ u->wst.dat[u->wst.ptr - 3] = (b - a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3a: /* MULr */
+ case 0x3a: /* MUL2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b * a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr - 4] = (b * a) >> 8;
+ u->wst.dat[u->wst.ptr - 3] = (b * a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3b: /* DIVr */
+ case 0x3b: /* DIV2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
if(a == 0) {
- u->rst.error = 3;
+ u->wst.error = 3;
#ifndef NO_STACK_CHECKS
goto error;
#endif
a = 1;
}
- u->rst.dat[u->rst.ptr - 2] = b / a;
+ u->wst.dat[u->wst.ptr - 4] = (b / a) >> 8;
+ u->wst.dat[u->wst.ptr - 3] = (b / a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3c: /* ANDr */
+ case 0x3c: /* AND2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b & a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr - 4] = d & b;
+ u->wst.dat[u->wst.ptr - 3] = c & a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3d: /* ORAr */
+ case 0x3d: /* ORA2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b | a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr - 4] = d | b;
+ u->wst.dat[u->wst.ptr - 3] = c | a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3e: /* EORr */
+ case 0x3e: /* EOR2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b ^ a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr - 4] = d ^ b;
+ u->wst.dat[u->wst.ptr - 3] = c ^ a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 2;
}
break;
- case 0x3f: /* SFTr */
+ case 0x3f: /* SFT2 */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr - 2] = b >> (a & 0x07) << ((a & 0x70) >> 4);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ u->wst.dat[u->wst.ptr - 3] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) >> 8;
+ u->wst.dat[u->wst.ptr - 2] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
- u->rst.ptr -= 1;
+ u->wst.ptr -= 1;
}
break;
- case 0x40: /* LIT2 */
- case 0xc0: /* LIT2k */
+ case 0x40: /* LITr */
+ case 0xc0: /* LITkr */
{
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr++);
- u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, u->ram.ptr++);
+ u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, u->ram.ptr++);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0x41: /* INC2 */
+ case 0x41: /* INCr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- u->wst.dat[u->wst.ptr - 2] = (a + 1) >> 8;
- u->wst.dat[u->wst.ptr - 1] = (a + 1) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 1] = a + 1;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0x42: /* POP2 */
+ case 0x42: /* POPr */
{
- (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->rst.dat[u->rst.ptr - 1];
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x43: /* DUP2 */
+ case 0x43: /* DUPr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
- u->wst.dat[u->wst.ptr] = b;
- u->wst.dat[u->wst.ptr + 1] = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0x44: /* NIP2 */
+ case 0x44: /* NIPr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = a >> 8;
- u->wst.dat[u->wst.ptr - 3] = a & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x45: /* SWP2 */
+ case 0x45: /* SWPr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr - 4] = b;
- u->wst.dat[u->wst.ptr - 3] = a;
- u->wst.dat[u->wst.ptr - 2] = d;
- u->wst.dat[u->wst.ptr - 1] = c;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = a;
+ u->rst.dat[u->rst.ptr - 1] = b;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0x46: /* OVR2 */
+ case 0x46: /* OVRr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = d;
- u->wst.dat[u->wst.ptr + 1] = c;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0x47: /* ROT2 */
+ case 0x47: /* ROTr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4], e = u->wst.dat[u->wst.ptr - 5], f = u->wst.dat[u->wst.ptr - 6];
- u->wst.dat[u->wst.ptr - 6] = d;
- u->wst.dat[u->wst.ptr - 5] = c;
- u->wst.dat[u->wst.ptr - 4] = b;
- u->wst.dat[u->wst.ptr - 3] = a;
- u->wst.dat[u->wst.ptr - 2] = f;
- u->wst.dat[u->wst.ptr - 1] = e;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2], c = u->rst.dat[u->rst.ptr - 3];
+ u->rst.dat[u->rst.ptr - 3] = b;
+ u->rst.dat[u->rst.ptr - 2] = a;
+ u->rst.dat[u->rst.ptr - 1] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 6, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 3, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0x48: /* EQU2 */
+ case 0x48: /* EQUr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = b == a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b == a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 1;
}
break;
- case 0x49: /* NEQ2 */
+ case 0x49: /* NEQr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = b != a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b != a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 1;
}
break;
- case 0x4a: /* GTH2 */
+ case 0x4a: /* GTHr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = b > a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b > a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 1;
}
break;
- case 0x4b: /* LTH2 */
+ case 0x4b: /* LTHr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = b < a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b < a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 1;
}
break;
- case 0x4c: /* JMP2 */
+ case 0x4c: /* JMPr */
{
- u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x4d: /* JCN2 */
+ case 0x4d: /* JCNr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- if(u->wst.dat[u->wst.ptr - 3]) u->ram.ptr = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ if(u->rst.dat[u->rst.ptr - 2]) u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 2;
}
break;
- case 0x4e: /* JSR2 */
+ case 0x4e: /* JSRr */
{
- u->rst.dat[u->rst.ptr] = u->ram.ptr >> 8;
- u->rst.dat[u->rst.ptr + 1] = u->ram.ptr & 0xff;
- u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = u->ram.ptr >> 8;
+ u->wst.dat[u->wst.ptr + 1] = u->ram.ptr & 0xff;
+ u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 2;
}
break;
- case 0x4f: /* STH2 */
+ case 0x4f: /* STHr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b;
- u->rst.dat[u->rst.ptr + 1] = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 1;
}
break;
- case 0x50: /* LDZ2 */
+ case 0x50: /* LDZr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, a);
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 1] = peek8(u->ram.dat, a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
- goto error;
- }
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr += 1;
}
break;
- case 0x51: /* STZ2 */
+ case 0x51: /* STZr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- poke16(u->ram.dat, a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ Uint8 b = u->rst.dat[u->rst.ptr - 2];
+ poke8(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 2;
}
break;
- case 0x52: /* LDR2 */
+ case 0x52: /* LDRr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
- goto error;
- }
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr += 1;
}
break;
- case 0x53: /* STR2 */
+ case 0x53: /* STRr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- poke16(u->ram.dat, u->ram.ptr + (Sint8)a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ Uint8 b = u->rst.dat[u->rst.ptr - 2];
+ poke8(u->ram.dat, u->ram.ptr + (Sint8)a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 2;
}
break;
- case 0x54: /* LDA2 */
+ case 0x54: /* LDAr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- u->wst.dat[u->wst.ptr - 2] = peek8(u->ram.dat, a);
- u->wst.dat[u->wst.ptr - 1] = peek8(u->ram.dat, a + 1);
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
+ u->rst.dat[u->rst.ptr - 2] = peek8(u->ram.dat, a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
+ u->rst.ptr -= 1;
}
break;
- case 0x55: /* STA2 */
+ case 0x55: /* STAr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- Uint16 b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- poke16(u->ram.dat, a, b);
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
+ Uint8 b = u->rst.dat[u->rst.ptr - 3];
+ poke8(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 3, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 4;
+ u->rst.ptr -= 3;
}
break;
- case 0x56: /* DEI2 */
+ case 0x56: /* DEIr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr - 1] = devr8(&u->dev[a >> 4], a);
- u->wst.dat[u->wst.ptr] = devr8(&u->dev[a >> 4], a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 1] = devr8(&u->dev[a >> 4], a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
- goto error;
- }
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr += 1;
}
break;
- case 0x57: /* DEO2 */
+ case 0x57: /* DEOr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- devw16(&u->dev[a >> 4], a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ devw8(&u->dev[a >> 4], a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 3;
+ u->rst.ptr -= 2;
}
break;
- case 0x58: /* ADD2 */
+ case 0x58: /* ADDr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = (b + a) >> 8;
- u->wst.dat[u->wst.ptr - 3] = (b + a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b + a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x59: /* SUB2 */
+ case 0x59: /* SUBr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = (b - a) >> 8;
- u->wst.dat[u->wst.ptr - 3] = (b - a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b - a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5a: /* MUL2 */
+ case 0x5a: /* MULr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr - 4] = (b * a) >> 8;
- u->wst.dat[u->wst.ptr - 3] = (b * a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b * a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5b: /* DIV2 */
+ case 0x5b: /* DIVr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
if(a == 0) {
- u->wst.error = 3;
+ u->rst.error = 3;
#ifndef NO_STACK_CHECKS
goto error;
#endif
a = 1;
}
- u->wst.dat[u->wst.ptr - 4] = (b / a) >> 8;
- u->wst.dat[u->wst.ptr - 3] = (b / a) & 0xff;
+ u->rst.dat[u->rst.ptr - 2] = b / a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5c: /* AND2 */
+ case 0x5c: /* ANDr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr - 4] = d & b;
- u->wst.dat[u->wst.ptr - 3] = c & a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b & a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5d: /* ORA2 */
+ case 0x5d: /* ORAr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr - 4] = d | b;
- u->wst.dat[u->wst.ptr - 3] = c | a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b | a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5e: /* EOR2 */
+ case 0x5e: /* EORr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr - 4] = d ^ b;
- u->wst.dat[u->wst.ptr - 3] = c ^ a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b ^ a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 2;
+ u->rst.ptr -= 1;
}
break;
- case 0x5f: /* SFT2 */
+ case 0x5f: /* SFTr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- u->wst.dat[u->wst.ptr - 3] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) >> 8;
- u->wst.dat[u->wst.ptr - 2] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr - 2] = b >> (a & 0x07) << ((a & 0x70) >> 4);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
- u->wst.ptr -= 1;
+ u->rst.ptr -= 1;
}
break;
case 0x60: /* LIT2r */
@@ -2426,1049 +2425,1049 @@ uxn_eval(Uxn *u, Uint16 vec)
u->wst.ptr += 1;
}
break;
- case 0xa1: /* INCkr */
+ case 0xa1: /* INC2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = a + 1;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->wst.dat[u->wst.ptr] = (a + 1) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (a + 1) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xa2: /* POPkr */
+ case 0xa2: /* POP2k */
{
- u->rst.dat[u->rst.ptr - 1];
+ (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xa3: /* DUPkr */
+ case 0xa3: /* DUP2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = a;
- u->rst.dat[u->rst.ptr + 1] = a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
+ u->wst.dat[u->wst.ptr] = b;
+ u->wst.dat[u->wst.ptr + 1] = a;
+ u->wst.dat[u->wst.ptr + 2] = b;
+ u->wst.dat[u->wst.ptr + 3] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 251, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 4;
}
break;
- case 0xa4: /* NIPkr */
+ case 0xa4: /* NIP2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = a >> 8;
+ u->wst.dat[u->wst.ptr + 1] = a & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xa5: /* SWPkr */
+ case 0xa5: /* SWP2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = a;
- u->rst.dat[u->rst.ptr + 1] = b;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = b;
+ u->wst.dat[u->wst.ptr + 1] = a;
+ u->wst.dat[u->wst.ptr + 2] = d;
+ u->wst.dat[u->wst.ptr + 3] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 251, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 4;
}
break;
- case 0xa6: /* OVRkr */
+ case 0xa6: /* OVR2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b;
- u->rst.dat[u->rst.ptr + 1] = a;
- u->rst.dat[u->rst.ptr + 2] = b;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = d;
+ u->wst.dat[u->wst.ptr + 1] = c;
+ u->wst.dat[u->wst.ptr + 2] = b;
+ u->wst.dat[u->wst.ptr + 3] = a;
+ u->wst.dat[u->wst.ptr + 4] = d;
+ u->wst.dat[u->wst.ptr + 5] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 252, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 249, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 3;
+ u->wst.ptr += 6;
}
break;
- case 0xa7: /* ROTkr */
+ case 0xa7: /* ROT2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2], c = u->rst.dat[u->rst.ptr - 3];
- u->rst.dat[u->rst.ptr] = b;
- u->rst.dat[u->rst.ptr + 1] = a;
- u->rst.dat[u->rst.ptr + 2] = c;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4], e = u->wst.dat[u->wst.ptr - 5], f = u->wst.dat[u->wst.ptr - 6];
+ u->wst.dat[u->wst.ptr] = d;
+ u->wst.dat[u->wst.ptr + 1] = c;
+ u->wst.dat[u->wst.ptr + 2] = b;
+ u->wst.dat[u->wst.ptr + 3] = a;
+ u->wst.dat[u->wst.ptr + 4] = f;
+ u->wst.dat[u->wst.ptr + 5] = e;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 3, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 6, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 252, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 249, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 3;
+ u->wst.ptr += 6;
}
break;
- case 0xa8: /* EQUkr */
+ case 0xa8: /* EQU2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b == a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = b == a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 1;
}
break;
- case 0xa9: /* NEQkr */
+ case 0xa9: /* NEQ2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b != a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = b != a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 1;
}
break;
- case 0xaa: /* GTHkr */
+ case 0xaa: /* GTH2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b > a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = b > a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 1;
}
break;
- case 0xab: /* LTHkr */
+ case 0xab: /* LTH2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b < a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = b < a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 1;
}
break;
- case 0xac: /* JMPkr */
+ case 0xac: /* JMP2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->ram.ptr += (Sint8)a;
+ u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xad: /* JCNkr */
+ case 0xad: /* JCN2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- if(u->rst.dat[u->rst.ptr - 2]) u->ram.ptr += (Sint8)a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ if(u->wst.dat[u->wst.ptr - 3]) u->ram.ptr = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xae: /* JSRkr */
+ case 0xae: /* JSR2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->wst.dat[u->wst.ptr] = u->ram.ptr >> 8;
- u->wst.dat[u->wst.ptr + 1] = u->ram.ptr & 0xff;
- u->ram.ptr += (Sint8)a;
+ u->rst.dat[u->rst.ptr] = u->ram.ptr >> 8;
+ u->rst.dat[u->rst.ptr + 1] = u->ram.ptr & 0xff;
+ u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 2;
}
break;
- case 0xaf: /* STHkr */
+ case 0xaf: /* STH2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->wst.dat[u->wst.ptr] = a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b;
+ u->rst.dat[u->rst.ptr + 1] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 2;
}
break;
- case 0xb0: /* LDZkr */
+ case 0xb0: /* LDZ2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a);
+ u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xb1: /* STZkr */
+ case 0xb1: /* STZ2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- Uint8 b = u->rst.dat[u->rst.ptr - 2];
- poke8(u->ram.dat, a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ poke16(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xb2: /* LDRkr */
+ case 0xb2: /* LDR2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
+ u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xb3: /* STRkr */
+ case 0xb3: /* STR2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- Uint8 b = u->rst.dat[u->rst.ptr - 2];
- poke8(u->ram.dat, u->ram.ptr + (Sint8)a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ poke16(u->ram.dat, u->ram.ptr + (Sint8)a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xb4: /* LDAkr */
+ case 0xb4: /* LDA2k */
{
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
- u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, a);
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a);
+ u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 2, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xb5: /* STAkr */
+ case 0xb5: /* STA2k */
{
- Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
- Uint8 b = u->rst.dat[u->rst.ptr - 3];
- poke8(u->ram.dat, a, b);
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint16 b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ poke16(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 3, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xb6: /* DEIkr */
+ case 0xb6: /* DEI2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1];
- u->rst.dat[u->rst.ptr] = devr8(&u->dev[a >> 4], a);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = devr8(&u->dev[a >> 4], a);
+ u->wst.dat[u->wst.ptr + 1] = devr8(&u->dev[a >> 4], a + 1);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 1, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 1, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xb7: /* DEOkr */
+ case 0xb7: /* DEO2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- devw8(&u->dev[a >> 4], a, b);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ devw16(&u->dev[a >> 4], a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
#endif
}
break;
- case 0xb8: /* ADDkr */
+ case 0xb8: /* ADD2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b + a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = (b + a) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (b + a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xb9: /* SUBkr */
+ case 0xb9: /* SUB2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b - a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = (b - a) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (b - a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xba: /* MULkr */
+ case 0xba: /* MUL2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b * a;
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ u->wst.dat[u->wst.ptr] = (b * a) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (b * a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xbb: /* DIVkr */
+ case 0xbb: /* DIV2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
if(a == 0) {
- u->rst.error = 3;
+ u->wst.error = 3;
#ifndef NO_STACK_CHECKS
goto error;
#endif
a = 1;
}
- u->rst.dat[u->rst.ptr] = b / a;
+ u->wst.dat[u->wst.ptr] = (b / a) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (b / a) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xbc: /* ANDkr */
+ case 0xbc: /* AND2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b & a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = d & b;
+ u->wst.dat[u->wst.ptr + 1] = c & a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xbd: /* ORAkr */
+ case 0xbd: /* ORA2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b | a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = d | b;
+ u->wst.dat[u->wst.ptr + 1] = c | a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xbe: /* EORkr */
+ case 0xbe: /* EOR2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b ^ a;
+ Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
+ u->wst.dat[u->wst.ptr] = d ^ b;
+ u->wst.dat[u->wst.ptr + 1] = c ^ a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 4, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xbf: /* SFTkr */
+ case 0xbf: /* SFT2k */
{
- Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b >> (a & 0x07) << ((a & 0x70) >> 4);
+ Uint8 a = u->wst.dat[u->wst.ptr - 1];
+ Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
+ u->wst.dat[u->wst.ptr] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) >> 8;
+ u->wst.dat[u->wst.ptr + 1] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) & 0xff;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->rst.ptr < 2, 0)) {
- u->rst.error = 1;
+ if(__builtin_expect(u->wst.ptr < 3, 0)) {
+ u->wst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 254, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 1;
+ u->wst.ptr += 2;
}
break;
- case 0xc1: /* INC2k */
+ case 0xc1: /* INCkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- u->wst.dat[u->wst.ptr] = (a + 1) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (a + 1) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = a + 1;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xc2: /* POP2k */
+ case 0xc2: /* POPkr */
{
- (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ u->rst.dat[u->rst.ptr - 1];
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xc3: /* DUP2k */
+ case 0xc3: /* DUPkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
- u->wst.dat[u->wst.ptr] = b;
- u->wst.dat[u->wst.ptr + 1] = a;
- u->wst.dat[u->wst.ptr + 2] = b;
- u->wst.dat[u->wst.ptr + 3] = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = a;
+ u->rst.dat[u->rst.ptr + 1] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 251, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 4;
+ u->rst.ptr += 2;
}
break;
- case 0xc4: /* NIP2k */
+ case 0xc4: /* NIPkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = a >> 8;
- u->wst.dat[u->wst.ptr + 1] = a & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xc5: /* SWP2k */
+ case 0xc5: /* SWPkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = b;
- u->wst.dat[u->wst.ptr + 1] = a;
- u->wst.dat[u->wst.ptr + 2] = d;
- u->wst.dat[u->wst.ptr + 3] = c;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = a;
+ u->rst.dat[u->rst.ptr + 1] = b;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 251, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 253, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 4;
+ u->rst.ptr += 2;
}
break;
- case 0xc6: /* OVR2k */
+ case 0xc6: /* OVRkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = d;
- u->wst.dat[u->wst.ptr + 1] = c;
- u->wst.dat[u->wst.ptr + 2] = b;
- u->wst.dat[u->wst.ptr + 3] = a;
- u->wst.dat[u->wst.ptr + 4] = d;
- u->wst.dat[u->wst.ptr + 5] = c;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b;
+ u->rst.dat[u->rst.ptr + 1] = a;
+ u->rst.dat[u->rst.ptr + 2] = b;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 249, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 252, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 6;
+ u->rst.ptr += 3;
}
break;
- case 0xc7: /* ROT2k */
+ case 0xc7: /* ROTkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4], e = u->wst.dat[u->wst.ptr - 5], f = u->wst.dat[u->wst.ptr - 6];
- u->wst.dat[u->wst.ptr] = d;
- u->wst.dat[u->wst.ptr + 1] = c;
- u->wst.dat[u->wst.ptr + 2] = b;
- u->wst.dat[u->wst.ptr + 3] = a;
- u->wst.dat[u->wst.ptr + 4] = f;
- u->wst.dat[u->wst.ptr + 5] = e;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2], c = u->rst.dat[u->rst.ptr - 3];
+ u->rst.dat[u->rst.ptr] = b;
+ u->rst.dat[u->rst.ptr + 1] = a;
+ u->rst.dat[u->rst.ptr + 2] = c;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 6, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 3, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 249, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 252, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 6;
+ u->rst.ptr += 3;
}
break;
- case 0xc8: /* EQU2k */
+ case 0xc8: /* EQUkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = b == a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b == a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 1;
}
break;
- case 0xc9: /* NEQ2k */
+ case 0xc9: /* NEQkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = b != a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b != a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 1;
}
break;
- case 0xca: /* GTH2k */
+ case 0xca: /* GTHkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = b > a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b > a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 1;
}
break;
- case 0xcb: /* LTH2k */
+ case 0xcb: /* LTHkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = b < a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b < a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 254, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 1;
+ u->rst.ptr += 1;
}
break;
- case 0xcc: /* JMP2k */
+ case 0xcc: /* JMPkr */
{
- u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xcd: /* JCN2k */
+ case 0xcd: /* JCNkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- if(u->wst.dat[u->wst.ptr - 3]) u->ram.ptr = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ if(u->rst.dat[u->rst.ptr - 2]) u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xce: /* JSR2k */
+ case 0xce: /* JSRkr */
{
- u->rst.dat[u->rst.ptr] = u->ram.ptr >> 8;
- u->rst.dat[u->rst.ptr + 1] = u->ram.ptr & 0xff;
- u->ram.ptr = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = u->ram.ptr >> 8;
+ u->wst.dat[u->wst.ptr + 1] = u->ram.ptr & 0xff;
+ u->ram.ptr += (Sint8)a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 253, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 2;
}
break;
- case 0xcf: /* STH2k */
+ case 0xcf: /* STHkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2];
- u->rst.dat[u->rst.ptr] = b;
- u->rst.dat[u->rst.ptr + 1] = a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->wst.dat[u->wst.ptr] = a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->rst.ptr > 253, 0)) {
- u->rst.error = 2;
+ if(__builtin_expect(u->wst.ptr > 254, 0)) {
+ u->wst.error = 2;
goto error;
}
#endif
- u->rst.ptr += 2;
+ u->wst.ptr += 1;
}
break;
- case 0xd0: /* LDZ2k */
+ case 0xd0: /* LDZkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a);
- u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xd1: /* STZ2k */
+ case 0xd1: /* STZkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- poke16(u->ram.dat, a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ Uint8 b = u->rst.dat[u->rst.ptr - 2];
+ poke8(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xd2: /* LDR2k */
+ case 0xd2: /* LDRkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
- u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, u->ram.ptr + (Sint8)a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xd3: /* STR2k */
+ case 0xd3: /* STRkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- poke16(u->ram.dat, u->ram.ptr + (Sint8)a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ Uint8 b = u->rst.dat[u->rst.ptr - 2];
+ poke8(u->ram.dat, u->ram.ptr + (Sint8)a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xd4: /* LDA2k */
+ case 0xd4: /* LDAkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- u->wst.dat[u->wst.ptr] = peek8(u->ram.dat, a);
- u->wst.dat[u->wst.ptr + 1] = peek8(u->ram.dat, a + 1);
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
+ u->rst.dat[u->rst.ptr] = peek8(u->ram.dat, a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 2, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xd5: /* STA2k */
+ case 0xd5: /* STAkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8));
- Uint16 b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- poke16(u->ram.dat, a, b);
+ Uint16 a = (u->rst.dat[u->rst.ptr - 1] | (u->rst.dat[u->rst.ptr - 2] << 8));
+ Uint8 b = u->rst.dat[u->rst.ptr - 3];
+ poke8(u->ram.dat, a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 3, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xd6: /* DEI2k */
+ case 0xd6: /* DEIkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- u->wst.dat[u->wst.ptr] = devr8(&u->dev[a >> 4], a);
- u->wst.dat[u->wst.ptr + 1] = devr8(&u->dev[a >> 4], a + 1);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1];
+ u->rst.dat[u->rst.ptr] = devr8(&u->dev[a >> 4], a);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 1, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 1, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xd7: /* DEO2k */
+ case 0xd7: /* DEOkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- devw16(&u->dev[a >> 4], a, b);
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ devw8(&u->dev[a >> 4], a, b);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
#endif
}
break;
- case 0xd8: /* ADD2k */
+ case 0xd8: /* ADDkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = (b + a) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (b + a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b + a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xd9: /* SUB2k */
+ case 0xd9: /* SUBkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = (b - a) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (b - a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b - a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xda: /* MUL2k */
+ case 0xda: /* MULkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
- u->wst.dat[u->wst.ptr] = (b * a) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (b * a) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b * a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xdb: /* DIV2k */
+ case 0xdb: /* DIVkr */
{
- Uint16 a = (u->wst.dat[u->wst.ptr - 1] | (u->wst.dat[u->wst.ptr - 2] << 8)), b = (u->wst.dat[u->wst.ptr - 3] | (u->wst.dat[u->wst.ptr - 4] << 8));
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
if(a == 0) {
- u->wst.error = 3;
+ u->rst.error = 3;
#ifndef NO_STACK_CHECKS
goto error;
#endif
a = 1;
}
- u->wst.dat[u->wst.ptr] = (b / a) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (b / a) & 0xff;
+ u->rst.dat[u->rst.ptr] = b / a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xdc: /* AND2k */
+ case 0xdc: /* ANDkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = d & b;
- u->wst.dat[u->wst.ptr + 1] = c & a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b & a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xdd: /* ORA2k */
+ case 0xdd: /* ORAkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = d | b;
- u->wst.dat[u->wst.ptr + 1] = c | a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b | a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xde: /* EOR2k */
+ case 0xde: /* EORkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1], b = u->wst.dat[u->wst.ptr - 2], c = u->wst.dat[u->wst.ptr - 3], d = u->wst.dat[u->wst.ptr - 4];
- u->wst.dat[u->wst.ptr] = d ^ b;
- u->wst.dat[u->wst.ptr + 1] = c ^ a;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b ^ a;
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 4, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
- case 0xdf: /* SFT2k */
+ case 0xdf: /* SFTkr */
{
- Uint8 a = u->wst.dat[u->wst.ptr - 1];
- Uint16 b = (u->wst.dat[u->wst.ptr - 2] | (u->wst.dat[u->wst.ptr - 3] << 8));
- u->wst.dat[u->wst.ptr] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) >> 8;
- u->wst.dat[u->wst.ptr + 1] = (b >> (a & 0x0f) << ((a & 0xf0) >> 4)) & 0xff;
+ Uint8 a = u->rst.dat[u->rst.ptr - 1], b = u->rst.dat[u->rst.ptr - 2];
+ u->rst.dat[u->rst.ptr] = b >> (a & 0x07) << ((a & 0x70) >> 4);
#ifndef NO_STACK_CHECKS
- if(__builtin_expect(u->wst.ptr < 3, 0)) {
- u->wst.error = 1;
+ if(__builtin_expect(u->rst.ptr < 2, 0)) {
+ u->rst.error = 1;
goto error;
}
- if(__builtin_expect(u->wst.ptr > 253, 0)) {
- u->wst.error = 2;
+ if(__builtin_expect(u->rst.ptr > 254, 0)) {
+ u->rst.error = 2;
goto error;
}
#endif
- u->wst.ptr += 2;
+ u->rst.ptr += 1;
}
break;
case 0xe1: /* INC2kr */