diff src/cpu.c @ 2:6204c81e2933

Revert changes to handling of immediate versions of bitwise instructions. Replace asri with cmpi.
author Michael Pavone <pavone@retrodev.com>
date Wed, 23 Mar 2016 19:19:29 -0700
parents 7e44f7d5810b
children 74a6d629b78f
line wrap: on
line diff
--- a/src/cpu.c	Tue Mar 22 23:14:36 2016 -0700
+++ b/src/cpu.c	Wed Mar 23 19:19:29 2016 -0700
@@ -216,17 +216,11 @@
 	}
 }
 
-uint16_t format_immediate_bitwise(uint16_t val)
+uint16_t format_immediate(uint16_t val)
 {
 	if (val & 8) {
 		val |= 0xFFF0;
 	}
-	return val;
-}
-
-uint16_t format_immediate(uint16_t val)
-{
-	val = format_immediate_bitwise(val);
 	if (!val) {
 		val = 8;
 	}
@@ -339,11 +333,11 @@
 		update_flags_arith(context, tmp);
 		break;
 	case ANDI:
-		context->regs[dst] = context->regs[dst] & format_immediate_bitwise(a);
+		context->regs[dst] = context->regs[dst] & format_immediate(a);
 		update_flags_bitwise(context, context->regs[dst]);
 		break;
 	case ORI:
-		context->regs[dst] = context->regs[dst] | format_immediate_bitwise(a);
+		context->regs[dst] = context->regs[dst] | format_immediate(a);
 		update_flags_bitwise(context, context->regs[dst]);
 		break;
 	case LSI:
@@ -360,18 +354,12 @@
 		context->regs[dst] = tmp;
 		update_flags_arith(context, tmp);
 		break;
-	case ASRI:
-		shift = a;
-		if (!shift) {
-			shift = 16;
+	case CMPI:
+		tmp = a;
+		if (a & 8) {
+			a |= 0xFFF0;
 		}
-		tmp = context->regs[dst];
-		if (tmp & 0x8000) {
-			tmp |= 0xFFFF0000;
-		}
-		tmp = tmp >> shift & 0xFFFF;
-		tmp |= (context->regs[dst] >> (context->regs[shift] - 1)) << 16 & 0x10000;
-		context->regs[dst] = tmp;
+		tmp = context->regs[dst] - a;
 		update_flags_arith(context, tmp);
 		break;
 	case SINGLE_REG: