Обрабатывать прерывания клавиатуры с помощью опроса регистра запросов прерываний (для x86)

Мне нужно разработать программу для x86, которая будет обрабатывать прерывания клавиатуры путем опроса IRR. Программа должна работать в реальном режиме под MS-DOS. Моя главная проблема заключается в том, что он не работает так, как мне кажется, он должен работать: соответствующий бит IRR имеет ненулевое значение, даже если ни одна клавиша не была нажата, а значение, считанное с порта 0x60, всегда равно 0x1c. Может кто-нибудь объяснить мне, что я сделал не так? Вот мой цикл опроса:

        in al,21h       ; read old IMR value
        or al,02h       ; disable handling of interrupts from IRQ1
        out 21h,al      ; update IMR value
READ_LOOP:
        mov al,0ah
        out 20h,al
        in al,20h       ; read IRR value
        and al, 02h     ; check request from IRQ1
        jz READ_LOOP
        in al,60h       ; read data from keyboard buffer
        mov dl,al
        and dl,7fh      ; ignore most significant bit value
        mov ah,2h       ; print char
        int 21h
        jmp READ_LOOP

Thanx!

Обновление Я пропустил тот факт, что буфер клавиатуры содержит коды сканирования, поэтому 0x1c, похоже, код сканирования клавиши возврата. знак равно

0 ответов

Другие вопросы по тегам