Клавиатура (через порты)

Тема в разделе "WASM.OS.DEVEL", создана пользователем clotho, 17 июн 2010.

  1. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Уважаемые знатоки, подскажите пожалуйста человеку не смыслящему в языке ассемблера как правильно работать с клавиатурой через порты. Задача проста, записать в буффер клавиатуры скан-код. А вопросов много.
    0) Через 64 порт вырубаю и врубаю мышку... значит дело в мозге
    1) Порты 60 и 61 или 60 и 64 ? Да 61 для совместимости и многаво букв но всё же
    3) Коды какие использовать? их вроде там три варианта, где бы почитать.
    4) надо ли при работе через 64й щелкать клавиатуру, как при чтении через 61й
    5) можно ли писать через 61й ?
    6) что-то новее Джордейна и полнее Фроловых почитать есть?
    Прошу не бить за столь безграмотно составленный пост.

    С уважением, Clotho
     
  2. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    как отключаю грызуна

    Код (Text):
    1. w_: __asm in al,64h
    2.     __asm test al,10b
    3.     __asm jnz w_
    4.     __asm mov al,0A7h
    5.     __asm out 64h,al
     
  3. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    За запись в буффер, как я понимаю, отвечает команда 0D2h порта 64, но что-то как-то мне её правильно использовать не удалось... =(
     
  4. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    0) не понял вообще. Как, впрочем, и задачу в целом.
    1) С 8042 - обмен через 60/64, с 8048 - через 60. Набор команд у них разный.
    3) Какой надо - такой и пишите.
    4) Забудьте 61 порт как страшный сон времен ХТ. Уже давно он никому не нужен, но абсолютное большинство ресурсов, которые называют себя "посвященными программированию" тупо копипастят друг у друга бред с передергиванием 7 бита в этом порту. Так уже не нужно делать лет эдак 10-15.
    5) 61 порт уже не используется. Вообще. Совсем. Навсегда. Кирдык.
    6) Спрашивать гугл по ключам что-то типа 8042 KBD interface.
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Не путай человека. Там все по другому. Чтобы послать команду в 8048. Надо вначале подать команду в 8042, а после послать данные. А вот как эти данные интерпретировать зависит от 8042.

    clotho
    Неправильно это команда выполняет другую роль.
     
  6. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Благодарю уважаемых Vic3Dexe и Pavia что откликнулись.

    8042 и 8048 функционально, абсолютно разные контроллеры --- 8042 процессор клавиатуры, а 8048 микросхема работы с переферией. Я правильно это понимаю???
     
  7. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Задача, как я её понимаю, состоит в том, чтобы не привязываясь к конктретной ОС <<нажимать>> кнопки клавиатуры. Код про грызуна приведён только для того чтобы показать что я могу писать в порты.
     
  8. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Вопрос к уважаемому Pavia

    Так же ночью наткнулся на следующий пост:
    Видимо я не один так понимаю смысл команды D2 контроллера 8042. Мне начинать скать правильную литературу?

    P.S. Код приведённый в цитате не даёт желаемого эффекта.
     
  9. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    И ещё к уважаемому Pavia

    Пожалуйста, конкретизуруйте Ваше высказывания относительно команды D2 . Я, если надо, конкретизирую свою задачу.
     
  10. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Итак, формулировка задачи в принципе утряслась.

    Как писать в буффер клавиатуры через 64й порт. Когда и сколько ждать. И самое главное, что-то после отправки данных через порт 60 делать надо?

    Везде всё написано по-разному =(

    Общий костяк

    Код (Text):
    1. in al,64h
    2. ждать
    3. mov al,0D2h
    4. out 64h,al
    5. mov al, скан-код
    6. out 60h,al
    Почему я не наблюдаю эффекта? или я не там смотрю?
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Код (Text):
    1. mov al,0D2h
    2. out 64h,al
    3. ждать приема кода команды
    4. mov al, скан-код
    5. out 60h,al
    6. ждать приема данных
    После можно получать отправленный код (например, в обработчике прерывания).
     
  12. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    Чтобы включить светодиод надо обращаться к 8042 через 64 порт? Ну-ну =)
    Если ты имеешь ввиду, что весь траффик к 8048 проходит через 8042, то я согласен, но система команд у них разная, и обращаться к ним нужно по-разному.
    8042 - это контроллер клавомыши (родился в АТ, располагался на маме, сейчас в составе южного моста) отвечающий за обслуживание интерфейсов PS/2, AT KBD, PS/2 mouse, а 8048 (сейчас ее аналоги) - это контроллер в самой клаве, отвечающий за сканирование клавиш, управление светодиодами, генерацию скан-кодов и пр. низкоуровневые вещи. Поскольку весь обмен с 8048 идет через порт клавы (а, следовательно, и через 8042), 8042 может влиять на процесс, например, транслируя скан-коды от 8048 из set 2 в set 1.
     
  13. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Позволю себе уточнить: 8042 — программируемый микроконтроллер (прожигается на заводе, можно прицепить внешнее ПЗУ через ноги GPIO), зачастую он не в составе южного моста, а в составе отдельного SuperIO (обычно там же FDC/COM/LPT/Smartcard и прочая) на шине LPC.
     
  14. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Спасибо уважаемым Vic3Dexe и baldr за прояснение ситуации.

    Вопрос к уважаемому Phantom_84.
    А если я по собственной наивности не желаю писать обработчик? Вот вызвать int 16 у меня не получилось, система ушла в ребут... (По этой причине пишу в порты.) Где-то я читал, что после записи в буфер клавы, следует, именно следует, передать управление текущему обработчику, так ли это?

    Общий вопрос, как <<увидеть>> результат? То есть надо написать процедуру которая определяет/устанавливает набор скан-кодов потом пишет в порт, или просто написать в порт, и выполнить её, скажем, при активном фокусе на окне текстового редактора, или тут так не прокатит?

    Спасибо всем пытающимся читать мой бред.
     
  15. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    int 16h получает данные из клавиатурного буфера BIOS, помещаемые туда обработчиком, висящим на int 9. Ты можешь получить код при помощи int 16h, только нужно учитывать, что у BIOS свой формат.
     
  16. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Phantom_84, я имел ввиду пятую функцию int 16 --- поместить данные в буффер. Привела к перезагрузке. (Хотя тут скорее моя вина, ведь нельзя было туда фар джампом, так?)

    Вот здесь я читал про обязательный вызов обработчика http://www.computer-engineering.org/

    Вопрос остаётся открытым: я маленький резидент, гажу в буффер клавиатуры, как сделать чтобы всё записаное в буффер оттуда считалось (обработчиком?) и пошло дальше?
     
  17. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Far jump'ом не стóит, обработчик ожидает кой-чего в стэке.

    Гадить в буфер клавиатуры надо аккуратно если прерывания разрешены. Атомарные операции и всё такое.
     
  18. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    А чёрт, всё время я про стэк забываю...
     
  19. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    Да можно и запретить, подождут немного...
     
  20. clotho

    clotho New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2010
    Сообщения:
    21
    В общем, после записи в 64/60, надо дёрнуть девятое, так?