Эта статья прислана на конкурс.
Technomancer (автор играет на конкурсе под псевдонимом)
Введение
МС7004 - это клавиатура, которая является аналогом клавиатуры LK201 производства компании DEC. МС7004 использовалась с рядом советских ЭВМ конца 80-х годов, совместимых с архитектурой PDP-11, например, ДВК-3, ДВК-3М, Квант-4С, Электроника-85, и вполне возможно, что ещё на кое-каких машинах. Сама клавиатура построена на микроконтроллере, и связь с ЭВМ осущесвляется через стандартный последовательный порт. Прицип работы кнопок - ёмкостный. Раскладка клавиатуры - JCUKEN, в отличие от аналога LK201 с раскладкой QWERTY.
В чём проблема? Я очень привык к раскладке клавиатуры QWERTY и никогда в жизни не работал с вариантом JCUKEN. Во время ремонта ретрожелезок, совместимых с моей любимой архитектурой PDP-11, расклад JCUKEN меня раздражает больше, чем кучи дохлых микросхем и постоянно возрастающая цена золота. Это потому, что мысли и идеи бегут быстро, а пальцы-то медленные, да еще и раскладка замедляет... Поэтому я решил сделать себе одну клавиатуру МС7004 с раскладкой QWERTY.
Выбор решения
Возможностей решения моей проблемы не очень много. Самое простое, конечно - разрезать дорожки на плате, на которой расположены сенсорные площадки, проводком поменять местами площадки соответствующих кнопок, таким образом поменяв местами буквы. Но такой вариант я даже не рассматривал, так как результат был бы некрасивым, клавиатура была бы безвозвратно испорчена, и я хотел бы как можно меньше вмешиваться в историческую целостность клавиатуры.
Второй вариант - так как клавиатура построена на микроконтроллере с внешней памятью программы, возможно подправить программу контроллера, чтобы коды кнопок поменялись местами. И так как при таком варианте в клавиатуре не придётся делать физические изменения и в любой момент её можно будет вернуть в оригинальное состояние, я выбираю именно этот вариант.
Практическая часть
На плате клавиатуры находится микроконтроллер, КР1816ВЕ35 совместимый с архитектурой Intel 8048, а рядом с ним - память К573РФ2. Здесь и есть единственное место, где нужно включать паяльник - чтобы выпаять память и вместо неё поставить панельку.
Следующий шаг - считываю память клавиатуры (содержимое здесь). Но так как у меня нет опыта в работе с данной архитектурой, я не представляю, где могут храниться коды кнопок. Единственное, что пришло в голову - они должны хранится в памяти в виде таблицы. Поэтому я дизассемблировал бинарный файл назад в программу и стал смотреть, как оно работает. Я использовал дисассемблер DasmX (http://www.atastro.com/software/prog/dasmx.html), который чётко дисассемблировал бинарник в команды Intel 8048.
Дальше самое трудное - по шагу идти вперёд, записывать использованные ячейки памяти и связывать работу программы с работой контроллера в схеме.
Первым делом выясняю адреса прерываний и связанных процессов. Оказывается, что внешнее прерывание INT (адрес 0х03) - это вход последовательного порта (управляющие данные от ЭВМ), а прерывание внутренного таймера (адрес 0х07)также используется для приёма данных от ЭВМ. Обмен данных по последовательному порту чисто программный и полудуплексный.
Продолжая комментировать код программы, я наткнулся на команду "movp3". Это команда, которая напрямую считывает данные из памяти программы. И вот, моё решение нашлось. Команда "movp3" считывает данные из памяти, которые находятся в адресе 0х300 со смещением по содержанию регистра А, то есть, результат команды - это содержимое ячейки, которая на адресе 0x300+А. А дальше уже довольно просто - в той области памяти действительно нашлась таблица с кодами, которые пересылаются в ЭВМ при нажатии кнопок. В этой таблице я поменял местами содержимое ячеек таким образом, чтобы расклад JCUKEN превратился в QWERTY. Ну и в принципе всё. Исправленное зашил назад в память, исправил пару ошибок, физически поменял местами кнопки, и вот, у меня теперь есть МС7004 с раскладом кнопок, который для меня более удобен.
Послесловие
Что интересно, сразу после такого "апгрейда" я заметил, что часто используемые команды в RT-11 у меня уже "зашли в пальцы" и в старой раскладке.
И, к сожалению, несмотря на то, что это всё уже было сделано полгода назад, статью я стал писать в последние дни срока конкурса, и не получилось сделать подробный анализ работы клавиатуры.
Обсудить статью в специально созданной ветке форума. Эта статья прислана на конкурс.
© Текст, фотографии — Technomancer (автор играет на конкурсе под псевдонимом)
© Железные призраки прошлого — 2019 г.
Опубликовано 27.03.2019 г.
Дополнения или поправки на phantom@sannata.ru
|