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

🎱 Сложности при написании «99 бутылок» на «Электронике МК-61»

Тот самый калькулятор «Электроника МК-61», который попал мне в руки

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

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

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

По этой таблице калькулятор отображает шестнадцатеричные числа

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

Тем более мне очень повезло в том, что индикацией этого режима является именно восьмёрка, стоящая спереди — так похожая на первую букву в нужном мне слове. Как вы теперь понимаете, на экране в моей программе написано не «BEEr», с точки зрения калькулятора там одни числа и индикатор режима — «8.EEГ» или «EED» в привычной записи (десятичное «3821»).

Так же я воспользовался тем, что «F» в этой странной нотации — пробел, что позволило мне отделить число от «надписи». Дальнейшее — дело техники.

Листинг из предыдущего поста начинается с подготовки данных в регистрах — нескольких масок на которые битовыми операциями в дальнейшем наложатся числа так, чтобы получилась нужная мне «строка». Настоящая программа начинается с нажатий на «В/О» и «ПРГ», и активно пользуется подготовленными данными.

Маски и оставшиеся числа побитно накладываются двумя подпрограммами — по отдельности на диапазоны 0…5 и 6…9 — способы их получения разнятся. Я широко использую операцию «ИНВ» — она инвертирует биты числа, по логике инвертирования цифры 6…9 превращаются в на свои позициях 9…6, и тут никаких сложностей, а знаки в диапазоне 0…5 получаются сложнее — там накладываются сразу две специальные маски и счётчик.

Для примера кусочек подпрограммы, номер слева соответствует номеру инструкции при вводе в калькулятор и каждую строку я прокомментирую, но следует понимать, что в реальности эти комментарии частью программы не являются:

// когда что-то попадает в «X» предыдущее значение смещается в «Y» (там стек из 4 позиций)
45 1 // «1» кладётся в регистр «X», входной параметр сместился в «Y»
46 + // Y + 1, передаётся в «X», это коррекция данных после операций, которые шли выше
47 К П→Х 7 // в «X» помещается число из регистра (маска), указанного в регистре №7
48 + // Y+X → X
49 ИНВ // инвертирование битов в «X», сейчас на экране написано «8.EEГ» плюс некий пока мусорный символ
50 К П→Х 8 // в «X» помещается число из регистра, указанного в регистре №8
51 ^ // операция «И», на экране — «8.EEГ», из некого символа получилось требуемое число
52 В/О // возврат из подпрограммы

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

Подпрограмма вызывается два раза с разными параметрами — для десятков и единиц, получаются две маски, которые позднее накладываются друг на друга.

Сильно расстраивает отсутствие памяти для долговременного хранения, в устройстве хоть и есть батарейный отсек, но при любом сбое питания (батарейки сели, а блок питания не подключен), память калькулятор сбрасывается и программу придётся набрать заново. То же ожидает и в случае, если одну программу нужно будет заменить другой — хотя программы можно запускать с произвольного адреса, много их в память не уместится — её ёмкость всего 105 инструкций.

19 комментариев
SiMM 2016

ЭСППЗУ (электрически стираемое перепрограммируемое постоянное запоминающее устройство) было у МК-52, в котором можно было сохранять программы и данные, плюс к оному цеплялись модули расширения памяти с набором готовых программ.

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

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

Ого, если в руки попадёт, побалуюсь, спасибо! :)

Алекс 2016

Назывались эти модули «блок расширения памяти» (БРП). У меня в детстве был БРП-4. Имел, кажется, 4 кбайт памяти. Вот он, справа от калькулятора:

https://commons.wikimedia.org/wiki/File:Elektronika_MK_52_with_accessories.jpg?uselang=ru

Быстрый поиск выдал полный список содержащихся программ:

http://mk.semico.ru/brp4.htm

(Эх, сколько раз я разбивал космический аппарат о Луну!)

gnuth 2016

По поводу посадк на луну.
В журнале «Техника молодежи» была серия статей с программами для полёта с Луны на Землю.

Степанищев Михаил 2016

