MOV(B) to 0177776 should not set the flags

This commit is contained in:
folkert van heusden 2022-06-02 21:42:55 +02:00
parent 2268d7c9f7
commit 5a77604127

19
cpu.cpp
View file

@ -431,18 +431,27 @@ bool cpu::double_operand_instructions(const uint16_t instr)
switch(operation) { switch(operation) {
case 0b001: { // MOV/MOVB Move Word/Byte case 0b001: { // MOV/MOVB Move Word/Byte
bool set_flags = true;
addToMMR1(src_mode, src_reg, word_mode); addToMMR1(src_mode, src_reg, word_mode);
if (word_mode && dst_mode == 0) if (word_mode && dst_mode == 0)
setRegister(dst_reg, false, int8_t(src_value)); // int8_t: sign extension setRegister(dst_reg, false, int8_t(src_value)); // int8_t: sign extension
else else {
putGAM(dst_mode, dst_reg, word_mode, src_value, false); 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); addToMMR1(dst_mode, dst_reg, word_mode);
setPSW_n(SIGN(src_value, word_mode)); if (set_flags) {
setPSW_z(IS_0(src_value, word_mode)); setPSW_n(SIGN(src_value, word_mode));
setPSW_v(false); setPSW_z(IS_0(src_value, word_mode));
setPSW_v(false);
}
return true; return true;
} }