🎱 Сложности при написании «99 бутылок» на «Электронике МК-61»
Как и обещал в прошлый раз, хочу рассказать с какими сложностями мне пришлось столкнуться при написании «Песни о пиве» на программируемый калькулятор «Электроника МК-61».
Калькулятор попал ко мне для передачи в компьютерный музей, который готовится к открытию в высшей школе «ИТИС» и у меня и мыслей-то не было что-то под него писать — хотелось лишь посмотреть что из себя представляет написание программ под этот гаджет, с которыми я много сталкивался в детстве через журнал «Наука и жизнь».
В процессе изучения я наткнулся на заинтриговавшую меня вещь. В некоторых операциях калькулятор переключался в режим шестнадцатеричного счисления, о чём сигнализировала восьмёрка и точка в первом разряде.
Как видно по таблице выше, отображение этих чисел сильно отличается от общепринятого (как правило для цифр больше девятки используются латинские буквы от A до F) и я не мог не отметить, что с их помощью легко написать английское «beer» («пиво»).
Тем более мне очень повезло в том, что индикацией этого режима является именно восьмёрка, стоящая спереди — так похожая на первую букву в нужном мне слове. Как вы теперь понимаете, на экране в моей программе написано не «BEEr», с точки зрения калькулятора там одни числа и индикатор режима — «8.EEГ» или «EED» в привычной записи (десятичное «3821»).
Так же я воспользовался тем, что «F» в этой странной нотации — пробел, что позволило мне отделить число от «надписи». Дальнейшее — дело техники.
Листинг из предыдущего поста начинается с подготовки данных в регистрах — нескольких масок на которые битовыми операциями в дальнейшем наложатся числа так, чтобы получилась нужная мне «строка». Настоящая программа начинается с нажатий на «В/О» и «ПРГ», и активно пользуется подготовленными данными.
Маски и оставшиеся числа побитно накладываются двумя подпрограммами — по отдельности на диапазоны
Для примера кусочек подпрограммы, номер слева соответствует номеру инструкции при вводе в калькулятор и каждую строку я прокомментирую, но следует понимать, что в реальности эти комментарии частью программы не являются:
// когда что-то попадает в «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 инструкций.
ЭСППЗУ (электрически стираемое перепрограммируемое постоянное запоминающее устройство) было у МК-52, в котором можно было сохранять программы и данные, плюс к оному цеплялись модули расширения памяти с набором готовых программ.
Комментарий для SiMM:
Ого, если в руки попадёт, побалуюсь, спасибо! :)
Назывались эти модули «блок расширения памяти» (БРП). У меня в детстве был БРП-4. Имел, кажется, 4 кбайт памяти. Вот он, справа от калькулятора:
Быстрый поиск выдал полный список содержащихся программ:
(Эх, сколько раз я разбивал космический аппарат о Луну!)
По поводу посадк на луну.
В журнале «Техника молодежи» была серия статей с программами для полёта с Луны на Землю.
Комментарий для Евгения Степанищева:
На современных ПМК ряда МК-152/161 написать эту «песню» не сложно — с выводом текста на графический индикатор. Память для долговременного хранения информации тоже имеется. Хотя конкретная программа не пойдёт — команды логических операций там обрабатываются иначе.
Комментарий для Степанищев Михаил:
Ого, их до сих пор выпускают? А для чего? Какое у них применение в современном мире?
Ещё одна полезная функция МК-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-ти коллекционным швейным (тоже — абсолютно новым) машинам «Подольск»...
А теперь — про замеченные на МК-61 «подводные камни». На ранних выпусках МК-61 его операционные кнопки имеют т. н. обратимый фиксационный щелчок. Подобный принцип можно увидеть на т. н. «хлопунах»- когда упругий тонкий металл громко щёлкает, нажимаемый в одну сторону и упруго (!) возвращается обратно при отпускании. Этот же, только ослабленный, эффект действует и в клавишах МК-61. Это нужно для осязаемого ГАРАНТИРОВАННОГО контакта, наряду с контрольным миганием табло,- при вычислении, и особенно — при программировании : нажатая кнопка остаётся в контакте даже если палец дрогнул на десятые доли миллиметра, — это физиология человека, особенно (!) при «уличных» расчётах. На ПОЗДНИХ моделях (по крайней мере на моих двух, из трёх МК-61) этот НЕОБХОДИМЫЙ фактор сведён на-нет... Кнопки «вяленькие», они уже не имеет обратимого ’контакт-щелчка’. Это грозит тем, что при колебаниях пальца калькулятор может воспринять их как двойное ( и даже тройное !) нажатие, выдав (записав в программу), например, не «5», а «55». И если прозевать отсутствие мигания табло, говорящее, что команда принята, или наоборот — его двойное (и более ) мигание, то вся введённая программа уже сведена не просто «на-нет», а и опасна,- если вычисления связаны с прочностными расчётами. Поэтому, проверяйте сначала — есть ли приятные пальцу специфические щелчки на клавишах калькулятора, необходимо предусмотренные конструктивно.
Но ведь это в школе проходят, разве нет?
То есть, это есть в инструкции ?
Нет, конечно. Это же калькулятор для научных вычислений, вряд ли очевидные вещи стоит в инструкцию для него помещать. Я по образованию математик, я бы так вычислял этим способом, даже не задумавшись.
«Это же калькулятор для научных вычислений, вряд ли ОЧЕВИДНЫЕ ВЕЩИ стоит в инструкцию для него помещать» к. ц.
Может, вопрос закроется сам, если кому-то из нас дать команду своему самолюбию — «успокойся». Доказательство ’постулата’ : В руководстве продвинутого ( для математиков и инженеров) калькулятора необычно подробно объясняется как правильно включить калькулятор и вставить элементы питания. Этому обучают детей в детском саду для умения пользоваться электрифицированными игрушками. Далее в этом же руководстве ( для элиты — математиков и рядовых инженеров) подробно описывается ’алгоритм’ арифметического сложения, вычитания, деления и т. п., хотя даже пользователь со средне-техническим образованием, например, техник-механик, — такой как я, должен быть знаком уже с элементарным понятием производной ’ k’ ( «y=kx+b» , — нам давали это на 1-м курсе). Однажды, в молодости, я попал в милицию за потасовку с милиционером, одетым в гражданское. В камере предварительного заключения, на полу спал, по виду, — бомж. Я поднял его с пола и в шутку, не без доли презрения, спросил : « Корень квадратный из 144, хоть,- помнишь ?» То что он ответил я запомнил на всю свою жизнь : « 12...». Это оказался учитель математики. Это было 9.10.1993 г.
У меня не было цели вас оскорбить, извините, если задел.
??
Евгений, есть пословица у авиаторов. «Хороший пилот — ещё не значит — хороший инструктор». Т. е. « Хороший специалист — ещё не значит — хороший преподаватель». Ведь понять самому — предрасположенность, а вот суметь доходчиво ( не казённо) объяснить остальным — талант. Может, Вы откроете цикл понятных статей по пользованию МК-61 ? По казённой инструкции всё понятно лишь до программирования условного перехода. а дальше — тьма. Организация т. н. циклов, модификация адреса по условию перехода ( зачем она ? Что за модификация адреса с нулями впереди,- зачем ? ! и т. д.) Вот тут, как раз, уже начинается Ваша область, — математиков, а не рядовых технарей, ведь любая заводская инструкция — изложение, а не объяснение.
В интернете очень много информации — в СССР это было популярное занятие, посмотрите в старых журналах (в интернете есть).
» В Ине-те очень много информации — в СССР это было популярное занятие, посмотрите в старых журналах ( в Ине-те есть)» к.ц. Вопрос стоит не о детских и «взрослых» играх на МК-61 ( «99 бутылок пива», «Посадка на Луну», — «Техника Молодёжи», «Наука и жизнь»), где нужно только внимание, — набрать, не думая, цифры может каждый, а — о пользовании самим калькулятором для составления сложных задач. Этого нет нигде Я ищу уже 4-й день. 2 книги разных авторов ( стёр уже) ’с участием’ МК-61 скачал и прочёл, но там, больше, — про язык программирования. Не дадите ли ссылки ? Хотя бы пару. Вы пишете, что их очень и очень много.
Я не занимаюсь этим вопросом и калькулятора у меня уже нет. В моём детстве я помню очень много статей на эту тему, даже в школах того времени учили им пользоваться.
Да, но не в начале 70-х.