COMB fix
This commit is contained in:
parent
9dd4e51ff4
commit
881494b9ae
1 changed files with 19 additions and 7 deletions
26
cpu.cpp
26
cpu.cpp
|
@ -867,15 +867,27 @@ bool cpu::single_operand_instructions(const uint16_t instr)
|
|||
}
|
||||
|
||||
case 0b000101001: { // COM/COMB
|
||||
auto a = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||
uint16_t v = a.value.value();
|
||||
bool set_flags = false;
|
||||
uint16_t v = 0;
|
||||
|
||||
if (word_mode == wm_byte)
|
||||
v ^= 0xff;
|
||||
else
|
||||
v ^= 0xffff;
|
||||
if (word_mode == wm_byte && dst_mode == 0) {
|
||||
v = getRegister(dst_reg) ^ 0xff;
|
||||
|
||||
set_flags = putGAM(a, v);
|
||||
setRegister(dst_reg, v);
|
||||
|
||||
set_flags = true;
|
||||
}
|
||||
else {
|
||||
auto a = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||
v = a.value.value();
|
||||
|
||||
if (word_mode == wm_byte)
|
||||
v ^= 0xff;
|
||||
else
|
||||
v ^= 0xffff;
|
||||
|
||||
set_flags = putGAM(a, v);
|
||||
}
|
||||
|
||||
if (set_flags) {
|
||||
setPSW_flags_nzv(v, word_mode);
|
||||
|
|
Loading…
Add table
Reference in a new issue