2016-10-02 3 views
5

Из того, что я мог собрать, прерывание Z80 NMI (0x66) запускается из обнаружения края вывода NMI. Что происходит, когда другое ребро обнаруживается, когда все еще внутри кода обработчика NMI (RETN еще не выполнен)?Является ли Z80 NMI реентерабельным?

Является ли NMI реентеративным и будет ли Z80 просто нажимать текущий адрес в стеке и снова начинаться с 0x66?

+0

Благодарим вас за ссылку. Очень полезно. – obiwanjacobi

ответ

3

Мое чтение гласит, что второй NMI будет прерывать обработку первого. Единственное, что делает обработка NMI во избежание дополнительного прерывания, - это возврат IFF1 в IFF2, а затем установка IFF1 (с возможностью восстановления в другом направлении RETN). Но это не будет запрещать НМИ. Таким образом, нет механизма, с помощью которого будущий НМИ будет проигнорирован.

Это слегка резервируется в литературе, хотя subtlely - e.g. «Отрицательный фронт прерывание не может быть отключен под управлением программой и будет приниматься в любое время с помощью CPU будет выполнен по завершению текущей инструкции (если запрос шины не ожидается) "; добавлен акцент, но также отметить, что запрос шины был вытащен как особый случай без упоминания о существующем NMI.

+0

И не так тонко подкреплено именем. NMI - Non-Maskable Interrupt. Другими словами, вы не можете остановить его, если отключить (маскировать) прерывания с помощью DI. –

Смежные вопросы