Калькулятор с Бейсиком - HW build 2.0

Похоже, автор продвинулся со своим "железным калькулятором":

Этакий МК-85 в форм факторе Б3-38. Если довести до ума питание (1 или 2 CR2302) то устройство будет близкое к тому, что мы тут напридумывали.

скорее всего - на плате виден линейный регулятор питания. А так да, это самый законченный вид из всего самодельного. Жалко, что не на stm32 - была бы идеальная платформа для e- Фортов

Сам eForth удовлетворяет требованиям компактности. То есть для карманных устройств он хорош.

Но если мы говорим о калькуляторе, помимо компактности требуется работа с плавучкой. И здесь уже нужна именно Каллисто — удобное расширение входного языка ПМК. Десятичные переменные и стек, десятичная арифметика, полный набор матфункций и т.п. Повторное использование программ из советских справочников.

Сейчас я сосредоточился на целочисленном eForth, так как он помогает использовать десятилетия труда, вложенного в совершенствование Форта, как среды и компилятора. Перенести всё это на ЭКВМ для повторного использования. Но без плавучки это, конечно, ещё не калькулятор. Хотя для ряда игр и производственных задач eForth пригодится, после отлова и исправления багов.

Бейсик тут полная противоположность eForth. Компактности нет, но плавучка достойная. Унаследована из Фортрана, языка для научных и инженерных вычислений по формулам. Ещё один минус Бейсика, помимо отсутствия компактности — на его основе сложней создать СКМ. Даже Каллисто Классик 2017 года, где компактность + плавучка, уже можно начать развивать в сторону СКМ.

Калькулятор, конечно же, должен работать с плавучкой. Каллисто влезет в STM32F103RET6 ARM STM32 платку (она около 7 евро на али и ибее)? Это более развитая "голубая таблетка": Cortex-M3, 72 МГц, статическое ОЗУ 64 КБайт, флеш-память 512 КБайт.

Влезет, конечно. И даже будет шустрее. Но придётся либо писать эмулятор МК-161 (можно взять ВК-6 или eMKatic за основу), либо перевести 173 примитива с языка МК на ассемблер ARM. Кстати, это не так сложно. Многое в Каллисто 1.0 получено переводом с ассемблера 8086, ассемблерные исходники есть на Вики.

В любом случае потребуется библиотека плавучки, желательно bcd 14+2. Всякие логарифмы и синусы для отладки не так важны, сам транслятор их не использует. А вот арифметика должна быть надёжной.

Кросс-платформы, которую я планировал в Каллисто-2, пока нет. И не уверен, что в 2020 году появится. Сейчас у меня приоритет — отладка и релиз eForth для МК-161.

Какой смысл в команде типа "1+", если 1 + работает так же? Компилятор должен приводить оба случая к одному набору исполняемых команд.

Быстрее и память экономит. Как i++ в Си. При оптимизации, наверно, тот же самый код, что i+=1 или i=i+1.

В Каллисто Классик оптимизация ручная, как в Форте ИТЭФ на ПК. Если пишешь 1+, это выполнится значительно быстрее и код в пару раз короче, чем 1 +.

Точно также и все расчёты во время компиляции надо проводить явно.
3 + 2 + приведёт к двум сложениям в шитом коде, что медленно и длинно.
[ 3 2 + ] LITERAL + даёт оптимизированный код, компилируясь в 5 +.

В квадратных скобках можно сколь угодно сложные вычисления производить, прямо во время компиляции. LITERAL скомпилирует только целочисленный результат. Для плавучки используется FLITERAL.

Оптимизация тут вроде нехитрая: видишь в тексте "1 +", заменяй на "1+" на лету.

Да, так и делаем. В Каллисто-2 будет ещё слово ;- для замены (грубо говоря) ПП xx В/О в конце слов на БП xx.

В принципе ;- можно уже в Каллисто Классик добавить. В исходнике транслятора так всё и скомпилировано. Более суровую оптимизацию начнём применять, когда сменим железку с закрытого от программирования 8051 на что-нибудь более производительное.

