diff --git a/cpu.c b/cpu.c index e79ebf1..0bbbc75 100644 --- a/cpu.c +++ b/cpu.c @@ -12,6 +12,9 @@ (regs.status.zero = r == 0) #define STATUS_UPDATE_NEGATIVE(r) \ (regs.status.negative = ((r & (1 << 7)) != 0)) +#define STATUS_UPDATE_NZ(r) \ + {STATUS_UPDATE_ZERO(r); \ + STATUS_UPDATE_NEGATIVE(r);} #define STATUS_TO_INT() \ (regs.status.carry | (regs.status.zero << 1) \ | (regs.status.interrupt_disable << 2) | (regs.status.decimal_mode << 3) \ @@ -224,8 +227,7 @@ adc(uint8_t arg) regs.status.overflow = (~(regs.a ^ arg) & (regs.a ^ sum) & 0x80) != 0; regs.a = sum & 0xFF; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -233,8 +235,7 @@ and(uint8_t arg) { regs.a &= arg; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -246,8 +247,7 @@ asl_acc(void) regs.a = tmp & 0xFF; regs.status.carry = tmp > 0xFF; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -259,8 +259,7 @@ asl(uint16_t mem) memwrite(mem, tmp & 0xFF); regs.status.carry = tmp > 0xFF; - STATUS_UPDATE_ZERO(tmp); - STATUS_UPDATE_NEGATIVE(tmp); + STATUS_UPDATE_NZ(tmp); } static void @@ -405,8 +404,7 @@ dec(uint16_t mem) { memwrite(mem, peek(mem) - 1); - STATUS_UPDATE_ZERO(peek(mem)); - STATUS_UPDATE_NEGATIVE(peek(mem)); + STATUS_UPDATE_NZ(peek(mem)); } static void @@ -414,8 +412,7 @@ dex(void) { regs.x--; - STATUS_UPDATE_ZERO(regs.x); - STATUS_UPDATE_NEGATIVE(regs.x); + STATUS_UPDATE_NZ(regs.x); } static void @@ -423,8 +420,7 @@ dey(void) { regs.y--; - STATUS_UPDATE_ZERO(regs.y); - STATUS_UPDATE_NEGATIVE(regs.y); + STATUS_UPDATE_NZ(regs.y); } static void @@ -432,8 +428,7 @@ eor(uint8_t arg) { regs.a ^= arg; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -441,8 +436,7 @@ inc(uint16_t mem) { memwrite(mem, peek(mem) + 1); - STATUS_UPDATE_ZERO(peek(mem)); - STATUS_UPDATE_NEGATIVE(peek(mem)); + STATUS_UPDATE_NZ(peek(mem)); } static void @@ -450,8 +444,7 @@ inx(void) { regs.x++; - STATUS_UPDATE_ZERO(regs.x); - STATUS_UPDATE_NEGATIVE(regs.x); + STATUS_UPDATE_NZ(regs.x); } static void @@ -459,8 +452,7 @@ iny(void) { regs.y++; - STATUS_UPDATE_ZERO(regs.y); - STATUS_UPDATE_NEGATIVE(regs.y); + STATUS_UPDATE_NZ(regs.y); } static void @@ -488,8 +480,7 @@ lda(uint8_t arg) { regs.a = arg; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -497,8 +488,7 @@ ldx(uint8_t arg) { regs.x = arg; - STATUS_UPDATE_ZERO(regs.x); - STATUS_UPDATE_NEGATIVE(regs.x); + STATUS_UPDATE_NZ(regs.x); } static void @@ -506,8 +496,7 @@ ldy(uint8_t arg) { regs.y = arg; - STATUS_UPDATE_ZERO(regs.y); - STATUS_UPDATE_NEGATIVE(regs.y); + STATUS_UPDATE_NZ(regs.y); } static void @@ -517,8 +506,7 @@ lsr_acc(void) regs.a >>= 1; regs.a &= ~(1 << 7); // bit 7 cleared - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -534,8 +522,7 @@ lsr(uint16_t mem) memwrite(mem, tmp); - STATUS_UPDATE_ZERO(tmp); - STATUS_UPDATE_NEGATIVE(tmp); + STATUS_UPDATE_NZ(tmp); } static void @@ -549,8 +536,7 @@ ora(uint8_t arg) { regs.a |= arg; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -570,8 +556,7 @@ pla(void) { regs.a = PULL(); - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -601,8 +586,7 @@ rol_acc(void) regs.a |= regs.status.carry; regs.status.carry = carry; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -615,8 +599,7 @@ rol(uint16_t mem) memwrite(mem, tmp); regs.status.carry = carry; - STATUS_UPDATE_ZERO(tmp); - STATUS_UPDATE_NEGATIVE(tmp); + STATUS_UPDATE_NZ(regs.a); } static void @@ -629,8 +612,7 @@ ror_acc(void) regs.a |= regs.status.carry << 7; regs.status.carry = carry; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -643,8 +625,7 @@ ror(uint16_t mem) memwrite(mem, tmp); regs.status.carry = carry; - STATUS_UPDATE_ZERO(tmp); - STATUS_UPDATE_NEGATIVE(tmp); + STATUS_UPDATE_NZ(tmp); } static void @@ -717,8 +698,7 @@ tax(void) { regs.x = regs.a; - STATUS_UPDATE_ZERO(regs.x); - STATUS_UPDATE_NEGATIVE(regs.x); + STATUS_UPDATE_NZ(regs.x); } static void @@ -726,8 +706,7 @@ tay(void) { regs.y = regs.a; - STATUS_UPDATE_ZERO(regs.y); - STATUS_UPDATE_NEGATIVE(regs.y); + STATUS_UPDATE_NZ(regs.y); } static void @@ -736,8 +715,7 @@ tsx(void) // regs.x = PULL(); regs.x = regs.sp; - STATUS_UPDATE_ZERO(regs.x); - STATUS_UPDATE_NEGATIVE(regs.x); + STATUS_UPDATE_NZ(regs.x); } static void @@ -745,8 +723,7 @@ txa(void) { regs.a = regs.x; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void @@ -761,8 +738,7 @@ tya(void) { regs.a = regs.y; - STATUS_UPDATE_ZERO(regs.a); - STATUS_UPDATE_NEGATIVE(regs.a); + STATUS_UPDATE_NZ(regs.a); } static void