有两个独立的中断:可屏蔽和不可屏蔽.6502将在每条指令结束前对这一个周期进行采样.
如果NMI行已激活(它的边缘被触发),那么它将在此操作完成后执行NMI例程.
否则,如果IRQ线处于活动状态(触发电平)并且未设置中断禁用标志,则在此操作完成后它将执行IRQ例程.
在这两种情况下,它都会读取跳转向量,将当前程序计数器和状态寄存器推送到堆栈,设置中断禁用位并跳转到向量指示的位置.从记忆中,这一切都需要七个周期.
除了推送状态寄存器之外,还有一个区别在于谁被认为负责递增程序计数器,因此您使用RTI从中断处理程序返回而不是RTS.
从FFFA/FFFBh读取NMI载体,从FFFE/FFFFh读取IRQ.重置向量介于两者之间,您可以在远处将视图重置视为一种无法返回的NMI.
BRK 应该是模拟一个IRQ,但不是很好.
所以预期的安排是:NMI用于任何现在应该始终服务的东西.对于任何可以等待一段时间的任何事情的IRQ.相当多的微软根本没有连接NMI,因为那时你总是需要一个有效的处理程序,但这远非普遍.
NMI(不可屏蔽中断)和IRQ(中断请求)是CPU封装上的独立物理引脚.
当触发中断时,执行跳转到0xFFFE和0xFFFF指向的存储单元(对于IRQ).对于大多数处理器,应使用以下命令将寄存器推送到堆栈:
PHA
PHX
PHY
Run Code Online (Sandbox Code Playgroud)
SEI可用于禁用IRQ,但不能用于禁用NMI. CLI将再次启用它们.
6502.org有很多教程.