From 5a77604127e1a92cc7484ae7e70ca89239b6b6b3 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Thu, 2 Jun 2022 21:42:55 +0200 Subject: [PATCH] MOV(B) to 0177776 should not set the flags --- cpu.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index faa7ef4..3dc9a26 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -431,18 +431,27 @@ bool cpu::double_operand_instructions(const uint16_t instr) switch(operation) { case 0b001: { // MOV/MOVB Move Word/Byte + bool set_flags = true; + addToMMR1(src_mode, src_reg, word_mode); if (word_mode && dst_mode == 0) setRegister(dst_reg, false, int8_t(src_value)); // int8_t: sign extension - else - putGAM(dst_mode, dst_reg, word_mode, src_value, false); + else { + uint16_t addr = getGAMAddress(dst_mode, dst_reg, word_mode, false); + + set_flags = addr != 0177776; + + b->write(addr, word_mode, src_value, false); + } addToMMR1(dst_mode, dst_reg, word_mode); - setPSW_n(SIGN(src_value, word_mode)); - setPSW_z(IS_0(src_value, word_mode)); - setPSW_v(false); + if (set_flags) { + setPSW_n(SIGN(src_value, word_mode)); + setPSW_z(IS_0(src_value, word_mode)); + setPSW_v(false); + } return true; }