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