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

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

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

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


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


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

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


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

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


Вид снизу

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



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



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


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

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


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

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




Контроллер

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

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


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

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

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




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

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



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

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

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



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

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


На самом деле 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).


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


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




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

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

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

showkey -scancodes

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

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

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


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

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

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

'recieve key (keyboard port)
k% = INP(&H60)

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


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

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



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

Ну и по аналогии, остальные клавиши.

Фотографии скан-кодов остальных неизвестных клавиш








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


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

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

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


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

These keyboards have seven additional keys, with escaped scancodes e0 0f (LeftCompose), e0 3d (F13), e0 3e (F14), e0 3f (Help), e0 40 (Do), e0 41 (F17), e0 4e (Keypad-minplus). (LK411 has all seven. LK450 has the last six — the report did not mention a Compose key.) There are only two LEDs. The keycaps are unusual.

In (translated) scancode Set 3 these keys give codes 68, 44, 42, 40, 3e, 65, 70. In untranslated Set 2, the F17 key gives e0 83.

An LK411 keyboard, with left and right hand side enlarged.

The keys labeled F18, F19, F20 produce the codes expected for PrtSc, ScrollLock, Pause. The keys labelled PF1, PF2, PF3, PF4 produce the codes expected for NumLock, Keypad-/, Keypad-*, Keypad--. The Keypad-, key produces the code 4e expected for Keypad-+. The Right ComposeCharacter key produces the code expected for RCtrl. The key labelled </> produces the code 29 expected for `/~. The key labelled with `/~/(Esc) produces the code expected for Esc.
image

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

Выводы



Сравнение 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. Если вам интересно моё творчество, вы можете следить за мной ещё в телеграмме.

Комментарии (19)


  1. MaFrance351
    18.01.2023 11:33
    +4

    Отличная статья. Сам большой любитель старых клавиатур, некоторые из них такие, что после них на большинство типичных нынешних просто руки не ложатся.

    Насчёт скан-кодов: при отсутствии компьютера под DOS или желания разбираться со старым софтом можно подключить клаву к МК. Вот для примера библиотеки для Arduino и STM32. Там можно взять пример работы с этим интерфейсом.


    1. dlinyj Автор
      18.01.2023 11:40
      +4

      Это совершенно точно, даже после того как потрогал Wise 85, другими пользовался не можешь. На работе сам использую стационарную клавиатуру IBM, с трекпоинтом. Не забуду, сфотографирую.

      Да понятно, что можно и другим. Для меня ДОС был более доступным, а для Ардуино ещё паять бы пришлось. Так-то я и на анализаторе бы посмотрел.


    1. dlinyj Автор
      18.01.2023 12:39
      +9

      Обещал показать свою рабочую клавиатуру.


      1. MaFrance351
        18.01.2023 12:40

        Клавиши как у ноута, ножничного типа?


        1. dlinyj Автор
          18.01.2023 12:41

          Похоже, да, но есть и отличия. Например, отсутствие клавиши Win.


      1. Crimento
        18.01.2023 17:26
        +1

        Где вторая половина от Thinkpad T43? (или X31, не особо понятно по размеру)


        1. MaFrance351
          18.01.2023 17:36

          У меня почему-то сразу ассоциации с чем-то серверным и консольным. По-моему, в подобных местах такая клава вполне пригодится…


          1. dlinyj Автор
            18.01.2023 17:53
            +1

            Именно так, это часть серверной консоли. Покупал целиком ради клавиатуры.


        1. dlinyj Автор
          18.01.2023 17:53
          +1

          Это часть серверной консоли.


  1. Domorost
    18.01.2023 11:56
    +4

    Спасибо за труды, восхитительно!


    1. dlinyj Автор
      18.01.2023 12:57
      +1

      Спасибо!


  1. Shyhartskoi
    18.01.2023 12:10
    +3

    Отличный материал!


    1. dlinyj Автор
      18.01.2023 12:57

      Спасибо!


  1. victor_1212
    18.01.2023 18:08
    +4

    если правильно помню LK46W-A2 это клавиатура для OpenVMS, если интересно посмотрите описание системы, например:

    https://livingcomputers.org/UI/UserDocs/OpenVMS-7-3/1_VMS_User_Manual.pdf

    собственно LK46W-A2 заточена именно под эти команды, там есть картинки и рекомендации как с ней эффективно работать, конечно для полного счастья нужна рабочая система :)


  1. radiolok
    19.01.2023 14:54
    +2

    Вспоминается фраза из самоучителя работы на компьтере 1997 года - "чем больше функциональных клавиш Fn - тем мощнее компьютер"


    1. MaFrance351
      20.01.2023 03:10
      +2

      "… Одним из примеров громоздкой и, по мнению авторов, бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft. Эта система занимает почти 1 Мбайт дисковой памяти и рассчитана на преимущественное использование совместно с устройством типа мышь." — вы точно знаете, откуда это.


  1. maximnik0q
    19.01.2023 22:05
    +1

    Вот и выросло поколение которое не знает про утилиту xev. А она частенько выдает сканкоды когда showkey не помогает.Т.к X протокол-с терминальными клавиатурами должен общаться,стандарт....А сейчас унифицировали из за вайланда систему ввода и подзабили на старую совместимость....Я не навистник вайланда, но блин 10 лет как внедряют и косяки до сих пор прут,не могли взять готовую графическую подсистему с Be-be, ой конечно же с Syllable [модефикация граф подсистемы оригинала Haiku ] .Гайка уже и вайланд внедрила и DRI и высокая четкость и совместимость с X11.Силами трёх любителей и студентов.....


    1. dlinyj Автор
      20.01.2023 00:12
      +2

      Вот и выросло поколение которое не знает про утилиту xev. А она частенько выдает сканкоды когда showkey не помогает.


      Сколько ж вам лет, дедуль? Не думаю что шибко больше, чем мне, ибо Linux появился на моём веку, когда я уже сознательно использовал компьютер. Однако, никогда не пользовался этими утилитами, впервые понадобилось. Так бы на уровне ядра можно было решить.


  1. maximnik0q
    20.01.2023 22:33

    Однако, никогда не пользовался этими утилитами, впервые понадобилось. 

    Ну что я могу сказать наверное повезло.Или бум мультимедиа и офисных клавиатур прошел мимо вас (да ,были такие ps/2 клавиатуры и с переходником на юсб и наоборот).А китайские первые такие клавиатуры это что то - некоторые модели даже в режиме Биоса полноценно не работали,не то что под Линуксом.И то что клавиатура видилась двойным устройством это даже было не зло - например клавиатура и 2 скроллинга от мышки-если коды стандартные не чего править не приходилось кроме одной секции в Xfree.Потом уже появились открытые спецификации и зоопарк стандартов прекратился.