OSDev
http://osdev.su/

как быть с клавой?
http://osdev.su/viewtopic.php?f=6&t=836
Страница 1 из 1

Автор:  Мотороллер [ 04 дек 2013, 11:27 ]
Заголовок сообщения:  как быть с клавой?

есть обработчик клавиатуры. нажатые клавиши он пока выводит на экран для видимости своей работы, сейчас в его работе сомнений нету, поэтому хотелось бы сделать что-то типа буфера клавиатуры. только вот что и как - хз. есть идея сделать небольшой аналог досового кольцевого буфера, но тут возникает проблема с использованием его в многозадачности. можно конечно в каждой задаче сделать свой буфер, но это край. может есть что-то лучше этого?

Автор:  sh2ezo [ 04 дек 2013, 12:52 ]
Заголовок сообщения:  Re: как быть с клавой?

Пусть каждая задача, использующая клаву, сообщает об этом драйверу клавы, а драйвер клавы пусть шлёт сообщения о нажатиях и отпусканиях всем нуждающимся. Так количество запоминаемых клавиш не будет ограничиваться размером клавиатурного буфера.

Автор:  Мотороллер [ 04 дек 2013, 13:20 ]
Заголовок сообщения:  Re: как быть с клавой?

у меня сейчас "драйвер" клавиатуры - это обработчик прерывания в ядре. не гоже будет ему всю эту рутину выполнять. тогда можно, наверное, так сделать: в обработчик прерывания клавиатуры (который в ядре) засунуть код, который только будет принимать скан-коды клавишь, сам драйвер вынести в отдельный модуль, который будет работать на уровне ядра, но выполняться как процесс. т.е. примерно так:
Код:
keyboard_handler:
in al, 60h
mov [keyboard_driver_kye_scancode], al
in al, 61h
mov ah, al
or al, 80h
out 61h, al
mov al, ah
out 61h, al
iretd


keyboard_driver:
cmp [keyboard_driver_kye_scancode], 0
je keyboard_driver
;тут преобразование сканкода в аски код и посыл его всем процессам
mov [keyboard_driver_kye_scancode], 0
jmp keyboard_driver

Автор:  sh2ezo [ 04 дек 2013, 13:55 ]
Заголовок сообщения:  Re: как быть с клавой?

ИМХО, при такой организации велик риск того, что клава пошлёт несколько кодов, а "драйвер" не успеет все обработать. Если не отказываться от архитектуры с кучей сообщений, то нужен буфер между "драйвером" и обработчиком. А вообще тут на форуме учебная ОС есть и оттуда можно взять схему работы с клавой

Автор:  Мотороллер [ 04 дек 2013, 14:37 ]
Заголовок сообщения:  Re: как быть с клавой?

я просто думал, что пользователь не может нажимать так быстро клавиши. + у меня ось будет пока что в обычном консольном режиме, можно слать проге сообщение о том, что пользователь сменил консоль, та в свою очередь отправит драйверу сообщение о снятие запроса на клаву. можно сделать так!

Автор:  scuter [ 04 дек 2013, 23:01 ]
Заголовок сообщения:  Re: как быть с клавой?

делай один буфер, пейджингом подставляй.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/