【发布时间】:2016-10-02 08:39:54
【问题描述】:
据我所知,Z80 NMI 中断 (0x66) 是由 NMI 引脚的边缘检测触发的。当仍在 NMI 处理程序代码内(RETN 尚未执行)检测到另一个边缘时会发生什么?
NMI 是可重入的吗?Z80 是否只是将当前地址压入堆栈并再次从 0x66 开始?
【问题讨论】:
-
感谢您的链接。非常有用。
标签: z80
据我所知,Z80 NMI 中断 (0x66) 是由 NMI 引脚的边缘检测触发的。当仍在 NMI 处理程序代码内(RETN 尚未执行)检测到另一个边缘时会发生什么?
NMI 是可重入的吗?Z80 是否只是将当前地址压入堆栈并再次从 0x66 开始?
【问题讨论】:
标签: z80
我的解读是第二个 NMI 会中断第一个 NMI 的处理。 NMI 处理为避免额外中断所做的唯一特殊事情是将 IFF1 备份到 IFF2,然后设置 IFF1(RETNs 的特殊功能是在另一个方向上恢复)。但这不会禁止 NMI。因此,没有任何机制可以忽略未来的 NMI。
这在文献中得到了轻微的支持,尽管很微妙——e.g.“这个下降沿触发的中断不能在程序控制下被禁用,将在任何时候被 CPU 接受以在完成时兑现当前指令(如果总线请求未挂起)";添加了重点,但也请注意,总线请求已作为一种特殊情况被删除,没有提及现有的 NMI。
【讨论】: