8

据我所知,Z80 NMI 中断(0x66)是由 NMI 引脚的边缘检测触发的。当仍在 NMI 处理程序代码中(RETN 尚未执行)检测到另一个边缘时会发生什么?

NMI 是可重入的吗?Z80 是否只是将当前地址压入堆栈并再次从 0x66 开始?

4

1 回答 1

5

我的阅读是第二个 NMI 会中断第一个 NMI 的处理。NMI 处理为避免额外中断所做的唯一特殊操作是将 IFF1 备份到 IFF2,然后设置 IFF1(具有RETN特殊功能是在另一个方向上恢复)。但这不会禁止 NMI。因此,没有任何机制可以忽略未来的 NMI。

这一点在文献中得到了轻微的支持,尽管很微妙——例如“这个下降沿触发的中断不能在程序控制下被禁用,并且将在任何时候被 CPU 接受以在当前指令完成时兑现(如果总线请求没有待办的)”; 添加了重点,但也请注意,总线请求已作为特例被删除,没有提及现有的 NMI。

于 2016-10-02T13:24:55.123 回答