From 4cd8aff0271def90e36d98edf4243db08f4ab994 Mon Sep 17 00:00:00 2001 From: Bill Beech Date: Tue, 4 Feb 2020 16:27:19 -0700 Subject: [PATCH] swtp6800: Correct overflow(V) flag status bit --- swtp6800/common/m6800.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/swtp6800/common/m6800.c b/swtp6800/common/m6800.c index f0ad2b22..834f657b 100644 --- a/swtp6800/common/m6800.c +++ b/swtp6800/common/m6800.c @@ -538,8 +538,9 @@ t_stat sim_instr (void) PC = CPU_BD_get_mword(0xFFFB) & ADDRMASK; break; case 0x40: /* NEG A */ + op1 = A; A = (0 - A) & 0xFF; - COND_SET_FLAG_V(A & 0x80); + condevalVa(A, op1); COND_SET_FLAG(A,CF); COND_SET_FLAG_N(A); COND_SET_FLAG_Z(A); @@ -621,8 +622,9 @@ t_stat sim_instr (void) SET_FLAG(ZF); break; case 0x50: /* NEG B */ + op1 = B; B = (0 - B) & 0xFF; - COND_SET_FLAG_V(B & 0x80); + condevalVa(B, op1); COND_SET_FLAG(B,CF); COND_SET_FLAG_N(B); COND_SET_FLAG_Z(B); @@ -706,9 +708,10 @@ t_stat sim_instr (void) break; case 0x60: /* NEG ind */ DAR = get_indir_addr(); - lo = (0 - CPU_BD_get_mbyte(DAR)) & 0xFF; + op1 = CPU_BD_get_mbyte(DAR); + lo = (0 - op1) & 0xFF; CPU_BD_put_mbyte(DAR, lo); - COND_SET_FLAG_V(lo & 0x80); + condevalVs(lo, op1); COND_SET_FLAG(lo,CF); COND_SET_FLAG_N(lo); COND_SET_FLAG_Z(lo); @@ -816,9 +819,10 @@ t_stat sim_instr (void) break; case 0x70: /* NEG ext */ DAR = get_ext_addr(); - lo = (0 - CPU_BD_get_mbyte(DAR)) & 0xFF; + op1 = CPU_BD_get_mbyte(DAR); + lo = (0 - op1) & 0xFF; CPU_BD_put_mbyte(DAR, lo); - COND_SET_FLAG_V(lo & 0x80); + condevalVs(lo, op1); CLR_FLAG(CF); if (lo) SET_FLAG(CF);