OSDev http://osdev.su/ |
|
Гугл подвел... Ищется функция scan2ascii... http://osdev.su/viewtopic.php?f=6&t=920 |
Страница 1 из 3 |
Автор: | Mirmik [ 04 май 2014, 05:05 ] |
Заголовок сообщения: | Гугл подвел... Ищется функция scan2ascii... |
Осваиваю новую для себя платформу x86. Настроил прерывания, сегментную адресацию, нахожусь, насколько я понимаю, в защищенном режиме (grub2 туда меня бросил, отработав по multiboot). Получил с клавиатуры scan коды. Не могу найти функцию scan2ascii... То есть, переводящую scan коды в ASCII. На всякий случай, в догонку, вопрос. Аппаратно в i386 ascii коды нигде не генерируются? Вроде, как гугл подсказывает, bios умеет, но, как тот же гугл подсказывает, к биосу из защищенного режима не достучаться. Поправьте, если что-то путаю. |
Автор: | SII [ 04 май 2014, 11:20 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Преобразование скан-кодов клавиатуры в коды символов -- чисто программное, чем BIOS и занимается (и драйвер клавиатуры в составе ОС; BIOS использовался для этих целей только в MS DOS). Процессор вообще ни про какие кодировки ни сном, ни духом -- какое отношение они к нему имеют-то? Так что пишите свою программу преобразования -- хоть в ASCII, хоть в UTF-8, хоть во что другое. |
Автор: | Mirmik [ 04 май 2014, 12:10 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Спасибо за консультацию. |
Автор: | pavia [ 04 май 2014, 14:20 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Никогда не делал. На входе у нас есть большое разнообразия клавиатур и несколько стандартов сканкодев. А на выходе у нас есть несколько языков и кодировок. Помимо прочего есть ещё машина состояний ввода. Которая выбирает регистр, язык, 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) |
Автор: | Mirmik [ 04 май 2014, 15:24 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Хм... Как все сложно, оказывается... Пока реализовал преобразователь скан кодов XT (PS/2) клавиатуры в ASCII... Клавиатура какая была, а ASCII, как стандарт, с которым работает большинство терминалов. Не запилил только корректную обработку ctrl, esc. ИМХО, наверное, пока хватит (см GenOS). Кириллица и прочие вещи пока не нужны. Хотя надо будет подумать. В любом случае, каждый преобразователь пойдёт как отдельный модуль... |
Автор: | pavia [ 04 май 2014, 16:32 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Не надо путать XT c PS/2 это разные архитектуры. PS/2 это наследник AT. И насколько помню сканкоды там разные. |
Автор: | Mirmik [ 04 май 2014, 17:02 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Действительно... Глупость сказал. ИМХО, PS/2 вообще без разницы, какие коды. Тоесть он может и XT. |
Автор: | SII [ 04 май 2014, 17:29 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Теоретически клавиатуры могут использовать несколько кодовых таблиц, но на практике вроде как только №2 имеется. Хотя уж не помню -- с железом ПК сто лет не работал. |
Автор: | phantom-84 [ 04 май 2014, 22:22 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Да, стандартным для PS/2 клавиатур является второй набор, но дело в том, что контроллер его транслирует в некоторое подобие первого. У меня драйвер отключает аппаратную трансляцию и транслирует второй набор в виртуальные коды. pavia, виртуальные коды хороши тем, что они аппаратно независимые. Очень удобно, особенно в свете того, что аппаратные сканкоды могу быть как однобайтовыми, так и многобайтовыми. |
Автор: | Mirmik [ 04 май 2014, 23:14 ] |
Заголовок сообщения: | Re: Гугл подвел... Ищется функция scan2ascii... |
Вопрос в догонку. Как из защищенного режима выполнить перезагрузку? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |