]> Untitled Git - pico1541.git/commitdiff
Fix ARR instruction
authorMaxwell Beck <max@rastertail.net>
Sun, 29 Dec 2024 01:07:40 +0000 (19:07 -0600)
committerMaxwell Beck <max@rastertail.net>
Sun, 29 Dec 2024 01:07:40 +0000 (19:07 -0600)
src/6502.c

index 5d38029fc99600631527214a648b4d23ce9d674c..b33b49de2ce1af120d5f9a35ca68fb13051efecd 100644 (file)
        do { \
                uint8_t c = FLAG_GET(C); \
                r = r & a; \
-               uint16_t res = r + a + c; \
-               FLAG_SET(N, (res & 0x100) >> 8); \
-               FLAG_SET(V, ((r ^ res) & (a ^ res) & 0x80) >> 7); \
-               FLAG_SET(C, r & 1); \
-               r = (r >> 1) | (r << 7); \
+               r = (r >> 1) | (c << 7); \
+               FLAG_SET(C, (r & 0x40) >> 6); \
+               FLAG_SET(V, ((r & 0x40) ^ ((r & 0x20) << 1)) >> 6); \
+               FLAG_SET(N, (r & 0x80) >> 7); \
+               FLAG_SET(Z, (r == 0) ? 1 : 0); \
        } while (0);
 
 #define DCP(src, dst) \
@@ -946,7 +946,6 @@ uint8_t cpu_step(cpu_t *cpu) {
                                uint8_t a;
                                R_IMM();
                                ARR();
-                               FLAG_SET(Z, (r == 0) ? 1 : 0);
                                cpu->a = r;
                        } while (0);
                        break;