Сразу говорю что особого смысла в данной программе нету, она просто иллюстрирует один случай, который мне не понятен. Данная программа запрещает аппаратные прерывания от клавиатуры и читает регистр IRR. При поступлении запроса на прерывание программа выводит скан код нажатой клавиши и устанавливает клавиатурные индикаторы, затем опять ожидает нажатие клавиши. Но у меня эта программа бесконечно выводит на экран FA. Как будто отключены все клавиши. На их нажатие ни как не реагирует. Функция cout выводит содержимое регистра al в шестнадцатеричном виде. Программа написана на fasme запускал из dos Код (Text): org 100h in al,21h or al,10b out 21h,al mov al,0Ah out 20h,al waiting: in al,20h and al,10b jz waiting in al,60h call cout lb1: in al,64h and al,10b jnz lb1 mov al,0edh out 60h,al lb2: in al,64h and al,10b jnz lb2 mov al,111b out 60h,al jmp waiting include 'cout.inc'
После отправки 0xED клавиатура дает сигнал ACK(=0xFA). Тоже самое после принятия параметра 111b Эти ACKи было-бы неплохо считывать, хотя-бы последний Услкользает смысл вот этого кода Код (Text): waiting: in al,20h and al,10b jz waiting имхо надо Код (Text): waiting: in al,64h and al,1 jz waiting Полезное чтиво: http://docs.huihoo.com/help-pc/hw-8042.html
Спасибо за помощь. Правда всеравно не сработало, надо было перед тем как читать ack, проверять запрос от клавиатуры, иначе я читал старое подтверждение. Кстати я не особо понял разницы Код (Text): waiting: in al,20h and al,10b jz waiting от Код (Text): waiting: in al,64h and al,1 jz waiting Одно проверяет запрос на вход контроллера прерываний, а другой проверяет буфер клавиатуры, результат один и тот же.