Цитата Сообщение от ZXMAK Посмотреть сообщение
а в чём неправильность? LD A,I/R читает IFF2 (не путать с IFF1), это вроде даже в документации прописано.
Нужно это для того, чтобы в обработчике NMI можно было узнать состояние IFF1 до прерывания.
Это нужно, т.к. NMI срабатывает независимо от того - разрешены прерывания или нет.
Таким образом NMI обработчик имеет возможность корректно восстановить состояние прерываний после завершения своей работы.

Глюк процессора в том, что IFF2 не всегда читается, в частности он не читается когда INT активен и IFF1=1 (прерывания разрешены).
По крайней мере в ZXMAK2 такое условие эмуляции. Откуда это бралось уже не помню.
Был какой-то софт, который без эмуляции этой фишки не работал.
Глюк процессора в том, что, если во время выполнения команды LD A,I/R активен INT, а прерывания разрешены, во флаг P/V заносится 0 вместо 1. Другими словами - если после команды LD A,I/R идет подтверждение маскируемого прерывания, во флаге P/V после команды LD A,I/R _всегда_ должен быть 0 на NMOS процессоре Z80.

А глюк ZXMAK2 и Spectaculator в том, что иногда при этих условиях во флаг P/V заносится 1. Можете запустить мой тест на на них и убедиться, а также запустить его на Fuse, SpecEmu и Unreal. При правильной эмуляции тест должен висеть, а при ошибке эмуляции - выходит в бейсик с сообщением "LD A,R ERROR!".
Проверьте граничные условия в коде эмулятора, связанные с сигналом INT.


На счёт спектакулятора, у него отладчик глючный. Его поведение во время прерываний разное, зависит от того выполняется код по шагам или запущена эмуляция. Поэтому под отладчиком в спектакуляторе можно много магических эффектов обнаружить
А я тест не под отладчиком гонял, а напрямую.