Не работает маскировка прерываний

Тема в разделе "WASM.OS.DEVEL", создана пользователем GLEB, 26 сен 2011.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Добрый день!

    Переключаюсь в защищенный режим, устанавливаю обработчики для клавиатуры и таймера

    Маскирую все прерывания

    mov al, 0xFF
    mov dx, 0x21
    out dx, al

    mov al, 0xFF
    mov dx, 0xA1
    out dx, al

    Но обработчики клавиатуры и таймера попрежнему работают.

    На ноутбуке этот код работает, прерывания не происходят, а на обычных компах, QEMU нет.
     
  2. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а чем тебя cli не устраивает, ты же всеравно все прерывания маскируешь
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Это не все прерывания. Это только прерывания ПКП. А есть ведь и расширенный ПКП.
    Да и не маскируемые прерывания этот код не блокирует.

    А что за компьютер?
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Сначала cli, а после sti уже должны стоять обработчики-заглушки на все необрабатываемые прерывания.
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Обработчики маскируемых прерываний выше 15 по любому не вызываются, пока это не будет проинициализировано явно. IRQ1/12 от USB не генерируются тоже, если замаскированы в PIC.
     
  6. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Извиняюсь, все работает, после маскировки была повторная инициализация pic, установка базовых векторов.