Комментарий для Евгения Степанищева:

На современных ПМК ряда МК-152/161 написать эту «песню» не сложно — с выводом текста на графический индикатор. Память для долговременного хранения информации тоже имеется. Хотя конкретная программа не пойдёт — команды логических операций там обрабатываются иначе.

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

Комментарий для Степанищев Михаил:

Ого, их до сих пор выпускают? А для чего? Какое у них применение в современном мире?

Андрей Иванченко 2019

Ещё одна полезная функция МК-61, не указанная в руководстве. Как я понял, являясь гуманитарием, по инструкции вычислить корень из числа, на МК-61, можно только ’банальной’ второй степени. Оказалось — не только. Навёл на это справочник «Альфа и Омега», стр.12 ’Степени и корни’ : корень n-ной степени из числа «а», находящемуся в степени «m» равен самому этому числу, возведённому в степень «m\n». Если, например, само подкоренное число находится в степени равной «единице», то для человеческого сознания это будет банальностью : можно вообще убрать саму степень числа — это само число и есть — безо всяких операторов... Для человека — да, для машины — нет. Для неё это аргумент. Действительно, корень n-ной ( т. е.- ЛЮБОЙ) степени из числа, например, 7, находящемся в первой степени, согласно формулы из указанного выше справочника, равен семь в степени «единица, делённая на n-ную (ЛЮБУЮ) степень корня», то есть СЕМЬ в степени 1/n. В МК-61 есть два оператора (функции, вызываемые жёлтой кнопкой «F») : это функция « 1/х» и «х в степени y»( x*y). Подставляем ( пока -теоретически) к корню ЛЮБОЕ число степени : Корень 8-й степени из числа 7 «в ПЕРВОЙ степени» будет равен семь в степени «ОДИН делённое на 8». А теперь — нажимаем кнопки : 1) 8 (ввод степени корня), 2) F «1/x» (первая степень числа, делённая на степень корня, — по справочнику, на МК-61 это клавиша «деление» ), 3) «7» ( само число), 4) F «x*y» («х в степени у», на МК-61 это клавиша «стрелка в обе стороны»), и получаем результат (с мантиссой приближения, конечно,- не иначе,- машина старалась). Так можно вычислять, с хорошим приближением, ЛЮБЫЕ корни, даже дробные. Попробуйте. Вчера не выдержал и купил, по объявлению,- ТРЕТИЙ новенький МК-61, в упаковке. Волшебная вещь. Пусть живут у меня, места хватает, как и 15-ти коллекционным швейным (тоже — абсолютно новым) машинам «Подольск»...

Андрей Иванченко 2019

А теперь — про замеченные на МК-61 «подводные камни». На ранних выпусках МК-61 его операционные кнопки имеют т. н. обратимый фиксационный щелчок. Подобный принцип можно увидеть на т. н. «хлопунах»- когда упругий тонкий металл громко щёлкает, нажимаемый в одну сторону и упруго (!) возвращается обратно при отпускании. Этот же, только ослабленный, эффект действует и в клавишах МК-61. Это нужно для осязаемого ГАРАНТИРОВАННОГО контакта, наряду с контрольным миганием табло,- при вычислении, и особенно — при программировании : нажатая кнопка остаётся в контакте даже если палец дрогнул на десятые доли миллиметра, — это физиология человека, особенно (!) при «уличных» расчётах. На ПОЗДНИХ моделях (по крайней мере на моих двух, из трёх МК-61) этот НЕОБХОДИМЫЙ фактор сведён на-нет... Кнопки «вяленькие», они уже не имеет обратимого ’контакт-щелчка’. Это грозит тем, что при колебаниях пальца калькулятор может воспринять их как двойное ( и даже тройное !) нажатие, выдав (записав в программу), например, не «5», а «55». И если прозевать отсутствие мигания табло, говорящее, что команда принята, или наоборот — его двойное (и более ) мигание, то вся введённая программа уже сведена не просто «на-нет», а и опасна,- если вычисления связаны с прочностными расчётами. Поэтому, проверяйте сначала — есть ли приятные пальцу специфические щелчки на клавишах калькулятора, необходимо предусмотренные конструктивно.

