summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commite71125b93470ac3f8c51e6c85ac4053f668b1cfa (patch)
tree3c29a4b5c4152c6039a617f29a79ca7e73ec9f54
parent8b736ba980bec80b8743c17194b3c182d28dcc7b (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.hxx8
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)));