From 99082b55287ecd0378935d31a289c05e1110c7b8 Mon Sep 17 00:00:00 2001 From: vin Date: Sun, 30 Jun 2024 07:56:08 -0400 Subject: [PATCH] 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 --- cpu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpu.c b/cpu.c index bcaa00b..b76e346 100644 --- a/cpu.c +++ b/cpu.c @@ -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