Обрабатывать прерывания клавиатуры с помощью опроса регистра запросов прерываний (для 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, похоже, код сканирования клавиши возврата. знак равно