Когда я листал доски объявлений, на глаза попалась отличная клавиатура «Электроника МС 7004». Даже по современным меркам клавиатура выглядит просто потрясающе. У неё есть откидной блок со светодиодами, клавиши механика. И она настолько крутая, что даже сейчас на ней хочется работать. Но, как обычно есть один маленький нюанс: у неё свой интерфейс и электропитание.

Такие клавиатуры встречаются часто, выглядят стильно и, в общем-то, можно получить уникальное устройство ввода, но как же её подключить? Этим вопросом я занялся уже после покупки, потому что клавиатура была крута, и вылилось всё в интересное копание в схемотехнике клавиатуры, протоколах и многом другом.

Историческая справка


В одном из объявлений была дана интересная историческая справка на эту клавиатуру, приведу её, поскольку она достаточно исчерпывающе описывает, что это такое.

Ретро клавиатура МС7004 — это клавиатура, которая является аналогом клавиатуры LK201 производства компании DEC. МС7004 использовалась с рядом советских ЭВМ конца 80-х годов, совместимых с архитектурой PDP-11, например, ДВК-3, ДВК-3М, Квант-4С, Электроника-85, и, вполне возможно, что ещё на кое-каких машинах. Сама клавиатура построена на микроконтроллере, и связь с ЭВМ осуществляется через стандартный последовательный порт. Принцип работы кнопок — ёмкостный. Раскладка клавиатуры — JCUKEN, в отличие от аналога LK201 с раскладкой QWERTY.

Это очень интересный момент, что клавиатура использовалась не только с определёнными ЭВМ, но и применялась для различных типов. И ещё то, что она совместима с иностранной клавиатурой LK201, и, забегая вперёд, скажу, что совместима достаточно хорошо.
Стоит даже их сравнить между собой, чтобы понять, что копировали их очень близко.


Клавиатура «Электроника» МС 7004 (фото любезно предоставлены xlat)


Оригинальная клавиатура DEC LK201 (фото с сайта)

Про оригинальную клавиатуру LK201, с которой была скопирована клавиатура «Электроника» МС 7004, стоит рассказать более подробно.
Форм-фактор этой клавиатуры определил стандарт клавиатур, которым мы пользуемся и сейчас. Основная область ввода стала стандартом ISO, клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет), клавиша Tab находится слева от «Q», а клавиша "<" слева от «Z». Как и у предыдущей модели, которая была прародителем это — клавиатуры для терминала VT102, клавиши управления и клавиша Caps Lock находятся слева от клавиши «A». Клавиши вставки, удаления (insert, del) были перемещены в новую группу клавиш, чтобы справа от клавиши ввод было место.

LK201 также была первой клавиатурой с клавишей Shift, расположенной слева от пробела.
Главной отличительной чертой клавиатуры была компоновка клавиш курсора, в виде перевёрнутой буквы Т. Хотя LK201 не была первой клавиатурой, в которой использовалось такое расположение, она была выбрана после серьёзных исследований удобства использования. Был ли дизайн заново изобретён независимо или скопирован с более ранней клавиатуры, неизвестно.


Компоновка перевёрнутой-T, представленная LK201

Такое решение быстро прижилось, поскольку компания DEC, будучи крупным игроком в компьютерной индустрии в начале 1980-х годов, вдохновила многих преемников своими раскладками клавиатуры. Расположение клавиш курсора, клавиши удаления и функциональных клавиш было специально скопировано.

В 1983–1984 годах рабочая группа инженеров IBM, разрабатывавшая IBM Enhanced Keyboard (Model M), использовала макет LK201, включая его фирменный кластер стрелок в виде перевёрнутой буквы T, но переместила его на одну строку вниз.
Поскольку отечественную клавиатуру скопировали весьма точно, то и электрический интерфейс оказался полностью совместим. Поэтому стоит пару слов сказать и о нём.

Клавиатура LK201 питается от 12 В, которые поступают от компьютера. Клавиатура и компьютер, к которому она подключена, общаются через относительно стандартный последовательный интерфейс.
  • Двунаправленное асинхронное последовательное соединение: 4800 бод, 8N1.
  • Уровни последовательного интерфейса соответствуют стандарту EIA RS-423 (т.е. колебания сигналов ± 5 вольт).
  • Потребляемая мощность: 4,2 Вт Макс. 350 мА при 11,8 В ± 6%.
  • Здесь следует особенно остановиться на интерфейсе RS-423, его отличие от интерфейса RS-232 в амплитуде передаваемого сигнала. У RS-423 — это от минус 5 до +5 В, а у RS-232 от минус 15 до +15 В. Таким образом, в целом можно подключать клавиатуру и к интерфейсу RS-232 с некоторыми оговорками.

