МК-61: история, эмуляция, устройство

Расцвет эпохи программируемых калькуляторов в нашей стране пришёлся на середину 80-х годов. Потом на смену относительно сытым и благополучным временам пришла эпоха бандитского капитализма, когда стране стало не до выпуска своей высокотехнологичной продукции бытового назначения, вот уже сменились поколения, но ностальгия по тем временам, когда мы бессонными ночами пытались сократить код программы хотя бы на пару байтов, чтобы уместить задуманную функцию, выискивали всё новые и новые недокументированные возможности, придумывая способы, как их можно использовать на практике, сочиняли целые циклы рассказов в качестве фона для наших игровых программ, не даёт забыть свой МК-61 со 105 байтами программной памяти. Поэтому хочу написать заметку о том, что собой представляли и как работали эти самые программируемые калькуляторы. Даже если эта тема сегодня периодически и поднимается, то не настолько часто, чтобы приесться уважаемому читателю, так что надеюсь поведать что-то новое.


Немного истории



Для начала небольшой экскурс в историю. Программируемый калькулятор отличается от инженерного возможностью задать пользовательскую программу вычислений, имеет увеличенную память и набор операций для управления ходом исполнения программы, т. е. по сути является примитивным портативным компьютером. Отечественные программируемые калькуляторы (ПМК) принято делить на поколения. Первый массовый советский карманный ПМК, получивший обозначение Б3-21, увидел свет в 1977 году, он имел 60 шагов программной памяти, два операционных регистра X и Y, семь регистров памяти, а также двунаправленный кольцевой стек на шесть чисел (объединённый с X, который выводился на индикатор). Вычисления на нём производились в формате обратной (постфиксной) бесскобочной записи, т. е. сперва в операционный стек помещались операнды, затем над ними производилась операция, — это позволяло значительно упростить как сам калькулятор, так иногда и работу с ним. На базе этого ПМК строилось их первое поколение, к нему относятся, например, настольные варианты МК-46 и МК-64. Несмотря на очевидные недостатки, прежде всего заоблачную цену (350 рублей на момент появления в продаже), появление первых ПМК значительно упростило жизнь людям, имеющим дело со сложными вычислениями.


На смену им пришли «ПМК расширяющегося ряда», про них и пойдёт речь в этой статье. Это поколение в 1980 году начал калькулятор Б3-34, он получил новый процессор из серии К145ИК13 (на его базе также создавались и некоторые инженерные калькуляторы). Он по-прежнему работал в обратной бесскобочной нотации, но зато у него появилось место под 98 шагов программы, 14 регистров памяти и стек из 4 ячеек (плюс дополнительный регистр предыдущего результата), была добавлена косвенная адресация и циклы со счётчиком. Этот ПМК содержит два упомянутых процессора с разной прошивкой: один — как управляющее устройство, другой — как математический сопроцессор. Вместе с двумя микросхемами памяти К145ИР2 они соединены однобитной шиной (магистралью) в кольцо, получая сигналы синхронизации от тактового генератора К145ГФ3.


Наконец, в 1984 году был выпущен МК-61. Позаимствовав корпус у калькулятора из семейства Б3-34 — МК-54, он получил дополнительный, третий процессор — К745ИК1306. Таким образом у нового устройства появились дополнительные функции (модуль, целая и дробная часть, знак числа и другое), семь дополнительных шагов программной памяти — теперь их стало 105, и ещё один регистр. Стоил он 85 рублей — цена внушительная, но при необходимости подъёмная. Именно эта машинка стала самым массовым и популярным ПМК в нашей стране. В следующем году был выпущен МК-52, аналог МК-61, но уже с энергонезависимой памятью (ППЗУ) объёмом 512 байтов и возможностью подключения блоков расширения памяти с прошитыми в них библиотеками программ (выпускались централизованно).


Следующее поколение представлено микрокомпьютером МК-85 и его «сородичами». С одной стороны это был качественный скачок вперёд, с другой — это были калькуляторы со встроенным интерпретатором морально устаревшего и даже не русифицированного языка BASIC и 16-битным процессором с системой команд компьютеров американской фирмы DEC. С развалом страны и их производство сошло на нет, на этом история отечественных программируемых калькуляторов заканчивается…


Значимость и продолжение истории


Но семейство Б3-34 прочно закрепилось в быту советского человека. До массового распространения персональных компьютеров оставалось ждать пару десятилетий, да и счастливчикам, ставшим обладателями такового ещё тогда, в карман всё равно его было не положить. А ПМК были относительно доступны и практичны, поэтому и обрели заслуженное уважение наших людей. Я бы даже назвал народную любовь к ПМК социально-культурным явлением. Пользовались этими приборами, казалось бы, сугубо инженерного назначения, все категории граждан: от школьников младших классов до пенсионеров преклонных лет, мужчины и женщины самых разнообразных профессий, со всех концов нашей страны — от Западной Украины до Чукотки и от Кольского полуострова до Средней Азии. Весьма полезными ПМК были и для студентов (прежде всего инженерных специальностей) с интеллектом выше среднего, но поскольку дефицит таковых начал наблюдаться уже тогда, основным контингентом пользователей было всё же взрослое население.


Трудно найти сферу человеческой деятельности, где не был применён наш микрокалькулятор. Нужно подсчитать параметры статистического ряда или определить рентабельность производства? Рассчитать параметры электрической цепи, вычислить молярную массу вещества, найти радиус чёрной дыры? Легко. Смоделировать манёвры боевого самолёта, рассчитать курс морского судна или сориентировать орбитальный корабль? Пожалуйста. Известно, например, что МК-52 реально использовался штурманами военно-морского флота, а также, в качестве запасного вычислительного устройства, космонавтами. Выбрать класс трактора или оценить параметры почвы, определить генетическое расстояние между популяциями, рассчитать пропорции в кулинарии, дозу или концентрацию лекарства, сгенерировать узор для вязания? Всё есть. Увлекаетесь нумерологией, биоритмами и прочей лженаукой? Найдутся и для вас программки.


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


Сегодня об этой занятной науке можно прочитать лишь в отсканированных журналах, например в библиотеке сайта Сергея Тарасова, посвящённого ПМК. Очень рекомендую тем, кто желает погрузиться в атмосферу тех лет. А на сайте Евгения Века собрано более 250 авторских игровых программ — подборка даёт хорошее представление об игровом движении калькуляторщиков и о самом явлении.


Хотя с развалом страны и прекращением выпуска новых моделей калькуляторов интерес к теме в народе стал резко падать, народные умельцы всё же не сидели без дела. В 2003 году программист Евгений Троицкий разработал симулятор отечественных калькуляторов «Калькуляторы 3000» — арифметических, инженерных и программируемых — наверное, единственный в своём роде с таким охватом и точностью симуляции. А «в железе» на это всё можно посмотреть на сайте музея вычислительной техники Сергея Фролова.


Писались статьи, сканировались печатные материалы, принимались и другие попытки воссоздать калькуляторы программно, переводилась на иностранные языки документация. Причём не только русские люди не дают нашим калькуляторам бесследно раствориться в прошлом. Вот, например, очень примечательные случаи: француз Гийом сравнивает быстродействие МК-61 и МК-52 и пишет транслятор BASIC-подобного языка в код ПМК, голландец Альфред исследует недокументированные особенности МК-61 и возможности «синтетического программирования» калькулятора, а канадец Виктор тестирует и сравнивает МК-61 с другими калькуляторами из своей коллекции.


Кто-то даже пытается заработать на приятных воспоминаниях. Так, новосибирская фирма «Семико» собрала из китайских запчастей пару калькуляторов, назвав их в честь отечественных МК-61 и МК-52 и снабдив похожим языком. Понятно, что дальше продвижения на Интернет-помойках вроде Википедии дело не пошло, и рынок ожидаемо проигнорировал это начинание.


И вот в 2012 году инженер из США Феликс Лазарев, вооружившись профессиональным микроскопом, смог при участии Евгения Троицкого и других энтузиастов проанализировать и восстановить содержимое ПЗУ микросхем процессоров МК-61. Так были созданы первые эмуляторы калькуляторов серии Б3-34 (за исключением МК-52, у которого не была отсканирована микросхема, управляющая энергонезависимой памятью).


Вскоре с использованием восстановленного кода был написан эмулятор МК-61 на JavaScript. Сегодня это, по всей видимости, наиболее функциональный и удобный эмулятор из всех. Не требуя скачивания и установки, он позволяет работать как с самим МК-61, так и с калькуляторами-аналогами Б3-34 (без третьего процессора), а также с такими устройствами, как арифмометр «Феликс-М», логарифмическая линейка «НЛ-10М» и русские счёты. Во время работы калькулятора на экране показывается содержимое всех регистров памяти, операционного стека, адресов возврата из подпрограмм и счётчика команд в режиме реального времени. Имеется возможность скопировать и ввести сохранённое состояние или поставить исполнение на паузу. Важной функцией является возможность ввести и прочитать код программы, используя общепринятые мнемоники команд в различных вариантах, т. е. теперь можно просто скопировать код программы, вставить в эмулятор и запустить, не вводя его вручную.


Работа на калькуляторе



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


Впервые добравшись до МК-61, человек, знакомый с традиционными арифметическими и инженерными калькуляторами, обычно задаётся вопросом: где здесь кнопка «=» или скобки? Попробуем разобраться. Итак, для начала калькулятор нужно включить. В верхней его части находится индикатор, на котором отображается число, с которым в данный момент работает калькулятор. Он также работает и с другими числами, расположенными в ячейках памяти, называемых регистрами, но обычно результат вводится и выводится на индикатор, значение которого также находится в регистре, обозначаемом X. Слева под индикатором находится переключатель, подписанный справа «Вкл», — включаем, на индикаторе загорится «0». Число набирается традиционно, при помощи цифровых кнопок. Можно также ввести дробное число посредством кнопки десятичной запятой (справа от кнопки «0»), поменять его знак («/−/») и ввести порядок («ВП»). Например, нужно ввести число −0,00000123 — для этого последовательно нажимаем: «[1] [2] [3] /−/ ВП [8] /−/».


Как же тут выполнять арифметические операции? Чтобы понять это, необходимо ознакомиться с таким понятием, как операционный стек. Стек нашего калькулятора — это просто четыре регистра, связанные между собой порядком помещения и извлечения из них чисел. Он подобен стопке, колоде карт: верхняя карта (в нашем случае число) лежит в регистре X и отображается на индикаторе. Когда мы кладём число в эту стопку, остальные числа оказываются глубже (под ним), а оно перед нами, на индикаторе. В нашем распоряжении находятся четыре регистра стека (и один дополнительный, в него помещается результат предыдущей операции), обозначаемые буквами X, Y, Z, T (и X1), мы можем производить с ним определённые операции. Вводимое с клавиатуры число оказывается в регистре X. Его можно поднять (скопировать) в следующий за ним регистр Y, при этом содержимое Y переместится в Z, содержимое Z — в T (предыдущее значение T сотрётся). Стек можно вращать, при этом X перемещается в T, T — в Z и т. д. Подъём или спуск значений происходит и при выполнении некоторых действий.


