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 умеет, но, как тот же гугл подсказывает, к биосу из защищенного режима не достучаться.

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

Автор:  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. :evil:

ИМХО, наверное, пока хватит (см 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/