私が収集したものから、Z80 NMI 割り込み (0x66) は、NMI ピンのエッジ検出からトリガーされます。まだ NMI ハンドラ コード内にあるときに別のエッジが検出された場合 (RETN がまだ実行されていない場合) はどうなりますか?
NMI は再入可能ですか? Z80 は現在のアドレスをスタックにプッシュし、再び 0x66 から開始しますか?
私が収集したものから、Z80 NMI 割り込み (0x66) は、NMI ピンのエッジ検出からトリガーされます。まだ NMI ハンドラ コード内にあるときに別のエッジが検出された場合 (RETN がまだ実行されていない場合) はどうなりますか?
NMI は再入可能ですか? Z80 は現在のアドレスをスタックにプッシュし、再び 0x66 から開始しますか?
私の読みでは、2 番目の NMI は最初の NMI の処理を中断します。追加の中断を回避するために NMI 処理が行う唯一の特別なことは、IFF1 を IFF2 にバックアップしてから、IFF1 を設定することです (RETN
特別な機能は逆方向の復元です)。しかし、それは NMI を禁止するものではありません。そのため、将来の NMI が無視されるメカニズムはありません。
これは、微妙ではありますが、文献で軽くバックアップされています —たとえば、 「この負のエッジでトリガーされた割り込みは、プログラム制御下で無効にすることはできず、現在の命令の完了時に受け入れられるように、いつでも CPU によって受け入れられます(バス要求がない場合) 。保留中)"; 強調が追加されましたが、既存の NMI について言及されていない特殊なケースとしてバス要求が取り出されたことにも注意してください。