Специально подробно остановился на этих моментах, потому что они полезны будут и для подключения клавиатуры МС7004.

«Электроника» МС 7004


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

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





Обратите внимание, что раскладка английской клавиатуры фонетическая JCUK, как и на всех отечественных компьютерах, и это ужасно…
Для того чтобы просто включить клавиатуру (подать питание), пришлось рыть кучу документации. Нашёл неплохой сайт по ДВК, где приведены два типа паспорта (см. раздел «Клавиатура МС 7004»). В паспорте самое ценное — это схема и коды клавиш. Как ни странно, далее английская документация оказалась более полной. Итак, схема подключения.


Схема разъёма клавиатуры

У этой модели клавиатуры съёмный провод, можно подключиться непосредственно к плате, либо к стандартному 5-контактному разъёму типа DIN. Выбрал второй вариант, и для этого набросал распиновку разъёма для подключения. Обязательно при таких операциях перепроверяйте, где находится питание, особенно если оно 12 В!


Распиновка разъёма

Попутно с подключением сделал неполный разбор для чистки. Хотел разобрать полностью, но побоялся, что сломаю крепления пластика, который от возраста стал хрупким. Поэтому полностью клавиатуру мне разобрать не удалось.


Первый успешный запуск клавиатуры

На фотографии видно, что я уже перехватываю нажатия клавиш, с помощью осциллографа. Клавиатура потребляет достаточно большой ток 0,3 А, при 12 В — это уже 3,6 Вт! Что, как по мне, для обычной клавиатуры многовато.

Теперь момент истины — подключить её к компьютеру. Как уже говорил выше, интерфейс у клавиатуры RS-423 (то есть сигналы имеют уровень ± 5 вольт относительно земли). Но решил рискнуть и подключил через шнурок USB-COM, настроил терминалку на 4800 8N1 и, всё заработало!


Оно живое!

Помните, я говорил, что клавиатура имеет фонетическую раскладку? Самое удивительное, что слизали всё подчистую, и коды клавиш точно соответствуют кодам клавиш по физическому расположению у оригинальной клавиатуры LK201.


Коды клавиш LK201, которые точно соответствуют кодам клавиш МС 7004

Вот это поворот! Значит, не нужно будет переучиваться, осталось сделать железку конвертер. И казалась задачей простой и быстрой.

Тщетная попытка сделать конвертер


Есть два пути для подключения подобной клавиатуры: подключить её к COM-порту и написать свой драйвер и сделать преобразователь в USB-HID. Первый вариант прост, но плох тем, что клавиатура будет привязана к конкретной машине, а второй более сложен, но более универсален.

Решил реализовывать второй вариант, питание брать от USB, повышать его, а в качестве USB-HID использовать модуль Arduino Leonardo.

Взял остатки старых своих проектов, которые вы даже когда-то видели в моей статье "С чего начинается устройство". Там как раз есть подходящий корпус, DIN-разъём и макетная плата.


Остатки старых проектов

Одной из задач было получать питание 12 В, и сделать преобразователь RS-423. Последнее можно реализовать на max232. В результате у меня получилась такая платка, с max232 и повышающим преобразователем от USB.



Но радость была недолгой, при подключении клавиатуры тока порта не хватало, и всё просаживалось в ноль. Поэтому такая схема питания оказалась неработоспособной. Затем, с большим трудом добытая дефицитная max232 отказалась работать с интерфейсом RS-423, и не переваривала такой тип напряжения (хотя оно находится в стандартах RS-232). Короче, на этом моё вдохновение закончилось. Повоевал несколько дней, и вечные трудности сильно подрезали вдохновение.

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

Несколько слов о создание ПО для клавиатуры


На самом деле, информации по клавиатуре LK201 достаточно, как и примеров кода, чтобы сделать нормальный преобразователь, не влезая в схемотехнику. Есть прекрасный сайт LK201 Keyboard Interface, где приводятся примеры дефайнов для клавиш, и описание интерфейса работы.

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

/*
 *	Commands to the keyboard processor
 */

#define	LK_PARAM		0x80	/* start/end parameter list */

