Assembler - язык неограниченных возможностей


Команды управления - часть 2


Если бы контроллер был инициализирован в режиме без приоритетов, вместо неспецифичного EOI пришлось бы посылать специфичный, содержащий в младших трех битах номер прерывания, но BIOS инициализирует контроллер именно в режиме с приоритетами. Кроме того, контроллер мог бы быть инициализирован в режиме без EOI, но тогда в ходе работы обработчика прерывания могли бы происходить все остальные прерывания, включая обрабатываемое. О способах инициализации контроллера говорится далее, а здесь рассмотрим последнюю команду управления.


OCW3: чтение состояния контроллера и режим специального маскирования

    бит 7: 0

    биты 6 – 5: режим специального маскирования

    00 — не изменять

    10 — выключить

    11 — включить

биты 4 – 3: 01 — указывает, что это OCW3

бит 2: режим опроса

биты 1 – 0: чтение состояния контроллера

    00 — не читать

    10 — читать регистр запросов на прерывания

    11 — читать регистр обслуживаемых прерываний

В режиме специального маскирования в момент выполнения обработчика прерывания разрешены все прерывания, кроме выполняющегося и маскируемых командой OCW1, что имеет смысл сделать, если обработчик прерывания с достаточно высоким приоритетом собирается выполняться слишком долго.

Чаще всего OCW3 используют для чтения состояния контроллера — младшие два бита выбирают, какой из регистров контроллера будет возвращаться при последующем чтении из порта 21h/A1h. Оба возвращаемых регистра имеют структуру, аналогичную OCW1, — каждый бит отвечает соответствующему IRQ.

Из регистра запросов на прерывания можно узнать, какие прерывания произошли, но пока не были обработаны, а из регистра обслуживаемых прерываний — какие прерывания обрабатываются в данный момент. Последнее — еще одна мера безопасности, которую применяют резидентные программы, — нельзя работать с дисководом (IRQ6), если в этот момент обслуживается прерывание от последовательного порта (IRQ3), и нельзя работать с диском (IRQ14/15), если обслуживается прерывание от системного таймера (IRQ0).




Начало  Назад  Вперед