Тут дело в том, что калькулятор, как уже было сказано ранее, принимает выражения в бесскобочной постфиксной нотации, т. е. не в традиционной форме «a + b =», а в форме «a b +», т. е. сначала вводятся числа, после производится операция. А вводятся числа как раз в этот самый стек. Введя число в регистр X, его нужно поднять в Y, для этого используется кнопка [В↑]. После этого можно начинать вводить следующее число, предыдущее значение X при этом сотрётся.


Операции над числами делятся на двухместные (с двумя аргументами: сложение, вычитание, возведение в степень и т. д.) и одноместные (над одним числом: корень, тригонометрия, логарифмы и т. д.). Двухместные операции производятся над регистрами X и Y. Для примера сложим два числа: «[1] [В↑] [2] [+]». Здесь в X вводится число 1, поднимается в Y, в X вводится число 2, после чего Y и X складываются, результат — на индикаторе (в X). При этом значения стека спускаются: T обнуляется, предыдущее значение T перемещается в Z, Z — в Y, в X1 — предыдущее значение X (т. е. 2). В случае с вычитанием выполняется операция $X = Y − X$ (аналогично с делением). Для доступа к функциям, обозначения которых нанесены над кнопками, используются кнопки [F] и [K] соответственно цвету, которым написано обозначение функции. Например, для вычисления натурального логарифма числа нужно нажать «[F] [2]» (над кнопкой «2» находится обозначение «ln»).


В качестве основной памяти в МК-61 используется 15 регистров общего назначения. Они обозначаются цифрами от 0 до 9 и буквами от A до E (10—15). Для помещения числа в один из регистров используется кнопка «X→П», после нажатия которой нужно нажать соответствующую номеру регистра кнопку на цифровой клавиатуре или кнопку, подписанную нужной буквой снизу/справа от неё. Аналогичным образом число извлекается из регистра посредством кнопки «П→X». При работе на калькуляторе для хранения промежуточных данных зачастую используется стек. При этом необходимо следить, чтобы сохранённое значение не было стёрто в процессе вычислений. В МК-61 существует также косвенная адресация регистров. Так, например, если поместить в регистр №7 число 8, то при помощи последовательного нажатия «[K] [П→X] [7]» на индикаторе появится содержимое регистра №8. Здесь необходимо отметить, что при косвенном обращении через регистры 0—3 ихнее значение предварительно уменьшается на единицу, а через 4—6 — увеличивается. Т. е. если в Р4 было 5, то «[K] [П→X] [4]» выдаст число из Р6.


Теперь посмотрим, как вводятся и исполняются программы. Для запуска режима ввода программы необходимо нажать последовательность кнопок «[F] [ВП]» («ПРГ»). Далее вводится программа, аналогично тому, как производятся вычисления в ручном режиме. В правой части индикатора отображается счётчик команд, текущее его значение показывает адрес, по которому будет размещена вводимая инструкция (шаг программы). Максимальная длина программы — 105 шагов. При вводе программы на индикаторе отображаются три последних (предшествующих указываемому адресу) кода инструкции.


Напишем для примера программу, которая умножит вводимое число на 3, прибавит к нему 4 и возведёт полученное значение в квадрат. Для этого последовательно нажимаем: «[В↑] [3] [×] [4] [+] [F] [×] [С/П]». В результате в программной памяти окажется программа: «↑ 3 × 4 + x2 С/П». При оформлении кода программы в текстовом виде указывается не непосредственно клавиша, которую необходимо нажать, а инструкция, которая будет выполнена: в нашем случае — не «F ×», а «x2». Команда «С/П» (стоп/пуск) останавливает выполнение программы.


Теперь выходим из режима программирования нажатием «[F] /−/» («АВТ»). Для запуска программы обнуляем счётчик шагов кнопкой «В/О» (возврат/очистка), вводим начальные данные, например 5. Запускаем программу — «С/П». После выполнения на индикаторе 361.


Примеры программ


Рассмотрим пример программы, выполняющей реальные вычисления. Этот код вычисляет дату Пасхи по введённому номеру года:


П2      1       9       ПП      86      П3      ИП2     4       ПП      86
П4      ИП2     7       ПП      86      П5      1       9       ИП3     *
1       5       +       3       0       ПП      86      П6      2       ИП4
*       4       ИП5     *       +       6       ИП6     *       +       6
+       7       ПП      86      ИП6     +       П1      3       П4      ИП2
1       -       2       10^x    /       [x]     ^       ^       4       /
[x]     -       2       0       +       ИП1     +       П3      3       1
-       x>=0    76      П3      КИП4    ИП3     3       0       -       x>=0
83      П3      КИП4    ИП3     ИП4     С/П     П0      <->     П1      <->
/       [x]     ИП0     *       ИП1     -       /-/     В/О

Чтобы не вводить его вручную, как на реальном устройстве, достаточно просто вставить его в эмуляторе в окошко «Код программы» и нажать кнопку «Ввести в память». Вводим на клавиатуре номер года, нажимаем «С/П» для запуска (если счётчик команд не обнулён, то обнуляем его, нажав перед запуском «В/О»). Примерно через 14 секунд получим результат: на индикаторе (в регистре X) будет номер месяца, в регистре Y — число месяца; нажимаем «⟷», чтобы обменять значения X и Y и увидеть номер дня.


Или вот такая программа, которая переводит числа в троичную симметричную систему счисления:


ЗН      П2      Вx      |x|     П0      0       П3      П4      1       П5
ИП0     /-/     x<0     80      ИП0     ^       ^       3       /       [x]
П0      3       *       -       П1      ИП3     x#0     54      ИП1     x=0
38      ИП2     ПП      88      0       П3      БП      10      ИП1     1
-       x=0     49      ИП2     /-/     ПП      88      БП      10      0
ПП      88      БП      10      ИП1     x=0     62      0       ПП      88
БП      10      ИП1     1       -       x=0     72      ИП2     ПП      88
БП      10      ИП2     /-/     ПП      88      1       П3      БП      10
ИП3     x#0     86      ИП2     ПП      88      ИП4     С/П     8       +
ИП5     *       ИП4     +       П4      ИП5     1       0       *       П5
В/О

Вводим число, выполняем — на экране результат. При этом −1, 0 и 1 обозначаются соответственно цифрами 7, 8 и 9. Например, введя 123, получим 977778, т. е. «+−−−−0». Особенно забавно, что такой код, показанный нынешним «кодерам-прогерам» с дипломами ЕГЭ-бакалавров, ввергает их в ступор и экзистенциальный ужас (проверено не раз), не говоря уже о предложении написать что-то самим. Но это далеко не самое сложное, что есть в этих калькуляторах. Попробуем же понять их внутреннее устройство, используя для этого JS-код эмулятора.


Внутреннее устройство


В 1990 году Ярослав Карпович Трохименко выпустил книгу «Программируемые микрокалькуляторы: устройство и пользование», в которой досконально описал работу ПМК «расширяющегося ряда» на всех уровнях организации, аппаратных и программных. Хотя там и не был напечатан весь код ПЗУ калькуляторных процессоров, это сократило путь к программному воспроизведению устройств в разы и дало первые объяснения глубинным причинам эффектов «еггогологии».


Итак, как уже было сказано выше, МК-61 работает под управлением трёх процессоров К745ИК13, отличающихся только прошивкой (серия К745 — бескорпусные варианты К145). Они соединены однобитной шиной, реализующей последовательное соединение процессоров вместе с микросхемами оперативной памяти К745ИР2 в кольцо. Графически схему калькулятора можно изобразить так:


Процессор ИК13 оперирует 4-битными словами. Его динамическая память представлена тремя регистрами M, R и ST объёмом 42 слова каждый, а также регистрами S и S1 размером в одно слово и однобитными ячейками L, T и П. Кроме того, в коде эмулятора имеются переменные для реализации взаимодействия между процессорами, памятью, индикатором, клавиатурой и для сохранения предыдущего состояния.


Память ПЗУ процессора состоит из 256 команд по 23 бита, 128 синхропрограмм, являющихся массивами из девяти шестибитных ячеек, и 68 микрокоманд по 28 битов. Каждая команда содержит три адреса синхропрограмм; ячейки синхропрограммы являются адресами микрокоманд; а биты микрокоманды определяют, какие элементарные операции необходимо выполнить на текущем такте процессора. За один такт выполняется одна микрокоманда и по системной магистрали прогоняется одна тетрада битов, а за 42 такта выполняется одна команда.


constructor(ПЗУ) {
    [this.ПЗУ_микрокоманд, this.ПЗУ_синхропрограмм, this.ПЗУ_команд] =
        [ПЗУ.микрокоманды, ПЗУ.синхропрограммы, ПЗУ.команды];
    this.Сброс();
}

Сброс() {
    [this.M, this.R, this.ST] =
        [new Array(42).fill(0), new Array(42).fill(0), new Array(42).fill(0)];
    this.S = this.S1 = this.L = this.T = this.П =
    this.такт = this.команда = this.АСП =
    this.вход = this.выход = this.клав_x = this.клав_y = 0;
    this.запятые = new Array(14).fill(false);
    this.обновить_индикатор = false;
}

Выбор микрокоманды для текущего такта


На первом из 42-х такте определяем адрес новой команды, которую мы начинаем исполнять, взяв 4-битное слово из регистра R по адресу 36 в качестве младших разрядов и по адресу 39 в качестве старших, и берём эту команду из кода ПЗУ. Сама команда состоит из трёх адресов синхропрограмм, под которые отведено дважды по 7 битов и третий раз — 8, а также флага, влияющего на выполнение определённой части микрокоманды. Если биты третьего адреса с третьего по последний равны нулю, то обнуляем ячейку T.


if (this.такт == 0) {
    this.команда = this.ПЗУ_команд[this.R[36] + 16 * this.R[39]];
    if ((this.команда >>> 16 & 0b111111) == 0) this.T = 0;
}

Находим, к какой девятке (по порядку) относится номер такта и какое место в ней занимает. Девятка тактов определяет, какой адрес синхропрограммы, записанный в команде, использовать.


const
    девятка_тактов = this.такт / 9 | 0,
    такт_в_девятке = this.такт - девятка_тактов * 9;

Если это первый такт в девятках с номерами 0, 3 или 4, то следует установить синхропрограмму. Если номер такта относится к первым трём девяткам, то адрес синхропрограммы составляют первые 7 битов команды; если к четвёртой, то вторые 7 битов. А если же к пятой, то берём третьи 8 битов, но в случае, если адрес синхропрограммы больше 31, на первом такте пятой девятки помещаем в регистр R по адресу 37 младшие 4 бита адреса, по адресу 40 — старшие, сам же адрес заменяем на 95 (на любом такте). Таким образом имеется возможность передать два слова в память непосредственно из команды (поэтому поле этого адреса сделано длиннее).


if (такт_в_девятке == 0 && !(девятка_тактов > 0 && девятка_тактов < 3)) {
    if (девятка_тактов < 3)
        this.АСП = this.команда & 0b1111111;
    else if (девятка_тактов == 3)
        this.АСП = this.команда >>> 7 & 0b1111111;
    else if (девятка_тактов == 4) {
        this.АСП = this.команда >>> 14 & 0b11111111;
        if (this.АСП > 31) {
            if (this.такт == 36) {
                this.R[37] = this.АСП & 0b1111;
                this.R[40] = this.АСП >>> 4;
            }
            this.АСП = 95;
        }
    }
}

