{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом Электроника МК-61",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.ru\/blogs\/tags\/elektronika-mk-61\/",
    "feed_url": "https:\/\/blogengine.ru\/blogs\/tags\/elektronika-mk-61\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.ru\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "125486",
            "url": "https:\/\/bolknote.ru\/all\/4419\/",
            "title": "🎱 Сложности при написании «99 бутылок» на «Электронике МК-61»",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/bolknote.ru\/pictures\/2016.02.06.1@2x.jpg\" width=\"660\" height=\"403\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Тот самый калькулятор «Электроника МК-61», который попал мне в руки<\/div>\n<\/div>\n<p>Как и обещал в <a href=\"\/2016\/02\/05\/~4418\">прошлый раз<\/a>, хочу рассказать с какими сложностями мне пришлось столкнуться при написании «<a href=\"\/99.html\">Песни о пиве<\/a>» на программируемый калькулятор «Электроника МК-61».<\/p>\n<p>Калькулятор попал ко мне для передачи в компьютерный музей, который готовится к открытию в <a href=\"http:\/\/kpfu.ru\/itis\">высшей школе «ИТИС»<\/a> и у меня и мыслей-то не было что-то под него писать — хотелось лишь посмотреть что из себя представляет написание программ под этот гаджет, с которыми я много сталкивался в детстве через журнал «Наука и жизнь».<\/p>\n<p>В процессе изучения я наткнулся на заинтриговавшую меня вещь. В некоторых операциях калькулятор переключался в режим шестнадцатеричного счисления, о чём сигнализировала восьмёрка и точка в первом разряде.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/bolknote.ru\/pictures\/2016.02.06.2@2x.jpg\" width=\"300\" height=\"453\" alt=\"\" \/>\n<div class=\"e2-text-caption\">По этой таблице калькулятор отображает шестнадцатеричные числа<\/div>\n<\/div>\n<p>Как видно по таблице выше, отображение этих чисел сильно отличается от общепринятого (как правило для цифр больше девятки используются латинские буквы от <i>A<\/i> до <i>F<\/i>) и я не мог не отметить, что с их помощью легко написать английское «<i>beer<\/i>» («пиво»).<\/p>\n<p>Тем более мне очень повезло в том, что индикацией этого режима является именно восьмёрка, стоящая спереди — так похожая на первую букву в нужном мне слове. Как вы теперь понимаете, на экране в моей программе написано не «<i>BEEr<\/i>», с точки зрения калькулятора там одни числа и индикатор режима — «8.EEГ» или «<i>EED<\/i>» в привычной записи (десятичное «3821»).<\/p>\n<p>Так же я воспользовался тем, что «<i>F<\/i>» в этой странной нотации — пробел, что позволило мне отделить число от «надписи». Дальнейшее — дело техники.<\/p>\n<p><a href=\"\/2016\/02\/05\/~4418\">Листинг из предыдущего поста<\/a> начинается с подготовки данных в регистрах — нескольких масок на которые битовыми операциями в дальнейшем наложатся числа так, чтобы получилась нужная мне «строка». Настоящая программа начинается с нажатий на «В\/О» и «ПРГ», и активно пользуется подготовленными данными.<\/p>\n<p>Маски и оставшиеся числа побитно накладываются двумя подпрограммами — по отдельности на диапазоны <nobr>0…5<\/nobr> и <nobr>6…9<\/nobr> — способы их получения разнятся. Я широко использую операцию «ИНВ» — она инвертирует биты числа, по логике инвертирования цифры <nobr>6…9<\/nobr> превращаются в на свои позициях <nobr>9…6<\/nobr>, и тут никаких сложностей, а знаки в диапазоне 0…5 получаются сложнее — там накладываются сразу две специальные маски и счётчик.<\/p>\n<p>Для примера кусочек подпрограммы, номер слева соответствует номеру инструкции при вводе в калькулятор и каждую строку я прокомментирую, но следует понимать, что в реальности эти комментарии частью программы не являются:<\/p>\n<pre class=\"e2-text-code\"><code class=\"cpp\">\/\/ когда что-то попадает в «X» предыдущее значение смещается в «Y» (там стек из 4 позиций)\n45 1 \/\/ «1» кладётся в регистр «X», входной параметр сместился в «Y»\n46 + \/\/ Y + 1, передаётся в «X», это коррекция данных после операций, которые шли выше\n47 К П→Х 7 \/\/ в «X» помещается число из регистра (маска), указанного в регистре №7\n48 + \/\/ Y+X → X\n49 ИНВ \/\/ инвертирование битов в «X», сейчас на экране написано «8.EEГ» плюс некий пока мусорный символ\n50 К П→Х 8 \/\/ в «X» помещается число из регистра, указанного в регистре №8\n51 ^ \/\/ операция «И», на экране — «8.EEГ», из некого символа получилось требуемое число\n52 В\/О \/\/ возврат из подпрограммы<\/code><\/pre><p>Десятки и единицы выбираются адресами масок, которые я передаю при помощи косвенной адресации, хорошо, что такое вообще есть в языке — это позволяет эффективно пользоваться подпрограммами.<\/p>\n<p>Подпрограмма вызывается два раза с разными параметрами — для десятков и единиц, получаются две маски, которые позднее накладываются друг на друга.<\/p>\n<p>Сильно расстраивает отсутствие памяти для долговременного хранения, в устройстве хоть и есть батарейный отсек, но при любом сбое питания (батарейки сели, а блок питания не подключен), память калькулятор сбрасывается и программу придётся набрать заново. То же ожидает и в случае, если одну программу нужно будет заменить другой — хотя программы можно запускать с произвольного адреса, много их в память не уместится — её ёмкость всего 105 инструкций.<\/p>\n",
            "date_published": "2016-02-07T00:41:00+05:00",
            "date_modified": "2024-01-16T19:58:12+05:00",
            "tags": [
                "программирование",
                "Электроника МК-61"
            ],
            "author": {
                "name": "Евгений Степанищев",
                "url": "https:\/\/bolknote.ru\/",
                "avatar": "https:\/\/bolknote.ru\/pictures\/userpic\/userpic@2x.jpg?1760600028"
            },
            "_date_published_rfc2822": "Sun, 07 Feb 2016 00:41:00 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125486",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}