Автоматическую оптимизацию сейчас МК-161 не потянет, только ручную. Я и без этого бьюсь над eForth, чтобы отладить уменьшение числа операций в цикле компиляции. Каллисто Классик экран (48 строк) может 20 минут компилировать. Если вместо упрощения добавить в INTERPRET автораспознавание 1+, 2- и т.п., компилировать ЭКВМ придётся по ночам, когда владелец спит. :-)

Писать на асме ARM грустновато, наверное, хотя, может, даже в чем-то и проще, ближе к языку ПМК :)

Какую-то часть МК-161 придётся эмулировать на ARM, например основные регистры функций. Вопрос лишь в том, насколько полный эмулятор «Электроники» делать.

Сейчас я склоняюсь к тому, чтобы в Каллисто-2 эмулировать все эти ИП БП ПП даже в версии под MS-DOS. Это даст не только повторное использование советского кода, но и хорошую совместимость между платформами.

Если написать полный эмулятор МК-161 (пусть даже на Си), в него загружаешь Callisto.mkp и всё работает. Принципиальный вопрос — переводить все каллистянские примитивы на ассемблер (результат шустрее всего получится) или оставить хотя бы их часть в коде ПМК. Который придётся исполнять эмулятором на борту ARM.

По-моему, нет смысла писать какие-то эмуляторы на АРМ или еще где. Нужен просто конвертер из мнемокода ПМК в Си, причем достаточно, чтобы он работал только на одной программе. И проблема переносимости написанного для маргинальной платформы Форта решена.

Предположим, конвертор написан. В нём всё равно должна быть bcd-арифметика, регистры функций, стековые операции и прочие особенности платформы. Если весь этот код уже написан для ARM, зачем конвертор? Почему бы не сделать эмулятор, исполняющий код ПМК?

Каллисто не может изменять, но считывает содержимое памяти программ, свой код. Это существенно, так как в памяти программ находятся текстовые строки, включая имена слов. Там же шитый код, большой односвязный список (словарь), заготовка словаря в памяти данных и таблицы клавиатуры. Не уверен, что считывание двоичного кода, полученного после компиляции результата автоматического конвертирования даст что-то осмысленное. По крайней мере он будет сильно отличаться от результата работы К ИПРГ на МК-161 (строки 184, 281, 286, 351, 440, 599, 602, 616, 677, 697, 778, 780, 782, 787, 851, 1978, 1995, 2164, 2165, 2182, 2183, 2198, 2500, 2503, 2529, 2530, 2594, 3954, 3964).

Эмулятор, на мой взгляд, проще всего. Все присутствующие знают язык ПМК. Совместимость с Каллисто на железной ЭКВМ будет максимальная. Вплоть до того, что удачные примитивы, написанные на ARM, можно будет без изменений переносить на МК-161 в основной проект. Тот же эмулятор можно будет повторно использовать для Каллисто-2 и других проектов. Это же эмулятор не только МК-161, но и альтернативная реализация советских Б3-34/МК-61 на зарубежных микросхемах.

Если делать конвертор, результат будет мало кому понятен — потребуется знание Си и Каллисто (Форта). Автоматический код на Си изучать и править то ещё удовольствие. С эмулятором над проектом могут работать люди, не знающие Си. Достаточно знания языка ПМК и Каллисто.

Можно пойти по трудному пути и переводить вручную примитивы на ассемблер, сохраняя нетронутыми текстовые строки, логику ссылок и обращаясь к подпрограммам типа COP40 для записи RX в регистр 0. Выполняться такой код будет чуть быстрее, чем на эмуляторе. Да и внутренности Каллисто станут немного понятней переводчику, хотя совместимость по коду примитивов будет утеряна.

Написать эмулятор МК161 с bcd-арифметикой и особенностями платформы на ARM ради того, чтобы на ARM запустить Форт. Мало того, если этот эмулятор запустить на stm32 "голубой таблетке на стероидах", то получится прокачанный МК161 "в железе", сильно быстрее оригинала.

