Обратная разработка МК-87

В процессе попыток привести в чувство мой экземпляр электронной записной книжки «Электроника МК-87», имеющий отличное косметическое состояние, но не подававший никаких внешних признаков жизни, мне потребовалось проанализировать его устройство и я увлекся этим процессом настолько, что в итоге написал для него техническую документацию. В нижеследующем отчете я попробую поделиться опытом обратной разработки подобного устройства и использованными методами и техническими средствами.

В ходе поиска информации об этом устройстве, я узнал из статьи в Компьютерре, что она, по сути, является предшественником популярного микрокомпьютера МК-85 и очень похожим образом устроена. Но если для последнего в Интернете существует множество информации: схем, описаний, дампов, программ и даже полноценный эмулятор, то с МК-87 всё значительно хуже, так как это устройство не поступало в свободную продажу и не снабжалось схемой. Все доступные технические материалы — это скан инструкции, опубликованный на сайте Инвариант и небольшое обсуждение устройства сенсорной клавиатуры на Форуме любителей калькуляторов, в ходе которой Игорь Н. опубликовал схему разводки сенсоров откидной клавиатуры. Больше никаких документов не было.

Ситуация усугубляется тем, что устройство достаточно редкое и дорогое, поэтому его нельзя (просто взять и) сравнить с рабочим экземпляром, а каждое действие требует особой осторожности, дабы окончательно не добить записную книжку. Наконец, само устройство довольно необычным образом разбирается: в его «переплете» есть вклеенная полоска, скрывающая 4 винта, прижимающих гибкий шлейф откидной клавиатуры к токопроводящим резинкам, соединяющим его с контактными площадками на основной плате. Без снятия этих винтов полноценно разобрать устройство невозможно, а сама полоска внешне выглядит абсолютно неотделимой от обложки.

Изучив схему распространенной версии МК-85 на процессоре Т36ВМ1-2, я понял, что МК-87 устроен подозрительно похоже, но это предстояло ещё проверить, так как все 4 чипа в МК-87 не имеют маркировки. (Тут надо пояснить, что К1013ВМ1 и Т36ВМ1-2 — это одно и то же, как и в случае с ВГ1 и РУ1)

Проследив соединения между ними и сопоставив полученные таблицы со схемой МК-85 и даташитом к ВМ1-2, я идентифицировал три из четырех микросхем: процессор Т36ВМ1-2, ОЗУ Т36РУ1-2 и контроллер ЖКИ Т36ВГ1-2. С ПЗУ (К563РЕ1) чуть сложнее. Назначение её выводов было очевидным, но по причине труднодоступности даташита на эту микросхему, на тот момент ее пока было невозможно идентифицировать на 100%. Однако это не помешало извлечь из нее дамп прошивки.

Микросхема была извлечена из устройства и проводками припаяна к импровизированному переходнику для чтения в универсальном программаторе TL-866 в режиме совместимости с ближайшим подходящим по принципу работы и объему ППЗУ: 27С64. Было эмпирически установлено, что у отечественного чипа вход CE работает в режиме Active HIGH, что нетипично для компьютерных чипов. Подключение дополнительного инвертера типа 74LS04 особого результата сперва не дало, однако после пробного подключения к этой линии выхода OE вместо CE, в буфере сразу же оказался осмысленный дамп.

Однако на этом вопросы не закончились, так как этот дамп выглядел совершенно бессмысленным в дизассемблере PDP-11. В редакторе Hex Editor Neo есть замечательная статистическая функция: построение гистограммы по значению байт, слов или других структур данных бинарного файла. Выяснилось, что гистограммы прошивки МК-85 и моего дампа имели очень похожий, но зеркально отраженный вид, что указало на то, что все биты инвертированы. Именно это и было проделано средствами этого же редактора. На всякий случай я также сделал версии с обратным старшинством разрядов в байтах.

На Superuser.com был найден скрипт для Powershell, выполняющий инверсию порядка байт в заданном бинарном файле:

powershell [byte[]]$b=[IO.File]::ReadAllBytes('.\file.bin');[array]::Reverse($b);[IO.File]::WriteAllBytes('.\Reverse.bin',$b)

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

