diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2017-09-03 20:35:42 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2017-09-03 20:37:29 -0400 |
commit | e71125b93470ac3f8c51e6c85ac4053f668b1cfa (patch) | |
tree | 3c29a4b5c4152c6039a617f29a79ca7e73ec9f54 | |
parent | 8b736ba980bec80b8743c17194b3c182d28dcc7b (diff) |
z8: Fix C flag polarity for CP, SBC, SUB and actually subtract with carry in SBC
This lets amerihok pass its initial checksum calculation.
-rw-r--r-- | src/devices/cpu/z8/z8ops.hxx | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/devices/cpu/z8/z8ops.hxx b/src/devices/cpu/z8/z8ops.hxx index 470df009749..6775298b98f 100644 --- a/src/devices/cpu/z8/z8ops.hxx +++ b/src/devices/cpu/z8/z8ops.hxx @@ -293,7 +293,7 @@ void z8_device::compare(uint8_t dst, uint8_t src) uint8_t data = register_read(dst); uint16_t new_data = data - src; - set_flag_c(!(new_data & 0x100)); + set_flag_c(new_data & 0x100); set_flag_z(new_data == 0); set_flag_s(new_data & 0x80); set_flag_v(((data & 0x80) != (src & 0x80)) && ((new_data & 0x80) == (src & 0x80))); @@ -378,9 +378,9 @@ void z8_device::subtract_carry(uint8_t dst, uint8_t src) { /* dst <- dst - src - C */ uint8_t data = register_read(dst); - uint16_t new_data = data - src; + uint16_t new_data = data - src - flag(C); - set_flag_c(!(new_data & 0x100)); + set_flag_c(new_data & 0x100); set_flag_z(new_data == 0); set_flag_s(new_data & 0x80); set_flag_v(((data & 0x80) != (src & 0x80)) && ((new_data & 0x80) == (src & 0x80))); @@ -403,7 +403,7 @@ void z8_device::subtract(uint8_t dst, uint8_t src) uint8_t data = register_read(dst); uint16_t new_data = data - src; - set_flag_c(!(new_data & 0x100)); + set_flag_c(new_data & 0x100); set_flag_z(new_data == 0); set_flag_s(new_data & 0x80); set_flag_v(((data & 0x80) != (src & 0x80)) && ((new_data & 0x80) == (src & 0x80))); |