Выглядит немного из пушки по воробьям, ну, с моей колокольни.

А есть в природе Форт с плавучкой, написанный на Си?

Так мы и создаём ПМК нового поколения, который должен быть лучше МК-161. Разве нет? bcd-арифметика для него в любом случае нужна.

Конечно, можно выбрать платформу, исходя из наличия, например, Интеловской bcd-библиотеки. Если лень писать самому. Той, которая в DM42.

В Каллисто-2 под DOS я планирую реализовать и bcd-арифметику, и эмулятор МК-161. Но если всё это уже будет в вашей реализации под ARM, её можно будет использовать для кросс-компиляции вместо DOS’а.

В Каллисто-2 под DOS я планирую реализовать и bcd-арифметику, и эмулятор МК-161. Но если всё это уже будет в вашей реализации под ARM, её можно будет использовать для кросс-компиляции вместо DOS’а.

Вряд ли найдется тот, кто захочет таким заниматься, я точно не буду. Если бы еМKатис был бы написан на С/С++, как, например, Free42, то можно было бы подумать о форке на stm32.

Ну и славно. Страшный сон SMB про дешёвые китайские клоны ЭКВМ избежал своего воплощения.

Мне тоже не интересно этим заниматься. Хотя есть отечественные ARM, я не всеядный военный. Для меня они недостаточно расово чистые. :-)

:)

На самом деле дешевые китайские клоны могли бы помочь с распространенем платформы. И те, кому надо, купили бы оригинал.

Мне тоже не интересно этим заниматься. Хотя есть отечественные ARM, я не всеядный военный. Для меня они недостаточно расово чистые. :-)

Тут я что-то споткнулся. А в МК161 процессор и его семейство расово чистые?

Тоже считаю, что зря платформу закрыли.

Но в существующем виде «Электроника МК-161» снаружи неотличима от расово чистой, т.к. уровень буржуйского ассемблера для владельцев закрыт. За китайский камень ЭКВМ с первых лет её существования критикуют. Но имеем то, что есть.

Более отечественного, увы, никто пока не предлагает. Есть только более зарубежное, вроде Касио.

Не за китайский, а просто за камень и закрытость.

Вам не нравилась 8-битность чипа. А Русскому, например, не нравилось, что он из Китая. И Ватник подпевал.

Если делать ЭКВМ отечественной, архитектура 8051 имеет смысл — её в СССР умели выпускать. Но из рыночных соображений Новосибирск выбрал китайский вариант 8051, остановившись на полдороге. В результате остались недовольными практически все.

Кроме тех, кому для решения задач нужна была именно вычислительная мощь ЭКВМ, а высокая цена решения устраивала.

Вряд ли. Настоящие Форты пишутся на Форте. Точно также, как правильные компиляторы Си пишутся на Си. Это два параллельных и самодостаточных сообщества.

Можно нагуглить Форты, написанные на Си. Но обычно это малоинтересные учебные поделки тех сишников, кто только начал осваивать Форт.

Есть другие учебные Форты — которые пишут профессионалы для тех начинающих, кто ещё не понимает исходников на Форте. Такие обычно делают на ассемблере. Таков eForth.

В современном стандарте Форта есть плавучка. Например, она есть в Gforth. Но плавучка эта обычно аппаратная двоичная и по стандарту реализована в отдельном стеке. С ней работают команды типа F+ F* F/. Для калькулятора всё это не так хорошо.

К тому же в калькуляторах используются «десятичные числа». Это не совсем плавучка. Они неотличимы от целых, пока мантисса не переполнится или не возникнет дробная часть. Тогда по необходимости они начинают работать, как плавучка. Особенно заметна разница при выводе на экран. Поэтому Каллисто совместима с Фортом. Хорошо ведущая себя форт-программа даже не замечает, что ей подсунули десятичный стек вместо привычного целочисленного.

В идеале десятичные числа расширяются до рациональных. Переходя на плавающую запятую лишь когда исчерпываются возможности a/b. На МК-161 это сделать можно только перепрошивкой. Но как заменим «железную» базу, так сразу.