Язык «Форт» для МК-161

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

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

Также сильная сторона входного языка, совместимость с советскими ПМК, для ряда любителей обернулась слабостью. Язык называли слишком низкоуровневым, критиковали за «спагетти» (необходимость использования условных/безусловных переходов и запоминания адресов/меток), скудость типов данных, использование регистров вместо переменных и даже сравнивали с ассемблером. Стек состоит всего из 4 уровней и требовал тщательного планирования сложных вычислений, расширяемость самого языка ограничена подпрограммами.

Третьим пунктом придирок была закрытость системы ЭКВМ. Не было опубликовано SDK для написания владельцами программ для МК-161 на языках высокого уровня, таких как Си. Также, по информации от производителя, прошивка в ЭКВМ передаётся с использованием криптографических средств, так что замена её владельцем на прошивку собственной разработки представляется трудоёмкой. Исходный текст прошивки, серьёзно облегчивший бы её доработку владельцами, также не был опубликован. Мотивировано это было страхом перед китайскими подделками.

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

2 октября мною был опубликован исходный код (и файл mkp) Форта версии 0.17 — ещё не компилятор, но уже достаточный proof of concept для тех, кто знаком с Фортом не по наслышке. Он содержит описания всех необходимых слов Форта — некоторые, правда, достаточно «сырые» и ещё не отлаженные. Поэтому уже написанный компилятор Форта пока даже не тестировался, существуя в зачаточном состоянии. Низкоуровневые слова Форта написаны на ЯМК. Сейчас Форт полностью, вместе с высокоуровневыми словами, содержится в памяти программ и занимает 85 страниц. Всего же их в ЭКВМ сто. Запас для развития хороший.

Интерпретатор Форта, а также ряд слов Форта уже работают. Интерпретатор исполняет шитый код Форта из памяти программ. Этот тестовый код в терминальном режиме вводит строчку символов с клавиатуры и выводит её обратно на экран, попутно заменяя строчные буквы заглавными. Работает вывод строки неторопливо — мне была важна не оптимизация по времени, а наоборот. Проверить как можно больше слов и конструкций языка Форт, демонстрируя их работоспособность.

Вчера я опубликовал накладку для МК-161 с алфавитно-цифровой клавиатурой, которую использует этот интерпретатор Форта.

Разработка Форта ведётся по данной ссылке и я рад всем, кто поддержит и присоединится к нашей группе с целью довести Форт-161 до рабочего состояния:
vk.com/topic-10838600_30361028

Также проект можно форкать или создавать свои Форты, его текст открыт. Мне было главное продемонстрировать саму концепцию языка высокого уровня на МК-161, преодолевающего встроенные ограничения системы.

P.S. Внимательные люди разглядели, что на накладной клавиатуре отсутствуют подписи на клавише с английской буквой «C», она же русская «Ж». Дело в том, что она задумана на базе клавиши С/П, отключать которую на данном этапе я счёл лишним. Накладка обозначает её чёрным цветом, чтобы случайно не нажали и не остановили работу Форта.

Когда введённые символы будут передаваться системе Форта для исполнения или компиляции, разумеется, стандартная функция клавиша С/П будет отключена, буквы «C» и «Ж» появятся (код для них в Форте уже написан), а для выхода из Форта будет использовано соответствующее слово, кнопка выключения или собственная комбинация клавиш.

Метки публикаций: 
Undefined

Комментарии

Работа проделана большая, результат тоже впечатляет. Оценить трудоемкость написания программы из примерно 8500 команд ПМК я могу, поэтому от критики в техническом плане воздержусь. Наверное, можно лишь в порядке оптимизации эргономики порекомендовать сузить кириллический алфавит (убрать "Ё". "Й", "Ъ"), исключить прописные буквы, использовать фонетическую раскладку.

В концептуальном же плане выскажу такие соображения.

1. Форт, несомненно, инструмент хакерский. Поэтому его слабая сторона - узкое сообщество и высокий порог входа. Сильная сторона - высокое быстродействие и относительно высокий уровень языка (расширенного прикладным словарем) здесь нейтрализуется возможностями аппаратной платформы (МК-161).

2. Выбор аппаратной платформы исходя из принципа "на безрыбье и рак - рыба" понятен. Но про ограничения ты сам написал. И это в настоящий момент наиболее насущная проблема. Если бы платформа для МК72Р уже была бы разработана на уровне макета, то добавить туда "прошивку" Форта не представляло бы проблем. Причем написать её можно было бы на Си, а не на ЯМК, т.е. с гораздо большими возможностями.

Т.е., как мне кажется, развитие сообщества тормозится именно ограничениями платформы. Поддержать совместимость с МК61/52 нужно, но не обязательно делать такой режим основным и, тем более, расширять это признанное тупиковым направление.

Альтернативный собственной разработке вариант взятия другого недорогого (до 50 евро) устройства, допускающего простую смену прошивок и обладающего форм-фактором калькулятора (и прочими требованиями вроде автономии на недели и месяцы) пока нами не рассматривался.

По поводу алфавита. Конечно, если избавиться от строчных (или прописных) букв, реализация поля имени на 7-битных символах будет чуть проще. Так в Форте ИТЭФ и сделано. Если сузить кириллицу, можно восстановить работу «стрелочек» (клавиш выбора) в русском режиме клавиатуры.

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

Для выхода прикладных программ на такой уровень хочется сохранить текстовые возможности МК-161. Тем более, что сейчас знакогенераторы обеспечиваются прошивкой и не занимают места в коде Форта. Вообще, в планах сделать из Форта доступным всё, что доступно на уровне ЯМК. Чтобы писать на Форте во всех случаях, когда не требуется быстродействие.

1.1 Быстродействие, согласен, будет слабым местом. Конечно, наш опыт с ЯМК позволит совершить некоторые чудеса оптимизации. Но действительно шустрый Форт на МК-161 появится лишь тогда, когда научимся прошивать W77LE516, реализуя примитивы Форта и весь ввод-вывод на ассемблере.

1.2 Расширенный прикладной словарь будет. Базовый Форт занимает место в памяти программ. Но под словарь пользователя (и стек) отводится 4 килобайта области двоичных регистров. Для Форта вообще 4Кб это даже мощнее, чем 4Кб ассемблерного кода — здесь же к этим 4Кб будет добавляться выразительный код Форта аж в 10 тысячах байт памяти программ. Причём пользовательские 4Кб можно будет в процессе работы подгружать с электронного диска. Программа на Форте сможет состоять из любого количества 4Кб кусков, при необходимости переключаясь между ними.

Так что основным недостатком будет именно скромное быстродействие.

2. Можно будет попробовать перенести Форт-161 на МК72P и другие модели. Одновременно дорабатывая версии, чтобы обеспечивать некоторый уровень совместимости.

Возможности у Форта одинаковы, реализуются ли примитивы на ЯМК, на ассемблере (как обычно) или на экзотике типа Си. Они больше определяются доступной памятью. Также исполнение Форта без прослойки ЯМК добавит быстродействие.