summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvin <git@vineetk.net>2024-06-29 09:51:12 -0400
committervin <git@vineetk.net>2024-06-29 09:51:12 -0400
commit5d36aeb8856fa17d491b0c8c18d6593a9ec4997a (patch)
tree7bed7514512136f50e395d4a323ae11268b25bf1
parentf16ab6cb6dce3a64ead1d0f0bc99f3d034a005b2 (diff)
fix ADC bug where V is calculated with new A instead of old A
-rw-r--r--cpu.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/cpu.c b/cpu.c
index 66dbd4c..5d36d37 100644
--- a/cpu.c
+++ b/cpu.c
@@ -218,11 +218,12 @@ adc(uint8_t arg)
218 uint16_t sum; // 16-bit sum makes it easier to determine carry flag 218 uint16_t sum; // 16-bit sum makes it easier to determine carry flag
219 219
220 sum = regs.a + arg + regs.status.carry; 220 sum = regs.a + arg + regs.status.carry;
221 regs.a = sum & 0xFF;
222 221
223 regs.status.carry = sum > 0xFF; 222 regs.status.carry = sum > 0xFF;
224 /* overflow flag formula: https://stackoverflow.com/a/29224684 */ 223 /* overflow flag formula: https://stackoverflow.com/a/29224684 */
225 regs.status.overflow = (~(regs.a ^ arg) & (regs.a ^ sum) & 0x80) != 0; 224 regs.status.overflow = (~(regs.a ^ arg) & (regs.a ^ sum) & 0x80) != 0;
225 regs.a = sum & 0xFF;
226
226 STATUS_UPDATE_ZERO(regs.a); 227 STATUS_UPDATE_ZERO(regs.a);
227 STATUS_UPDATE_NEGATIVE(regs.a); 228 STATUS_UPDATE_NEGATIVE(regs.a);
228} 229}