А это не косяк) Это инженеры Zilog так пофиксили ошибку чтения флага IFF2. Команды LD A,I/LD A,R должны выдавать состояние маскируемых прерываний (включены/выключены, внутренний флаг IFF2) во флаг P/V по документации. Но на NMOS Z80, если во время выполнения команды произошел захват импульса INT маскируемого прерывания, во флаг P/V заносится 0 (потому как прерывания _уже_ запрещены, так как после команды идет подтверждение прерывания).
Инженеры решили, что так быть не должно, и пофиксили в CMOS Z80 - тем, что запретили захват прерывания во время LD A,I/LD A,R. Теперь, если импульс прерывания приходит во время этих команд, он игнорируется, зато во флаг P/V заносится адекватное состояние разрешения маскируемых прерываний. Ну подумаешь, прерывание произойдет после следующей команды, а не после этой.





Ответить с цитированием