Работа напрямую с клавиатурой

Тема в разделе "WASM.ASSEMBLER", создана пользователем stasvp, 19 апр 2009.

  1. stasvp

    stasvp New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2009
    Сообщения:
    4
    Сразу говорю что особого смысла в данной программе нету, она просто иллюстрирует один случай, который мне не понятен.
    Данная программа запрещает аппаратные прерывания от клавиатуры и читает регистр IRR. При поступлении запроса на прерывание программа выводит скан код нажатой клавиши и устанавливает клавиатурные индикаторы, затем опять ожидает нажатие клавиши. Но у меня эта программа бесконечно выводит на экран FA. Как будто отключены все клавиши. На их нажатие ни как не реагирует.
    Функция cout выводит содержимое регистра al в шестнадцатеричном виде. Программа написана на fasme запускал из dos
    Код (Text):
    1. org 100h
    2.  
    3.    in al,21h
    4.    or al,10b
    5.    out 21h,al
    6.  
    7.    mov al,0Ah
    8.    out 20h,al
    9.  
    10.   waiting:
    11.    in al,20h    
    12.    and al,10b
    13.    jz waiting
    14.  
    15.    in al,60h
    16.    call cout
    17.  
    18.   lb1:
    19.    in al,64h
    20.    and al,10b
    21.    jnz lb1
    22.  
    23.    mov al,0edh
    24.    out 60h,al
    25.  
    26.    lb2:
    27.    in al,64h
    28.    and al,10b
    29.    jnz lb2
    30.  
    31.    mov al,111b
    32.    out 60h,al
    33.  
    34. jmp waiting
    35.  
    36. include 'cout.inc'
     
  2. morkster

    morkster New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    31
    После отправки 0xED клавиатура дает сигнал ACK(=0xFA). Тоже самое после принятия параметра 111b
    Эти ACKи было-бы неплохо считывать, хотя-бы последний

    Услкользает смысл вот этого кода
    Код (Text):
    1.   waiting:
    2.    in al,20h    
    3.    and al,10b
    4.    jz waiting
    имхо надо
    Код (Text):
    1.   waiting:
    2.    in al,64h    
    3.    and al,1
    4.    jz waiting
    Полезное чтиво: http://docs.huihoo.com/help-pc/hw-8042.html
     
  3. stasvp

    stasvp New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2009
    Сообщения:
    4
    Спасибо за помощь. Правда всеравно не сработало, надо было перед тем как читать ack, проверять запрос от клавиатуры, иначе я читал старое подтверждение. Кстати я не особо понял разницы
    Код (Text):
    1. waiting:
    2.    in al,20h    
    3.    and al,10b
    4.    jz waiting
    от
    Код (Text):
    1. waiting:
    2.    in al,64h    
    3.    and al,1
    4.    jz waiting
    Одно проверяет запрос на вход контроллера прерываний, а другой проверяет буфер клавиатуры, результат один и тот же.