NEG fix
This commit is contained in:
parent
a74dbe5bd1
commit
f51f8de303
1 changed files with 9 additions and 8 deletions
15
cpu.cpp
15
cpu.cpp
|
@ -786,21 +786,22 @@ bool cpu::single_operand_instructions(const uint16_t instr)
|
||||||
setPSW_n(SIGN(v, word_mode));
|
setPSW_n(SIGN(v, word_mode));
|
||||||
setPSW_z(v == 0);
|
setPSW_z(v == 0);
|
||||||
setPSW_v(word_mode ? (v & 0xff) == 0x80 : v == 0x8000);
|
setPSW_v(word_mode ? (v & 0xff) == 0x80 : v == 0x8000);
|
||||||
|
setPSW_c(v);
|
||||||
|
|
||||||
setRegister(dst_reg, false, v);
|
setRegister(dst_reg, false, v);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
uint16_t a = getGAMAddress(dst_mode, dst_reg, word_mode, false);
|
uint16_t a = getGAMAddress(dst_mode, dst_reg, word_mode, false);
|
||||||
uint16_t v = b -> read(a, word_mode);
|
uint16_t v = -b -> read(a, word_mode);
|
||||||
int32_t vl = word_mode ? uint8_t(-v) : -v;
|
|
||||||
|
|
||||||
b->write(a, word_mode, vl);
|
b->write(a, word_mode, v);
|
||||||
|
|
||||||
setPSW_n(SIGN(vl, word_mode));
|
setPSW_n(SIGN(v, word_mode));
|
||||||
setPSW_z(vl == 0);
|
setPSW_z(v == 0);
|
||||||
setPSW_v(word_mode ? vl == 0x80 : vl == 0x8000);
|
setPSW_v(word_mode ? (v & 0xff) == 0x80 : v == 0x8000);
|
||||||
setPSW_c(vl);
|
setPSW_c(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue