Тут занесло меня на вики прочитал про контроллер прерываний.
Цитата:
Неприятной особенностью контроллеров 8259 является возможность потери прерывания. Такое может произойти, если запросом прерывания считается не положительный перепад, а поддерживаемый на линии IRQ высокий уровень сигнала (подробнее об этом говорится в подразделе «Фиксация запросов прерываний и разделение линий IRQ»). Если контроллер прерывания выдал процессору сигнал INTR и в этот момент сигнал запроса на линии IRQ был сброшен, контроллер не будет знать, какой вектор выдать процессору в ответ на сигнал INTA. Отменить начавшуюся процедуру прерывания невозможно, поэтому контроллер выдаёт вектор, соответствующий линии IRQ7, однако 7-й бит в регистре ISR не устанавливает.
Не совсем понятной является ситуация с потерей прерывания ведомого контроллера. Судя по описанию южного моста Intel ICH10, ведомый контроллер успевает снять свой сигнал INTR до момента, когда ему необходимо будет выдать вектор, что приводит к неожиданной для ведущего контроллера пропаже сигнала IRQ2. Последний отреагирует на такое событие описанным выше образом и выдаст вектор прерывания для IRQ7, не устанавливая седьмой разряд ISR.
Откуда сей бред взялся?
Цитата:
Если контроллер прерывания выдал процессору сигнал INTR и в этот момент сигнал запроса на линии IRQ был сброшен, контроллер не будет знать, какой вектор выдать процессору в ответ на сигнал INTA.
Фиксация прерывания происходит до посылки INTR. И сбрасывается по EOI или AEOI.
Цитата:
Судя по описанию южного моста Intel ICH10, ведомый контроллер успевает снять свой сигнал INTR до момента, когда ему необходимо будет выдать вектор, что приводит к неожиданной для ведущего контроллера пропаже сигнала IRQ2.
Странно такое слышать INTR всегда импульсным был. И определялся по переднему фронту. Поэтому IRQ2 и настраивается на срабатывание по фронту.