Когда я листал доски объявлений, на глаза попалась отличная клавиатура «Электроника МС 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)
OldFashionedEngineer
21.12.2022 13:50+1Может можно было сшить франкенштейна? Вынуть мозги из современной клавиатуры. Вырезать все лишнее из старой. И лапшой все спаять?
dlinyj Автор
21.12.2022 13:55Не, это сложно. Потому, что матрицы клавиш у всех разные, и просто не попадёшь. Проще свой контроллер брать, тем более что прошивок вагон и маленькая тележка.
OldFashionedEngineer
21.12.2022 15:25Скорее всего не интересно. Сложного то в этом мало - знай себе крути провода. У меня тоже так бывает, возьмёшься за что-то, потом понимаешь как это сделать, и что игра не стоит свечь, или что это не так уж уже и надо, и забрасываешь
dlinyj Автор
21.12.2022 15:33Матрица вытравлена на плате, её тоже предлагаете изготовить заново? Просто прошивки клавиатур есть готовые, это будет реально проще чем использовать готовый.
OldFashionedEngineer
21.12.2022 15:38Зачем же? Дорожки на плате перерезать можно, и перекинуть перемычками так как надо. Пол километра проводов и все получится!
dlinyj Автор
21.12.2022 15:54И зачем этим заниматься?
rstepanov
21.12.2022 16:34+8У самурая нет цели, есть только путь.
OldFashionedEngineer
22.12.2022 00:15Хорошее замечание! Зачем мы вообще чем-то занимаемся?
vvzvlad
23.12.2022 00:17-1Так вы бессмысленный треш предлагаете, который сильно хуже чем перепрошивка контроллера или вставка своего
OldFashionedEngineer
23.12.2022 06:46Подключение этого девайса к пк само по себе бессмысленный треш.
dlinyj Автор
23.12.2022 10:47Вы путаете идиотизм с любовью к искусству. Вполне прекрасно бы использовал эту клавиатуру.
OldFashionedEngineer
21.12.2022 15:42+2Я, когда учился в школе, вырезал из старой аппаратуры нужные куски лобзиком. Затем восстанавливал проволочными перемычками необходимые связи или менял их местами. И получал необходимые девайсы. Усилители так делал. Как-то сделал карманный приемник из куска платы от какой-то магнитолы. Мой отец работал телемастером, и у него оседало достаточно приборов, которые ремонтировать нецелесообразно. Вот я и развлекался как мог. Тогда еще лазерных утюгов не было, а резать платы ножом было не очень интересно. А тут платы были почти готовые. Вся обвязка на микросхеме уже стояла. Прикольно было)))
RalphMirebs
21.12.2022 14:21+3То есть хотели переделать на qwerty, а потом поменять колпачки?
Не согласен, что решение с ящиком-отдельным конвертером убогое. Ведь все равно (как ни крути) клава не годится для постоянной работы с современным компом (положение клавиш ctrl, alt и пр. не там). Придётся существенно переучиваться. Поэтому демонстрационно-развлекательное решение "клавиатура - ящик - компьютер" вполне соответствует задаче и даже имеет возможности для расширения путем увеличения возможного числа подключаемых клавиатур от иных архитектур. Куча клав на вход - один усб на выход, по аналогии с кард-ридером на кучу форматов от SD и CF, до Memory Stick и MMC. И панель управления ящиком , при необходимости.
dlinyj Автор
21.12.2022 14:43То есть хотели переделать на qwerty, а потом поменять колпачки?
Да не, я не стал бы менять колпачки. Ибо печатаю вслепую, а чужим не нужно работать на моей клавиатуре.Не согласен, что решение с ящиком-отдельным конвертером убогое. Ведь все равно (как ни крути) клава не годится для постоянной работы с современным компом (положение клавиш ctrl, alt и пр. не там).
Да привыкнуть к другому расположению клавиш проблем нет, было бы желание. Народ вон на ДВОРАК переходит.
Starwalker
21.12.2022 17:57+3Стоит даже их сравнить между собой, чтобы понять, что копировали их очень близко.
Ага, особенно "хорошо" скопировали колпачки, которые на DEC все ориентированы четко, а на совеццком "аналоге" повернуты кто куда. Такое впечатление, что дети на уроках труда пилили эти "шедевры", а потом с помощью клея ПВА и такой-то матери все это собрали.
Arcanum7
21.12.2022 18:01+2На данный момент достаточно легко, пока ещё, можно найти эти клавиатуры в продаже. И ценник на них более чем адекватен, особенно для такой удивительной модели.
После данной статьи это будет не так.
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/
Elmot
21.12.2022 18:48+1У меня похожий проект - электрическая пишущая машинка Brother AX110 как клавиатура к ПК, планшету или телефону. Но подход франкенштейновый - шлейф клавиатуры отключен от родной платы и подключен к микроконтроллеру с USB и Bluetooth. Прошивка так себе по качеству кода, так что не публикую пока. Но если интересно - могу поделиться.
Maccimo
22.12.2022 03:06клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет)
С двухэтажным Enter-ом, увы, в наше время и на компьютерах и на ноутбуках проблема. Так что это опередившая своё время инновация )
redsh0927
22.12.2022 07:44Ни слова про механическое устройства клавиатуры, это же самое главное…
Основная область ввода стала стандартом ISO, клавиатура QWERTY с вертикальной клавишей Enter (которой в копии, увы, нет)
Ввод в виде перевёрнутого сапога — дичь лютая. В нём вырезана именно та часть куда тыкаешь мизинцем, при этом всё ненужное оставлено. Причём вырезана ради… бэкслеша! Мне очень интересно, кому бэкслеш понадобился так сильно что его впихнули вместо основной части энтера? В современной европейской/исо раскладке, впрочем, и этого показалось мало и правую половину левого шифта тоже заменили на второй!!! бэкслеш. Мне кажется, ещё стоит вместо середины пробела третий бэкслеш воткнуть. Всё равно это предпочтут анси-раскладке здорового человека, ведь главное чтобы энтер был большой.Maccimo
22.12.2022 23:33+1Двухэтажный Г-образный Enter это удобно и бэкслеш рядом — тоже. Во всяком случае, если вы пишете код. Вот обрезанный левый Shift это да, раздражает. Но клавиша
Fn
на полноразмерной клавиатуре и наскальная живопись на клавишахF1
—F12
раздражает гораздо больше. На некоторых из микрософтовских они ещё и не работали как F-клавиши до тех пор, пока не нажмёшь F-Lock (ага, отдельная мусорная клавиша для этого).Мне кажется, ещё стоит вместо середины пробела третий бэкслеш воткнуть.
Были модели с разделённым на 2 части пробелом. Одна из половин работала как Backspace.
vvbob
22.12.2022 08:25+1ИМХО такие штуки подключать к обычному компу имело смысл в поздние годы СССР, когда нормальную клавиатуру хрен достанешь или стоила она как крыло от самолета, тогда был смысл возиться. Сейчас ее основная ценность - историческая, поэтому стоит ее подключать к аутентичному, исправному устройству, не портя переделками.
dlinyj Автор
22.12.2022 08:54Клавиатуру проще купить, чем такое устройство. Ну и это просто прикольно. Как старинная индийская ваза в квартире.
Soorin
22.12.2022 08:47+2А ещё в 80х годах заменой ПЗУ обеспечивалось несложное подключение этой клавиатуры к ZX Spectrum
Urub
Ах какая красивая клавиатура DEC, особенно на фоне своего "аналога"
dlinyj Автор
Там есть ещё более красивые вариации этой клавиатуры от Cherry
vanxant
Точно! До боли знакомый девайс, но тот, в детстве, совершенно определённо был не DEC и не наш. Он был Cherry!