МК-61 и с чем его едят
Раз уж пошла такая пьянка, попробую рассказать, чем он интересен.
История
В 1970-е годы в СССР были разработаны профессиональный программируемый калькулятор «Электроника-70» и более простой «Электроника Б3-21» (после Б идёт цифра три, а не буква «зю»!). Если 70 — это совсем другое устройство, то в 21-м уже видны отдельные черты нашего калькулятора.
В 1980 году вышел калькулятор второго поколения — «Электроника Б3-34». Девайс был тяжёлый и основательный, и впоследствии сделали более компактный МК-54, настольный МК-56, демонстрационный «Программист» (в нашей школе он был, но никто не видел его работающим). Все три полностью совместимы (только ранние Б3-34 не работали с углами в градах).
В третьем поколении два калькулятора. В МК-61 (1984) сильно расширили систему команд при сохранении основной совместимости. МК-52 (1985) был совместим и заодно хранил программы во внутренней энергонезависимой памяти (в машинах от Б3-34 до МК-61 при выключении приходилось перенабирать программу и прогонять тесты).
Эти калькуляторы форсировались советскими книгами и журналами. Калькулятор стоил 60–80 рублей при зарплате от 100 до 200, и был самым доступным программируемым вычислительным средством. На нём писали расчётные программы и даже небольшие игры — фанаты чертили на координатной сетке траектории космических кораблей, проходили лабиринты (благо шестнадцатеричная логика МК-61 позволяла запомнить в одной ячейке до 28 битов). Был даже мат конём и слоном (с небольшими ограничениями).
Вот рандомная программа из «Техники — молодёжи» (сложно было найти скан одновременно читаемый и с полным описанием).
Слово ERROR (ошибка) отображалось как ЕГГОГ, и поиск недокументированных возможностей калькулятора получил прозвище «еггогология». Основными рупорами еггогологии были журналы «Техника — молодёжи» и «Наука и жизнь».
Более поздние калькуляторы такой славы не снискали. А слава семейства МК продолжалась до середины 90-х, благо они были неплохим устройством для начального обучения программированию. Ноутбук обычно на экзамен брать нельзя (да и дороги были тогда ноутбуки), а МК — можно. А если прийти пораньше и забить программу какого-то ценного вычисления — вообще песня. Из моего опыта — на экзамене обратил матрицу 3×3, правда, это заняло всю память МК.
В 2000-е годы фирма «Семико» для собственных нужд создала семейство вычислительных машин, частично совместимых с МК-61.
Сейчас на Google Play много точных эмуляторов, и можно поиграться с ними (искать по ключевому слову «МК-61»). Обратная польская запись очень удобна для сложных расчётов, и я держу эмулятор именно для этого (на эмуляторе до этого момента ни разу не программировал).
Технические характеристики
Быстродействие: около 3 операций/с
Система команд: автокод с обратной польской записью, имитирующий нажатия клавиш
Шагов в программе: 98 (Б3-34), 105 (МК-61)
Рабочих регистров: 4 основных, 1 дополнительный
Ячеек памяти: 14 (Б3-34), 15 (МК-61)
Несмотря на распространение, калькуляторы обладали серьёзными недостатками.
• Очень недолго работали от батареек. Нельзя перейти с розетки на батарейку и наоборот.
• Точность трансцендентных операций не отвечала разрядности памяти: 2³=8,9999984.
• Вместо «0,5» выводило «5…−01», то есть 5·10⁻¹.
• Хлипкая конструкция МК-54 и МК-61. Особенно ломались кнопка включения, разъём блока питания.
• Не было долговременной памяти (кроме МК-52). Программу в сто шагов приходилось набивать с бумаги, потом прогонять тест.
• Крайне низкое быстродействие: результатов выполнения программы приходилось ждать минуту-две.
• У Б3-34 были крайне полезные недокументированные команды КИП↑/КП↑, не сохранённые в МК-61.
• Полезность некоторых команд, добавленных в МК-61, была спорной.
• Одна и та же клавиша в разных моделях называлась по-разному, и неопытный, увидевший программу для другого калькулятора, мог запутаться.
• Система команд такова, что дальнейшее расширение памяти было крайне затруднено.
Соответствие клавиш Б3-34 и МК-54 (61, 52)
↑ = В↑
XY = ↔
ИП = П→x
П = x→П
Обычно фанаты пишут программы в предельно сокращённом виде: используют некую смесь старых и новых обозначений (↑, ИП, П, но ↔), опускают клавиши F и K, где это не критично (не Fsin, а sin). Некоторые вместо Kx=0A пишут K=A, а вместо К{x} — {}.
Я даже видел МК-61, в котором клавиши П→x и x→П были заклеены лейкопластырем и подписаны ручкой: ИП и П.
Поскольку я пишу для самых начинающих, пишу в нотации МК-61 с небольшими сокращениями, помогающими ориентироваться в простыне кнопок: xП вместо x→П, и ↑ вместо В↑.
Начнём?
Самый первый вопрос про наши калькуляторы — а где кнопка «=»? Нет её, нет, всё устроено немного непривычно. Чтобы сложить 123+456, надо набрать…
123 В↑ 456 +
Клавиша В↑ (читается «ввод», в дальнейшем буду сокращать как ↑) служит только разделителем: если набрать 123 и 456 без неё, получим 123456. Так что если надо сложить 123+456−789+234=24, то нажатие ввода всего одно:
123 ↑ 456 + 789 − 234 +
Если хотим узнать окружность 13-метровой цирковой арены, также никаких разделителей не надо:
Fπ 13 ×, и получаем 40,84 м.
Сначала операнды (π и 13), потом операция (×). Такая конструкция называется «обратная польская запись». Обратная — потому что операция в конце, польская — в честь поляка Яна Лукасевича. Она позволяет проводить без скобок довольно сложные вычисления. Например, 2+12 будет на калькуляторе так…
2 ↑ 12 + (на индикаторе 14).
А если вместо 12 взять 3·4 (3 ↑ 4 ×), то получим вот такую запись для 2+3·4:
2 ↑ 3 ↑ 4 × +
Теперь понятно, почему программисты со стажем любят обратную польскую запись? Она лаконична и позволяет вести вычисления «по наитию»: хочешь добавить 20 — набирай «20+», хочешь добавить 30% — набирай «1.3×», хочешь вычислить какой-то коэффициент — бери и вычисляй, старый результат будет ждать тебя в рабочих регистрах… Обычные калькуляторы могут подсунуть свинью, если забудешь о каких-то тонкостях: например, «Обычный» из Windows 7 выполнит «2+3×4=» как (2+3)·4=20, а «Инженерный» — 2+(3·4)=14.
Насколько глубоко калькулятор может выполнять такие вложенные вычисления?
2+3·(4+5)=29 он выполнит (2 ↑ 3 ↑ 4 ↑ 5 + × +), а 2+3·(4+(5·6))=104 — уже нет (2 ↑ 3 ↑ 4 ↑ 5 ↑ 6 × + × +).
То есть память на подобные вычисления имеет глубину 4, и эти регистры зовутся X, Y, Z и T.
Ячейки памяти
Ничего особенного, только ячеек не одна, а 15. Для записи в память надо нажать две кнопки — сначала x→П, потом 5 (или какой-нибудь другой номер ячейки). Для извлечения — П→x, потом номер ячейки. Будем записывать эти команды как xП5 и Пx5. Если нажать xП, затем • (десятичную запятую), число запишется в ячейку A, и обозначать это будем как xПА (аналогично xПB, xПC, xПD, xПE).
Не забывайте, что клавиша ↑ действует как разделитель, и чтобы удвоить содержимое r7, её не надо: Пx7 2 ×.
Если у нас в регистры A, B и C загнаны коэффициенты квадратного уравнения (например, 1 xПA 1 /−/ xПB 6 /−/ xПC, то есть x²−x−6=0), можно его решить вот таким образом (на случай, когда D<0, чхаем).
ПxB Fx² ПxА ПxС × 4 × − F√ xПD (в регистре D корень из дискриминанта)
ПxB /−/ ПxD − ПxА 2 × xП0 ÷ (r0=2a, на экране первый корень (-b−d)/(2a)=−2)
ПxD ПxB − Пx0 ÷ (на экране второй корень (d−b)/r0=3)
Итак, мы выполнили довольно сложное вычисление, даже не обращаясь к бумаге!
Попробуем это запрограммировать
Маленький дисклеймер. Три кнопки калькулятора по-разному ведут себя, будучи введены в программу и будучи исполнены непосредственно.
• С/П — стоп/пуск. В программе — остановка, непосредственно — запуск программы.
• В/О — возврат/обнуление. В программе — выход из подпрограммы (аналог RETURN Бейсика), непосредственно — переход на адрес 00 (аналог БП 00, то есть GOTO 00).
• и ПП, но она нам в этой статье не нужна.
Переходим в режим программирования (В/О Fпрг), видим на индикаторе трёхместную ленту (пока пустую) и адрес 00. Когда мы вводим команды, адрес становится 01, 02, 03…, а лента заполняется кодами клавиш. И заодно замечаем, что шестнадцатеричные символы A, B, C, D, E выглядят как −, L, C, Г, E. Вот наша программа.
Адрес … Клавиши … Код
00 … ПxB … 6L
02 … ПxA … 6−
03 … ПxC … 6C
04 … × … 12
05 … 4 … 04
06 … × … 12
07 … − … 11
08 … F√ … 21
09 … xПD … 4Г
10 … ПxB … 6L
11 … − … 11
12 … ПxA … 6−
13 … 2 … 02
14 … × … 12
15 … xП0 … 40
16 … ÷ … 13
17 … ПxB … 6L
18 … /−/ … 0L
19 … ПxD … 6Г
20 … − … 11
21 … Пx0 … 60
22 … ÷ … 13
23 … С/П … 50
24 … БП … 51
25 … 00 … 00
Ошиблись и отпечатало не тот код? Возвращаем ленту назад (ШГ←), и вводим новую команду.
Некоторые экземпляры со временем начинают глючить и выбивать не то, что набрано клавишами, их тоже ловят по неверным кодам.
Возвращаемся в режим автоматической работы, возвращаем исполнение на нулевую команду (Fавт B/O).
Делаем тест (x²+1,5x−1=0): 1 xПA 1.5 xПB 1 /−/ xПC С/П — через 7 секунд на индикаторе −2 (меньший корень). Нажимаем ↔ и видим 5·10⁻¹=0,5 — больший корень.
Чем программа отличается от того, что мы набирали руками?
1. Программа возвращает не одно значение, а два. Есть несколько способов это сделать:
• держать цифры в регистрах X и Y;
• держать их в ячейках памяти;
• первым пуском вывести один корень, а вторым — второй.
Мы сделали первое, и сначала надо заполнить регистр Y (больший корень), потом X (меньший). Потому поменяли местами вычисление большего и меньшего корня.
2. После шага 9 и без того x=d, и этим мы сэкономили одну команду.
3. Программе надо остановиться, а после очередного запуска — вернуться в начало. Потому 90% программ заканчиваются кодом С/П БП 00.
Вот и всё, что я хотел сказать про МК-61. У этой программы есть один недостаток по части сервиса — если дискриминант окажется отрицательным, она вылетит с ЕГГОГ где-то в середине, и для восстановления работы придётся нажимать В/О. Можно так и оставить. А можно и решить — с ветвлением занимает шесть команд. Но это уже вне нашей обзорной статьи — так что счастливо!
IT минувших дней
1000 постов7.1K подписчиков
Правила сообщества
Запрещается добавлять новости о прошлогодних новинках, а также посты, не относящиеся к тематике "ретро в ИТ".
Желательно соблюдать правила приличия.