Слово «SBRPS!» и повторяющиеся в строгом порядке строки «PZJBLA 1», «PZJBLA 2» интуитивно похожи на сообщения «СБРОС» и «ОШИБКА n». Довольно быстро была установлена система «перекодировки» этих сообщений в кириллицу. Всё оказалось элементарно. В стандартной таблице ANSI английские буквы были заменены на русские, прямо в порядке алфавита. В результате быстрой перекодировки получился «перевод этих сообщений», который полностью подтвердил корректность прошивки.

Да, это оказались служебные сообщения и даже скрытые сообщения. Несколько смутили мистические строчки «КМЯПОМЕР», но в последствии выяснилось, что «К» и «П» это просто буквы J и O, соответствующие буквам «И» и «Н», но пропущенные заменой из-за дополнительно установленных старших битов, которые, судя по всему, используются как признаки начала строки.

Самое смешное, что практически сразу после подобного «криптоанализа» я нашел-таки даташит на К563РЕ1 в 7-м томе справочника А. В. Нефедова «Интегральные микросхемы и их зарубежные аналоги», и ситуация с инверсией прояснилась: действительно, все логические входы в этой микросхеме инвертированы. Немудрено, что адреса и биты тоже перевернулись при чтении обычным алгоритмом для 27 серии. Забавно другое: в справочнике старшинство разрядов было указано явно тоже в обратном порядке, но в принципе, это никак не влияет на чтение прошивки, если она записана с такой же «ошибкой» в старшинстве бит.

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

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

Я обратился к Петру с вопросом, не хотел бы ли он написать второй эмулятор на основе первого. Получив подтверждение я занялся сбором необходимой информации. И вот здесь-то и начался детальный анализ. Обычным мультиметром была прощупана и восстановлена вся принципиальная схема основной платы и таблица матриц обоих клавиатур. Отдельная благодарность Игорю Н., подсказавшему мне важную информацию о клавиатуре, без которой я бы еще долго пытался безуспешно запустить устройство на отдельно лежащей плате, так как не заметил важной детали: кнопки и псевдосенсоры замыкают между собой не 2, а 3 контакта, третьим из которых является контакт «земли». Оставался дисплей. Надо сказать, что в отличие о дисплея того же МК-85, этот дисплей имеет особый, издевательски низкий контраст и даже под удачно падающим светом и в любой поляризации на нем невероятно трудно разглядеть не то что дорожки, но даже сами сегменты!

Проблема была решена оригинальным методом. Разводка была проанализирована с помощью большого количества фотографий с подобранными бликами в различных частях экрана и цифровым повышением контраста, а для более детального изучения дисплей был помещен в металлографический микроскоп МБС-11 с фотонасадкой под современный DSLR. Оказалось, что при точной фокусировке и наблюдении в светлом поле при отраженном свете, можно разглядеть границы дорожек обоих слоев дисплея. При оптимальных настройках была отфотографирована значимая часть поверхности. После этого все фотографии были одинаковым образом обработаны в Lightroom, в котором был подобран баланс белого и кривые таким образом, что значительно улучшился видимый контраст дорожек.

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

В итоге была получена информация о соответствии адресов контроллера дисплея и конкретных значках, что позволило, минуя сравнение с оригиналом, гарантировать корректность работы эмулятора, который Петр к тому моменту уже начал переписывать под МК-87. В устройстве, кстати, было предусмотрено больше значков, чем в итоге было использовано в финальной версии прошивки, например, пришедшие прямо с Casio PF-3000 значки «РАНГ» и «АВТО» никак не задействованы.

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

Изучение работы устройства в эмуляторе позволило выявить несколько неточностей в полученных документах и дополнить документацию, а Петр, проанализировав дизассемблированный код, нашел в микропрограмме несколько недокументированных функций, «пасхальных яиц», которые раскрыли тайну некоторых строчек из «перевода».

СИ, СК, цифра 4: Раскрытие секретного слова
С, СК, буква К: Показ сообщения об авторе программы
С, СК, буква Н: Неизвестная функция

Эмулятор МК-87 на сайте Петра Пятека.

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

  • Принципиальная схема МК-87
  • Векторизированные панели записной книжки
  • Точная векторная копия дисплея
  • Дамп прошивки
  • Эмулятор для MS Windows
  • Бонус в виде набора заглавных букв советской версии шрифта Футура.

Последняя версия архива с этим набором доступна здесь.

Дмитрий Штатнов, SSSR Labs. 2021.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *