В этой статье я хочу рассказать об архитектуре советских программируемых микрокалькуляторов на примере калькулятора «Электроника МК-52» и как можно внедриться в его архитектуру.
Советские калькуляторы семейства "Электроника Б3-34" («Электроника МК-56», «Электроника МК-61» и «Электроника МК-52») были особенно популярны в СССР. Причиной этому была не только доступная цена в 65 рублей за МК-54, 85 рублей за МК-61 или 115 рублей за МК-52, но и развитой язык программирования. Это семейство калькуляторов стало де-факто стандартным для многочисленных пользователей. Огромное количество книг было посвящено программированию на этих машинках и публикацией готовых алгоритмов. Электроника МК-52 даже летала в космос на корабле Союз ТМ-7, где предполагалось его использование в качестве резервного на случай неисправности спускаемого навигационного оборудования. Даже в военно-морском флоте СССР калькулятор «Электроника МК-52» с блоком расширения памяти БРП «Астро» какое-то время был стандартным средством для навигационных расчетов.
Микрокалькулятор МК-52 относится ко второму поколению советских программируемых микрокалькуляторов.
Первым поколением было семейство Б3-21 (включая МК-46, МК-64 и МС 1103). Базовая модель Б3-21 разработана в 1975-м и массово производилась с 1977 года. У нее был рабочий стек на два числа (Б3-21, как и семейство Б3-34 — калькуляторы с RPN — обратной польской (или бесскобочной) записью — где сначала в стек вводятся числа, а потом нажимается кнопка операции).
В дополнение к рабочему стеку имелся дополнительный кольцевой стек на 6 чисел. В этот стек можно записать по кругу число, а потом извлекать. И еще семь регистров памяти с номерами 2-8 (в МК-46, МК-64 и МС 1103 — восемь) — обычные регистры памяти для хранения чисел. Количество шагов программы у Б3-21 — 60. В моделях МК-46, МК-64 и МС 1103 — 66. Последние модели — настольные калькуляторы с блоками для контроля параметров от внешних устройств. В МК-46 имелась только возможность получать цифровые коды, а в МК-64 и МС 1103 устанавливалась кассета с аналогово-цифровым преобразователем, и дополнительная микросхема К145ИК1801, которая организовывала взаимодействие. За счет установки этой микросхемы появлялся дополнительный регистр памяти с номером 9 и еще шесть шагов программы. Управление считыванием происходило через регистр номер 9 путем ввода кода команды. Аналогично, кстати, в МК-61 и МК-52 ставилась микросхема К745ИК1306, которая кроме дополнительных функций добавляла еще один регистр и еще семь шагов программы, но об этом дальше.
Где-то в 1980-м году появляется второе поколение программируемых микрокалькуляторов в лице «Электроники Б3-34». Первые экземпляры стоили 120 рублей, но завод довольно быстро снизил цену до 85 рублей и так и продавал модель где-то до 1985 года. Вообще ценообразование калькуляторов — предмет разговоров для отдельной статьи: где-то цены снижались по мере выпуска, где-то повышались. Если интересно, то можно посмотреть на моём сайте изменение цен по годам — я стараюсь собирать такую информацию по мере возможности. Калькулятор Б3-34 сменили аналогичные по функциям, но более компактный МК-54, настольный МК-56. Через несколько лет появилась микросхема К745ИК1306 с дополнительными функциями, и выпустили новые модели МК-61 в корпусе, аналогичному МК-54, и горизонтальный МК-52 с внутренней EEPROM К1601РР1 на 512 шагов (уникальная вещь, других в мире калькуляторов с EEPROM я не встречал: у них либо низкопотребляющее CMOS ОЗУ, либо более современные Flash) и двумя разъемами для подключения устройств: первый использовался для подключения внешних модулей памяти «Блоков расширения памяти БРП», а второй был технологическим и туда ничего не подключалось (завод объяснял как технологический разъем для тестирования во время производства).
Вид сзади:
По сравнению с микрокалькуляторами первого поколения, усовершенствование было существенным. Количество регистров для хранения чисел увеличилось с 8/9 до 14/15.
Операционный стек с двух регистров увеличился еще на два регистра — X, Y, Z, T. Появился регистр последнего значения регистра X перед выполнением последней арифметической операции — BX (операционные регистры X, Y, Z, T с регистром Last X наши подсмотрели, скорее всего, у калькуляторов Hewlett Packard с аналогичными регистрами, впрочем, на этом тождественность с HP и заканчивается). Область программы с 60/66 шагов увеличилась с 98 шагов (у Б3-34, МК-54, МК-56, МС 1104) до 105 шагов (у МК-61 и МК-52).
В программе можно использовать автоматические циклы по регистрам L0-L3, тогда идет уменьшение соответствующего регистра на 1, сравнение с нулем и ветвление по адресу.
Очень сильно улучшило калькуляторы второго поколения внедрение косвенной адресации. Любой регистр памяти может использоваться в качестве индексного как для сохранения/извлечения чисел, так и косвенных переходов на программы и подпрограммы, в том числе с условием. При этом значение регистра косвенного перехода будет автоматически уменьшено (регистры 0-3), увеличено (регистры 4-6) или оставлено без изменений.
Все эти автоматические действия с регистрами очень экономят программную область и позволяют упростить программирование.
Говорить о работе с МК-52 можно долго. Я только вкратце рассказал о возможностях этих машинок для тех, кто не работал с ними.
Разговор об архитектуре я бы хотел начать с истории. Семейство калькуляторов Б3-21 и Б3-34 — разработка Киевского НИИ Микроприборов (НИИМП). Первые калькуляторы под названием "Электроника 4-71" у них появились в 1971 году. Двум предприятиям было поставлено задание — сделать к 24-му съезду КПСС в 1971 году калькуляторы на больших интегральных схемах — киевскому НИИМП и ленинградской «Светлане». В итоге у нас примерно в одно и то же время появились две модели калькуляторов — упомянутая «Электроника 4-71» и "Электроника 24-71" (улавливаете название моделей?). Модель 4-71 была сделана на микропрограммном управлении, как первые калькуляторы семейства «Искра», с логикой на автоматах Мура в сотрудничестве с ленинградским ГСКТБ. То есть при нажатии кнопки происходит защелкивание нужных триггеров (в зависимости от назначения кнопки), которые формируют прохождение соответствующих микрокоманд. Автоматы — это конечно хорошо, но на них далеко не уедешь в плане совершенствования. Даже калькуляторы Искра-114 от ГСКТБ в 1974 году уже имели ПЗУ К5ЯП011001 (предположительно, первые в СССР микросхемы масочного ПЗУ) с «прошивкой».
И вот, в 1973 году у НИИМП появляется микроконтроллерное ядро собственной разработки. Сохраните себе тот сайт по ссылке, пока он живой — там очень много интересного рассказано о НИИМП. Первый микрокалькулятор "Электроника Б3-09" на микросхеме К145ИК2А вышел «первым блином» и не прижился, зато его модификации "Электроника Б3-09М", Б3-14М и Б3-14 пошли «на ура», выпускались сотнями тысяч штук в год и решили проблему калькуляторного дефицита. Калькуляторов нашего производства в те годы не хватало, и их завозили из-за рубежа, как с соцстран, так и с капстран. Помните фильм «Служебный роман» 1977-го года? Можно посмотреть, начиная с 9:15, какие калькуляторы стоят на столах — в основном, транзисторные ГДРовские «Soemron 220» и болгарские «Элка 50» первой модификации.
Более крупные фотографии можно видеть на сайте «Радиокартинки»: К145ИК2, К145ИК501, К145ИК502П.
Это кристаллы микросхем К145ИК2, ИК501 и ИК502. Как можно заметить, чипы простого калькулятора с четырьмя арифметическими операциями К145ИК2 практически совпадают с чипами программируемого калькулятора «Б3-21» (К145ИК501, 502 и 503). Последние отличаются только «прошивкой». Номер прошивки показан на отдельном слое после названия.
А это уже более совершенный кристалл микросхемы К145ИК1302, который стоит в программируемых калькуляторах семейства «Электроника Б3-34», в том числе и «Электроника МК-52», о котором эта статья.
В центре чипа видны три области (помечены зеленым). Это память микрокоманд, память синхропрограмм и память программ. Желтым помечены кольцевые сдвиговые регистры.
Процессор калькулятора работает на частоте 75-100 кГц. В процессоре есть однобитное АЛУ (арифметическо-логическое устройство) с несколькими источниками и приемниками.
За четыре микротакта процессор выполняет одну микрокоманду (над одной тетрадой). Каждая микрокоманда говорит — какой набор источников взять для сумматора и куда положить результат.
Всего в микросхеме 68 микрокоманд длиной 27 бит каждая, 128 различных синхропрограмм и 256 ячеек для команд.
Микропроцессор калькулятора (точнее было бы сказать микроконтроллер, потому что внутри него находится и ПЗУ, и ОЗУ, и порты ввода-вывода) работает по последовательному принципу. Все регистры представляют собой регистры сдвига.
Внутри процессора всё закольцовано и напоминает парк аттракционов с каруселями, колесом обозрения и идеальным автобусом с посетителями, у которого одна дверь работает на вход, другая на выход, и посетители постепенно перемещаются от начала в конец.
Работник парка (микрокоманда), сверяясь с тетрадочкой (полем микрокоманды), на каждом микротакте извлекает (или нет) из подошедшей ячейки карусели, колеса обозрения или очередного пассажира автобуса (то есть очередного регистра) бит, направляет их на аттракцион «сумматор», где с ними происходят какие-то действия и результат отправляет обратно, так же в зависимости от полей микрокоманды. Этот распорядок действует на 4 бита, после чего номер такта увеличивается.
Поскольку регистры кольцевые, разработчикам было нужно правильно задать их размер. В итоге базовым числом для калькуляторов семейства К145ИК13 стало число 42.
Эту длину (42 тетрады) имеют последовательные регистры — регистры М, R и ST. Чтобы не ждать, пока нужные числа продвинутся по всему кольцу, дополнительно есть несколько 4-х битных и однобитных регистров вроде регистра переноса, доступных в каждом такте. Одно число с 8-разрядной мантиссой и 2-х разрядным порядком занимает 14 тетрад (одна треть от 42). В кольцевой регистр влезает ровно три числа, что позволяет, например, реализовать регистр памяти и хранение двух чисел при вычислении со скобками, как это реализовано в калькуляторе «Электроника Б3-32» на К145ИК1301.
С числом 42 также жестко работает так называемая «память синхропрограмм», в которых находятся адреса микрокоманд, которые надо выполнять.
Синхропрограммой она называется оттого, что жестко засинхронизирована с размером кольцевого регистра и номером такта 0-41 — одного кольцевого цикла.
В каждой синхропрограмме содержится девять номеров микрокоманд, которые нужно выполнить.
Синхрокоманды устроены довольно интересно. Разработчики проанализировали алгоритмы и посчитали, что с учетом переносов одна типовая операция с АЛУ над тетрадой требует три такта, а производимые действия довольно однотипны. И они сделали так, что микрокоманды в зависимости от номера такта (0-41) аппаратно всегда выполняются в такой последовательности:
0, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5
Желтым цветом я отметил одинаковые участки (микрокоманды 3, 4, 5), которые выполняются семь раз подряд. Этого хватает, чтобы обработать одно восьмиразрядное число. По сути это готовые микроалгоритмы. С одной стороны такие встроенные циклы сокращают емкость необходимого для программы ПЗУ, но с другой стороны представьте, что такая последовательность выполняется всегда и на каждой строке программы.
Поскольку одна тетрада обрабатывается за три такта, данные за это время успевают уехать по кольцу. Из-за этой особенности числа в кольцевых регистрах хранятся не в последовательных ячейках, а в каждой третьей, чтобы они как раз подоспели к окончанию циклов 3, 4, 5.
Снизу на рисунке показана область памяти программ. В памяти программ в каждом ее поле содержится информация о трех синхропрограммах, которые надо выполнить за один кольцевой цикл. Там есть еще нюанс, заключаемый в том, что третья синхропрограмма обычно используется для всяких ветвлений. В регистре R ячейки 36 и 39 закреплены за адресом текущей выполняемой программы, они как раз появляются на соответствующих тактах, когда выполнились первые две синхропрограммы, и третья синхропрограмма занимается обработкой этого адреса.
Конечно, внутри микропроцессор работает еще более сложно. Только описание его со всеми нюансами занимает не один десяток страниц книги Трохименко Я.К. «Программируемые микрокалькуляторы. Устройство и пользование» (книга гуглится).
Вот эта архитектура с тремя уровнями обработки — памятью программ с адресами синхропрограмм, памятью синхропрограмм с номерами микрокоманд и памятью микрокоманд с набором источников и приемников является базовой для целого семейства микросхем К145ИК2, К145ИК13xx, К145ИК18xx и К145ИК19xx, только у них разный размер регистров, по-другому сделана адресация и ветвления и сделаны другие доработки и изменения.
А самое интересное, что сделали разработчики еще в 1973-м году — вывели мозги процессора наружу для возможности расширения. Я имею ввиду кольцевые регистры. В первом массовом калькуляторе Б3-09М емкости регистра хватало, и расширение не требовалось. Но что делать, если возможностей аттракциона не хватает? Можно увеличить его размер или поставить рядом еще один. Чтобы не увеличивать размер ПЗУ, а следовательно размер кристалла, уменьшать выход годных кристаллов в процессе производства и прочие сложности, разработчики взяли несколько одинаковых процессоров и сделали общий кольцевой регистр.
Здесь на фотографии слева часть кристалла К145ИК2, а справа К145ИК5. Можно обратить внимание на левый верхний угол. Там уже в процессе производства стоит небольшая перемычка, замыкающая две контактные площадки (кольцевой регистр). А в К145ИК5 этой перемычки нет, и кольцевой регистр не замыкается.
В 1975-м году появились первые образцы программируемого калькулятора "Электроника Б3-21". Там можно видеть аж три процессора типа К145ИК5 — К145ИК501, К145ИК502 и К145ИК503. Они отличаются только прошивкой.
Первый процессор К145ИК502 занимается вводом с клавиатуры и выводом на индикатор, обработкой действий в автоматическом режиме и режиме ввода и выполнения программы.
К145ИК501 занимается арифметическими операциями, а К145ИК503 — тригонометрическими. А поскольку требовалась еще ёмкость для хранения программы пользователя и регистров памяти, дополнительно в разрыв того же регистра поставили микросхему К145ИР1, представляющий собой один большой регистр сдвига. В итоге появилось три аттракциона с тремя последовательно соединенными автобусами и одной электричкой. И все данные постоянно перемещаются по общему кольцу со скоростью тактового генератора.
Благодаря Феликсу Лазареву, который смог считать прошивки с этих микроконтроллеров и разобраться в архитектуре, у нас появился эмулятор калькуляторов типа МК-61 и Б3-34, где можно более детально изучить его работу и поиграться с включением и отключением микросхем от общего кольца.
В первом микрокалькуляторе второго поколения "Электроника Б3-34" использовались микросхемы К145ИК1302 (ввод/вывод, режимы работы), К145ИК1303 (математические функции) и два регистра К145ИР2 по 1008 бит каждый.
Суммарно два регистра M и два регистра по 1008 бит образуют кольцо размером в 42*4 + 42*4 + 1008 + 1008 = 2352 бита.
Всё поле данных разработчики разбили на три одинаковые области по 784 бита (196 тетрад или 98 байт). В первой области хранится программа пользователя (98 шагов), во второй области — регистры данных (14 регистров с номерами 0-9, a, b, c, d по 14 тетрад каждый), а третья область — служебная.
Через несколько лет после появления Б3-34 появились две новые модели — МК-61 и МК-52. У них добавился еще один чип К145ИК1306, где вычисляются операции с градусами и логические операции. Кольцо стало выглядеть так:
Обратите внимание, что в К145ИК1306 есть такой же регистр М, как и в К145ИК1302 и К145ИК1303. Появление этого чипа добавило в кольцо один регистр памяти (14 тетрад), еще семь шагов программы (14 тетрад) и на 14 тетрад увеличилась служебная область.
В МК-52 есть еще микросхема К745ИК1801, которая осуществляет передачу данных из микросхемы EEPROM или сменного блока расширения памяти. Но в нем кольцо регистра не используется.
Разбиение всего кольца данных в калькуляторах типа МК-61 и МК-52 показано на рисунке ниже:
Как я говорил, всё кольцо разбивается на три области: М1, М2 и М3.
В области М1 находятся регистры памяти 0-9, a, b, c, d, e. В них интересно то, что для хранения чисел надо 12 тетрад (1 — знак мантиссы, 8 — мантисса, 3 — порядок), а на один регистр выделяется 14 тетрад (чтобы делилось на 42 в процессоре). В итоге две тетрады на каждый регистр не используются.
В области М3 располагается память программ. Там всё просто — 98 шагов для Б3-34 и 105 шагов (на 14 тетрад больше) для МК-61 и МК-52.
Область М2 самая интересная. В нем кроме регистров X, Y, Z, T, BX, располагается область Ms, канал связи КС и Метка.
Показанные области не идут друг за другом. Помните, я говорил, что в синхропрограмме есть несколько повторяющихся операций, которые отнимают три такта и приводят к тому, что числа в регистрах хранятся на каждой третьей ячейке? В данных кольца это и реализовано. Сначала передается первая тетрада области М1, затем первая тетрада области М2 и затем первая тетрада области М3. Потом идут вторые тетрады и так далее. И пока за три такта отрабатываются микрокоманды 3, 4, 5 в синхропрограмме, ненужные области пропускаются.
Когда я разбирался с распределением данных в общем кольце, меня очень удручила область, обозначенная как Ms. Она довольно большая, занимает одну шестую часть области данных кольца. И эта область не используется в калькуляторе. При разработке архитектуры разработчики предусматривали возможность сделать «область программ-данных». Это — такая область, в которую можно записывать или программу, или регистры с данными. Причем довольно большая область — 56 программных шагов. В калькуляторах предполагались включить специальные функции в комбинации с кнопкой [К] для обмена (над кнопками 1 и 2, сейчас там пустое место). Но, повторюсь, в серийных моделях эта область пропала, а так у нас могло бы быть больше регистров памяти или программа длиннее на 56 шагов. Об этой области вскользь упоминалось в журнале «Техника-молодежи», № 7 за 1986 год.
Самый важный элемент синхронизации в данных кольца — так называемая «Метка». Это последовательность из девяти тетрад, состоящих из единиц. При появлении кода «Метка» внутренний счетчик у процессоров сбрасывается, и начинается отсчет данных кольца относительно кода Метка. В самом начале после включения машинки головной процессор К145ИК1302 инициализирует кольцо и формирует Метку. Команды и содержимое регистров подобраны так, что код Метка не может встретиться ни в данных, ни в программе.
Продвинутые пользователи калькуляторов семейства Б3-34 наслышаны о «пустышке» — недокументированной операции, когда на индикаторе отображается только десятичная точка. Это — код, состоящий только из единиц. Когда этот код появляется, внутренний счетчик сбивается, и калькулятор начинает чудить — появляется два кода Метка и вся синхронизация сбивается — калькулятор принимает одну область памяти за другую.
Внутренняя адресация относительна относительно кода Метка. При появлении чип К745ИК1306 с дополнительным регистром М, количество ячеек увеличилось, и они условно добавились в конец, потому что в архитектуре вся область данных в кольце непрерывна. В этой архитектуре можно добавить еще один процессор типа К145ИК13, тогда станет больше еще на один регистр памяти, и добавится еще 7 шагов программы (максимально — 112).
Скорее всего аналогичным образом работает внутреннее представление данных и в непрограммируемом калькуляторе "Электроника МК-44", сделанном на том же микропроцессоре К145ИК1305. Это был один из самых массовых настольных калькуляторов в нашей стране. В нем есть три регистра памяти. Я подумал, а что будет, если разорвать выведенное наружу кольцо регистра М и добавить туда памяти? Эксперимент удался. Процессор «подхватил» появившуюся память, и в калькуляторе стало десять регистров памяти.
А как процессоры взаимодействуют между собой? Они «общаются» специальному полю, называемому «канал связи» (КС). Как в калькуляторах семейства «Б3-21», так и в калькуляторах семейства «Б3-34» есть один главный процессор. В нашем случае это К145ИК502 для Б3-21 и К145ИК1302 для Б3-34. Они инициализируют кольцо при включении, формируют код «метка» и взаимодействуют с оператором, организуя ввод с клавиатуры и вывод на индикатор. Другие процессоры находятся в режиме ожидания и ждут команд.
«Канал связи» — это две тетрады, в которые главный процессор может поместить число — байт с кодом операции.
Если при работе по программе или в ручном режиме головной процессор не может обработать операцию с каким-то кодом своими силами, то он кладет код операции в регистр КС кольца и начинает ждать.
Ведомые процессоры все время следят за регистром КС в кольце данных. Как только появляется код операции, который может обработать ведомый процессор, он начинает его обрабатывать, например, выполнять функцию сложения, вычисление синуса и т. д. Ведомый процессор самостоятельно извлекает из кольца нужные регистры, когда они приходят к нему по кольцу, производит с ними операции, и результат помещает обратно. После выполнения процессором своих действий, он очищает регистр канала связи, затерев младшую тетраду числом «F». То есть если в канале связи появилось число 10 (код сложения), то по окончанию счета в регистре КС будет записано число 1F.
Одновременно с выставлением кода операции в канал связи в головном чипе включается специальный счетчик ожидания по типу сторожевого таймера. Если ни один ведомый процессор не сможет обработать команду по каналу связи, то через определенное время головной процессор сам очистит канал связи и выдаст на индикаторе сообщение об ошибке «ЕГГОГ».
Этим таймаутом пользуются ведомые чипы, если в процессе вычисления произошла ошибка с числом. Например, пользователь попытался извлечь корень из отрицательного числа. В этом случае ведомый чип ничего не выставляет в канал связи, а головной процессор через несколько секунд сам выводит сообщение об ошибке. Оттого в калькуляторах вывод надписи «ЕГГОГ» при подобного рода ошибках занимал так много времени.
Главный процессор может не знать, какие есть в кольце другие процессоры. Он всего лишь выставляет код в канал связи, а его обрабатывают другие процессоры. Можно, например, заменить микросхему К745ИК1306 на другую или сделать свою разработку на основе микроконтроллера, как сделали еще в советские времена в калькуляторе "Электроника МС-1104".
Кроме последовательной шины данных в калькуляторах типа «Электроника МК-52» есть интерфейс с EEPROM и внешними модулями расширения памяти. Как я писал выше, в МК-52 есть микросхема электрически стираемой памяти К1601РР1, в которую можно записать до 512 шагов программы. Вместо программной памяти можно сохранить числовые регистры памяти. Что записывать — программную памяти или регистры, определяется переключателем «Д-П» на передней панели. Одни и те же области в EEPROM могут использоваться как для хранения программы, так и для хранения регистров. Можно записать в EEPROM регистры, а записанные данные извлечь в программную область, и наоборот.
Вид калькулятора со стороны микросхем:
Микросхемы крупно:
Кроме внутренней EEPROM выпускались также сменные модули памяти «БРП» (блоки расширения памяти). Они представляют собой микросхему ПЗУ, где записаны программы.
Всего известны модули:
- БРП «Астро», он же БРП-2 — навигационные программы. Модуль использовался на кораблях, о чем я писал в начале статьи.
- БРП-3 содержал математические программы
- БРП-4 — математические программы и программы бытового назначения, в том числе игры.
ПЗУ были довольно большого объема, и в один БРП на самом деле влезали программы от двух модулей. То есть обладатели модуля БРП-3 могли открыть корпус, перепаять перемычку и получить модуль БРП-2 «Астро».
Когда я считывал дампы, то в модуле БРП-4 обнаружил дамп от модуля неизвестного назначения. Пока нет информации, как использовать эти дампы.
Микросхема связи с EEPROM или БРП К745ИК1801 довольно самостоятельная. Она так же сидит на калькуляторном кольце, но не отслеживает команды. Она только запоминает содержимое регистра X как адрес и длину обращения к ПЗУ или EEPROM по кнопке [А↑], и по кнопке [↑↓] запускает стирание, считывание или запись из, или в область программы или данных.
Применительно к ПЗУ БРП на шину всегда выставляется адрес в параллельном коде, и БРП всегда выдает содержимое ячейки.
Модуль БРП вставляется в соответствующий разъем сзади калькулятора МК-52.
Наверняка каждый пользователь МК-52, купив калькулятор, видел сзади корпуса два разъема — большой для БРП и маленький, непонятно для чего. В инструкции и в журналах разработчики поясняли, что этот разъем используется только в технологических целях на этапе производства.
Может быть выпускались какие-нибудь несерийные модификации калькулятора МК-52, но я о них не слышал. Всё время хотелось разработать какое-нибудь устройство, которое могло сидеть на том разъеме и использовать его в работе.
Если обратиться к принципиальной схеме калькулятора, то можно видеть, что на разъем выведены кроме напряжений питания и тактовых сигналов, сигналы с кольца, снятые со входа и выхода микросхемы К745ИК1801. Чтобы внедриться и что-то записывать в кольцо необходимо было его разорвать. Конечно, что-то менять в схеме МК-52 — самый последний вариант. Но оказалось, что выходной сигнал кольца микросхемы К745ИК1801 слабый. Скорее всего он незначительно подтянут на одно из напряжений питания, и его можно довольно свободно перегружать своим сигналом. Так я и сделал. Микроконтроллер мониторит кольцо МК-52, анализирует его, и может считывать и записывать данные.
В итоге получилось устройство — модуль «FRS-BRP». Вот принципиальная схема:
Ядро модуля — микроконтроллер STM32F205. Он на прерываниях от внутреннего генератора частоты калькулятора считывает бит за битом данные, передаваемые по кольцу. Одновременно следит за параллельной шиной для эмуляции блока расширения памяти. Большое количество компараторов необходимо для правильного детектирования логических уровней. Дело в том, что в калькуляторе используется отрицательное напряжение от 0 до -15 вольт. Это напряжение вырабатывается от источника питания в 5 вольт. Плате так же необходимо было использовать эти напряжения, но только не до -15 вольт, а до -5 и до -3.3. В итоге то напряжение, которое в калькуляторе 0 вольт, в плате FRS-SRP стало +5 вольтами, а то, которое -5 вольт стало нулем. На компараторах всё можно хорошо отфильтровать, их много, но они сейчас очень дешево стоят. В основном, компараторы задействованы для декодирования сигналов параллельной шины эмулятора БРП. Конечно, сам БРП можно эмулировать через засылку данных сразу в кольцо. Но для аутентичности, чтобы пользователь нажимал «те самые» кнопки, которые описаны в инструкции к БРП, решил сделать полноценный эмулятор.
Сейчас мало кто будет использовать калькулятор МК-52 по прямому назначению. Есть более эффективные средства вычислений. Но для энтузиастов, для тех, кто хочет разобраться с его внутренним устройством, кто хочет использовать наработанные программы или тех, кто хочет поиграть в те игры, которые сводили с ума пользователей середины 1980-х годов, этот модуль может пригодиться.
Что умеет этот модуль:
- Выводит на OLED экранчик содержимого на выбор двух регистров оперативной памяти калькулятора (0-9, A, B, C, D, E) одновременно. В режиме счета по программе, когда основной экран калькулятора моргает, можно нажимая кнопки на модуле просматривать регистры.
- Эмулирует (заменяет) модули БРП-АСТРО, БРП-3, БРП-4, БРП-5 в полном соответствии с их инструкцией по эксплуатации (название БРП-5 дано условно, поскольку для найденных данных не был найден соответствующий модуль).
- Позволяет сохранить блок программы (105 шагов) во внутреннюю память модуля с номерами ячеек от 1 до 130.
- Позволяет извлекать и записывать в калькулятор один из 130 записанных блоков программы (105 шагов).
- Аналогично с пп. 3, 4 сохраняет и извлекает блоки данных (0-9, A, B, C, D, E) до 130 ячеек.
- Сохраняет и извлекает полную информацию, находящемся в кольце данных (программа, данные и служебная информация) до 50 ячеек.
- Имеет библиотеку популярных программ («ЛУНОЛЕТ-1», «ЛУНОЛЕТ-2», «ЛУНОЛЕТ-3», «ОС-1», «ОС-2», «АТМОСФЕРА»).
- Позволяет по желанию заблокировать математический процессор К745ИК1303 и эмулировать за него математические функции, которые тот вычисляет, для увеличения быстродействия и точности вычислений. Оказалось, что микросхему К745ИК1303 можно ввести в ступор недокументированной командой, он «уходит в себя», не реагирует на команды в канале связи, и модуль за него обрабатывает математические команды.
- Дополняет функционирование калькулятора путем обработки неиспользуемых в калькуляторе функций с кодами 0x28 (K *) и 0x29 (К /).
Как я выше писал, по каналу связи передается код операции. Сейчас почти все коды заняты, и с пульта можно ввести только три незадействованные команды — коды 27, 28 и 29. В принципе, их вполне хватает для каких-нибудь задач. Хотя я не знаю, какие команды можно реализовать по причине, что калькулятор по прямому назначению уже не торт, но сам факт обработки увлекает.
Ну, и конечно — общение с компьютером по USB. В модуле реализованы простые команды диалога, можно считать и записывать содержимое данных, программы, служебных областей или кольца целиком. Его можно сохранить на диск, извлечь, проанализировать, изменить и записать в калькулятор. Вот скриншот:
Можно например, в канал связи положить какое-нибудь число и посмотреть, как оно будет обрабатываться другими чипами. Или узнать, что произойдет, если какую-нибудь служебную ячейку записать по-другому. Или проверить, возможно ли вывести калькулятор из состояния «тьма», если в регистре X через модуль исправить порядок, скажем с 500 на 0, не выведет ли он его из ступора?
К сожалению, наружу калькулятора выходит только кольцо с данными. А другие состояния вроде программного счетчика, признака — считает ли калькулятор по программе или выводит на индикатор, и прочее, — эта информация сидит во внутреннем регистре R.
Но разработчики вывели наружу и его. Если посмотреть на схему того же МК-52, то можно видеть, что там есть «некая перемычка» — она и есть выход и вход регистра «R». То есть при желании можно подключиться к этой шине и более внимательно изучить его внутренности.
Такие выведенные регистры есть, наверно, во всех микросхемах семейства К145ИК5, К145ИК13, К145ИК18 и даже К145ИК19. Знаменитая микросхема часов «К145ИК1901» так же имеет выведенные наружу регистры M и R. Можете убедиться, взглянув на принципиальную схему.
Я даже в порядке эксперимента подключился к регистрам в часах на К145ИК1901 и снял, где у него находятся данные.
В заключение статьи скажу, что упомянутое семейство микроконтроллеров было очень популярным в CCСР, на его базе было выпущено большое количество калькуляторов — модели:
- К145ИК2 — Б3-09, Б3-09М, Б3-14, Б3-14М;
- К145ИК5xx — Б3-05М, Б3-21, МК-46, МК-64, МС-1103, МК-59, Elwro 330;
- К145ИК13xx — Б3-32, МК-44, Б3-34, МК-54, МК-56, МК-52, МК-61, МС-1104.
На микросхемах серии К145ИК18xx и К145ИК19xx — бытовые приборы, из известных — таймеры для микроволновок, часы, реле времени для фотографии, контроллеры лентопротяжек в магнитофонах и прочее.
Вот и всё, что я хотел сказать. Надеюсь, было интересно. Спасибо за внимание.