#define	LK_CMD_RESUME		0x8b
#define	LK_CMD_INHIBIT		0xb9
#define	LK_CMD_LEDS_ON		0x13	/* 1 param: led bitmask */
#define	LK_CMD_LEDS_OFF		0x11	/* 1 param: led bitmask */
#define	LK_CMD_DIS_KEYCLK	0x99
#define	LK_CMD_ENB_KEYCLK	0x1b	/* 1 param: volume */
#define	LK_CMD_DIS_CTLCLK	0xb9
#define	LK_CMD_ENB_CTLCLK	0xbb
#define	LK_CMD_SOUND_CLK	0x9f
#define	LK_CMD_DIS_BELL		0xa1
#define	LK_CMD_ENB_BELL		0x23	/* 1 param: volume */
#define	LK_CMD_BELL		0xa7
#define	LK_CMD_TMP_NORPT	0xc1
#define	LK_CMD_ENB_RPT		0xe3
#define	LK_CMD_DIS_RPT		0xe1
#define	LK_CMD_RPT_TO_DOWN	0xd9
#define	LK_CMD_REQ_ID		0xab
#define	LK_CMD_POWER_UP		0xfd
#define	LK_CMD_TEST_MODE	0xcb
#define	LK_CMD_SET_DEFAULTS	0xd3


Другой пример – это ремап кодов клавиатуры для преобразования к нормальным сканкодам k201-remap.c. И там же в папке выше тоже полезные коды. Пример табличного ремапа:

