открыл текстовый редактор, хочу напечатать букву "F".
нажимаю на клавишу "F/А", буква появилась на экране.
вопрос: сколько весит эта буква в битах?
Сколько весит одна буква?
От кодировки зависит.
Если UTF-8, то там на разные символы разный вес.
8?
т.е. 1 байт?
второй вопрос: а как вообще происходит перевод нажатия на клавишу в букву на экране?
т.е. 1 байт?
Не обязательно. Смотря какая кодировка. Sonic выше ведь написал smile . И с UTF-8 не все так просто. Надо доки читать по этой кодировке. Латиница по 1 байту, кириллица по 2 байта, редко используемые иероглифы еще больше, возможно, что так, но тоже не точно...
я про латинские символы.
написано же буква F
хорошо! пусть будет 1 байт.
допустим, буква F выглядит так: 00001111
8 бит - 1 байт
я нажал на клавишу F и дальше что?
почему процессор понял, что нажал именно на F?
я нажал на клавишу F и дальше что?
Дальше клава посылает по проводу (или радио) скан-код нажатой клавиши, драйвер клавы этот код ловит и оповещает систему, что юзер что-то нажал, система передает скан-код активному приложению, а оно, в свою очередь, решает, что в ответ на это нажатие надо в текстовое поле, имеющее в данный момент фокус ввода, добисать букву "F". Как-то так.
понял.
а как прерывание (или сопротивление) *я смотрел как клавиатура устроена*
превращается в 1 байт? на каком этапе?
т.е. как происходит превращение электрического сигнала в 1 байт?
как байт превращается в букву это я знаю.
есть таблица кодов, из неё и берется значение.
дескать, 00001111 - это буква F.
понял.
дескать, 00001111 - это буква F.
В UTF-8 1000110 - это буква F.
да без разницы...
я про принцип. мне сейчас частности не нужны.
Termo, лучше бы про работу ЖК-монитора почитал, там все намного интересней, чем клавиатура :D
По приведённой ссылке начиная с "От кодов клавиш к их значению" слишком обще ;-)
Некоторые клавиши генерят 2 или больше сканкодов (если правильно путаю, с префиксом E0h, кстати, именно это было причиной изначальной каг'тавости Ног'тон Коммандег'а от дяди Питег'а под DOS (глотал русскую "р", код которой в альтернативной кодировке аккурат E0h)), сканкод генерится на нажатие, автоповтор (если возникнет), отпускание клавиши (на отпускание приходит тот же сканкод с поднятым 8 битом, +80h). На сгенерированный сканкод дёргается аппаратное прерывание от клавиатуры, его обработчик читает из порта ввода/вывода (если не изменяет склероз 60h/64h) сканкод, сигнализирует о завершении аппаратного прерывания. Цепочка сканкодов в зависимости от различных состояний (как клавиатуры: CapsLock, NumLock, так и логических переключателей, например, AltGr - переключение языка, R/L Shift/Alt/Crl) трансформируется в тот или иной символ/код (или целые фразы).
Касательно Linux, функциональность обеспечивается ядром, таблица преобразования загружается через loadkeys (man имеется в наличии).
Думаю, для затравки пока хватит.
ps. Ах, да это пока ещё не буква на экране, на экран её нужно вывести. Бывает ввод без эха (так обычно вводятся пароли, на экран ничего не попадает), и с эхом, когда вводимое отображается на экране, но делает это уже не клавиатура и не её обработчик. Видеоадаптер имеет разные режимы, часть из них "текстовые", часть "графические".
Текстовые режимы отображают одну или несколько страниц видеопамяти (базовый адрес (в реальном режиме, в нём до сих пор стартуют x86) B800h для CGA/EGA/VGA и 8000h для монохромных, символьные разрешения 40х25, 80х25, 80х45, 80х50, 132х25, ... -- из стандартного ряда). Каждое знакоместо экрана представлено в памяти 2 байтами -- один на символ, 1 на "раскраску" - полбайта цвет символа, полбайта -- цвет фона (включая бит мигания/яркости, который может играть роль признака расширенной таблицы символов на ещё 256 символов). В этих режимах "образы" символов загружаются в специальную таблицу (или несколько) видеоадаптера, преобразование кода символа в картинку производит видеоадаптер.
В "графических" режимах видеопамять логически может быть устроена по разному, но основной признак -- растровый вывод -- нельзя записать код символа в определённую ячейку видеопамяти и увидеть его на экране, вместо этого нужно выводить его "картинку". Однако, не стоит пугаться, обычно эту функциональность берёт на себя BIOS или ОС.
oO oO
но, в принципе, понятно.
спасибо... smile
Вот вы)))) Клавишное поле устроено, как решётка. пересечения - это места для кнопок. По горизонтальным шинам постоянно передаются импульсы опроса. Вертикальные линии - приёмники. При нажатии кнопки, импульсы соответствующей горизонтальной линии направляются через замкнутые контакты клавиши на соответствующий приёмник вертикальной линии. Процессор клавиатуры подаёт нужные ему данные на горизонтальные линии и после нажатия кнопки - соответствующий стандартный код на выход. А уже компьютер средствами ОСи стандартные сканкоды интертпретирует, как задано ОСью.
