В ноябре был разработан и опубликован под GPL v3 язык Каллисто Классик, работающий на отечественной ЭКВМ
«Электроника МК-161»:
http://the-hacker.ru/2017/Callisto-1.zipЧто уже сделано? И как.Каллисто претендует на следующее поколение входного языка отечественных ПМК. Входной язык МК-161/МК-152 многим знаком, т.к. расширяет входной язык популярных Б3-34/МК-61. Но после выхода МК-152 сразу появилась критика, что запоминать номера регистров сложно (нужны имена переменных), заполнять вручную адреса переходов трудно (нужны циклы и IF), да и четырёх регистров стека маловато (нужен «бесконечный стек»). Каллисто всё это исправляет.
Версия 1.0 названа Классик, т.к. при разработке активно использовались исходные коды Форта ЕС и ИТЭФ, которые много народа изучало. С другой стороны, приоритет отдавался «калькуляторности» и слово DUP, например, традиционно (для калькуляторов) называется ↑ (стрелка вверх) и вводится одной клавишей. При проектировании языка я также учитывал и Форт-2012 — взяв оттуда, например, префиксы чисел вроде $ff
Идея «скрестить» язык «Электроники Б3-34» и Форт у меня зрела ещё с 1990-ых годов. Наконец-то она стала реальностью! Если в стандарте Форта-2012 два стека (целочисленный и плавучка), а в некоторых реализациях он один (целочисленный), то в Каллисто единственный стек данных — «десятичный» (bcd-плавучка). Это вызвано архитектурой «Электроники МК-161», но оказалось очень удобным для калькулятора. Такое решение привело к появлению уникального слова U@ — два байта считываются из памяти, как беззнаковое 16-битное целое от 0 до 65535, и кладутся в «десятичный» стек. Стек возвратов обычный, целочисленный 16-битный.
При создании языка я переоценил быстродействие МК-161 (до этого не сталкивался с задачами, на которых ЭКВМ тормозит) и «размахнулся», как говорится. Объединил разрозненные адресные пространства в одно, для работы фортовских @ и ! — в результате при каждом обращении к памяти происходят лишние проверки и преобразования адресов. Адресный интерпретатор исполняет шитый код как из памяти данных (регистры), так и из памяти программ — поиск слов тоже происходит в этих двух областях памяти, как в едином пространстве. В результате компиляция сложного экрана «на борту» может занять 20 минут. Экран Каллисто это 48 строк по 64 символа, как 3 экрана Форта — опять же, из-за ограничений платформы.
Язык сделан максимально простой в установке и работе. Один текстовый файл исходного текста с расширением MKL (4173 строки в кодировке Windows, также можно просмотреть
на веб-страничке) компилируется стандартной программой производителя MK.EXE в один файл «программы» (формат MKP), который передаётся по COM-порту в МК-161 с помощью той же самой программы MK.EXE. Запускается однофайловая Каллисто Классик просто, как в старые добрые времена: В/О С/П
К языку мой товарищ Михаил Рамендик написал замечательное Руководство (
формат PDF, 40 страниц). Энциклопедическое описание каждого слова есть
на вики, оно включает советские реализации в Форте ЕС и Форте ИТЭФ, а также цитаты из стандартов Форта. На той же вики есть описание самого МК-161. Кому интересно, советую на вики зарегистрироваться. А то во время разработки Каллисто там только спамеры регистрировались.
Как можно воспользоваться результатами?Каллисто это возможность иметь с собой портативный Форт для решения калькуляторных задач. Скорее всего, у многих нет «Электроники МК-161» и не знаю, насколько кто захочет приобрести отечественный гаджет за 15т.р. — но есть
эмулятор этой машинкиНа эмуляторе, кстати, Каллисто Классик работает достаточно быстро и даже компиляция экрана выполняется за секунды, а не минуты.
На «железке» Каллисто использует автозапуск. При включении сразу попадаешь в среду, словно на МК-161 теперь новая прошивка. Советую сделать себе накладную клавиатуру (заводская клава не позволяет вводить буквы), распечатав Рис. 1 из Руководства на плотном листе бумаги А4 и вырезав дырочки под кнопки. Ссылку, где приобрести «Электронику МК-161», не даю, чтобы не сочли рекламой моей любимой «железки».
Как можно поучаствовать?1. Сейчас идёт работа над второй версией языка, которая в чём-то дальше от Форта (а в чём-то ближе к Форт-2012), зато значительно быстрее. Новый адресный интерпретатор уже заработал. Он шустрее старого за счёт исполнения шитого кода лишь из памяти данных и других улучшений. Можно поучаствовать в обсуждении, как перейти на современные технологии (EVALUATE вместо INTERPRET, как пример) или посоревноваться в оптимизации примитивов Каллисто-2.
2. Разработка Каллисто-2 ведётся на SP-Forth. Это мой первый опыт программирования на SP-Forth, поэтому наверняка есть способы, как улучшишь код. С другой стороны, есть намерение когда-нибудь перейти к метакомпиляции — однажды Каллисто будет написана на Каллисто. Поэтому на фичи SP-Forth, которые не будут реализованы в Каллисто-2, особенно опираться не хотелось бы.
3. Ресурсы МК-161 не позволяют осуществить метакомпиляцию «на борту». Поэтому потребуется вторая цель, а именно форт-ассемблер x86 и перенос примитивов на DOS или Колибри. С Колибри я пока не работал и при выборе этой цели будет много вопросов.
4. Самая же лучшая помощь это добыть МК-161 (старую, где «камень» на панельке) и попробовать написать "Hello, world!" прямо на W77LE516P (МК51). Если кто сможет заставить «задышать» экранчик и клавиатуру МК-161 прямо из «камня», это поможет разместить Каллисто напрямую в микроконтроллере, минуя уровень интерпретации входного языка. Все проблемы с «тормозами» исчезнут, язык будет «летать».

Для этой цели я даже приобрёл программатор и второй МК-161 «для опытов». Но пока сосредоточен на том, чтобы заставить «летать» язык с гирями на ногах — поверх стандартного входного языка.

5. Чтобы писать сложные программы на Каллисто Классик, требуется редактор экранов. В дистрибутиве есть простенький построчный редактор, который я взял из журнала FORTH DIMENSIONS, Volume III, number 3. Он позволяет создавать и редактировать экраны, но далеко не идеален. Лучше всего использовать его для разработки удобного полноэкранного редактора — или же написать подобный редактор на языке МК, «выдрав» алфавитную клавиатуру из Каллисто. Есть даже улучшенная версия клавиатуры из Каллисто-2, с буфером и автоповтором. Сложность здесь в том, что сам экран большой (48 строчек по 64 символа), индикатор крохотный (128×64 пикселя), а шрифт пропорциональный. Кстати, для МК-161 разработан
моноширинный шрифт «вырви глаз» 3×5, что имитирует текстовый экран 32х10. Есть некоторые идеи, как всё это можно использовать. Хороший редактор пригодится и для последующих версий языка.