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
This commit is contained in:
Vineet K 2024-06-30 07:56:08 -04:00
parent 5535e5de70
commit 99082b5528

6
cpu.c
View File

@ -472,7 +472,7 @@ jmp(uint16_t arg)
static void static void
jsr(uint16_t arg) 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 * first push high-byte of return address then low-byte
@ -651,13 +651,13 @@ static void
rti(void) rti(void)
{ {
plp(); plp();
regs.pc = PULL(); regs.pc = PULL() | (PULL() << 8);
} }
static void static void
rts(void) rts(void)
{ {
regs.pc = PULL() | (PULL() << 8); regs.pc = (PULL() | (PULL() << 8)) + 1;
} }
static void static void