168

Реверс-инжиниринг нестандартной ps/2 клавиатуры

Автор: dlinyj

Оригинальный материал

Дополнительные фото и видео в
источнике материала.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Терминал VT520 c клавиатурой LK46W-A2

После моего предыдущего поста с подключением советской клавиатуры к современному ПК, я как-то заразился оригинальными клавиатурами от DEC, и уж больно хотелось их испытать в деле. И на удивление, на досках удалось найти даже клавиатуру LK201, однако для меня показалась не очень уж интересной. А вот клавиатуру Wyse 85 со свичами Cherry MX нашёл намного более стильной и крутой. Однако смущал вопрос, как же её использовать с современным железом, удобно ли будет такое расположение клавиш?

И тут мне на глаза попадается объявление с ещё одной терминальной клавиатурой LK46W-A2 которую можно подключить к обычному компьютеру по стандартному интерфейсу PS/2, но с количеством клавиш и расположением, как у LK201 с небольшими дополнениями. После того как ознакомился с информацией, принял волевое решение купить кота в мешке и попробовать эту клавиатуру с обычным ПК, а также понять, что же делают все остальные «нестандартные клавиши». Этакий реверс-инжиниринг клавиатуры.

❯ Распаковка и отмывка

Итак, спустя пару недель мне пришла посылка с этой удивительной клавиатурой. Терминал найти невозможно, а вот клавиатуру – пожалуйста.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Клавиатура LK46W-A2 собственной персоной

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

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Наклейка модели

С большим трудом удалось установить, что использовалась с моделями терминалов DEC VT520 (см КДПВ). Терминал не найти, а клаву – вот, пожалуйста.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Вид снизу

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

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Внутри стандартная плёночная клавиатура, с резиновыми «давилками».

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

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

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Металлические клипсы

Плёнка клавиатуры прижимается к контроллеру специальной резинкой, вмонтированною в корпус клавиатуры.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Резинка для прижима контактов

Контроллер – обычная капля, 4 стандартных контакта для ps/2: Data, Clock, +5, GND.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно
Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Контроллер

После разборки, корпус клавиатуры ждала процедура купания. Не стал фотографировать, как я мою клавиатуру в ванной с мылом. Грязи вышло достаточно много.

Когда омовение прошло, прежде чем окончательно закрыть клавиатуру в корпусе, сделал тестирование работоспособности всех клавиш на резинке.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Тестирование перед закрытием

Не забываю смазать все движущие части, и окончательно собираю клавиатуру.

❯ Поиск потерянных клавиш

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Если взглянуть на фотографию, и сравнить две клавиатуры, то можно заметить, что, во-первых, клавиш намного больше, а во-вторых, непонятно что эти клавиши делают. Сравните, для примера, расположение клавиш вокруг кнопки «Z».

В чём прикол?

На самом деле вас немного разыгрываю, нижняя клавиатура имеет сербскую латинскую раскладку, у которой «Y» и «Z» поменяны местами:

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно


Если тут есть сербы, объясните мне, что за спецсимволы нанесены на клавиши и где они используются?

Главный вопрос, который меня волнует: как понять какая клавиша за что отвечает?

Изначально пытался найти хоть какую-то внятную документацию по теме, но в результате пришлось действовать методом научного тыка. Для этого пошёл на сайт en.key-test.ru и начал нажимать все клавиши, перебирая их последовательно. В результате получилась такая картинка:

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

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

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

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

На самом деле Right Ctrl

Итак, что же тут интересного:

  1. Клавиши F13, F14, Help, Do, F17, левый Compose Character – не определены. Назначение и функциональность пока неясны.

  2. Клавиша ESC расположена, где находится тильда "~" на обычной клавиатуре, а тильда рядом с клавишей «Z».

  3. Функциональные клавиши типа Home, End, PageUp, PageDown, Isert и т.д. находятся в других местах, но достаточно логично. Не стал их подписывать, потому что и так можно догадаться (например, Re-move = Del, Prev = PageUp). Часть функциональных клавиш расположена на клавишах F18-F20.

  4. Цифровой блок достаточно стандартен, кроме одной клавиши – это клавиша «минуса», она даёт странный код: "±". Да, символ «плюс-минус», который можно набрать прямо с клавиатуры, с одной клавиши (Linux Mint).

❯ Пробуем получить скан-код клавиши


