diff options
author | vin <git@vineetk.net> | 2024-06-30 07:56:08 -0400 |
---|---|---|
committer | vin <git@vineetk.net> | 2024-06-30 07:56:08 -0400 |
commit | 99082b55287ecd0378935d31a289c05e1110c7b8 (patch) | |
tree | c85ea72feb124aefe2f0b1ee4fca0eb201eebbd2 | |
parent | 5535e5de70684dd8406e53d6ce928faf9011336c (diff) |
fix JSR, RTS, and RTI
JSR was pushing 1 too high PC and RTS was 1 too low
RTI was only pulling the low byte of PC
-rw-r--r-- | cpu.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -472,7 +472,7 @@ jmp(uint16_t arg) static void jsr(uint16_t arg) { - uint16_t tmp = regs.pc; + uint16_t tmp = regs.pc - 1; /* * first push high-byte of return address then low-byte @@ -651,13 +651,13 @@ static void rti(void) { plp(); - regs.pc = PULL(); + regs.pc = PULL() | (PULL() << 8); } static void rts(void) { - regs.pc = PULL() | (PULL() << 8); + regs.pc = (PULL() | (PULL() << 8)) + 1; } static void |