OSDev

для всех
Текущее время: 19 окт 2017, 09:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: 04 май 2014, 05:05 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
Осваиваю новую для себя платформу x86.

Настроил прерывания, сегментную адресацию, нахожусь, насколько я понимаю, в защищенном режиме (grub2 туда меня бросил, отработав по multiboot).

Получил с клавиатуры scan коды.

Не могу найти функцию scan2ascii... То есть, переводящую scan коды в ASCII.
На всякий случай, в догонку, вопрос. Аппаратно в i386 ascii коды нигде не генерируются?

Вроде, как гугл подсказывает, bios умеет, но, как тот же гугл подсказывает, к биосу из защищенного режима не достучаться.

Поправьте, если что-то путаю. :roll:

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 11:20 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1314
Откуда: Зеленоград
Преобразование скан-кодов клавиатуры в коды символов -- чисто программное, чем BIOS и занимается (и драйвер клавиатуры в составе ОС; BIOS использовался для этих целей только в MS DOS). Процессор вообще ни про какие кодировки ни сном, ни духом -- какое отношение они к нему имеют-то? Так что пишите свою программу преобразования -- хоть в ASCII, хоть в UTF-8, хоть во что другое.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 12:10 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
Спасибо за консультацию.

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 14:20 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Никогда не делал. На входе у нас есть большое разнообразия клавиатур и несколько стандартов сканкодев. А на выходе у нас есть несколько языков и кодировок.
Помимо прочего есть ещё машина состояний ввода. Которая выбирает регистр, язык, 1-4 ряд, функцию и тп.

Довольна часто можно наблюдать 2-х ступенчатое преобразование. Не сказал бы что это плюс. Вначале сканкод преобразуется в виртуальный код клавиши, затем этот код уже преобразуется в выходной символ.
Виртуальные коды определяет осеписатель.

Теперь более детально. Наиболее популярные сейчас это PS/2 и USB клавиатуры.
В качестве выхода используется ASCII(Американская кодировка), OEM с кодовой страницей (CharPage), Unicode, UTF-8.
однобайтовые кодировки считаются устаревшими. Хотя в микроконтроллёрах находят применения.

Наверно стоит добавить что для ASCII IBM разработала целую методику ввода. [3]
PS/2 сканкоды можны посмотреть в [1]
USB сканкоды можны посмотреть в [2]


Документация по клавиатуре, далеко не полная:
0] Pavia\ЯД\Osdev\docs specification\KeyBoard\
1] IBM Keyboard 101- and 102-Key( ibm_hitrc11.pdf)
2] Hut1_12v2.pdf (Бывший HID)
3] IBM Characters and Keystrokes (ibm_hitrc12.pdf)
4] Слой символов на клавиатуре Русской (KBD443.pdf)
5] Слой символов на клавиатуре США (KBD103P.pdf)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 15:24 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
Хм... Как все сложно, оказывается...

Пока реализовал преобразователь скан кодов XT (PS/2) клавиатуры в ASCII...
Клавиатура какая была, а ASCII, как стандарт, с которым работает большинство терминалов.
Не запилил только корректную обработку ctrl, esc. :evil:

ИМХО, наверное, пока хватит (см GenOS). Кириллица и прочие вещи пока не нужны. Хотя надо будет подумать. В любом случае, каждый преобразователь пойдёт как отдельный модуль...

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 16:32 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Не надо путать XT c PS/2 это разные архитектуры. PS/2 это наследник AT. И насколько помню сканкоды там разные.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 17:02 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
Действительно... Глупость сказал.

ИМХО, PS/2 вообще без разницы, какие коды. Тоесть он может и XT.

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 17:29 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1314
Откуда: Зеленоград
Теоретически клавиатуры могут использовать несколько кодовых таблиц, но на практике вроде как только №2 имеется. Хотя уж не помню -- с железом ПК сто лет не работал.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 22:22 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1195
Да, стандартным для PS/2 клавиатур является второй набор, но дело в том, что контроллер его транслирует в некоторое подобие первого. У меня драйвер отключает аппаратную трансляцию и транслирует второй набор в виртуальные коды. pavia, виртуальные коды хороши тем, что они аппаратно независимые. Очень удобно, особенно в свете того, что аппаратные сканкоды могу быть как однобайтовыми, так и многобайтовыми.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 май 2014, 23:14 
Аватара пользователя

Зарегистрирован: 20 мар 2014, 12:53
Сообщения: 45
Вопрос в догонку.

Как из защищенного режима выполнить перезагрузку?

_________________
http://osdev.ru/viewtopic.php?f=4&t=893 - GenOS


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB