From e71125b93470ac3f8c51e6c85ac4053f668b1cfa Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 3 Sep 2017 20:35:42 -0400 Subject: z8: Fix C flag polarity for CP, SBC, SUB and actually subtract with carry in SBC This lets amerihok pass its initial checksum calculation. --- src/devices/cpu/z8/z8ops.hxx | 8 ++++---- 1 file 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))); -- cgit v1.2.3