Определяем адрес микрокоманды, записанный в синхропрограмме. Последняя представляет собой последовательность из 9 адресов микрокоманд, но в массиве они записаны раздельно. Поэтому умножаем вычисленный адрес синхропрограммы на 9, получив индекс её первого элемента, и добавляем к нему значение по следующему правилу: если номер такта — от 0 до 5, то используем его, если от 6 до 20, то берём остаток от деления его на 3, прибавив к нему 3, а если от 21 до 41, то номер такта в девятке.


let АМК = this.ПЗУ_синхропрограмм[
    this.АСП * 9 +
    (this.такт < 6 ? this.такт : this.такт < 21 ? this.такт % 3 + 3 : такт_в_девятке)
];

На всякий случай отсекаем биты старше 6-го (в коде эмулятора все остальные данные из ПЗУ используются только по частям, что позволяет не беспокоиться о некорректных данных), и если адрес микрокоманды — от 60 до 63, то реализуем условный выбор в зависимости от состояния ячейки L: для значения 0 — чётные номера больше 60, для 1 — нечётные. Таким образом, хоть адрес микрокоманды и 6-битный, но самих микрокоманд 68.


АМК &= 0b111111;
if (АМК > 59) {
    АМК = (АМК - 60) * 2;
    if (this.L == 0) АМК++;
    АМК += 60;
}

Вытаскиваем микрокоманду из кода ПЗУ и разбираем её на массив однобитных микроприказов (флагов), которые далее составляют поля микрокоманды — либо поодиночке, либо в совместно, определяя номер выполняемого действия.


let микрокоманда = this.ПЗУ_микрокоманд[АМК], микроприказы = [];
for (let сч = 0; сч < 28; сч++) {
    микроприказы.push(микрокоманда & 1);
    микрокоманда >>>= 1;
}

Сумматор и клавиатура


На этот раз определяем, к какой уже тройке по порядку относится номер такта и создаём объект сумматора с параметрами α, β, γ и полем суммы Σ. Далее, если микроприказ с номером 25 установлен в 1, используем данные с клавиатуры — параметры x и y, особенные для каждой кнопки (x также используется для передачи меры угла): если следующая за текущей тройка тактов не равна x, то выполняем побитовую дизъюнкцию ячейки S1 с y. После этого проходим по первым 12 микроприказам, выполняя их, если они установлены.


const тройка_тактов = this.такт / 3 | 0;
const сумматор = { альфа: 0, бета: 0, гамма: 0, сигма: 0 };

if (микроприказы[25] == 1 && тройка_тактов != this.клав_x - 1)
    this.S1 |= this.клав_y;

for (let сч = 0; сч < 12; сч++)
    if (микроприказы[сч] == 1)
        this.Выполнить_микроприказ(сч, сумматор);

После этого снова работаем с клавиатурой. Если хотя бы один из битов команды с номерами 18—23 установлен в 1 и y кнопки равен нулю, то обнуляем T. Если же все упомянутые биты нулевые, то устанавливаем значение в массиве запятых на индикаторе равным L, флаг необходимости обновления индикатора, и если при этом следующая тройка тактов равна x, а y больше 0, то записываем y в S1, а в Т — 1. Затем выполняем при необходимости микроприказы 12, 13 и 14.


if ((this.команда >>> 16 & 0b111111) > 0) {
    if (this.клав_y == 0) this.T = 0;
}
else {
    if (тройка_тактов == this.клав_x - 1 && this.клав_y > 0) {
        this.S1 = this.клав_y;
        this.T = 1;
    }
    this.запятые[тройка_тактов] = this.L > 0;
    this.обновить_индикатор = true;
}

for (let сч = 12; сч < 15; сч++)
    if (микроприказы[сч] == 1)
        this.Выполнить_микроприказ(сч, сумматор);

Теперь складываем входы сумматора, от суммы берём младших 4 бита и кладём в Σ, а 5-й бит (флаг переноса) — в П.


const сумма = сумматор.альфа + сумматор.бета + сумматор.гамма;
сумматор.сигма = сумма & 0b1111;
this.П = сумма >>> 4 & 1;

Поля микрокоманды


Если последний бит команды равен 0 или это последняя девятка тактов (точнее говоря, их в ней всего 6), то определяем значение следующего поля микрокоманды из битов 15, 16 и 17 (в порядке возрастания старшинства). Если полученное значение не равно нулю, то выполняем микроприказ с номером, равным этому полю, увеличенным на 14 (количество уже обработанных микроприказов). Последнее приходится учитывать, поскольку действий предусмотрено 35, а битов в микрокоманде — всего 28, т. е. некоторые биты группируются в поля. При том же условии относительно номера такта или битов 24—31 проходим по микроприказам 18 и 19 (действие определяется номером, увеличенным на четыре — 7 предусмотренных тремя битами действий минус 3 битовых места в микрокоманде).


if ((this.команда >>> 22 & 1) == 0 || девятка_тактов == 4) {
    const поле_микрокоманды =
        микроприказы[17] << 2 |
        микроприказы[16] << 1 |
        микроприказы[15];
    if (поле_микрокоманды > 0)
        this.Выполнить_микроприказ(поле_микрокоманды + 14, сумматор);
    for (let сч = 18; сч < 20; сч++)
        if (микроприказы[сч] == 1)
            this.Выполнить_микроприказ(сч + 4, сумматор);
}

Проходим по микроприказам 20 и 21. Потом следуют три двухбитовых поля, определяющих, соответственно, по три действия (при нулевом значении поля ничего не делается).


for (let сч = 20; сч < 22; сч++)
    if (микроприказы[сч] == 1)
        this.Выполнить_микроприказ(сч + 4, сумматор);

for (let сч = 0; сч < 3; сч++) {
    const поле_микрокоманды =
        микроприказы[23 + сч * 2] << 1 |
        микроприказы[22 + сч * 2];
    if (поле_микрокоманды > 0)
        this.Выполнить_микроприказ(поле_микрокоманды + 25 + сч * 3, сумматор);
}

На выход микросхемы подаётся слово из регистра M, соответствующее номеру такта, после чего вместо него записывается слово, поступившее на вход. Такт увеличивается; если становится равным 42, то обнуляется, — приступаем к обработке следующей команды.


this.выход = this.M[this.такт];
this.M[this.такт] = this.вход;
this.такт++;
if (this.такт == 42) this.такт = 0;

Последний фрагмент собственно составляет также содержание такта памяти ИР2, с той разницей что тактов там 252, как и число слов в единственном регистре M. После выполнения такта одного процессора значение ячейки выхода присваивается ячейке входа следующего процессора или памяти. Чтобы замкнуть кольцо на такте, который был обработан, после прохождения по всем элементам от ИК1302 до второго ИР2 значение выхода последнего передаётся в ячейку первого с номером обработанного только что такта. Память ИР2 вместе с регистрами процессоров ИК13 (не включая сверхоперативные ячейки) можно визуально изобразить так (положение на 84-м такте ИР2):


Микроприказы


А вот и содержание самих микроприказов. Здесь биты микрокоманды с номерами 0—6 влияют на вход сумматора α, 7—11 — на β, 12—14 — на γ. Влияние заключается в побитовой дизъюнкции имеющегося значения входа сумматора с некоторым значением (результат является новым значением входа). Выбор действия с номером от 15 до 21 задаётся трёхбитным полем микрокоманды с битами 15—17, а за действия 22 и 23 отвечают соответственно биты 18 и 19; это всё влияет на регистр R, на слово, задаваемое текущим номером такта, либо на одно из двух предшествующих ему. Предшествующие и следующие адреса берутся по модулю 42, т. е. предыдущим адресом для 0 является 41 (0 — следующим для 41). Биты 20 и 21 задают действия под номерами 24 и 25 соответственно — над регистром M и ячейкой L. Далее идут три двухбитовых поля, отвечающих каждое за три действия — над регистрами S, S1 и ST. В регистре ST операции производятся над тройкой слов, начинающейся с текущего номера такта.


Микроприказы
Выполнить_микроприказ(номер, сумматор) {
    switch (номер) {
        case 0: сумматор.альфа |= this.R[this.такт]; break;
        case 1: сумматор.альфа |= this.M[this.такт]; break;
        case 2: сумматор.альфа |= this.ST[this.такт]; break;
        case 3: сумматор.альфа |= ~this.R[this.такт] & 0b1111; break;
        case 4: if (this.L == 0) сумматор.альфа |= 0xA; break;
        case 5: сумматор.альфа |= this.S; break;
        case 6: сумматор.альфа |= 4; break;
        case 7: сумматор.бета |= this.S; break;
        case 8: сумматор.бета |= ~this.S & 0b1111; break;
        case 9: сумматор.бета |= this.S1; break;
        case 10: сумматор.бета |= 6; break;
        case 11: сумматор.бета |= 1; break;
        case 12: сумматор.гамма |= this.L & 1; break;
        case 13: сумматор.гамма |= ~this.L & 1; break;
        case 14: сумматор.гамма |= ~this.T & 1; break;
        case 15: this.R[this.такт] = this.R[(this.такт + 3) % 42]; break;
        case 16: this.R[this.такт] = сумматор.сигма; break;
        case 17: this.R[this.такт] = this.S; break;
        case 18: this.R[this.такт] = this.R[this.такт] | this.S | сумматор.сигма; break;
        case 19: this.R[this.такт] = this.S | сумматор.сигма; break;
        case 20: this.R[this.такт] = this.R[this.такт] | this.S; break;
        case 21: this.R[this.такт] = this.R[this.такт] | сумматор.сигма; break;
        case 22: this.R[(this.такт + 41) % 42] = сумматор.сигма; break;
        case 23: this.R[(this.такт + 40) % 42] = сумматор.сигма; break;
        case 24: this.M[this.такт] = this.S; break;
        case 25: this.L = this.П; break;
        case 26: this.S = this.S1; break;
        case 27: this.S = сумматор.сигма; break;
        case 28: this.S = this.S1 | сумматор.сигма; break;
        case 29: this.S1 = сумматор.сигма; break;
        case 30: this.S1 = this.S1; break;
        case 31: this.S1 = this.S1 | сумматор.сигма; break;
        case 32:
            this.ST[(this.такт + 2) % 42] = this.ST[(this.такт + 1) % 42];
            this.ST[(this.такт + 1) % 42] = this.ST[this.такт];
            this.ST[this.такт] = сумматор.сигма;
        break;
        case 33: {
            const x = this.ST[this.такт];
            this.ST[this.такт] = this.ST[(this.такт + 1) % 42];
            this.ST[(this.такт + 1) % 42] = this.ST[(this.такт + 2) % 42];
            this.ST[(this.такт + 2) % 42] = x;
        } break;
        case 34: {
            const
                x = this.ST[this.такт],
                y = this.ST[(this.такт + 1) % 42],
                z = this.ST[(this.такт + 2) % 42];
            this.ST[this.такт] = сумматор.сигма | y;
            this.ST[(this.такт + 1) % 42] = x | z;
            this.ST[(this.такт + 2) % 42] = y | x;
        } break;
    }
}