Согласно стандарту, клавиатура при нажатии передаёт скан-код нажатия клавиши и скан-код «отжатия» клавиши.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно
Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Примеры скан-кодов стандартной клавиатуры

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

Для начала попробовал получить скан-коды неизвестных клавиш через утилиту showkey. Для этого нужно полноправно завладеть устройством ввода, без иксов. Поэтому переключаюсь на консоль комбинацией клавиш ctrl-alt-F1 и ввожу:

showkey -scancodes
И начинаю радостно жать на неизвестные клавиши, но удивительно: ничего не происходит! Те клавиши, которые мне удалось перехватить, дают корректный скан-код, а вот «тайные» — «молчат». То есть либо эти клавиши вообще не работают, либо фильтруются на уровне драйвера ядра.

Начал думаю, что же мне проще: подключить логический анализатор, либо найти другой способ получения скан-кодов нажатых клавиш? И тут я вспомнил, что у меня есть тестовая машина с DOS.

❯ Получаю скан-коды под ДОС

Синей пеленой экран заполнил чистый DOS
Мышь…
Стала вдруг квадратной, потеряла форму мышь…
Я разбил окно,
девяностопятое мастдайное окно,
И поставил DOS, и тогда увидел:
Это счастье, — вот оно.

Итак, для того чтобы получать скан-коды клавиш, нужно иметь какую-то программу, которая бы читала их из BIOS. Контроллер клавиатуры позволяет читать коды набранных клавиш из порта 0x60, осталось только это всё аккуратно написать. Для того чтобы понять, о чём я говорю, вы можете посмотреть пример на ассемблере.

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

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

После того как протестировал в Dosbox, пришла пора проверить на реальном железе.

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Тестовая машина с ДОС

Для своего удобства делал фотографии с именованием «неизвестной» клавиши и её кодом. Так получилось, что после запуска приложения, из буфера читается «мусорный код». Его я прикрывал бумажкой, важно, что ниже. Вот, например, нажатие левой клавиши «Compose Character».

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Как я и предполагал, все они идут через код расширения 0xE0. То есть, код клавиши получается: 0xE00F. Вторая пара байт 0xE08F – это код отпускания этой клавиши (на это действие тоже есть отдельный код).
Ну и по аналогии, остальные клавиши.

Из забавного, что в ДОС даже есть какая-то скромная попытка обрабатывать нажатия на клавиши, например, реагирует на них, запуская копирование (хотя это ошибка).

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Ложное срабатывание

В общем, ДОС хоть и стар, но оказывается местами даже очень полезен.

❯ А что там с документацией?


Явно найти документацию на клавиатуру модели LK46W-A2 мне не удалось. Но, когда я искал документацию на стандарт ps/2, то наткнулся на сайт Keyboard scancodes, в котором есть раздел, посвящённый клавиатурам LK411 и LK450. Нашёл это уже после прохождения всех моих мытарств, но они лишь подтвердили результаты моих экспериментов:

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно


То есть, фактически мне это удалось подтвердить эмпирическим путём, хотя у меня немного другая модель клавиатуры.

❯ Выводы

Реверс-инжиниринг нестандартной ps/2 клавиатуры Timeweb, IT, Программирование, Разработка, Длиннопост, Своими руками, Клавиатура, Реверс-инжиниринг, Терминал, Linux, СССР, Программист, Познавательно

Сравнение Wise 85 и LK46W-A2

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

Единственный вопрос, который остался за кадром: почему Linux фильтровал нажатия этих клавиш? Возможно ли поправить dts-файл так, чтобы ядро корректно отрабатывала нажатия этих клавиш? Добавить ими дополнительную, необходимую для комфортной работы функциональность? В общем, вопросов пока больше, чем ответов. Если опытные драйверисты есть, буду рад обсудить этот момент.

Из личного опыта такое расположение нахожу весьма удобным, и резюмируя, могу сказать что клоны клавиатур lk201, в том числе советский клон может быть использован для набора текста. Разве что потребуется программирование некоторых клавиш под свои нужды, и придётся отказаться от правого Alt и Ctrl.

Полезные ссылки:

  1. Keyboard tester online

  2. Keyboard scancodes (основная документация)

  3. The Scan Code values generated by the PC Keyboard

  4. Пример кода чтения скан-кодов клавиатуры, на бейсике.

  5. DEC KEYBOARDS


P.S. Если вам интересно моё творчество, вы можете следить за мной ещё в телеграмме.

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

TECHNO BROTHER

2K постов13.4K подписчиков

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины