fix JSR and RTS bug
The stack's PUSH and PULL weren't proper and JSR was reading wrong argument it seems.
This commit is contained in:
parent
3ebdeab784
commit
09692f45f6
8
cpu.c
8
cpu.c
@ -27,7 +27,7 @@
|
||||
#define PUSH(b) \
|
||||
(memwrite(0x0100 + regs.sp--, b))
|
||||
#define PULL() \
|
||||
(peek(0x0100 + regs.sp++))
|
||||
(peek(0x0100 + ++regs.sp))
|
||||
|
||||
struct cpu_flags {
|
||||
uint8_t carry : 1;
|
||||
@ -465,7 +465,7 @@ jmp(uint16_t arg)
|
||||
static void
|
||||
jsr(uint16_t arg)
|
||||
{
|
||||
uint16_t tmp = regs.pc + 2;
|
||||
uint16_t tmp = regs.pc;
|
||||
|
||||
/*
|
||||
* first push high-byte of return address then low-byte
|
||||
@ -654,7 +654,7 @@ rti(void)
|
||||
static void
|
||||
rts(void)
|
||||
{
|
||||
regs.pc = PULL() + 1;
|
||||
regs.pc = PULL() | (PULL() << 8);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1164,7 +1164,7 @@ interpret(void)
|
||||
printf("JMP");
|
||||
break;
|
||||
case 0x20:
|
||||
jsr(opcode_arg(AM_ABS));
|
||||
jsr(opcode_mem(AM_ABS));
|
||||
cycles += 6;
|
||||
printf("JSR");
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user