<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом Электроника МК-61</title>
<link>https://blogengine.ru/blogs/tags/elektronika-mk-61/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>🎱 Сложности при написании «99 бутылок» на «Электронике МК-61»</title>
<guid isPermaLink="false">125486</guid>
<link>https://bolknote.ru/all/4419/</link>
<pubDate>Sun, 07 Feb 2016 00:41:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/4419/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2016.02.06.1@2x.jpg" width="660" height="403" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Тот самый калькулятор «Электроника МК-61», который попал мне в руки&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Как и обещал в &lt;a href="/2016/02/05/~4418"&gt;прошлый раз&lt;/a&gt;, хочу рассказать с какими сложностями мне пришлось столкнуться при написании «&lt;a href="/99.html"&gt;Песни о пиве&lt;/a&gt;» на программируемый калькулятор «Электроника МК-61».&lt;/p&gt;
&lt;p&gt;Калькулятор попал ко мне для передачи в компьютерный музей, который готовится к открытию в &lt;a href="http://kpfu.ru/itis"&gt;высшей школе «ИТИС»&lt;/a&gt; и у меня и мыслей-то не было что-то под него писать — хотелось лишь посмотреть что из себя представляет написание программ под этот гаджет, с которыми я много сталкивался в детстве через журнал «Наука и жизнь».&lt;/p&gt;
&lt;p&gt;В процессе изучения я наткнулся на заинтриговавшую меня вещь. В некоторых операциях калькулятор переключался в режим шестнадцатеричного счисления, о чём сигнализировала восьмёрка и точка в первом разряде.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2016.02.06.2@2x.jpg" width="300" height="453" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;По этой таблице калькулятор отображает шестнадцатеричные числа&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Как видно по таблице выше, отображение этих чисел сильно отличается от общепринятого (как правило для цифр больше девятки используются латинские буквы от &lt;i&gt;A&lt;/i&gt; до &lt;i&gt;F&lt;/i&gt;) и я не мог не отметить, что с их помощью легко написать английское «&lt;i&gt;beer&lt;/i&gt;» («пиво»).&lt;/p&gt;
&lt;p&gt;Тем более мне очень повезло в том, что индикацией этого режима является именно восьмёрка, стоящая спереди — так похожая на первую букву в нужном мне слове. Как вы теперь понимаете, на экране в моей программе написано не «&lt;i&gt;BEEr&lt;/i&gt;», с точки зрения калькулятора там одни числа и индикатор режима — «8.EEГ» или «&lt;i&gt;EED&lt;/i&gt;» в привычной записи (десятичное «3821»).&lt;/p&gt;
&lt;p&gt;Так же я воспользовался тем, что «&lt;i&gt;F&lt;/i&gt;» в этой странной нотации — пробел, что позволило мне отделить число от «надписи». Дальнейшее — дело техники.&lt;/p&gt;
&lt;p&gt;&lt;a href="/2016/02/05/~4418"&gt;Листинг из предыдущего поста&lt;/a&gt; начинается с подготовки данных в регистрах — нескольких масок на которые битовыми операциями в дальнейшем наложатся числа так, чтобы получилась нужная мне «строка». Настоящая программа начинается с нажатий на «В/О» и «ПРГ», и активно пользуется подготовленными данными.&lt;/p&gt;
&lt;p&gt;Маски и оставшиеся числа побитно накладываются двумя подпрограммами — по отдельности на диапазоны &lt;nobr&gt;0…5&lt;/nobr&gt; и &lt;nobr&gt;6…9&lt;/nobr&gt; — способы их получения разнятся. Я широко использую операцию «ИНВ» — она инвертирует биты числа, по логике инвертирования цифры &lt;nobr&gt;6…9&lt;/nobr&gt; превращаются в на свои позициях &lt;nobr&gt;9…6&lt;/nobr&gt;, и тут никаких сложностей, а знаки в диапазоне 0…5 получаются сложнее — там накладываются сразу две специальные маски и счётчик.&lt;/p&gt;
&lt;p&gt;Для примера кусочек подпрограммы, номер слева соответствует номеру инструкции при вводе в калькулятор и каждую строку я прокомментирую, но следует понимать, что в реальности эти комментарии частью программы не являются:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="cpp"&gt;// когда что-то попадает в «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 В/О // возврат из подпрограммы&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Десятки и единицы выбираются адресами масок, которые я передаю при помощи косвенной адресации, хорошо, что такое вообще есть в языке — это позволяет эффективно пользоваться подпрограммами.&lt;/p&gt;
&lt;p&gt;Подпрограмма вызывается два раза с разными параметрами — для десятков и единиц, получаются две маски, которые позднее накладываются друг на друга.&lt;/p&gt;
&lt;p&gt;Сильно расстраивает отсутствие памяти для долговременного хранения, в устройстве хоть и есть батарейный отсек, но при любом сбое питания (батарейки сели, а блок питания не подключен), память калькулятор сбрасывается и программу придётся набрать заново. То же ожидает и в случае, если одну программу нужно будет заменить другой — хотя программы можно запускать с произвольного адреса, много их в память не уместится — её ёмкость всего 105 инструкций.&lt;/p&gt;
</description>
</item>


</channel>
</rss>