Так работает один процессор, выполняя одну микрокоманду. В режиме исполнения программы реальный калькулятор выполняет около 3–4 шагов пользовательской программы в секунду, примерно на такую же скорость работы настроен и эмулятор. Для прохождения одного шага такт повторяется 23520 раз, выполняя 560 команд, прописанных в коде ПЗУ.


Это обстоятельство и сам довольно нетривиальный алгоритм исполнения кода делают реконструкцию механизмов и алгоритмов работы, запрограммированных в коде микросхем этих калькуляторов, очень и очень затруднительной. Достоверно и детально описать, как это работает, могли лишь причастные к разработке этих устройств; сегодня же любителям советских программируемых калькуляторов, интересующимся этой темой, остаётся лишь тоскливо рассматривать под лупой каждый бит восстановленного кода и пытаться понять, зачем он нужен.


Впрочем, некоторые моменты благодаря эмулятору и книге «Устройство и пользование» всё же удалось прояснить. Например, стало понятно, как возникают числа с порядком больше 99, работа с которыми была одним из основных направлений «еггогологии» – т. н. «электронный океан чисел». Разряды числа в памяти хранятся в двоично-десятичной форме, т. е. одна тетрада битов кодирует одну десятичную цифру (хотя может кодировать и шестнадцатеричную). Сами числа представлены в экспоненциальной форме и занимают 12 ячеек (вообще 14 – треть от длины регистра, но два разряда – служебные), при этом первая ячейка обозначает знак порядка, следующие две – сам порядок, потом ещё одна ячейка – знак мантиссы и восемь – собственно мантисса. Хотя на знак отведено аж четыре бита, используются только два значения – 0 для положительных чисел и нуля и 9 для отрицательных. Так вот, при переполнении следующий разряд порядка записывается в ячейку его знака, т. е. $10 ^ {50} \times 10 ^ {50}$ даёт «$ЕГГОГ$», но в памяти записан порядок $[1] [0] [0]$, где единица стоит в ячейке знака. Над этим значением можно производить некоторые операции, как над обычным числом, правда, до тех пор, пока порядок находится в пределах второй сотни – дальше начинаются сложности (причём над «ЕГГОГом», полученным именно таким способом; полученный при делении на 0, например, ничего не даст). Однако глубинные механизмы «числового океана» всё же так и остались невыясненными.


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




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


Программирование МК-61 имеет глубокий философский подтекст.

Ограниченность ресурсов и доступного инструментария, добровольно принимаемая программистом, отражает собой многовековой опыт аскетических духовных практик. Сложнейшая многоуровневая иерархия программ управления калькулятором – от кода, вводимого человеком, до микрокоманд и микроприказов — есть отражение необычайной сложности божественного мироздания, всех глубин и уровней материи – от крупномасштабных структур вселенной до элементарных частиц, от сознания до неживой материи, от социума до первозданного хаоса и небытия.

Сам микрокод, прошитый в ПЗУ калькулятора, предстаёт объектом благоговейного созерцания, ибо никто не может в полной мере постичь принципы его работы, структуру или как-либо повлиять на его работу, склоняя нас к агностицизму и мыслям об иллюзорности свободы воли. Тройственность структуры микрокода – команды, синхропрограммы и микрокоманды – и три процессора калькулятора отсылают нас к вытекающей из христианского представления о Боге как о Троице троичности бытия, к естественной (троичной) аристотелевой логике и к концепции триединой русской нации.