Евгений Степанищев 2019

…по инструкции вычислить корень из числа, на МК-61, можно только «банальной» второй степени…

Навёл на это справочник «Альфа и Омега», стр.12 «Степени и корни» : корень n-ной степени из числа «а», находящемуся в степени «m» равен самому этому числу, возведённому в степень «m\n».

Но ведь это в школе проходят, разве нет?

Андрей Иванченко 2019

То есть, это есть в инструкции ?

Евгений Степанищев 2019

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

Андрей Иванченко 2019

«Это же калькулятор для научных вычислений, вряд ли ОЧЕВИДНЫЕ ВЕЩИ стоит в инструкцию для него помещать» к. ц.
Может, вопрос закроется сам, если кому-то из нас дать команду своему самолюбию — «успокойся». Доказательство ’постулата’ : В руководстве продвинутого ( для математиков и инженеров) калькулятора необычно подробно объясняется как правильно включить калькулятор и вставить элементы питания. Этому обучают детей в детском саду для умения пользоваться электрифицированными игрушками. Далее в этом же руководстве ( для элиты — математиков и рядовых инженеров) подробно описывается ’алгоритм’ арифметического сложения, вычитания, деления и т. п., хотя даже пользователь со средне-техническим образованием, например, техник-механик, — такой как я, должен быть знаком уже с элементарным понятием производной ’ k’ ( «y=kx+b» , — нам давали это на 1-м курсе). Однажды, в молодости, я попал в милицию за потасовку с милиционером, одетым в гражданское. В камере предварительного заключения, на полу спал, по виду, — бомж. Я поднял его с пола и в шутку, не без доли презрения, спросил : « Корень квадратный из 144, хоть,- помнишь ?» То что он ответил я запомнил на всю свою жизнь : « 12...». Это оказался учитель математики. Это было 9.10.1993 г.

Евгений Степанищев 2019

У меня не было цели вас оскорбить, извините, если задел.

Андрей Иванченко 2019

??

Андрей Иванченко 2019

Евгений, есть пословица у авиаторов. «Хороший пилот — ещё не значит — хороший инструктор». Т. е. « Хороший специалист — ещё не значит — хороший преподаватель». Ведь понять самому — предрасположенность, а вот суметь доходчиво ( не казённо) объяснить остальным — талант. Может, Вы откроете цикл понятных статей по пользованию МК-61 ? По казённой инструкции всё понятно лишь до программирования условного перехода. а дальше — тьма. Организация т. н. циклов, модификация адреса по условию перехода ( зачем она ? Что за модификация адреса с нулями впереди,- зачем ? ! и т. д.) Вот тут, как раз, уже начинается Ваша область, — математиков, а не рядовых технарей, ведь любая заводская инструкция — изложение, а не объяснение.

Евгений Степанищев 2019

Вы откроете цикл понятных статей по пользованию МК-61?

В интернете очень много информации — в СССР это было популярное занятие, посмотрите в старых журналах (в интернете есть).

Андрей Иванченко 2019

» В Ине-те очень много информации — в СССР это было популярное занятие, посмотрите в старых журналах ( в Ине-те есть)» к.ц. Вопрос стоит не о детских и «взрослых» играх на МК-61 ( «99 бутылок пива», «Посадка на Луну», — «Техника Молодёжи», «Наука и жизнь»), где нужно только внимание, — набрать, не думая, цифры может каждый, а — о пользовании самим калькулятором для составления сложных задач. Этого нет нигде Я ищу уже 4-й день. 2 книги разных авторов ( стёр уже) ’с участием’ МК-61 скачал и прочёл, но там, больше, — про язык программирования. Не дадите ли ссылки ? Хотя бы пару. Вы пишете, что их очень и очень много.

Евгений Степанищев 2019

Не дадите ли ссылки? Хотя бы пару. Вы пишете, что их очень и очень много.

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

Андрей Иванченко 2019

Да, но не в начале 70-х.