unsigned char scancodeRemap[256] = {
/* ----- 								*/
/*  0 */ 0,		0,		0,		0,
....

/* 84 */ 0,		0,		0,		0,
/* ----- 				FIND/INSERT	INSERT/HOME	*/
/* 88 */ 0,		0,		0x23,		0x24,
/* ----- REMOVE/PG UP	SELECT/DELETE	PREVIOUS/END	NEXT/PG DN	*/
/* 8c */ 0x25,		0x38,		0x39,		0x3a,
/* ----- 				KP 0				*/
/* 90 */ 0,		0,		0x6b,		0,
/* ----- KP .		KP ENTER	KP 1		KP 2		*/
/* 94 */ 0x6c,		0x65,		0x62,		0x63,
/* ----- KP 3		KP 4		KP 5		KP 6		*/
/* 98 */ 0x64,		0x4e,		0x4f,		0x50,
/* ----- KP ,/KP +	KP 7		KP 8		KP 9		*/
/* 9c */ 0x51,		0x3b,		0x3c,		0x3d,
/* ----- KP -		KP F1/NUM LCK	KP F2/KP /	KP F3/KP *	*/
/* a0 */ 0x3e,		0x26,		0x27,		0x28,
/* ----- KP F4/KP -					LEFT		*/
/* a4 */ 0x29,		0,		0,		0x5f,
/* ----- RIGHT		DOWN		UP		SHIFT Rt	*/
/* a8 */ 0x61,		0x60, 		0x4d,		0x5e,
/* ----- ALT		COMP Rt/CTRL Rt	SHIFT		CONTROL		*/
/* ac */ 0,		0,		0x52,		0x3f,
...


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

Другой путь – аппаратная доработка


Есть более варварский способ – это переделка клавиатуры аппаратно. Есть «аутентичный» способ переделки – это сделать из клавиатуры, классическую DIN-клавиатуру. Нужно будет выкинуть часть преобразователя из 12-ти вольтового питания в 5 вольт, и преобразователь интерфейса RS-423, чтобы всё соответствовало TTL-логике. Затем заменить прошивку в ПЗУ. Схемы клавиатуры можно найти в паспортах на сайте.



В журнале «Радио» за ноябрь 1991 года было техническое описание такой переделки.



И там даётся текстовое описание, что нужно сделать с клавиатурой. Единственное, что может вызвать проблемы – это набор кода вручную, а также найти программатор и УФ стиратель, чтобы стереть и прошить ПЗУ. Подробнее, как это сделать, можно прочитать в моей статье "Что с памятью моею стало".



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


Раскладка после переделки из журнала «Радио»

Как видно, остаётся достаточно много свободных клавиш, которым можно добавить нужный функционал, например, добавить клавишу Win, скан-коды которой, соответственно, 0x5B левой и 0x5C – правой.

Но, если вам этот путь кажется сложным, есть другой вариант – это заменить микроконтроллер КМ1816ВЕ48 на Arduino Leonardo и уже ей заниматься сканированием клавиш. Схему питания тоже придётся переделывать, но на выходе уже получим USB-HID. Но, в любом случае мы потеряем в аутентичности.

Выводы


Проковырявшись месяц с этим проектом, посидев за кодом, так и не пришёл к элегантному решению подключения клавиатуры к ПК. Вроде бы всё и так ясно, но вот чтобы было красиво, так и не придумал. В результате проект был заброшен на шкаф, а впоследствии всё оборудование было распродано, включая саму клавиатуру.

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

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


Историческая справка о клавиатуре DEC LK201.
Фотосессия клавиатур «Электроника МС 7004» от xlat.
Сайт по ДВК.
LK201 Keyboard Interface.
«Радио» за ноябрь 1991 года
Моя статья о том как работать с ПЗУ.
Примеры кода первый и второй (обязательно посмотрите всю репу, кто будет писать самостоятельно).

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

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


  1. Urub
    21.12.2022 12:32
    +2

    Ах какая красивая клавиатура DEC, особенно на фоне своего "аналога"


    1. dlinyj Автор
      21.12.2022 12:39

      Там есть ещё более красивые вариации этой клавиатуры от Cherry


      1. vanxant
        21.12.2022 21:26

        Точно! До боли знакомый девайс, но тот, в детстве, совершенно определённо был не DEC и не наш. Он был Cherry!


  1. OldFashionedEngineer
    21.12.2022 13:50
    +1

    Может можно было сшить франкенштейна? Вынуть мозги из современной клавиатуры. Вырезать все лишнее из старой. И лапшой все спаять?


    1. dlinyj Автор
      21.12.2022 13:55

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


      1. OldFashionedEngineer
        21.12.2022 15:25

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


        1. dlinyj Автор
          21.12.2022 15:33

          Матрица вытравлена на плате, её тоже предлагаете изготовить заново? Просто прошивки клавиатур есть готовые, это будет реально проще чем использовать готовый.


          1. OldFashionedEngineer
            21.12.2022 15:38

            Зачем же? Дорожки на плате перерезать можно, и перекинуть перемычками так как надо. Пол километра проводов и все получится!


            1. dlinyj Автор
              21.12.2022 15:54

              И зачем этим заниматься?


              1. rstepanov
                21.12.2022 16:34
                +8

                У самурая нет цели, есть только путь.


                1. OldFashionedEngineer
                  22.12.2022 00:15

                  Хорошее замечание! Зачем мы вообще чем-то занимаемся?


                  1. vvzvlad
                    23.12.2022 00:17
                    -1

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


                    1. OldFashionedEngineer
                      23.12.2022 06:46

                      Подключение этого девайса к пк само по себе бессмысленный треш.


                      1. dlinyj Автор
                        23.12.2022 10:47

                        Вы путаете идиотизм с любовью к искусству. Вполне прекрасно бы использовал эту клавиатуру.


          1. OldFashionedEngineer
            21.12.2022 15:42
            +2

            Я, когда учился в школе, вырезал из старой аппаратуры нужные куски лобзиком. Затем восстанавливал проволочными перемычками необходимые связи или менял их местами. И получал необходимые девайсы. Усилители так делал. Как-то сделал карманный приемник из куска платы от какой-то магнитолы. Мой отец работал телемастером, и у него оседало достаточно приборов, которые ремонтировать нецелесообразно. Вот я и развлекался как мог. Тогда еще лазерных утюгов не было, а резать платы ножом было не очень интересно. А тут платы были почти готовые. Вся обвязка на микросхеме уже стояла. Прикольно было)))


            1. mrkaban
              23.12.2022 08:23
              +3

              Столкнулся радиоинженер с программистом)) одну проводки перекинуть проще, другому перепрограммировать =)


              1. dlinyj Автор
                23.12.2022 10:47

                На деле проще перепрограммировать :)


  1. RalphMirebs
    21.12.2022 14:21
    +3

    То есть хотели переделать на qwerty, а потом поменять колпачки?

    Не согласен, что решение с ящиком-отдельным конвертером убогое. Ведь все равно (как ни крути) клава не годится для постоянной работы с современным компом (положение клавиш ctrl, alt и пр. не там). Придётся существенно переучиваться. Поэтому демонстрационно-развлекательное решение "клавиатура - ящик - компьютер" вполне соответствует задаче и даже имеет возможности для расширения путем увеличения возможного числа подключаемых клавиатур от иных архитектур. Куча клав на вход - один усб на выход, по аналогии с кард-ридером на кучу форматов от SD и CF, до Memory Stick и MMC. И панель управления ящиком , при необходимости.


    1. dlinyj Автор
      21.12.2022 14:43

      То есть хотели переделать на qwerty, а потом поменять колпачки?

      Да не, я не стал бы менять колпачки. Ибо печатаю вслепую, а чужим не нужно работать на моей клавиатуре.

      Не согласен, что решение с ящиком-отдельным конвертером убогое. Ведь все равно (как ни крути) клава не годится для постоянной работы с современным компом (положение клавиш ctrl, alt и пр. не там).

      Да привыкнуть к другому расположению клавиш проблем нет, было бы желание. Народ вон на ДВОРАК переходит.


  1. Starwalker
    21.12.2022 17:57
    +3

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

    Ага, особенно "хорошо" скопировали колпачки, которые на DEC все ориентированы четко, а на совеццком "аналоге" повернуты кто куда. Такое впечатление, что дети на уроках труда пилили эти "шедевры", а потом с помощью клея ПВА и такой-то матери все это собрали.


  1. Arcanum7
    21.12.2022 18:01
    +2

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

    После данной статьи это будет не так.


  1. vaxxabait
    21.12.2022 18:18
    +4

    У широко известной в узких кругах клавиатурных маньяков QMK есть режим (или вариант) конвертора. Конкретно тут - для старых Sun'овских клавиатур, которые как и LK201 суть UART ttps://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/sun_usb Или клавиатура для Palm PDA там же https://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/palm_usb А может Вас устроит старый-добрый PS-2 + копеечный переходник на USB с Али ? Тогда Вам на http://www.kbdbabel.org/


  1. Elmot
    21.12.2022 18:48
    +1

    У меня похожий проект - электрическая пишущая машинка Brother AX110 как клавиатура к ПК, планшету или телефону. Но подход франкенштейновый - шлейф клавиатуры отключен от родной платы и подключен к микроконтроллеру с USB и Bluetooth. Прошивка так себе по качеству кода, так что не публикую пока. Но если интересно - могу поделиться.


  1. Maccimo
    22.12.2022 03:06

    клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет)

    С двухэтажным Enter-ом, увы, в наше время и на компьютерах и на ноутбуках проблема. Так что это опередившая своё время инновация )


  1. redsh0927
    22.12.2022 07:44

    Ни слова про механическое устройства клавиатуры, это же самое главное…

    Основная область ввода стала стандартом ISO, клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет)
    Ввод в виде перевёрнутого сапога — дичь лютая. В нём вырезана именно та часть куда тыкаешь мизинцем, при этом всё ненужное оставлено. Причём вырезана ради… бэкслеша! Мне очень интересно, кому бэкслеш понадобился так сильно что его впихнули вместо основной части энтера? В современной европейской/исо раскладке, впрочем, и этого показалось мало и правую половину левого шифта тоже заменили на второй!!! бэкслеш. Мне кажется, ещё стоит вместо середины пробела третий бэкслеш воткнуть. Всё равно это предпочтут анси-раскладке здорового человека, ведь главное чтобы энтер был большой.


    1. Maccimo
      22.12.2022 23:33
      +1

      Двухэтажный Г-образный Enter это удобно и бэкслеш рядом — тоже. Во всяком случае, если вы пишете код. Вот обрезанный левый Shift это да, раздражает. Но клавиша Fn на полноразмерной клавиатуре и наскальная живопись на клавишах F1F12 раздражает гораздо больше. На некоторых из микрософтовских они ещё и не работали как F-клавиши до тех пор, пока не нажмёшь F-Lock (ага, отдельная мусорная клавиша для этого).


      Мне кажется, ещё стоит вместо середины пробела третий бэкслеш воткнуть.

      Были модели с разделённым на 2 части пробелом. Одна из половин работала как Backspace.


  1. vvbob
    22.12.2022 08:25
    +1

    ИМХО такие штуки подключать к обычному компу имело смысл в поздние годы СССР, когда нормальную клавиатуру хрен достанешь или стоила она как крыло от самолета, тогда был смысл возиться. Сейчас ее основная ценность - историческая, поэтому стоит ее подключать к аутентичному, исправному устройству, не портя переделками.


    1. dlinyj Автор
      22.12.2022 08:54

      Клавиатуру проще купить, чем такое устройство. Ну и это просто прикольно. Как старинная индийская ваза в квартире.


  1. Soorin
    22.12.2022 08:47
    +2

    А ещё в 80х годах заменой ПЗУ обеспечивалось несложное подключение этой клавиатуры к ZX Spectrum