fix status register to match nestest
This commit is contained in:
parent
3977ab2a5d
commit
f16ab6cb6d
14
cpu.c
14
cpu.c
@ -13,10 +13,10 @@
|
|||||||
#define STATUS_UPDATE_NEGATIVE(r) \
|
#define STATUS_UPDATE_NEGATIVE(r) \
|
||||||
(regs.status.negative = ((r & (1 << 7)) != 0))
|
(regs.status.negative = ((r & (1 << 7)) != 0))
|
||||||
#define STATUS_TO_INT() \
|
#define STATUS_TO_INT() \
|
||||||
((regs.status.carry << 7) | (regs.status.zero << 6) \
|
(regs.status.carry | (regs.status.zero << 1) \
|
||||||
| (regs.status.interrupt_disable << 5) | (regs.status.decimal_mode << 4) \
|
| (regs.status.interrupt_disable << 2) | (regs.status.decimal_mode << 3) \
|
||||||
| (regs.status.brk << 3) | (regs.status.unused << 2) \
|
| (regs.status.brk << 4) | (regs.status.unused << 5) \
|
||||||
| (regs.status.overflow << 1) | regs.status.negative)
|
| (regs.status.overflow << 6) | (regs.status.negative << 7))
|
||||||
|
|
||||||
#define MEMORY_MIRROR(addr) \
|
#define MEMORY_MIRROR(addr) \
|
||||||
if (addr < 0x2000) \
|
if (addr < 0x2000) \
|
||||||
@ -766,7 +766,7 @@ tya(void)
|
|||||||
static void
|
static void
|
||||||
interpret(void)
|
interpret(void)
|
||||||
{
|
{
|
||||||
uint8_t opcode, did_memwrite, ret;
|
uint8_t opcode, did_memwrite, ret, status;
|
||||||
uint16_t arg, mem, deref;
|
uint16_t arg, mem, deref;
|
||||||
uint32_t cycles_;
|
uint32_t cycles_;
|
||||||
enum addressing_mode mode;
|
enum addressing_mode mode;
|
||||||
@ -775,6 +775,7 @@ interpret(void)
|
|||||||
opcode = peek(regs.pc++);
|
opcode = peek(regs.pc++);
|
||||||
cycles_ = cycles;
|
cycles_ = cycles;
|
||||||
did_memwrite = 0;
|
did_memwrite = 0;
|
||||||
|
status = STATUS_TO_INT();
|
||||||
|
|
||||||
printf("%04X %02X", regs.pc - 1, opcode);
|
printf("%04X %02X", regs.pc - 1, opcode);
|
||||||
|
|
||||||
@ -1908,7 +1909,7 @@ interpret(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n",
|
printf("A:%02X X:%02X Y:%02X P:%02X SP:%02X CYC:%d\n",
|
||||||
regs.a, regs.x, regs.y, STATUS_TO_INT(), regs.sp, cycles_);
|
regs.a, regs.x, regs.y, status, regs.sp, cycles_);
|
||||||
}
|
}
|
||||||
loop_exit:
|
loop_exit:
|
||||||
}
|
}
|
||||||
@ -1922,6 +1923,7 @@ cpu_init(void)
|
|||||||
regs.sp = 0xFD;
|
regs.sp = 0xFD;
|
||||||
|
|
||||||
//memset(®s.status, 0, sizeof(regs.status));
|
//memset(®s.status, 0, sizeof(regs.status));
|
||||||
|
regs.status.interrupt_disable = 1;
|
||||||
regs.status.unused = 1;
|
regs.status.unused = 1;
|
||||||
|
|
||||||
cycles += 7;
|
cycles += 7;
|
||||||
|
Loading…
Reference in New Issue
Block a user