diff options
author | vin <git@vineetk.net> | 2024-06-10 14:27:53 +0530 |
---|---|---|
committer | vin <git@vineetk.net> | 2024-06-10 14:33:12 +0530 |
commit | dbb952a52b1b7168b4d1e98e9819d632ad16e087 (patch) | |
tree | e3cabeb469eccaf6c9f39ac08b1480bd278ccc72 /cpu.c | |
parent | ebdf50cdf3a357a0e37a5751fd9d78ae975979a0 (diff) |
add lsr, rol, ror
Diffstat (limited to 'cpu.c')
-rw-r--r-- | cpu.c | 27 |
1 files changed, 24 insertions, 3 deletions
@@ -443,7 +443,12 @@ ldy(uint8_t arg) static void lsr(uint8_t arg) { -/* TODO: complete this */ + regs.status.carry = regs.a & 1; // bit 0 in carry + regs.a >>= 1; + regs.a &= ~(1 << 7); // bit 7 cleared + + STATUS_UPDATE_ZERO(regs.a); + STATUS_UPDATE_NEGATIVE(regs.a); } static void @@ -512,13 +517,29 @@ ply(uint8_t arg) static void rol(uint8_t arg) { -/* TODO: complete this */ + uint8_t tmp; + tmp = (regs.a & (1 << 7)) > 0; + + regs.a <<= 1; + regs.a |= regs.status.carry; + + regs.status.carry = tmp; + STATUS_UPDATE_ZERO(regs.a); + STATUS_UPDATE_NEGATIVE(regs.a); } static void ror(uint8_t arg) { -/* TODO: complete this */ + uint8_t tmp; + tmp = regs.a & 1; + + regs.a >>= 1; + regs.a |= regs.status.carry << 7; + + regs.status.carry = tmp; + STATUS_UPDATE_ZERO(regs.a); + STATUS_UPDATE_NEGATIVE(regs.a); } static void |