emu_nes

An NES emulator for learning how the 6502 and similar computers of the era worked
Log | Files | Refs | README | LICENSE

commit dbb952a52b1b7168b4d1e98e9819d632ad16e087
parent ebdf50cdf3a357a0e37a5751fd9d78ae975979a0
Author: vin <git@vineetk.net>
Date:   Mon, 10 Jun 2024 14:27:53 +0530

add lsr, rol, ror

Diffstat:
Mcpu.c | 27++++++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/cpu.c b/cpu.c @@ -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