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

Discussion in 'WASM.OS.DEVEL' started by GLEB, Sep 26, 2011.

  1. GLEB

    GLEB New Member

    Blog Posts:
    0
    Joined:
    Nov 12, 2007
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Feb 8, 2009
    Messages:
    616
    а чем тебя cli не устраивает, ты же всеравно все прерывания маскируешь
     
  3. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    Это не все прерывания. Это только прерывания ПКП. А есть ведь и расширенный ПКП.
    Да и не маскируемые прерывания этот код не блокирует.

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

    Phantom_84 New Member

    Blog Posts:
    0
    Joined:
    Jun 6, 2007
    Messages:
    820
    Сначала cli, а после sti уже должны стоять обработчики-заглушки на все необрабатываемые прерывания.
     
  5. Phantom_84

    Phantom_84 New Member

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

    GLEB New Member

    Blog Posts:
    0
    Joined:
    Nov 12, 2007
    Messages:
    83
    Извиняюсь, все работает, после маскировки была повторная инициализация pic, установка базовых векторов.