summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvin <git@vineetk.net>2024-06-10 14:27:53 +0530
committervin <git@vineetk.net>2024-06-10 14:33:12 +0530
commitdbb952a52b1b7168b4d1e98e9819d632ad16e087 (patch)
treee3cabeb469eccaf6c9f39ac08b1480bd278ccc72
parentebdf50cdf3a357a0e37a5751fd9d78ae975979a0 (diff)
add lsr, rol, ror
-rw-r--r--cpu.c27
1 files changed, 24 insertions, 3 deletions
diff --git a/cpu.c b/cpu.c
index d754c15..5bd114e 100644
--- a/cpu.c
+++ b/cpu.c
@@ -443,7 +443,12 @@ ldy(uint8_t arg)
443static void 443static void
444lsr(uint8_t arg) 444lsr(uint8_t arg)
445{ 445{
446/* TODO: complete this */ 446 regs.status.carry = regs.a & 1; // bit 0 in carry
447 regs.a >>= 1;
448 regs.a &= ~(1 << 7); // bit 7 cleared
449
450 STATUS_UPDATE_ZERO(regs.a);
451 STATUS_UPDATE_NEGATIVE(regs.a);
447} 452}
448 453
449static void 454static void
@@ -512,13 +517,29 @@ ply(uint8_t arg)
512static void 517static void
513rol(uint8_t arg) 518rol(uint8_t arg)
514{ 519{
515/* TODO: complete this */ 520 uint8_t tmp;
521 tmp = (regs.a & (1 << 7)) > 0;
522
523 regs.a <<= 1;
524 regs.a |= regs.status.carry;
525
526 regs.status.carry = tmp;
527 STATUS_UPDATE_ZERO(regs.a);
528 STATUS_UPDATE_NEGATIVE(regs.a);
516} 529}
517 530
518static void 531static void
519ror(uint8_t arg) 532ror(uint8_t arg)
520{ 533{
521/* TODO: complete this */ 534 uint8_t tmp;
535 tmp = regs.a & 1;
536
537 regs.a >>= 1;
538 regs.a |= regs.status.carry << 7;
539
540 regs.status.carry = tmp;
541 STATUS_UPDATE_ZERO(regs.a);
542 STATUS_UPDATE_NEGATIVE(regs.a);
522} 543}
523 544
524static void 545static void