MOV(B) to 0177776 should not set the flags
This commit is contained in:
parent
2268d7c9f7
commit
5a77604127
1 changed files with 14 additions and 5 deletions
13
cpu.cpp
13
cpu.cpp
|
@ -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);
|
||||||
|
|
||||||
|
if (set_flags) {
|
||||||
setPSW_n(SIGN(src_value, word_mode));
|
setPSW_n(SIGN(src_value, word_mode));
|
||||||
setPSW_z(IS_0(src_value, word_mode));
|
setPSW_z(IS_0(src_value, word_mode));
|
||||||
setPSW_v(false);
|
setPSW_v(false);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue