OCW1:
биты 7 – 0: прерывание 7 – 0/15 – 8 запрещено
При помощи этой команды можно временно запретить или разрешить то или иное аппаратное прерывание. Например, команды
in al,21h or al,00000010b out 21h,al
приводят к отключению IRQ1, то есть клавиатуры.
Мы пользовались OCW1 в программе term2.asm, чтобы разрешить IRQ3 — прерывание от последовательного порта COM2.
OCW2: команды конца прерывания и сдвига приоритетов
биты 7 – 5: команда
000: запрещение сдвига приоритетов в режиме без EOI
001: неспецифичный EOI (конец прерывания в режиме с приоритетами)
010: нет операции
011: специфичный EOI (конец прерывания в режиме без приоритетов)
100: разрешение сдвига приоритетов в режиме без EOI
101: сдвиг приоритетов с неспецифичным EOI
110: сдвиг приоритетов
111: сдвиг приоритетов со специфичным EOI
биты 4 – 3: 00 (указывают, что это OCW2)
биты 2 – 0: номер IRQ для команд 011lb, 110 и 111
Как упоминалось в главе 5.8.2, если несколько прерываний происходят одновременно, обслуживается в первую очередь то, которое имеет высший приоритет. При инициализации контроллера высший приоритет имеет IRQ0 (прерывание от системного таймера), а низший — IRQ7. Все прерывания второго контроллера (IRQ8 – IRQ15) оказываются в этой последовательности между IRQ1 и IRQ3, так как именно IRQ2 используется для каскадирования этих двух контроллеров. Команды сдвига приоритетов позволяют изменить эту ситуацию, присвоив завершающемуся (команды 101 или 111) или обрабатывающемуся (110) прерыванию низший приоритет, причем следующее прерывание получит наивысший, и далее по кругу.
Более того, в тот момент, когда выполняется обработчик аппаратного прерывания, другие прерывания с низшими приоритетами не происходят, даже если обработчик выполнил команду sti. Чтобы разрешить выполнение других прерываний, каждый обработчик обязательно должен послать команду EOI — конец прерывания — в соответствующий контроллер. Именно поэтому обработчики аппаратных прерываний в программах term2.asm и wavdma.asm заканчивались командами
mov al,20h ; команда "неспецифичный конец прерывания" out 20h,al ; посылается в первый контроллер прерываний