Пишу, по большей части, про историю, свою жизнь и немного про программирование.

«99 бутылок» на языке «Электроники МК-61»

«Электроника МК-61» с запущенной на нём программой

59. Язык калькулятора Электроника МК-61. «Электроника МК-61» — устройство из класса «программирумых калькуляторов». Были когда-то такие гаджеты, позволявшие со всеми ограничениями калькуляторов (небольшая клавиатура, типичный для калькулятора экран) писать программы.

В детстве такие калькуляторы я видел только на картинках в журнале «Наука и жизнь», а программы для них были каким-то любопытным закорючками, в которых не разобраться.

Вчера мне в руки попал настоящая «Электроника МК-61» (для передачи компьютерному музею) и я наконец-то на обеде и потом вечером разобрался в этих странных значках.

Так выглядят мои «99 бутылок…» на этом калькуляторе:

8112000 Х→П c 8 + ИНВ Х→П b Вх 10 ÷ [X] Х→П d 8 + ИНВ Х→П e В/О ПРГ
П→Х 0 1 0 ÷ [x] Х→П 1 Вх {x} 1 0 × Х→П 2
1 1 Х→П 8 1 2 Х→П 7 П→Х 2 ПП 34 Х→П a
1 4 Х→П 8 1 3 Х→П 7 П→Х 1 ПП 34 П→Х a
^ С/П
6 - /-/ x<0 45 9 + К П→Х 7 + ИНВ В/О
1 + К П→Х 7 + ИНВ К П→Х 8 ^ В/О

Поскольку у меня в блоге скорее всего отсутствуют любители работать каждый день с калькуляторами советских времён, то я не буду придерживаться принятой нотации с номерами — не думаю, что кто-то будет это набирать.

Вкратце о языке. Больше всего это похоже на крайне примитивный ассемблер с гипертрофированным математическим сопроцессором. Всё то же — переходы на адрес, одно- и двухбайтные инструкции с операндами, регистры с определёнными назначениями, сильно ограниченная память (105 команд), наличествует косвенная адресация и подпрограммы (стек вызовов размером в пять вхождений).

До запуска программы нужно в регистр «0» поместить стартовое значение (например, «99», «Х→П», «0») и запустить программу «В/О», «С/П».

Это я сделал из-за того, что цикла в программе нет — из-за мельтешения разрядов совершенно не понять, что происходит. Хотя добавить его очень просто — до команды «С/П» надо вставить одну проверку с переходом и сдвинуть адреса.

Поэтому на вход подаётся нужное число, например, «42», а на выходе мы можем полюбоваться фразой «BEEr 42». Не весть что, но что вы хотели от калькулятора? Кстати, выводимая фраза — не строка (спойлер: а число), о том как мне пришлось помучаться я ещё расскажу.

6 комментариев
hshhhhh.name 2016

темы: webdev

:)

Евгений Степанищев (bolknote.ru) 2016

Комментарий для hshhhhh.name:

темы: webdev

Я когда-то не завёл тег программирование (точнее завёл, но не пользовался) и сейчас по привычки помечаю этим :) Переименовать надо как-нибудь :)

Alex 2016

О, эти уроки программирования в «Науке и жизни»! Когда был подростком нашёл на чердаке все номера этого журнала за тридцать лет и натолкнувшись на продвинутые программы к этому калькулятору копался в них, пока не нашёл всю школу программирования с самого начала. =) Было что-то завлекательное в этих значках и в обстоятельном тоне журнала, который намекает на научные глубины в самых простых вещах.

За ваше же терпение в разборе древних программ — большое уважение!

Евгений Степанищев (bolknote.ru) 2016

Комментарий для Alex:

За ваше же терпение в разборе древних программ — большое уважение!

Это не древняя программа, я её сам написал несколько дней назад :) А за хороши слова — спасибо! :)

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

Вот с этим согласен на 100%. Тогда об этом писали как-то очень завлекательно. Это казалось не нудным, а завораживающим, как будто там, за этими значками, другой, очень интересный мир и усилия по его достижению будут вознаграждены чем-то восхитительным!

Русич 2020

не думаю, что кто-то будет это набирать

А что мешает вставить код, если он корректно написан, в эмулятор http://mk-61.moy.su , который хавает его в текстовом виде, и запустить?

somebody 2020

«Больше всего это похоже на крайне примитивный ассемблер с гипертрофированным математическим сопроцессором...»

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

И что в процессор с 1-битным сумматоров в качестве АЛУ и ПЗУ на ровно 256 синхрокоманд впихнуто то, что кто-то там назывеют «примитивной операционной системой».