如何解决6502
一个关于 6502 的快速而愚蠢的问题。例如,指令 NOP 需要 2 个周期。如果6502发生了中断,能不能在NOP的2个周期之间发生?
那么,这是一种可能的情况吗:
NOP cycle 1
[ INTERRUPT ]
NOP cycle 2
当然这个问题可以扩展到其他说明。中断会“等待”整个指令完成还是会中断指令本身?
解决方法
将评论整理为社区 Wiki:
当前指令finishes first:“当外围设备需要服务并将中断请求(IRQ)线拉低时,允许当前执行的机器语言指令完成,7时钟中断序列为启动。这个序列就像执行一条没有写入程序的指令,而是通过将 IRQ 线拉低到逻辑低电平这一事实隐式插入的。”
仅在指令的倒数第二个周期检查中断状态;因此,如果中断请求正在进行但中断禁用标志在序列之前设置:
CLI
SEI
然后会发生以下情况:
- CLI 结束前一个周期,中断禁用标志仍然设置,因此 CLI 之后没有任何反应;
- 在 SEI 结束前一个周期,中断禁用标志现在被禁用,因此安排了中断;
- SEI 设置中断禁用标志;和
- 然后响应中断请求,从而在堆栈上产生一个
P
,并设置了中断禁用标志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。