Программа, подаваемая человеком калькулятору, представляя собой с одной стороны низкоуровневый автокод, составленный из элементарных команд, с другой же – высокоуровневые инструкции, исполняемые прошивкой ПЗУ, демонстрирует нам диалектический закон единства и борьбы противоположностей. Исполнение же программы, когда, пройдя 105 шагов программной памяти, калькулятор возвращается в начало и продолжает исполнение кода, есть образ колеса сансары, а получение решения задачи становится подобием нирваны, достигнутой в результате правильно написанной и выполненной программы.

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 149

    +8
    Цитата в конце статьи шикарна.
    Спасибо.
    Бывший владелец МК-52, увлечённый ЕГГОГ`олог и заслуженный игроман, разбивший в своё время на парах по информатике бессчётные количества самолётов и космических кораблей в поисках алгоритма идеальной посадки.
      0
      Я на МК-52 учился программить, до того как дома комп появился. Несколько лет назад пытался его найти среди старых вещей, но где-то он затерялся.
        +2
        А я свой нашел неделю назад. Протер, вставил батарейки, включил — работает! :)
        Был куплен в 1990 году, летом, поработал в каникулы на фабрике. Первый мой комп :)
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          А у меня был 61 (это было нечто по сравнению с 21), но я долго страдал из-за отсутствия хранения как такового… а когда приобрел 52 — уже запал иссяк… Правда немного поразгонял его… несколько лет назад выкинул (
            +2
            Отличная статья! Спасибо. До сих пор лежит этот калькулятор. Работает даже.
            +2
            Как же на нем играли в крестики-нолики и другие игры?
            И пример программирования такой игры тоже интересен.
              0
              В часть — переключателем Р-ГРД-Г =)
                +3
                Вот пример того, как это выглядело:
                lordbss.pp.ru/pmk220.html
                В журнале «Наука и жизнь» была рубрика, посвященная программируемым калькуляторам, в ней разбирали такие программы. Я с нетерпением ждал каждого номера.
                  +1
                  Играл в крестики-нолики на таком. На квадратном поле 3х3 (кнопки клавиатуры 1-9 это как бы клетки) калькулятор делает первый ход в центр (5) и в зависимости от введенных цифр вычисляет следующие клетки. В программе это было реализовано с помощью хитрой адресации переходов, в том числе косвенной. Программа занимала почти всю память, о варианте с первым ходом игрока речи уже не было.
                    +1

                    Да, примерно так и было. У меня есть такой вариант:


                    9   С/П ПП  28  пи  *   cos x<0 16  ИП2
                    ПП  28  1   -   БП  51  ИП7 ПП  28  ИП7
                    ПП  28  КИП2    ИП2 ВП  4   4   С/П 1   -
                    x=0 33  8   П2  С/П П7  ИП2 4   -   x#0
                    43  x<0 45  8   +   П8  ИП7 -   x#0 55
                    ИП8 ВП  6   6   С/П ИП2 В/О

                    Здесь клетки нумеруются по спирали от левого верхнего угла от 1 до 9:


                    1, 2, 3
                    8, 9, 4
                    7, 6, 5

                    Поле рисуется на бумажке, на которой отмечаются ходы. Ходит, действительно, первым калькулятор — как легко догадаться, пойдёт в центр, на 9. Итоги игры: 44 — ничья, 66 — калькулятор выиграл. Можете попробовать на эмуляторе.
                    Здесь использовано 57 шагов программы, т. е. память не до конца забита и программу можно было бы усовершенствовать, введя, например, случайное начало для калькулятора.

                      +2
                      Ну, зачем же на эмуляторе? Калькулятор у меня есть, исправный, только разъём питания переделан. Спасибо, поиграл, показал сыну — он тоже заинтересовался.
                      Классный вариант, и идея с вращением вокруг центра хорошая. Только пока не разобрался, как тут косинус работает. Можно попытаться добавить первый ход из угла (1), но по-моему полностью уместить не получится.
                        +1
                        На эмуляторе вводить и отлаживать проще, чем на реальном калькуляторе:
                        image

                        А косинус тут просто-напросто для определения чётности номера клетки во время хода игрока.
                    0
                    +9

                    Как бывший владелец МК-61 пустил скупую мужскую слезу.

                      +9
                      Как действующий владелец, достал из шкафа и с ностальгией погладил аппарат.
                        +1

                        У меня он тоже лежит.


                        Но если надо — расчехляется и скрипит при каждом нажатии кнопок.

                          0
                          Тоже где-то лежит. Когда последний раз включал, N лет назад, от сетевого БП не работал, только индикатор быстро-быстро моргал (когда-то, где-то читал, что надо менять какой-то кондер, то ли в БП, то ли на плате самого МК, но где и что...), а 3х АА батареек под рукой не оказалось.
                      +7
                      Я долгое время работал на МК-52, писал программы. До сих пор помню многие 16-ричные коды наизусть. ЕГГОГология — отдельная наука. Обратная бесскобочная система записи настолько въелась в мозг, что я не могу считать на современных калькуляторах. На смартфон в качестве калькулятора установил приложение, эмулирующее работу МК-61. Это необратимая профдеформация, наверно.
                        +2
                        Язык Forth для вас. После МК у меня на раз зашел
                        +4
                        У меня валяется тетрадь полная игр, которые я писал для МК-61
                        После того, как мне купили компьютер я не мог поверить, неужели там на самом деле памяти на 32000 команд? Точно не 320? Может что-то перепутали.

                        В целом вещь полезная, если надо научиться писать компактные программы. Но упаси боже кому-то попробовать потом поддерживать такой код.
                          +13
                          Интернет-помойках вроде Википедии

                          за такое в приличном обществе бьют подсвечниками.
                            +5

                            Подтверждаю, в приличном обществе Педивикию принято называть "мусоркой", а не "помойкой".

                              –5
                              Согласен, упоминать Википедию в приличном обществе — это вообще моветон. Но давайте не будем снобами и будем называть вещи своими именами.
                                0
                                Меня больше насмешило описание автора, что на википедии пытались продавать эти клоны. Отличная площадка же. Алиэкспресс, Авито и Википедия.
                                  0
                                  Не продавать, а продвигать. Вы, видимо, недооцениваете пропагандистско-рекламный потенциал этого сайта, а он, к сожалению, пока весьма велик.
                                    0
                                    «Скайп это лучший файлообменник»
                                  +5
                                  В 1995 году впервые попал в Сигапур и в порыве ностальгии и, отчасти, ради осуществления старой мечты купил HP-32SII. Но программировать на нём уже так и не стал, непродолжительное время использовал только как инженерный. Всё-таки 10 лет прошло и уже вовсю работали на PC. Но помню как на судне ко мне подощел один из англичан, взял его в руки и знающе, с подколкой сказал «proper engineer must use proper calculator» )))
                                    +1
                                    Эх. Помню на МК-61 на уроке набирал игру вслепую под столом. А потом на перемене играл… Было круто… Или гонки на темной кухне чтобы было видно хорошо. Ну и куда же без посадок на Луну, это вообще была тема.

                                    Хороший калькулятор был. Дал много в плане заинтересованности. Спасибо ему. Но это прошлое. Больше ностальгия по молодости :-)

                                    P.S. Крестики-нолики я не осилил написать. Не хватило 3 или 4-х ячеек памяти кажется. Как я расстраивался тогда!
                                      +1

                                      Первый эмулятор МК-61 я писал на BASIC*МИКРОША. Почти дописал документированную часть, а потом обнаружил Fort. И как-то то он так удачно подошёл, что быстро реализовал всю документированную часть, а потом школа кончилась…

                                        0

                                        Я когда у школьного друга увидел новый МК-61 — это стало божественным откровением, ниспосланным свыше. Это было первое программируемое устройство, попавшее в мои руки. Этот мелькающий зелёный индикатор, эти глюки после перегрева — словами не передать...


                                        Кто знает, это был чисто советский аппарат, или подсмотренный на Западе?

                                          0

                                          Скорее всего подсмотренной у Hewlett Packard, если посмореть на HP-41C, который обладал схожими принципами и системой комманд, но появился на несколько лет раньше, чем МК-61. Но реализация, возможно, была своей.

                                            +2
                                            Архитектура МК-61 тянется аж от 1973 года с Б3-09, в 1975-м появятся первые экземпляры Б3-21 с похожими принципами программирования. А что могли посмотреть у HP — это только регистры X, Y, Z, T и Last X.
                                              +3

                                              На самом деле, эта архитектура унаследована напрямую из калькуляторов с памятью на замкнутой в кольцо акустической линии задержки. В доБИСную эпоху такая линия задержки была основой едва ли не большинства настольных калькуляторов, включая и программируемые.

                                              +5

                                              Интересно, сохранилась ли инженерная документация к МК-61 где-то, с полным и подробным описанием процессоров, прошивок, и т.п. Может в институте, который его разрабатывал. Государство могло бы отдать всё это в свободное пользование, т.к. практической ценности это не имеет. Только культурно-историческую.

                                                0
                                                Очень маловерятно. Это ж всё на бумаге в те времена было. Всё сгнило, почти наверняка.

                                                А конечный результат — уже давно сняли, так что есть вполне себе точные эмуляторы со всеми ЕГГОГами…
                                                  +3
                                                  Да, учитывая хаос 90-х, рассчитывать на то, что документация была заботливо сохранена, вряд ли стоит. Я. К. Трохименко и так постарался, так сказать, сохранить для потомков хоть какую-то информацию, издав целую книгу по теме.
                                                  +7
                                                  По словам главного конструктора МК:
                                                  pmk.arbinada.com/ru/comment/5521#comment-5521
                                                  «Документация на МК утеряна. Вернее, уничтожена при передаче помещений завода коммерческой структуре. Уничтожена этой коммерческой структурой. Микрокод не сохранился.»
                                                    +1
                                                    Ну вообще, ПМК разные ж заводы выпускали — кроме киевских МК были еще светловодские Б3 (с которых, собственно, подобные советские ПМК и начались).
                                                      0
                                                      Там микрокод и синхропрограммы уже скорее только в качестве масок для изготовления микросхем. Без исходного кода. :(
                                                        +1
                                                        Если, например, взять две аналогичные совместимые модели — Б3-34 и МК-54, то Б3 в Светловодске появился раньше.
                                                        При этом дальнейшее развитие (МК-61) пошло в Киеве, то есть у Киевского завода таки тоже были полные «исходники».
                                                          0
                                                          Исходники надо искать у КНИИМП, а заводы только производили по шаблонам.
                                                            0
                                                            Так выше про утерю документации ссылаются на интервью с главным конструктором Киевского ПО «Кристалл» — Шеревеня А.Г.
                                                            уничтожена при передаче помещений завода


                                                            Если же говорить про документацию на микросхемы — то да, очевидно, стоит икать в КНИИМП
                                                              0
                                                              Обидно
                                                                0
                                                                Еще как.
                                                                Нашелся бы какой-то энтузиаст, который бы топологию отреверсил.
                                                                На вид по рентгенофото она вроде довольно читаема, но нужен хорошо разбирающийся специалист, готовый потратить своё время.
                                                                  0
                                                                  Уже ведь есть. Микрокод считали, разобрали, эмулятор сделали. Больше топология не нужна.
                                                                    0
                                                                    А, таки разобрали полностью, со всеми нюансами?
                                                                    Это хорошая новость. А где можно ознакомиться?
                                                                      +1
                                                                      Вот там эмулятор, у него в исходниках и микрокод, и и сами процессоры.
                                                                      pmk.arbinada.com/mk61emuweb.html
                                                                        0
                                                                        Спасибо!
                                                                        Интересный вариант.
                                                                        Я б и не додумался заглянуть в исходный код страницы, привык что всё сложное поведение сейчас в бэкенд запихивают.
                                                                          0
                                                                          Но как погляжу, там не для всех моделей.
                                                                          Для МК-52 так и нету, как вы и писали.
                                                                            0
                                                                            МК-52 отличается только микросхемой К745ИК1801, которая считывает БРП или внутренний EEPROM. Для понимания архитектуры она в принципе, ни к чему.
                                                                            +1
                                                                            Такое ощущение, что статью целиком никто не читает. Разместил же ссылку на этот же самый эмулятор, только версией поновее лет на пять, ещё и фрагменты кода разбирал, указав, что это JavaScript.
                                                                              0
                                                                              Каюсь, статью бегло проглядел, поторопился перейти к комментариям (каковые на хабре зачастую самое вкусное).

                                                                              Во фрагментах JavaScript не опознал, поскольку не спец в нём — знакомство шапочное довольно.
                                                                              Ну и на микрокод это совсем не похоже, в микрокоде не бывает никаких if-then, там всё на битовых операциях же.
                                                                                0
                                                                                Разумеется, микрокод там — просто набор числовых массивов (строки 1289—1845). Думаю, было бы лишним цитировать его в статье.
                                                                                  0
                                                                                  Ну теперь-то я понял.
                                                                                  А всякие там if, case — это эмуляция логической обвязки снаружи микропрограммного автомата?
                                                                                    0
                                                                                    Ну да, исполнитель этого самого кода.
                                                                                      0
                                                                                      Нуу, микрокод можно сказать, «самоисполняемый», в смысле его исполнителем является сама память, где он лежит. Но чем больше комбинаций входных сигналов надо обрабатывать (то есть вычислительных состояний автомата), тем больше требуемый объём микрокода, чуть ли не в геометрической прогрессии.
                                                                                      Поэтому в процессорах используют в дополнение к МПА логические комбинаторные схемы (АЛУ), оставляя микропрограммному автомату только управляющие состояния.

                                                                                      Я пока не стал вдаваться в код эмулятора — не до того пока.
                                                                        0
                                                                        Это всё уже сделали. Там в другом затык: там же не микропроцессор, а микроконтроллер. Команды простые, но их исполняется какое-то дикое количество (десятки тысячи на исполнение одной инструкции калькулятора).

                                                                        И вот понять — какая там логика в этой безумной деятельности… невероятно сложно.

                                                                        То есть мы можем получить, рассчитать, вот те же самые электрические сигналы (кроме МК-52, так одна микросхема не отсканирована)… но почему они такие… какая в этом была заложено логика… науке неведомо.

                                                                        Ну то есть кое-что известно, даже энтузиасты желают железки, которые встраиваются на шину (вот как раз в «технологический разъём» МК-52, который для БРП как раз не используется) и «расширяют» набор команд… но про то, что там таится в исходных команда (и почему, к примеру, не реализовались исходные идеи про создание блока памяти, который доступен и как памяти и как данные) — мы не знаем.

                                                                        Ну крубо, утрируя: представьте, что мы не имеем даташита на 6502, но умудрились отсканировать и его и весь набор микросхем от C64.

                                                                        До того, как мы полезем разбираться в бинарники KERNAL'а — надо бы понять как вообще система команд вот этого вот всего устроена…
                                                                          0
                                                                          Встраивание в шину не затрагивает процессоры — только манипуляции с кольцом данных. А поскольку разработчики заложили в эти калькуляторы расширяемость, то почему бы не использовать ее по своему назначению, как например, в свое время расширили шину в МС-1104?
                                                                          www.leningrad.su/museum/show_calc.php?n=133
                                                                            0
                                                                            Ну, «почему оно так» это второй вопрос, хотя и не менее интересный.

                                                                            Если первый вопрос «как» решен полностью во всех деталях — это уже хорошо, это хотя бы позволит построить точные эмуляторы, повторить поведение тех микросхем.
                                                                            И под этим «как» я подразумеваю именно внутреннюю логику микросхемы (что такое микрокод, я в курсе — сам программировал секционные процессоры на 1804ВС1, и умею соорудить микропрограммный автомат на ПЗУ и регистре).

                                                                            «не микропроцессор, а микроконтроллер»
                                                                            эээ, микроконтроллер — это комбинация микропроцессора с некоторыми периферийными схемами (таймерами, АЦП, ЦАП, пользовательской памятью и т.п.) — то есть целый микропроцессорный комплект на том же кристалле или хотя бы в том же корпусе. Как одно время говорили, «однокристальная микроЭВМ».
                                                              +1
                                                              Завод сдал помещения в аренду вместе с документацией и наверняка ещё много чем. А виновата «коммерческая структура». Видимо в том, что не стала копаться и сортировать чужие документы.
                                                            +2
                                                            До сих пор пользуюсь (МК-61), но редко, эпизодически. В прошлом году считал что-то по квартплате (не совсем удачно). До этого, будучи на больничном, играя в Silent Hunter, пытался считать что-то связанное с торпедной атакой. Но без постоянной практики уже многое подзабыл, да и терпения не хватило. Без использования программ пользуюсь чаще, по сути он рядом и всегда наготове.

                                                            Со временем гнездо питания расшаталось, переключатель градусов иногда работает нечетко (доигрался, блин, в динамические игры) и яркость индикатора заметно уменьшилась. Может быть кто-то знает несложный способ её увеличения?

                                                            Огромное спасибо за статью. Не знал, что калькулятор многопроцессорный, все как у взрослых. Хороший аппарат, и расчеты ускорял, и на занятиях играть позволял. На батарейки часть стипендии уходила, и купить их было можно не всегда, но без питания он никогда не оставался.
                                                              +4
                                                              Блок расширения памяти никому не нужен к МК-52? Новый, в работе не был. :)
                                                                +3
                                                                Нужен, конечно!
                                                                  +2
                                                                  Пока не нашел, где лежит. Но есть точно.
                                                                  Пока нашел сам калькулятор. Новый, в упаковке. С инструкцией, схемой и гарантией.image
                                                                    +2
                                                                    Ай, красота какая!
                                                                      +1
                                                                      Хм, у моего коробка была рыжая
                                                                        0
                                                                        Эта была когда-то белой.
                                                                  +8

                                                                  В средних классах школы родители мне подарили книжку "Папа, мама, я и микрокалькулятор", которую я буквально до дыр зачитал. После программирования на калькуляторе, все компьютерные языки программирования уже казались лёгкой игрой.

                                                                    +3
                                                                    Помню, поступал в университет, и я притащил на экзамен по математике МК-61, с калькуляторами можно было приходить, но экзаменаторы, похоже, не были в курсе о программируемых устройствах.
                                                                    Мне нужно было сдать успешно только математику, на остальные предметы можно было не тратить время. В общем, я на МК-61 тупо писал микропрограммки для проверки всех вариаций ответов (делал это очень быстро, умел хорошо программить на МК-61) и сдал на 100%.
                                                                      +12
                                                                      и даже не русифицированного языка BASIC
                                                                      К большому счастью, не русифицированного.
                                                                        –2
                                                                        Почему же к счастью?
                                                                        +6

                                                                        Автор немного лукавит, что "… до персональных ПК было 2 десятилетия" :)
                                                                        У меня в 1986 был волне себе Синклер с довольно примлемой графикой и производительностью.
                                                                        Ну и 32 килобайта оперативки это не 16 регистров и 96 адресуемых ячеек.


                                                                        У этого калькулятора, у меня был МК-54, было три плюса:
                                                                        Размер, собственный монитор и энергонезависимая память.


                                                                        "Морской бой" на нем написал специально, чтоб "уесть" преподавателя в "Дворце пионеров", который утверждал, что это не возможно, так как не хватит памяти для описания двух полей 10х10, но не принимал во внимание, что регистры там здоровенные и состояние полей можно хранить в них.
                                                                        :)))


                                                                        Но, так то кодил конечно на Синклере.

                                                                          0
                                                                          Ну я и не отрицаю, что у некоторых товарищей такое добро встречалось, но чтоб говорить о массовости… Ещё в середине 2000-х ПК рассматривался скорее либо как необходимый рабочий инструмент, либо как элемент роскоши, нежели как неотъемлемый атрибут комфортной жизни.
                                                                            +1

                                                                            Самодельные Синклеры, на аналоге Z80 производства ГДР, с 16кБ ПЗУ + 32 кБ ОЗУ, были тогда у всех желающих.
                                                                            (я, тогда школьник из небогатой семьи, просто попросил маму купить мне Синклер и через пару дней два молодых паренька уже подключали его к советскому телевизору, изрядно при этом помучавшись)
                                                                            Существовала целая подпольная индустрия по их производству на предприятиях ВПК из ворованных компонентов.
                                                                            Жлобством и атрибутом "хорошей жизни" были Атари с фирменной периферией :)


                                                                            Так что дефицитом они не были.
                                                                            Другое дело, что большинство совершенно не представляло что с ними делать ...

                                                                              +7
                                                                              были тогда у всех желающих.
                                                                              В 1986-то году? В начале девяностых уже более-менее. Но про всех желающих вы тоже загнули, конечно. Желающих-то было много, да вот позволить его себе могли немногие.
                                                                              Да, ОЗУ там было не 32, а 48К.
                                                                                +1

                                                                                В начале 90-х в Беларуси (тогда БССР) вовсю начали продаваться IBM PC-совместимые МК-88. Это был мой первый персональный компьютер. После наращивания памяти я на нём лабал курсовые в Turbo Pascal 5.

                                                                                  0

                                                                                  Вы путаете, начале 90-х уже на i8086 все сидели, если что.
                                                                                  У мажоров были i80286.
                                                                                  А, топовые 386DX-40 я у нефтяников тогда видел. Они стояли 10-15к зеленых.
                                                                                  У меня, кстати, тогда был 386SX-16 с мегабайтом памяти :)
                                                                                  С 1995 года уже Пентиумы пошли ...


                                                                                  Про память на Синклерах и их клонах.
                                                                                  Модель действительно называлась ХХХХХ-48к, но 16кБ там было ПЗУ
                                                                                  То есть 48кБ там адресуемое пространство было.
                                                                                  Я писал тогда на нем довольно суровые проги типа определения наличия корреляции двух трехмерных пластов из данных, полученных при сесьморазведке и, поверьте мне, точно знаю сколько там памяти :)
                                                                                  Приходилось сначала вводить данные и записывать их на ленту, а потом вторая часть программы их читала и обрабатывала.
                                                                                  Вместе оба модуля в оперативку ну ни как не влезали.

                                                                                    0

                                                                                    В начале 90-х, точнее 92-95, в общаге ЛЭТИ Синклер вызывал зависть. Летом 1995-го я накопил на материнскую плату 286, на остальное копил ещё где-то с год, с монохромным VGA монитором.


                                                                                    Емнип, на Синклере адресуемая память была 64кб, 16 кб из них ПЗУ, 48 — озу, включая видеоОЗУ

                                                                                      0

                                                                                      В 1990 году, осенью, в ПГТУ можно было в любое время подойти и сесть за свободный 8086
                                                                                      Теоретически там надо было записываться, но свободные всегда были.
                                                                                      На них работали только студенты младших курсов, старшие курсы и аспиранты работали на 80286, куда остальных не пускали.
                                                                                      Мамку с i80386SX мне выдал сисадмин "Геофизики" как глючную в 1992-м. За просто так. Она висела на стене, на гвоздике. Он её снял и вручил мне :)


                                                                                      Пусть будет 48 ;)
                                                                                      Видимо я уже просто чего то не помню ....

                                                                                        0

                                                                                        Я про личные, поработать можно было в самом институте.

                                                                                          0
                                                                                          В нашем ЛИАПе студентам в 1990-91 можно было поработать и на AT 286 (до этого в 1989 нас, школьников, сажали за ДВК-2). Но несколько часов в неделю вовсе не означают, что компьютеры были доступны для личного пользования. БК-шка стоила как 6 программируемых калькуляторов и несколько средних месячных зарплат, сборный «Синклер» из рассыпухи на радиорынке — не сильно дешевле. Ситуация (в Питере) изменилась только к середине 1990-х. В провинции, думаю, еще лет пять надо добавить.
                                                                                            +1
                                                                                            Это то же, что прийти в 70х в машзал по записи на свой квант времени. Машинное время есть, машины у тебя нет :)
                                                                                            С личными все было иначе в массе. У нас, помню, появился 286 с EGAшкой в 1994 году, который был (б/ушный) платой отцу за разработку пакета АИС для какой-то торговой фирмы, т.е. недешевая игрушка. У всех моих тогдашних друзей-одноклассников были от силы Денди, персоналка была только у меня. На следующий шаг — 80486 обновились в 1995, на 686 (и тот Cyrix) в 1998.
                                                                                      0

                                                                                      Не у всех желающих. Мне купили Микрошу за 700 рублей, а Синклер стоил 1500 емнип.

                                                                                    +4
                                                                                    Вы бы фразу полностью прочитали, а? До массового распространения персональных компьютеров оставалось ждать пару десятилетий.

                                                                                    У меня в 1986 был волне себе Синклер с довольно примлемой графикой и производительностью.
                                                                                    То, что конкретно у вас он был — не означало, что они достигли стадии «массового распространения».

                                                                                    Мои родители рассказывали, что ещё в 90е народ «подмазывался» к работникам бухгалтерии, чтобы они пустили на слудебной техники какие-то интегралы посчитать.

                                                                                    Так что «массовое распространение» — это уже, скорее, XXI век.
                                                                                      +1

                                                                                      Хмммм…
                                                                                      Вероятно в разных местах было по разному, так как в том городе, на Урале, где я тогда жил, года с 1992 компы стояли даже у секретарш.
                                                                                      Вероятно и Синклеры в 80-х у нас были доступны в виду наличия в городе нескольких крупных оборонных заводов выпускавших военную электронику и микроэлектронику.
                                                                                      Там их не легально собственно и собирали.

                                                                                        0
                                                                                        Скорее всего. Вот тут есть чудесная табличка. Рынок персоналок с 1975го года. Там видно, что C64 и, прости господи, Apple II — выпускались до 1993го года. А Amstrad PCW аж до 1995го (но это европейская машинка, так что в ту табличку не попала).

                                                                                        И то, что компы попадали к секретаршам — вовсе не обозначает, что они были так уж сильно распространены. В том же, вами упомянутом, 1992м их было выпущено 20 миллионов, а в 2004м — 132 миллиона.

                                                                                        Согласитесь — несколько разные цифры. Население Земли в 6 раз за 10 лет точно не увеличилось!
                                                                                          +3
                                                                                          Вероятно и Синклеры в 80-х у нас были доступны в виду наличия в городе нескольких крупных оборонных заводов выпускавших военную электронику и микроэлектронику.
                                                                                          А, ну с этого и надо было начинать. У меня отец примерно в то же время работал на мясокомбинате, так мясопродукты у меня вообще были бесплатные и в достатке всегда.
                                                                                      +3
                                                                                      Спасибо, поностальгировал :-) Начинал еще на Б3-21, который принесли в кружок информатики примерно в 1985 году. Потом родители купили МК-61, потом МК-52. В отсутствии постоянного доступа к ПК учился программировать на МК-61, даже пытались заменить школьные уроки безмашинной информатикой изучением калькуляторов, которых под моим влиянием купили еще человек 6 или 8, но учительница быстро прикрыла инициативу, т.к. почувствовала свою ненужность. Переписал с Бейсика на МК-61 игру-эмулятор распространения вируса (актуально :-)) и посылал ее в «Технику-молодежи», но они так и не собрались опубликовать — пока переписывались, рубрика закрылась.

                                                                                      Оба калькулятора раздал/сменял друзьям/родственникам, потом МК-52 ко мне все-таки вернулся, но видимо не мой экземпляр, уже не рабочий. Стоит-пылится на полке.

                                                                                      Есть еще абсолютно точный эмулятор для android — play.google.com/store/apps/details?id=com.cax.pmk.ext&hl=ru. Эмулирует все, в том числе всю еггогологию, описанную в свое время в «Технике-Молодежи».
                                                                                        0

                                                                                        Да, жаль, что не успели опубликовать, с удовольствием бы оценил игру.
                                                                                        А чем Вас JS-вариант эмулятора не устраивает? Тоже ведь не симулятор, к тому же и Android не нужен, только браузер.

                                                                                          0

                                                                                          Программировать в эмуляторе я уже не буду, а в телефоне часто просто использую для расчетов, когда рядом нет компа — совмещаю приятно с полезным.

                                                                                            0
                                                                                            В JS-варианте удобнее разрабатывать программы. Android-версию удобно использовать, например, в каких-нибудь поездках, когда под рукой нет ноутбука с больши экраном. Я понемногу добавляю в Android-версию всякие улучшения для программирования, но дело идет очень медленно.
                                                                                            0

                                                                                            Спасибо за ссылку. Почти как в детство вернулся

                                                                                              0
                                                                                              Есть еще абсолютно точный эмулятор для android

                                                                                              Потому что он использует все тот же код от Феликса Лазарева, только в варианте Java :)
                                                                                              +1
                                                                                              А еще их разгонять можно было. Выпаивали резистор в тактовом генераторе и заменяли на меньший. Правда не со всеми экземплярами проходило. У меня МК-61 такого насилия не выдержал, а у друга БЗ-34 работал на 10% быстрее!
                                                                                                +3

                                                                                                Уважаемый автор, я недавно где-то в интернете наткнулся на достаточно подробный разбор архитектуры МК-61. Там много чего объяснялось — и длинная и короткая побочная ветвь, и Тьма, и много чего ещё — виной всему, насколько я помню, были особенности реализации кольцевого буфера, из которого все три процессора брали данные. Попробую поискать ссылочку, но не обещаю.


                                                                                                P.S. Вроде оно.

                                                                                                  +1
                                                                                                  Спасибо, действительно, статья Сергея Фролова подробно раскрывает эту тему, ознакомился с удовольствием, особенно про работу системной магистрали интересно. Если интересуетесь, можете скачать книгу «Устройство и пользование» (добавил ссылку в статью), про которую я писал, там вообще всё вдоль и поперёк расписано, но это, конечно, материал на любителя или для разработчиков, связанных с темой ПМК.
                                                                                                  +5
                                                                                                  А ещё помню он не любил отсоединение БП т.к. разъём БП уже отсоединился (пропало внешнее питание), а батарейка ещё не присоединилась. Получалось если работаешь с внешним питанием — ты привязан к розетке, неважно что в калькуляторе установлены батарейки. Конечно могло и повезти, если выдернуть разъём очеь быстро, но это значит рисковать набитой программой.
                                                                                                  Решалось впаиванием диода. После этого получался перемещаемый девайс )))

                                                                                                  Что касается легендарного ЕГГОГ — а что мешало разработчикам выводить «Еггог»? Для людей, не знающих тогда английский (как я), смысл бы всё-равно не поменялся, зато выглядело бы не так нелепо.
                                                                                                    0
                                                                                                    Проблема с разъемом легко решалась напильником ) Чуть наискось сточить со стороны пластинки-контакта. Помнится этот хинт даже описывался в «Маленьких Хитростях» журнала «Наука и Жизнь»
                                                                                                      +1

                                                                                                      Так это и был error, не?

                                                                                                        +1
                                                                                                        Нет, было именно заглавными буквами
                                                                                                        ru.wikipedia.org/wiki/%D0%95%D0%B3%D0%B3%D0%BE%D0%B3%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F

                                                                                                        Из-за особенностей индикатора они похожи на upperscript… Хотя увеличил надпись и да, согласен, видно что в нижнем регистре получились бы совсем мелкие «г». Т.е. пресловутый «ЕГГОГ» это просто из прикола или незнания английского.

                                                                                                        Помню у нас была преподаватель информатики, немка, она сразу предупредила «не смейтесь над названиями операторов». И вот пишет на фортране
                                                                                                        WRITE и читает — «врите»
                                                                                                        READ — «реад»
                                                                                                        LINE — «лине»

                                                                                                        Кто учил немецкий тем пофиг, а «англичане» кривили морды ))
                                                                                                          +1
                                                                                                          Мне тогда это слово тоже непонятно было.
                                                                                                          Но сейчас, глядя на тот индикатор… это единственный вариант вывести error.
                                                                                                          R заглавная была бы неотличима от A
                                                                                                            0
                                                                                                            Но можно было бы сделать маленькую «r» и «o» — и было бы красивее. Но там каждый транзистор, в те времена, экономили — так что хорошо, что хоть что-то осмысленное выводили…
                                                                                                        +1
                                                                                                        А какая вообще разница, маленькие они или большие? Для простого человека это выглядит одинаково бессмысленно и нелепо: image

                                                                                                        При этом не стоит забывать, что шестнадцатеричные цифры в МК-61 иногда тоже используются, обозначаясь символами "-", «L», «C», «Г», «E», " ".
                                                                                                        «A» используется как знак минуса, «F» — как пустой разряд.
                                                                                                          0
                                                                                                          RusCalc
                                                                                                          При этом не стоит забывать, что шестнадцатеричные цифры в МК-61 иногда тоже используются, обозначаясь символами "-", «L», «C», «Г», «E», " ".

                                                                                                          Мдэ, про это я даже уже не помню. Сумрачный советский гений…
                                                                                                          Скачал с маркета эмулятор МК-61, посмотрел, послезился, удалил. Droid48 наше всё.
                                                                                                            0
                                                                                                            Droid48 наше всё

                                                                                                            Ну как бы HP48 и сам по себе мощнее и продвинутее МК-61. В конце 1980гг., начале 1990гг. у меня была книжка, в которой помимо МК-61 описывались современные зарубежные калькуляторы. Один был какой-то TI, а второй — вроде бы HP41 или HP42. Я читал и с тоской думал, что вряд ли мне доведется когда-либо иметь дело с такими девайсами.
                                                                                                            +1
                                                                                                            При этом не стоит забывать, что шестнадцатеричные цифры в МК-61 иногда тоже используются
                                                                                                            Ну дык на Б3-34 уже был ЕГГОГ, а никаких шестрандатеричных цифр ещё не было… оффициально, по крайней мере.
                                                                                                              +1
                                                                                                              Ну не совсем, коды команд-то всё равно с ихней помощью выводились, те же косвенные переходы; да и основное назначение кодов A и F — минус и пробел — одинаково что в Б3-34, что в МК-61.
                                                                                                              +1
                                                                                                              Интересно, почему не A, b, C, d, E, F? Семисегментного индикатора как раз хватает, и с цифрами нет путаницы.
                                                                                                                +1
                                                                                                                В этих калькуляторах пустое место кодируется кодом F, буква Г нужна для ЕГГОГа. В итоге красиво b и d все равно не описать.
                                                                                                                  0
                                                                                                                  Я бы не сказал, что этот пресловутый ЕГГОГ вообще кому-то был нужен. Можно было, например, просто индикатор прочерками забить. А вот минус и пустое место — это да. Так-то семисегментного знакоместа действительно хватает для шестнадцатеричных символов.
                                                                                                            +3

                                                                                                            Спасибо, взностальгнул.

                                                                                                              –6
                                                                                                              без съемной/переключаемой энергонезависимой памяти — бессмысленный хлам с момента появления
                                                                                                              вместо того чтобы довести до массового выпуска компактный вариант чего-то типа Радио-86РК со встроенным ЖК экраном + ВЧ-модулятором для ТВ, и максимально его удешевить, промышленность тратила ресурсы на копирование мертворожденной фигни
                                                                                                                +11
                                                                                                                В МК-52 была энергонезависимая память. Бессмысленный хлам? На Западе тоже программируемые микрокалькуляторы выпускали. Т.е. во всем мире выпускали. И тут появляется Гений, заявляющий что все идиоты и это бессмысленный хлам. Копирование? Это в общем-то своя разработка, возможно с некоторыми заимствованиями. Во всяком случае элементная база 100% советская.
                                                                                                                  –3
                                                                                                                  www.leningrad.su/museum/show_calc.php?n=136

                                                                                                                  и сейчас выпускаются, видимо хватает Гениев которым купить за 2000 руб. телефон с Андроид или за 3-5 тыс китайский 5" планшет, и поставить на него 5 калькуляторов и Maxima не позволяет гениальность советского Инженера

                                                                                                                  ЗЫ: забыл совсем про Гениальное советское ОЗУ РУ3/РУ5, вопрос снимается — реализовать портативный ПК было технически невозможно без комплектного РИТЭГа в чемодане
                                                                                                                    +2
                                                                                                                    И что? К серии Б3… МК52/61 это отношения не имеет.
                                                                                                                  0

                                                                                                                  Полностью с Вами согласен — как владелец в те годы и МК-52 и Синклер, на 100% подтверждаю, калькулятор был так, "чисто поржать" даже с энергонезависимыми аж 96 ячейками.
                                                                                                                  Собственно и Радио-86РК был не пределом мечтаний при наличии аналогов процессора Z80 (который, если что, с 1976 года выпускается).
                                                                                                                  В СССР вовсю корпусировали кристалы выпущенные в Тайване или ГДР и недостатка в них не было. Недостаток был "в головах" у маразматиков.
                                                                                                                  По сравнению с шестичиповым набором Z80, набор КР580 вещь довольно таки убогая, капризная и не надежная.

                                                                                                                    +1
                                                                                                                    А сколько РКшка жрала по питанию с отключенным ВГ75?
                                                                                                                    Хватило бы мотоаккумулятора или батареи для шахтерского фонаря для длительной работы?
                                                                                                                    0

                                                                                                                    Что-то вроде ЮТ-88?

                                                                                                                    0
                                                                                                                    >>Сам микрокод, прошитый в ПЗУ калькулятора, предстаёт объектом благоговейного >>созерцания, ибо никто не может в полной мере постичь принципы его работы

                                                                                                                    Неужели все так плохо? Разбор микрокода при реверсе требует действительно много времени, но это отнюдь не безнадежно. Скорее всего, поставленные цели были достигнуты и уже не было особого смысла тратить время на полный разбор.

                                                                                                                    У меня хобби по разбору микрокода 1801ВМ1 заняло около года. Самое сложное было правильно определить формат слова, там было много полей которые несут двойную или тройную функциональность. Для МК-61 это вроде все известно, или я что-то упустил?
                                                                                                                    В ВМ1 слово кодировалось микроадресом и кодом инструкции PDP-11 и все это напрямую генерировалось ПЛМ, там просто не было никакого явного секвенсора с микрокомандами, пришлось писать специальный анализатор переходов и состояний. В МК61 стоит ROM и есть секвенсор, такой код намного проще разбирать — сейчас разбираю микрокод М4 на Am2900, там секвенсор + ROM — ушло всего две недели вечеров на разбор.

                                                                                                                    Так что — очень вероятно что МК-61 «добивать» просто не понадобилось, планка взята — и хорошо, а не потому что это «колесо Сансары».
                                                                                                                      0
                                                                                                                      Для МК-61 это вроде все известно, или я что-то упустил?
                                                                                                                      Зависит от определения слова «всё».

                                                                                                                      Известно достаточно, чтобы выполнить этот микрокод на эмуляторе (не симулировать команды из инструкций, а именно микрокод выполнить). Но анализом его самого, вроде как, никто не занимался.

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

                                                                                                                      Тут беда в том, что ответ на вопрос «как» — таким образом получить можно, а вот «зачем» — увы, нельзя.

                                                                                                                      А он, зачастую, самый интересный…
                                                                                                                        0
                                                                                                                        Теоретически эмулятор можно изменить не в выполнение микрокода, а в генерацию мнемоники исполняемого микрокода для каждой команды Б3-34. Такой декомпилятор можно даже дополнить «оптимизатором» — убирая мнемонику той части микрокода, которая не используется последующим кодом. Это может помочь в разработке полного алгоритма работы ПМК, включая еггогологию.

                                                                                                                        Но по этой дороге пока никто не ходил. По крайней мере опубликованного результата нету.

                                                                                                                        > правильно определить формат слова, там было много полей которые несут двойную или тройную функциональность. Для МК-61 это вроде все известно, или я что-то упустил?

                                                                                                                        Книга Трохименко — Библия исследователей ПМК. Там подробно (побитно) разобран формат микрокоманды и даже есть карта кольца памяти. Дополнить её исследованиями Феликса, цены ей не будет.
                                                                                                                          0

                                                                                                                          Ну так вот похожий инструмент. Можно расписать действие каждой команды, пробовали такое делать. Много ли это дало?
                                                                                                                          Вот, например, разбор команды №30 ИК1302, которая принимает участие в выводе сообщения "ЕГГОГ":


                                                                                                                          S = R[0];
                                                                                                                          ОТ сч = 0 ДО 30 ПО 3:
                                                                                                                              R[сч] = R[сч + 3];
                                                                                                                          пам = R[33]; R[33] = S; S = пам;
                                                                                                                          ЕСЛИ S1 == 0xF:
                                                                                                                              L = 1; S1 = 0;
                                                                                                                          ИНАЧЕ:
                                                                                                                              L = 0; S1 = S1 + 1;
                                                                                                                          R[36] += L;
                                                                                                                          L = 0;
                                                                                                                          S = R[41];
                                                                                                                            +1
                                                                                                                            Для выкладывания таких наработок и совместной работы по декомпиляции и пониманию микрокода можно использовать ПМК Вики. Я там уже начал собирать по крупицам имеющуюся информацию:
                                                                                                                            pmk.the-hacker.ru/ИК13

                                                                                                                            В моих планах перенести, как минимум, микрокод из книги Трохименко. Потом дополнить кодом из эмуляторов. Но дел, конечно, тут больше, чем на одного человека. Буду рад, если вы поддержите.

                                                                                                                            Там же собрал немного информации по еггогологии, тоже можно дополнять:
                                                                                                                            pmk.the-hacker.ru/Электронный_океан
                                                                                                                              0
                                                                                                                              Благодарю за ссылку. Да, хочу заняться этим более основательно уже не первый год, да только время выделить проблематично.

                                                                                                                              Кстати, насколько помню, в книге есть некоторые неточности, которые устранили только при восстановлении кода и разработке эмуляторов. Например, микроприказ №6, пихающий в альфу сумматора константу 4, у Трохименка напрочь отсутствует (с. 111), в итоге микрокоманда у него 27-битная.
                                                                                                                                0
                                                                                                                                Спасибо, я это учёл. Пишу про 28-битные микрокоманды, как у вас. К побитовому описанию их, правда, пока не приступил. Коплю информацию и собираюсь с духом, но вы можете меня опередить на Вики. Буду только рад, работы там на всех хватит.
                                                                                                                        +1
                                                                                                                        Для разбора микрокода МК-52 требуется очень сильный интеллект. Сам микрокод есть, что делает на уровне регистров — описано. А объяснить появление всех этих недокументированных функций вроде «тьмы» и других — пока не нашелся такой ум.
                                                                                                                          0

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

                                                                                                                            +1
                                                                                                                            Обычная «Тьма» — это обычно число с порядком 500-599 (есть другие диапазоны), от которого почему-то сносит крышу процессору, и он зависает. В модуле FRS-BRP по ссылке выше можно манипулировать с шиной. Если восстановить порядок и убрать оттуда пятерку, то проц развисает. А почему это зависание происходит, равно как почему происходят другие глюки — никто еще не разобрался.
                                                                                                                            0
                                                                                                                            А логику калькулятора полностью отреверсили? Эмулятор на основании чего написан? Реальной схемы или по книге + восстановленное ПЗУ? На верилоге аутентичная модель есть?
                                                                                                                              +1
                                                                                                                              Восстановили прошивку, по книге восстановили логику процессора и сделали точный эмулятор. Это не на уровне вентилей.
                                                                                                                              А с самим алгоритмом пока не прониклись.
                                                                                                                          +6
                                                                                                                          У меня с Б3-34 или МК-54 детское воспоминание. Во всём провинциальном городе, наверное, единицы могли выкинуть деньги на подобное дорогое и бессмысленное развлечение. Денег в семье на самое необходимое не хватало, какой там калькулятор!
                                                                                                                          Я, как и многие присутствующие, от корки до корки штудировал Юный Техник, Технику Молодёжи и Науку и Жизнь. Смотрю я на все эти программы, слюни текут… Я уже умею программировать, я уже знаю все тонкости, RPN отскакивает от зубов — а поработать не на чем. И вдруг пришла мысль — программировать уже умею, но совершенно не знаю клавиатуру, а ведь набирать надо быстро. Сказано — сделано: руки у меня росли откуда надо, я сделал себе модель калькулятора из дерева в натуральную величину. Всё чинно: кнопки вырезаны из толстого плотного картона острой бритвой и приклеены на свои места, экран тоже, всё раскрашено акварелью в соответствии с оригиналом, подписи чернилами.
                                                                                                                          Сижу и набиваю программы, чтобы запомнить расположение кнопок. Сначала медленно, потом быстрее, потом на время… Брат и сестра ржут надо мной ))) Наверное действительно вглядело нелепо — сидит 15-летний пацан и стучит по деревянному калькулятору.

                                                                                                                          Много позже я услышал присказку «тяжёлое детство, деревянные игрушки». Для кого-то это только оборот речи.

                                                                                                                          Спасибо что напомнили.
                                                                                                                            +1

                                                                                                                            Привет брату по несчастью!
                                                                                                                            МК-61 у меня был, но хотелось МК-52.
                                                                                                                            Его я вырезал и склеил из бумаги, кнопки были на поролоновом ходу.

                                                                                                                              0

                                                                                                                              Я просто по странице из ТМ "набирал"

                                                                                                                              0
                                                                                                                              Я в то время нашёл книжку «Мама, папа, я и микрокалькулятор», очень помогла освоить МК-61 и 52, еще цикл статей в журналах: Техника молодежи, вроде, и Радио…
                                                                                                                                +2

                                                                                                                                На практике, кстати, несколько раз приходилась обратная бескобочная запись. Собеседования проходить. Несколько раз задачи давали написать простой калькулятор с ней. Фраза " мой первый ПК был МК-61, а, кажется, в 1991 я реализовал свой Forth-83 на i8080" делала тестовое ненужным.

                                                                                                                                  0
                                                                                                                                  О да, я тоже перебивал программы из журналов, и писал свои. Недавно тетрадку выкинул. Из того, что помню — писал игру прохождение лабиринта.
                                                                                                                                    0
                                                                                                                                    [
                                                                                                                                        this.S, this.S1, this.L, this.T, this.П,
                                                                                                                                        this.такт, this.команда, this.АСП,
                                                                                                                                        this.вход, this.выход,
                                                                                                                                        this.клав_x, this.клав_y
                                                                                                                                    ] = new Array(12).fill(0);
                                                                                                                                    

                                                                                                                                    зачем такой вычурный способ инициализации? чем плох классический
                                                                                                                                    this.S = this.S1 = this.L = this.T = this.П = 0

                                                                                                                                    или просто присвоить 0 каждому свойству отдельно?
                                                                                                                                      0
                                                                                                                                      Разницы, в принципе, никакой, сброс производится только при загрузке эмулятора и выключении калькулятора. Ну пусть будет цепь присваиваний, поменял в тексте.
                                                                                                                                      +1
                                                                                                                                      Спасибо. Пронастольгировал) Очень любил свой МК-61. Так удобно было. После него классические калькуляторы казались такими убогими! Сколько интересных игр было)) Сидишь вводишь прогу и потом с нетерпением ждешь результат, глядя на мерцание экрана. Как курсачи быстро считались. Иногда приходилось подгонять оптимальный результат в зависимости вводных. ЕГГОГ — это эпично)
                                                                                                                                        +1
                                                                                                                                        Прекрасное изложение материала!
                                                                                                                                        Я тоже как-то писал на Хабре статью о своем опыте программирования на МК-61.
                                                                                                                                          +1

                                                                                                                                          Спасибо, было интересно ознакомиться с Вашим опытом.
                                                                                                                                          Прокомментирую некоторые моменты, надеюсь, Вы не против.


                                                                                                                                          Также у калькулятора было 15 регистров для хранения данных и 105 байт оперативной памяти.

                                                                                                                                          Всё-таки оперативной памятью у него является всё, что не хранится в ПЗУ (ну за исключением специальных регистров процессора). Т. е. формально у МК-61 есть 441 байт оперативки. Если же мы понимаем под оперативной памятью только то, чем может оперировать пользовательская программа, то ведь МК-61 не следует в полной мере принципам архитектуры Неймана-Лебедева, по которым программы и данные логически представлены в одной памяти, а оперативки у него тогда всего 10 байтов (регистры + стек).


                                                                                                                                          Очевидно, что научить ПМК играть в шашки, а тем более в шахматы невозможно.

                                                                                                                                          Очень даже возможно. Только это мало кому придёт в голову, потому что понадобится далеко не один экземпляр МК-61 и утомительный процесс с переброской данных между ними. Вот, например, программа, выполняющая шифрование по ГОСТ 28147-89 при помощи двух калькуляторов.


                                                                                                                                          Клуб любителей игровых программ (КЛИП) своеобразная социальная сеть

                                                                                                                                          Я бы очень удивился, узнав, что, поучаствовав когда-то в переписке по интересам, вдруг стал пользователем "социальных сетей".


                                                                                                                                          существует продолжение серии: МК-152/162

                                                                                                                                          К серии советских калькуляторов они имеют очень опосредованное отношение.

                                                                                                                                            +1
                                                                                                                                            Всё-таки оперативной памятью у него является всё, что не хранится в ПЗУ

                                                                                                                                            Да, Вы правы. Формально более правильно было бы написать: «Калькулятор предоставляет пользователю память для 105 шагов программы, 15 регистров общего назначения, 4 стековых и один предыдущего результата.»

                                                                                                                                            потому что понадобится далеко не один экземпляр МК-61

                                                                                                                                            Я когда-то читал о чем-то типа оверлеев на МК-52: в энергонезависимой памяти хранятся разные фрагменты очень большой программы, которые при необходимости подгружаются в программную. Но здесь я писал именно про вариант использования: один раз ввести программу и играть, а не заниматься перебрасыванием данных с одного калькулятора на другой :)

                                                                                                                                            поучаствовав когда-то в переписке по интересам, вдруг стал пользователем «социальных сетей»

                                                                                                                                            Но ведь социальной сетью можно назвать любые технические средства, позволяющие людям общаться и обмениваться информацией. Читал также мнение, что первой социальной сетью можно назвать европейскую почту XVII-XIX вв., позволявшую европейским ученым вести активную переписку и общение.

                                                                                                                                            МК-152/162

                                                                                                                                            Я, честно говоря, так и не понял смысл разработки этих устройств.
                                                                                                                                              0
                                                                                                                                              Но ведь социальной сетью можно назвать любые технические средства, позволяющие людям общаться и обмениваться информацией.

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


                                                                                                                                              Я, честно говоря, так и не понял смысл разработки этих устройств.

                                                                                                                                              Я тоже. Судя по всему, разработчики хотели выехать именно на волне "ностальгии", примазавшись к отечественной серии калькуляторов (не имея на это ровным счётом никаких оснований), но это даже мне, без всяких маркетинговых исследований, кажется абсурдом, особенно учитывая какие-то невменяемые цены, завышенные на порядки в сравнении со стоимостью комплектующих. Разработчики ещё что-то писали про использование этих поделок как управляющих/контролирующих устройств на производстве или что-то в этом духе, но это такой же бред — они там и даром никому не сдались. А может, рекламный ход такой: хоть кто-то теперь, пусть краем уха, но услышал, что в Новосибирске существует такая фирма.

                                                                                                                                                0
                                                                                                                                                где вершинами являются члены общества, а рёбрами — какого-либо рода социальные связи между ними

                                                                                                                                                НУ вот, КЛИП же был примером такого графа. Как и, например, сообщество игроков в шахматы по переписке.

                                                                                                                                                кажется абсурдом

                                                                                                                                                Аналогично.
                                                                                                                                              0
                                                                                                                                              Как Вы получили 441 байт оперативки?
                                                                                                                                                0

                                                                                                                                                Из известных цифр получается что 105 байт памяти программы и 21 регистр по 16 байт :)

                                                                                                                                                  0
                                                                                                                                                  Один регистр в кольце занимает 7 байт
                                                                                                                                                  0

                                                                                                                                                  Ну так регистры M, R и ST по 42 слова, две памяти по 252, итого 42 * 3 * 3 + 252 * 2 = 882 слова (т. е. всё то, что выведено на этой странице). А раз считаем 8-битными байтами, то делим на 2. Всякие ЛТП и S/S1 по очевидным причинам здесь не учитываем. Разумеется, сам термин "оперативная память" сюда за уши и другие концы тела притянут, поскольку это по сути внутренние регистры процессоров, а доступ к памяти последовательный, но функционально — оно самое.

                                                                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                                            Самое читаемое