![](https://habrastorage.org/webt/cw/zg/2w/cwzg2wkukr2sd-9u1kf2c8qpzrk.jpeg)
Когда я листал доски объявлений, на глаза попалась отличная клавиатура «Электроника МС 7004». Даже по современным меркам клавиатура выглядит просто потрясающе. У неё есть откидной блок со светодиодами, клавиши механика. И она настолько крутая, что даже сейчас на ней хочется работать. Но, как обычно есть один маленький нюанс: у неё свой интерфейс и электропитание.
Такие клавиатуры встречаются часто, выглядят стильно и, в общем-то, можно получить уникальное устройство ввода, но как же её подключить? Этим вопросом я занялся уже после покупки, потому что клавиатура была крута, и вылилось всё в интересное копание в схемотехнике клавиатуры, протоколах и многом другом.
❯ Историческая справка
В одном из объявлений была дана интересная историческая справка на эту клавиатуру, приведу её, поскольку она достаточно исчерпывающе описывает, что это такое.
Ретро клавиатура МС7004 — это клавиатура, которая является аналогом клавиатуры LK201 производства компании DEC. МС7004 использовалась с рядом советских ЭВМ конца 80-х годов, совместимых с архитектурой PDP-11, например, ДВК-3, ДВК-3М, Квант-4С, Электроника-85, и, вполне возможно, что ещё на кое-каких машинах. Сама клавиатура построена на микроконтроллере, и связь с ЭВМ осуществляется через стандартный последовательный порт. Принцип работы кнопок — ёмкостный. Раскладка клавиатуры — JCUKEN, в отличие от аналога LK201 с раскладкой QWERTY.
Это очень интересный момент, что клавиатура использовалась не только с определёнными ЭВМ, но и применялась для различных типов. И ещё то, что она совместима с иностранной клавиатурой LK201, и, забегая вперёд, скажу, что совместима достаточно хорошо.
Стоит даже их сравнить между собой, чтобы понять, что копировали их очень близко.
![](https://habrastorage.org/webt/h1/6l/vn/h16lvnbwn_dfczjt93lspdqhajg.jpeg)
Клавиатура «Электроника» МС 7004 (фото любезно предоставлены xlat)
![](https://habrastorage.org/webt/bh/hf/xh/bhhfxhdfas1aop9yps0lurxkupe.jpeg)
Оригинальная клавиатура DEC LK201 (фото с сайта)
Про оригинальную клавиатуру LK201, с которой была скопирована клавиатура «Электроника» МС 7004, стоит рассказать более подробно.
Форм-фактор этой клавиатуры определил стандарт клавиатур, которым мы пользуемся и сейчас. Основная область ввода стала стандартом ISO, клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет), клавиша Tab находится слева от «Q», а клавиша "<" слева от «Z». Как и у предыдущей модели, которая была прародителем это — клавиатуры для терминала VT102, клавиши управления и клавиша Caps Lock находятся слева от клавиши «A». Клавиши вставки, удаления (insert, del) были перемещены в новую группу клавиш, чтобы справа от клавиши ввод было место.
LK201 также была первой клавиатурой с клавишей Shift, расположенной слева от пробела.
Главной отличительной чертой клавиатуры была компоновка клавиш курсора, в виде перевёрнутой буквы Т. Хотя LK201 не была первой клавиатурой, в которой использовалось такое расположение, она была выбрана после серьёзных исследований удобства использования. Был ли дизайн заново изобретён независимо или скопирован с более ранней клавиатуры, неизвестно.
![](https://habrastorage.org/webt/i8/ai/xm/i8aixmn-rn-tcmlywgpgtpkduym.png)
Компоновка перевёрнутой-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
После ознакомления со всеми историческими материалами, и осознанием того, что мне предстоит, было принято решение купить эту клавиатуру. На данный момент достаточно легко, пока ещё, можно найти эти клавиатуры в продаже. И ценник на них более чем адекватен, особенно для такой удивительной модели.
Поэтому спустя пару недель приехала мне такая красавица, с откидной крышкой, под которой видны светодиоды.
![](https://habrastorage.org/webt/ug/i0/tq/ugi0tqxsnh9sbcxeqdlpqa1adh0.jpeg)
![](https://habrastorage.org/webt/qv/0p/8l/qv0p8lua6-kkvhijxedoy9s8di4.jpeg)
Обратите внимание, что раскладка английской клавиатуры фонетическая JCUK, как и на всех отечественных компьютерах, и это ужасно…
Для того чтобы просто включить клавиатуру (подать питание), пришлось рыть кучу документации. Нашёл неплохой сайт по ДВК, где приведены два типа паспорта (см. раздел «Клавиатура МС 7004»). В паспорте самое ценное — это схема и коды клавиш. Как ни странно, далее английская документация оказалась более полной. Итак, схема подключения.
![](https://habrastorage.org/webt/dt/g9/za/dtg9zaluiafyzphcnxql0ncov4w.png)
Схема разъёма клавиатуры
У этой модели клавиатуры съёмный провод, можно подключиться непосредственно к плате, либо к стандартному 5-контактному разъёму типа DIN. Выбрал второй вариант, и для этого набросал распиновку разъёма для подключения. Обязательно при таких операциях перепроверяйте, где находится питание, особенно если оно 12 В!
![](https://habrastorage.org/webt/2-/rj/ev/2-rjevaijkim8b6qntkoeaxx380.jpeg)
Распиновка разъёма
Попутно с подключением сделал неполный разбор для чистки. Хотел разобрать полностью, но побоялся, что сломаю крепления пластика, который от возраста стал хрупким. Поэтому полностью клавиатуру мне разобрать не удалось.
![](https://habrastorage.org/webt/lh/8f/re/lh8freofxxcc8mdnnwp3gbxak2w.jpeg)
Первый успешный запуск клавиатуры
На фотографии видно, что я уже перехватываю нажатия клавиш, с помощью осциллографа. Клавиатура потребляет достаточно большой ток 0,3 А, при 12 В — это уже 3,6 Вт! Что, как по мне, для обычной клавиатуры многовато.
Теперь момент истины — подключить её к компьютеру. Как уже говорил выше, интерфейс у клавиатуры RS-423 (то есть сигналы имеют уровень ± 5 вольт относительно земли). Но решил рискнуть и подключил через шнурок USB-COM, настроил терминалку на 4800 8N1 и, всё заработало!
![](https://habrastorage.org/webt/au/dw/sk/audwsk2ijawht-wpt7rhqgokg24.jpeg)
Оно живое!
Помните, я говорил, что клавиатура имеет фонетическую раскладку? Самое удивительное, что слизали всё подчистую, и коды клавиш точно соответствуют кодам клавиш по физическому расположению у оригинальной клавиатуры LK201.
![](https://habrastorage.org/webt/s6/st/em/s6stemfkiiqpo0t9cs0vkyeyotc.jpeg)
Коды клавиш LK201, которые точно соответствуют кодам клавиш МС 7004
Вот это поворот! Значит, не нужно будет переучиваться, осталось сделать железку конвертер. И казалась задачей простой и быстрой.
❯ Тщетная попытка сделать конвертер
Есть два пути для подключения подобной клавиатуры: подключить её к COM-порту и написать свой драйвер и сделать преобразователь в USB-HID. Первый вариант прост, но плох тем, что клавиатура будет привязана к конкретной машине, а второй более сложен, но более универсален.
Решил реализовывать второй вариант, питание брать от USB, повышать его, а в качестве USB-HID использовать модуль Arduino Leonardo.
Взял остатки старых своих проектов, которые вы даже когда-то видели в моей статье "С чего начинается устройство". Там как раз есть подходящий корпус, DIN-разъём и макетная плата.
![](https://habrastorage.org/webt/fq/ev/_9/fqev_9diofkwdbycbrap-gy2rsu.jpeg)
Остатки старых проектов
Одной из задач было получать питание 12 В, и сделать преобразователь RS-423. Последнее можно реализовать на max232. В результате у меня получилась такая платка, с max232 и повышающим преобразователем от USB.
![](https://habrastorage.org/webt/jo/vu/vz/jovuvzu5jfhe6jytfgeb79zlnu0.jpeg)
Но радость была недолгой, при подключении клавиатуры тока порта не хватало, и всё просаживалось в ноль. Поэтому такая схема питания оказалась неработоспособной. Затем, с большим трудом добытая дефицитная 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-логике. Затем заменить прошивку в ПЗУ. Схемы клавиатуры можно найти в паспортах на сайте.
![](https://habrastorage.org/webt/zx/rz/rc/zxrzrca5nk9sdzyqmbdsepfalpm.png)
В журнале «Радио» за ноябрь 1991 года было техническое описание такой переделки.
![](https://habrastorage.org/webt/qk/yv/wm/qkyvwmkboqprggqyitjnnfqghp8.jpeg)
И там даётся текстовое описание, что нужно сделать с клавиатурой. Единственное, что может вызвать проблемы – это набор кода вручную, а также найти программатор и УФ стиратель, чтобы стереть и прошить ПЗУ. Подробнее, как это сделать, можно прочитать в моей статье "Что с памятью моею стало".
![](https://habrastorage.org/webt/hw/bt/kr/hwbtkronxmthlabdbbk-wfji9cq.png)
Любопытно взглянуть, какое же расположение клавиш получится после такой переделки, и там тоже оно приведено.
![](https://habrastorage.org/webt/uu/bz/tt/uubzttousxaxl4fmvm6pq7msjcs.png)
Раскладка после переделки из журнала «Радио»
Как видно, остаётся достаточно много свободных клавиш, которым можно добавить нужный функционал, например, добавить клавишу Win, скан-коды которой, соответственно,
0x5B
левой и 0x5C
– правой.Но, если вам этот путь кажется сложным, есть другой вариант – это заменить микроконтроллер КМ1816ВЕ48 на Arduino Leonardo и уже ей заниматься сканированием клавиш. Схему питания тоже придётся переделывать, но на выходе уже получим USB-HID. Но, в любом случае мы потеряем в аутентичности.
❯ Выводы
Проковырявшись месяц с этим проектом, посидев за кодом, так и не пришёл к элегантному решению подключения клавиатуры к ПК. Вроде бы всё и так ясно, но вот чтобы было красиво, так и не придумал. В результате проект был заброшен на шкаф, а впоследствии всё оборудование было распродано, включая саму клавиатуру.
Клавиатура, без сомнения, очень красивая, украсила стол любого программиста, но увы, слишком уж много мороки было с ней. Нужно, иногда бывает оценить свои силы и отказаться от тупиковых проектов, даже если они выглядят достаточно круто.
❯ Полезные ссылки
Историческая справка о клавиатуре DEC LK201.
Фотосессия клавиатур «Электроника МС 7004» от xlat.
Сайт по ДВК.
LK201 Keyboard Interface.
«Радио» за ноябрь 1991 года
Моя статья о том как работать с ПЗУ.
Примеры кода первый и второй (обязательно посмотрите всю репу, кто будет писать самостоятельно).
P.S. Если вам интересно моё творчество, вы можете следить за мной ещё в телеграмме.
![](https://habrastorage.org/webt/p-/u9/l2/p-u9l27ynelxi92bcmdxhu76ma8.png)