- if ((regs.cc&0x20) || ((regs.a&0x0F) > 0x09)) // H set or lo nyb too big?
- {
- regs.a += 0x06; regs.cc |= 0x20; // Then adjust & set half carry
- }
- if ((regs.cc&0x01) || (regs.a > 0x9F)) // C set or hi nyb too big?
- {
- regs.a += 0x60; regs.cc |= 0x01; // Then adjust & set carry
- }
- regs.cc &= 0xF1; // CL NZV
- if (regs.a == 0) regs.cc |= 0x04; // Adjust Zero flag
- if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag
- regs.clock += 2;
+#if 0
+ uint8_t result = regs.a;
+
+ if ((regs.cc&0x20) || ((regs.a&0x0F) > 0x09)) // H set or lo nyb too big?
+ {
+// regs.a += 0x06;
+ result += 0x06;
+ regs.cc |= 0x20; // Then adjust & set half carry
+ }
+
+ if ((regs.cc&0x01) || (regs.a > 0x9F)) // C set or hi nyb too big?
+ {
+// regs.a += 0x60;
+ result += 0x60;
+ regs.cc |= 0x01; // Then adjust & set carry
+ }
+
+ regs.a = result;
+
+ regs.cc &= 0xF1; // CL NZV
+ if (regs.a == 0) regs.cc |= 0x04; // Adjust Zero flag
+ if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag
+#else
+ uint16_t result = (uint16_t)regs.a;
+
+ if ((regs.a & 0x0F) > 0x09 || (regs.cc & FLAG_H))
+ result += 0x06;
+
+ if ((regs.a & 0xF0) > 0x90 || (regs.cc & FLAG_C) || ((regs.a & 0xF0) > 0x80 && (regs.a & 0x0F) > 0x09))
+ result += 0x60;
+
+ regs.a = (uint8_t)result;
+// SET_ZN(result);
+// CLR_V; // Not sure this is correct...
+ regs.cc &= 0xF1; // CL NZV
+ if (regs.a == 0) regs.cc |= 0x04; // Adjust Zero flag
+ if (regs.a&0x80) regs.cc |= 0x08; // Adjust Negative flag
+// flagC |= (result & 0x100) >> 8; // Overwrite carry if it was 0, otherwise, ignore
+ regs.cc |= (result & 0x100) > 8;
+#endif
+ regs.clock += 2;