changeset 13:d8ae30286d17

Fix flag calculation and condition code tests
author Michael Pavone <pavone@retrodev.com>
date Sun, 27 Mar 2016 21:08:42 -0700
parents d4112095b93f
children 769120da2c1f
files src/cpu.c
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu.c	Sun Mar 27 21:07:41 2016 -0700
+++ b/src/cpu.c	Sun Mar 27 21:08:42 2016 -0700
@@ -145,10 +145,10 @@
 	if (!(result & 0xFFFF)) {
 		context->regs[REG_SR] |= FLAG_Z;
 	}
-	if (result &= 0x8000) {
+	if (result & 0x8000) {
 		context->regs[REG_SR] |= FLAG_N;
 	}
-	if (result &= 0x10000) {
+	if (result & 0x10000) {
 		context->regs[REG_SR] |= FLAG_C;
 	}
 }
@@ -191,11 +191,11 @@
 		doit = context->regs[REG_SR] & FLAG_C;
 		break;
 	case COND_NCARRY:
-		doit = context->regs[REG_SR] & FLAG_C;
+		doit = !(context->regs[REG_SR] & FLAG_C);
 		break;
 	case COND_GREATER:
 		//not zero and not carry
-		doit = !(context->regs[REG_SR] & FLAG_Z) || !(context->regs[REG_SR] & FLAG_C);
+		doit = !(context->regs[REG_SR] & FLAG_Z) && !(context->regs[REG_SR] & FLAG_C);
 		break;
 	case COND_LEQ:
 		//zero or carry