6502仿真器测试:nestest

4

我正在实现自己的MOS 6502 CPU仿真器,用于未来的NES模拟器。为了测试仿真器的正确性,我正在使用nestest。一切都很好,直到我遇到这几行代码:

enter image description here

正如您所看到的,状态寄存器为(6F)被推送到堆栈中。在下一条指令中,它从累加器中弹出。在下一个获取中,日志显示A:7F。这有意义吗?A不应该是6F吗?
我正在使用此日志: http://www.qmtpro.com/~nes/misc/nestest.log 由于它来自Nintendulator,应该是可靠的,我想。
我错了还是这个日志不可靠?
2个回答

6

由于更好的解释这里这里PHP在将状态寄存器推入堆栈时总是设置 Break 标志。然而,在物理实现方式与我们的可视化之间存在一种表现差异,它实际上并不在状态寄存器中,但我们看到的是它就像在寄存器里一样。

当6502执行PHP指令时,它会在写入堆栈的状态寄存器值中设置第4位,但实际上并不反映在状态寄存器本身上的任何更改。因此,您的日志显示PHP后状态寄存器未改变,但是当您使用 PLA 读取该字节时,它具有设置第4位的状态。您可以通过使用监视器在 PHP 指令后打断,然后查看堆栈内存区域($01xx)中的字节来自行验证这一点。


3

确实,为65816保留 :) - Polluks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接