Задержка (delay) клавиатуры

Тема в разделе "WASM.OS.DEVEL", создана пользователем Vilco, 21 авг 2007.

  1. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Собственно сабж - хочется чтоб при нажатой клавише печаталось больше символов в единицу времени.
    В моем распоряжении только порты ввода\вывода.
     
  2. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Вобщем, поменять делей у меня получилось, но эта операцию вызывает другую проблему - почему-то отказывается после неё работать клавиатура - блокируется мби?
    Если так, то я пытался разблокировать её через 61h порт, но безупешно. Bochs даже не фиксирует в логах записать в порт о_О. С чем это связано?
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Vilco
    приведи код
    может чего там
     
  4. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Код (Text):
    1. ;ожидание готовности контроллера
    2. keyb_sett:
    3. in al, 0x64
    4. test al, 00000010b
    5. jnz keyb_sett
    6. ;посылка кода команды
    7. mov al, 0xF3
    8. out 0x60, al
    9. ;опять ожидание
    10. keyb_settw:
    11. in al, 0x64
    12. test al, 00000010b
    13. jnz keyb_settw
    14. ;посылка значения для команды
    15. mov al, 00100100b ;бит 7 зарезерв и 0, 01=500 мс пере вкл биты 5-6, 00100 = 20 символов \ секунду
    16. out 0x60, al
    17. ;попытка разблокать клаву
    18. in al, 0x61
    19. or al, 1
    20. out 0x61, al
    21. ret
    Собсно бокс пишет какуюто лабуду :
    kbd_enQ(0xfa)
    kbd_enQ: putting scancode 0xfa in internal buffer
    а дальше пишет, что делей поменял успешно...
     
  5. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Vilco
    Код (Text):
    1. ;ожидание готовности контроллера
    2. keyb_sett:
    3. in al, 0x64
    4. test al, 00000010b
    5. jnz keyb_sett
    6. ;посылка кода команды
    7. mov al, 0xF3
    8. out 0x60, al
    9. ; ждем ACK
    10. wait_ack:
    11. in al, 0x64
    12. test al, 1
    13. jz wait_ack
    14. in al, 0x60 ; читаем ACK
    15. ; посылка значения для команды
    16. mov al, 00100100b
    17. out 0x60, al
    18. ; попытка разблокать клаву
    19. in al, 0x61
    20. and al, 0x7F
    21. out 0x61, al
    22. ret
     
  6. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Хм, спасибо. Откуда выдержка? Неужто мануалы?
    Только единственное, что пришлось
    Код (Text):
    1. wait_ack:
    2. in al, 0x64
    3. test al, 1
    4. jz wait_ack
    5. in al, 0x60 ; читаем ACK
    дважды делать (второй раз после посылки rate\delay байта)
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    отсюда