From d703d38ea225e8def81a0fe75be3ea9a4db06c9d Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Sun, 19 Mar 2023 18:08:43 +0100 Subject: [PATCH] implementation for v-flag when doing ADD was wrong --- cpu.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index 478dc7c..c0daf3a 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -509,7 +509,6 @@ bool cpu::double_operand_instructions(const uint16_t instr) result = (g_dst.value.value() - g_ssrc.value.value()) & 0xffff; if (set_flags) { - //setPSW_v(sign(g_ssrc.value.value()) != sign(g_dst.value.value()) && sign(g_ssrc.value.value()) == sign(result)); setPSW_v(((g_ssrc.value.value() ^ g_dst.value.value()) & 0x8000) && !((g_dst.value.value() ^ result) & 0x8000)); setPSW_c(uint16_t(g_dst.value.value()) < uint16_t(g_ssrc.value.value())); } @@ -518,7 +517,7 @@ bool cpu::double_operand_instructions(const uint16_t instr) result = (g_dst.value.value() + g_ssrc.value.value()) & 0xffff; if (set_flags) { - setPSW_v(sign(g_ssrc.value.value()) == sign(g_dst.value.value()) && sign(g_dst.value.value()) != sign(result)); + setPSW_v((result ^ g_ssrc.value.value()) & (result ^ g_ssrc.value.value())); setPSW_c(uint16_t(result) < uint16_t(g_ssrc.value.value())); } }