You are here
Каллисто-2: разработка быстродействующего Форта для МК-161
пт, 11/11/2016 - 04:38 - AtH
Каллисто-2 будет написана на SP-Forth! Подробнее см. соответствующую тему В Контакте.
Кусочек исходного кода — чтобы было понятно, как это сейчас выглядит:
0xD0 COP КИП0 0xD1 COP КИП1 0xD2 COP КИП2 0xD3 COP КИП3 0xD4 COP КИП4 0xD5 COP КИП5 0xD6 COP КИП6 0xD7 COP КИП7 0xD8 COP КИП8 0xD9 COP КИП9 0xDA COP КИПА 0xDB COP КИПВ 0xDC COP КИПС 0xDD COP КИПД 0xDE COP КИПЕ 0xDF 2OP РКИП 0xE0 COP Кx=00 0xE1 COP Кx=01 0xE2 COP Кx=02 0xE3 COP Кx=03 0xE4 COP Кx=04 0xE5 COP Кx=05 0xE6 COP Кx=06 0xE7 COP Кx=07 0xE8 COP Кx=08 0xE9 COP Кx=09 0xEA COP Кx=0А 0xEB COP Кx=0В 0xEC COP Кx=0С 0xED COP Кx=0Д 0xEE COP Кx=0Е 0xEF 2OP РКx=0 0xF2 COP РРВ/О 0xF4 3OP РРП 0xF6 3OP РРИП \ ------------------------- \ Исходный код Каллисто-2 \ Инициализация Cx 9 5 0 0 РРП 9042 \ Адрес таблицы свёрток 1 0 9 9 П6 \ RI := Начало шитого кода - 1 1 6 П9 \ Занесём в R9 адрес NEXT A: NEXT КИП6 ВП 2 КИП6 + П7 \ W := REGW[RI++], считываем CFA в R7 КИП7 РРП 9210 \ Находим по CFA адрес обработчика П8 КБП8 \ Передаём на него управление ORG 100 \ Обработчик 000 2 РРП 9010 \ Инициализация графического экрана 1 2 8 \ Код буквы "А" РРП 9020 \ Вывод символа на графический экран КГРФ \ Обновляем индикатор КБП9 \ NEXT ORG 200 \ Обработчик 001 РРИП 9029 \ Чтение кода нажатой клавиши КNOT \ Проверка на 255 Fx≠0 00 \ Дождёмся чего-нибудь, отличного от 255 КБП9 \ NEXT
Полностью исходный код + результат качать отсюда: http://the-hacker.ru/2016/Callisto2-d4.zip
Черновик 4 выводит на экран букву, ждёт нажатия клавиши и выходит по С/П. Работает NEXT (адресный интерпретатор), но пока нет ни меток, ни имён слов. Использование SP Forth позволяет не только избежать ручной компиляции кода МК-161, но также автоматизировать множество вещей, которые в Каллисто Классик, написанной на MK.EXE, приходилось делать вручную.
Forums:
Каллисто-2, черновик 5
Каллисто-2, черновик 5: http://the-hacker.ru/2016/Callisto2-d5.zip
Теперь шитый код генерируется SP-Forth, в полном соответствии с требованиями нового адресного интерпретатора. «Ассемблер» ЯМК вынесен в отдельный список слов. Определения примитивов выглядят весьма красиво:
Каллисто-2, черновик 6
Каллисто-2, черновик 6: http://the-hacker.ru/2016/Callisto-d6.zip
Заработали определения высокого уровня, то есть стек возвратов и CALL/EXIT. Производительность не мерил, но должно работать ощутимо быстрей Каллисто Классик.
Также добавлены циклы begin/until и begin/again для примитивов — слов на языке МК-161. Этот типично фортовский приём позволяет обходиться без меток в БП и условных переходах назад.
Каллисто-2, черновик 7
Каллисто-2, черновик 7: http://the-hacker.ru/2016/Callisto2-d7.zip
Начал писать терминал. Теперь после запуска Каллисто-2 выводит на индикатор нажимаемые клавиши. Раскладка примерно соответствует цифровой клавиатуре Каллисто Классик и пока не переключается в русский и латинский режимы.
На этот раз я не спешу и делаю всё, как надо. Ввод реализован с помощью прерываний. Вводимые литеры ставятся в очередь длиной 8 литер. Реализован автоповтор, впервые на «Электронике МК-161».
В метаязыке произошёл переход от 2 РРП 9010 к каллистянскому 2 9010 РРП — есть и другие изменения, которые позволят написать такую крупную программу, как транслятор Каллисто-2.
Каллисто-2, черновик 8
Каллисто-2, черновик 8: http://the-hacker.ru/2017/Callisto2-d8.zip
Внешне изменений нет — Каллисто-2 отображает нажатые клавиши, как и раньше. Внутри существенные изменения. Например, появился стек данных. Вершина стека теперь всегда хранится в регистре C.
Во многих реализациях Форта подобный трюк повышает быстродействие. В нашем случае выгода не очевидна. Я довольно долго размышлял над этим решением. Что-то станет работать чуть быстрей, что-то чуть медленней. Будет возможность сравнить.
Ассемблер языка МК теперь поддерживает все коды операций МК-161. Он ещё не умеет ссылаться на метки вперёд, но уже позволил реализовать десятки примитивов Каллисто, включая арифметические операции и операции со стеком. Практически каждое определение удалось записать в одну строчку. Вот некоторые из тех определений, где регистр С дал выигрыш и по размеру кода, и по скорости:
Команды ИП П БП ПП и несколько других стали «умными». Зная, к какому регистру или шагу происходит обращение, они сами выбирают нужный код операции — либо двухшаговой/внутристраничной, либо трёхшаговой/межстраничной команды.
Например РРИП 9000 теперь записывается в ассемблере, как 9000 ИП — ровно также, как в Каллисто. Переходы также стали использовать обратную польскую нотацию. Сперва пишем, куда. Потом пишем БП или Fx=0
При компиляции Каллисто-2 SP Forth выдаёт предупреждения о переопределении ряда слов. Это нормально. В конце-концов, мы и заняты определением слов Каллисто на Форте. Арифметические и другие операции получают новое определение.
Конечно, работы предстоит ещё очень много. Клавиатура и терминальный вывод станут куда умней. Устройство словаря Каллисто-2 пока очень примитивно, многим задумкам реализация только предстоит. Нет стековых диаграмм и другого само-документирования, хотя многое и повторяет Каллисто Классик.
Каллисто-2, черновик 9
Каллисто-2, черновик 9:
http://the-hacker.ru/2017/Callisto2-d9.zip
Как я уже писал в Контакте, верхние два элемента стека данных Каллисто теперь совпадают с регистрами стека X и Y. Поэтому многие примитивы упрощаются до предела, например:
Также Каллисто-2 теперь состоит из трёх файлов (mkp, mkb и mkd) — все три надо передать в МК-161 или эмулятор, чтобы проверить работоспособность. В файле десятичных данных пока передаются лишь два десятичных регистра (R9 и R16), но это только начало. Больше размер исполняемого кода увеличиваться не будет, ибо уже некуда. Но с тремя файлами придётся смириться. Лучше их сохранять на внутренний диск под одним именем. Тогда они образуют «пакет» и загружать транслятор становится проще и быстрее.
Каллисто-2 (черновик 9) сперва выводит на экран приглашение, символ "@", после чего отображает по символу на каждую нажатую клавишу.
Каллисто-2, черновик 10
Брать здесь:
http://the-hacker.ru/2017/Callisto2-d10.zip
Клавиатура становится серьёзней — в Каллисто-2 заработал цифровой режим. Теперь кнопка "3" даёт литеру "3", а последовательное нажатие кнопок "F 3" даёт литеру "#". Разумеется, это совместимо с автоповтором и очередью клавиатуры, важными нововведениями Каллисто-2. Нажав кнопку "F" и удерживая кнопку "3", мы получим автоповтор литеры "#".
Раскладка практически повторяет Каллисто Классик. Небольшие отличия вызваны лучшей продуманностью второй реализации алфавитно-цифровой клавиатуры для «Электроники МК-161». Например, "П" даёт "!", а "F П" даёт "?" — это освободило кнопку "К" для будущих применений.
Литера "|" теперь вводится "F В↑", а литера "↵" переехала на "F ВВОД". Клавиши выбора сейчас дают свои «старшие» коды, а «младшие» коды получаются при использовании префикса "F".
Пока в качестве префиксной клавиши "F" можно использовать любую другую спецкнопку — РУС/ЛАТ и т.п. Но это ненадолго, алфавитные режимы на подходе. Тестовое приложение осталось нетронутым. Хотя драйвер клавиатуры выдаёт правильные коды "Cx" и "F Cx", для редактирования строки их пока никто не использует.
Напомню, что для запуска Каллисто-2 в «Электронику» надо передать три файла — mkp, mkb и mkd.
Каллисто-2, черновик 11
Каллисто-2, черновик 11: http://the-hacker.ru/2017/Callisto2-d11.zip
Тестовая программа теперь выводит приглашение ">", в остальном без изменений. Зато драйвер клавиатуры завершён. В-основном он повторяет клавиатуру Каллисто Классик, но удалось воплотить две мои древние задумки. В цифровом режиме клавиша "K" работает, как Control — например "K S" вводит ^S, управляющий символ с кодом 19 и графическим изображением «знак паузы».
Также в цифровом режиме комбинация префиксных клавиш "F K" позволяет ввести любой символ по его шестнадцатеричному коду. Например, "F K 1 3" это ещё один способ ввести тот же самый «знак паузы». Клавиши выбора (и они же с клавишей "F") в цифровом и латинском режимах дают одинаковые служебные коды. Это позволит использовать их, например, для перемещения курсора.
Чтобы реализовать всё это богатство, в ассемблере МК-161 введены метки с возможностью ссылок вперёд. Подробней я объяснял эту тему в Контакте. Над метками я ещё немного поработаю напильником, но они уже вполне работоспособны.
Каллисто-2, черновик 13
Каллисто-2, черновик 13: http://the-hacker.ru/2018/Callisto2-d13.zip
Благодаря поддержке русских фортеров начал переход к ALSO/ONLY, пока на уровне исходного кода. Слова кросс-компилятора теперь растасованы по спискам/словарям. Реализованные примитивы получили картинку стека. Добавлено несколько новых слов. Одно из них, слово TYPE , выводит титульную строку перед приглашением, с номером версии черновика.
Но для юзера изменений мало. По прежнему нажимаемые клавиши выводятся на индикатор, ничего нового. Напоминаю, что для запуска Каллисто-2 надо передать на МК-161 весь пакет полностью, а не только MKP. Компилируется Каллисто-2 с помощь SP-Forth 4.20
Фрагмент исходного кода. После code идёт каллистянское имя, после скобок реализация на языке ПМК:
Каллисто-2, черновик 14
Каллисто-2, черновик 14: http://the-hacker.ru/2018/Callisto2-d14.zip
Новая, в сравнении с Классик, концепция курсора. Теперь курсор не выделяет литеру, а расположен между ними. Переделан терминальный вывод, с помощью ассоциативных таблиц МК-161. Вполне возможно, что таким он и войдёт в релиз. Начата реализация обновлённого ACCEPT — но пока там одни строительные леса, управление туда не передаётся.
С точки зрения юзера вводимые клавиши выводятся на индикатор, как раньше. Зато теперь куда больше управляющих символов поддерживается. В режиме NUM комбинация ^L (K–) очищает экран, ^J (K8) переходит на строчку вниз, ^G (K БП) звонок и т.д.
В том же режиме NUM работает FK и две цифры шестнадцатеричного кода символа. Буквы A, B, C, D, E и F это кнопки ШГ влево, В/О, С/П, K, ИП и П — они такие же в режиме ЛАТ. Надо лишь помнить, что С/П я пока не отключал и при нажатии на эту кнопку МК-161 перестаёт выполнять черновик.
Кнопка Выход (она же К стрелка влево) завершает выполнение программы. И да, добавил GPL в архив.
Каллисто-2, черновик 15
Каллисто-2, черновик 15: http://the-hacker.ru/2018/Callisto2-d15.zip
Сегодня задышал новый ACCEPT
Его ещё надо отлаживать, оптимизировать и дорабатывать. Не все клавиши редактирования работают. Зато символы вставляются в позицию курсора, курсор уже можно гонять влево-вправо. Ввод строки теперь близок к завершению, с автоповтором и другими удобствами улучшенной клавиатуры Каллисто-2.
ACCEPT будет работать через вспомогательное слово (ACCEPT) — которое позволяет редактировать заготовку строки. Это большой шаг к улучшению редактора экранов Каллисто. В Каллисто Классик редактировать экраны на борту было можно, но во входящем в комплект редакторе (другого никто не написал) при любом изменении строки приходилось набивать её заново. Теперь (ACCEPT) позволит вносить нужные изменения с клавиатуры ЭКВМ, не перебивая строку целиком.
В ближайших планах сделать комбинации клавиш для уборки строки в карман (F ↓) и вставки её оттуда (F↑) — как в Лексиконе. Карман отнимет 92 байта драгоценной байтовой памяти, но должен добавить удобств при разработке приложений на борту МК-161.
Каллисто-2, черновик 16
Каллисто-2, черновик 16: http://the-hacker.ru/2018/Callisto2-d16.zip
Часть ненужного кода закомментировал. Исправил ряд ошибок и провёл первую оптимизацию ACCEPT
Удалось избавиться от R20, весь ACCEPT аккуратно уложился в традиционные советские регистры. Ещё остался баг — при перемещении курсора в конец строки иногда он появляется не там, где нужно. Клавиша «влево» возвращает курсор на место.
Интересно, что пришлось реализовать уникальную языковую конструкцию tails … then для хвостовой рекурсии. Пример использования см. в AccCTL. Но это в языке ПМК. Не факт, что она войдёт в Каллисто.
Каллисто-2, черновик 17
Каллисто-2, черновик 17: http://the-hacker.ru/2018/Callisto2-d17.zip
Исправление ошибок и оптимизация ACCEPT
Помимо прочего, ACCEPT иногда позволяет разместить тонкие буквы в самом конце экранной строки — когда остаётся так мало места, что широкие буквы не влазят. Баг с переходом в конец строки ввода исправлен. В целом ACCEPT готов к реализации более сложных клавиш редактирования.
Каллисто-2, черновик 18
Каллисто-2, черновик 18: http://the-hacker.ru/2018/Callisto2-d18.zip
Заработал ACCEPT — полностью. Теперь буду оптимизировать, но почти все задумки и хотелки реализованы. Клавиши редактирования строки:
← → Переместить курсор на одну позицию влево / вправо
F← F→ Переместить курсор в начало / конец строки
↑ ↓ Переместить курсор на 8 позиций влево / вправо
Сх (BS) Удалить литеру слева от курсора
F Сх (F BS) Удалить все литеры справа от курсора
F ↓ Очистить строку, забрав её в карман
F ↑ Вставить карман в текущую позицию курсора
ВВОД Завершает редактирование строки
Клавиши редактирования можно комбинировать. Например, F← F Сх удалит всю входную строку, не меняя содержимое кармана.
Карман сохраняется между вызовами ACCEPT и хранит не только литеры, но и позицию курсора. Туда, например, можно занести длинное слово и вставить его несколько раз. Если вам нужно продолжить редактирование строки после её сохранения в карман, используйте комбинацию F↓ F↑
Ну и несколько советов по клавиатуре. «Стрелки» не работают в русском режиме, на них «висят» русские буквы. Если надо ввести в строку сами «стрелки», нажмите перед ними в режиме NUM кнопку K. Например, литера ↑ вводится комбинацией K↑
Также напоминаю, что кнопка С/П останавливает программу.
Черновик 18 — значительный прогресс в сравнении с Каллисто Классик, где помимо клавиши ВВОД было всего две клавиши редактирования — удалить последний введённый символ (Cx) и очистить всю строку (F Cx).
Каллисто-2, черновик 20
Каллисто-2, черновик 20: http://the-hacker.ru/2018/Callisto2-d20.zip
Представляю одно из главных нововведений Каллисто-2 — хэш-функцию. Черновик 20 вводит строку с клавиатуры, потом выводит на индикатор её и её хэш.
Именно сравнение имён слов не посимвольно, а по их хэшу позволит Каллисто-2 достичь приемлемого быстродействия уже на «Электронике МК-161». Немного про выбранную хэш-функцию:
Хэш
[quote=AtH]Хэш-функция учитывает длину имени. Поэтому АБВГ и АБГ имеют разные хэши 4708 и 4707, несмотря на одинаковые символы в начале и конце.[/quote]
АБВГ и АББГ будут иметь одинаковый хэш?
Хэш
Да. Если два имени имеют одинаковую длину, их первые два символа и последний совпадают — хэш-функция даст одинаковые значения. Такова цена быстродействия.
Тем не менее, это существенно лучше MSX BASIC’а, где переменные различались по первым двум символам. Там AB1 и AB2 обращались к одной переменной AB, в Каллисто-2 это три разных слова.
Каллисто-2, черновик 21
Каллисто-2, черновик 21: http://the-hacker.ru/2018/Callisto2-d21.zip
80 уже реализованных примитивов получили свои «десятичные заголовки», записанные в регистрах ЭКВМ с номерами 100-179. Это важный шаг по направлению к альфа-версии Каллисто-2. Для сравнения — в Каллисто Классик 298 слов.
Два 4-значных числа перед #code это хэш имени, рассчитанный словом HASH на «железной» МК-161. При программировании «на борту» эти хэши МК-161 будет вычислять самостоятельно и незаметно для владельца. Хочется ещё раз поблагодарить разработчиков «Электроники МК-161». Разрабатывать и отлаживать Каллисто, пользуясь настоящим физическим калькулятором — одно удовольствие. Прямо чувствуешь, как на глазах зарождается ПМК мечты.
Поле CFA и соответствующая ему свёртка с адресом обработчика (ещё одно know how Каллисто-2) генерируются автоматически. На прежнем уровне технологий, когда Каллисто писалась на MK.EXE, такие автоматические вычисления во время компиляции транслятора были бы невозможны. Поэтому второе спасибо — разработчикам СПФ.
Сделан Forth для TI-84+ калькулятора
https://www.reddit.com/r/Forth/comments/a3ipn6/im_17_and_i_created_a_for...
Репозиторий проекта на Github https://github.com/siraben/ti84-forth
P.S. Новость с https://www.reddit.com/r/Forth/
Неплохое начало
Посмотрел, спасибо. На TI-84+ доступен ассемблер, что упростило задачу. Мой первый Форт тоже где-то в таком возрасте был написан.
В целом же проект менее серьёзен. Нет плавучки и собственно калькулятора, вокруг которого построена Каллисто. Документация не завершена. Поддержки русского языка нет и вряд ли будет. Входная строка чуть лучше Каллисто Классик, но похуже Каллисто-2. Редактор экранный, но пока не разбивает редактируемый текст на строки.
Каллисто решила две большие вещи. Совместимость «снизу вверх» с языком МК-61, а также выход из «песочницы» МК-161. Для большинства приложений, где быстродействие не критично, разработчикам будет достаточно Каллисто.
Форт для TI-84+ предоставляет быстродействующую, но целочисленную замену TI-BASIC.
Каллисто-2, черновик 23
Каллисто-2, черновик 23: http://the-hacker.ru/2019/Callisto2-d23.zip
Улучшена формула хэш-функции. Теперь для различения слов используются первые три символа имени, плюс длина. Так было и у Чака Мура, в своё время. Из этого правила два исключения. Если имя начинается с ARC или END — они учитываются, как один символ.
Новая формула позволяет различать слова BLANK и BLOCK — для предыдущей функции это было невозможно. Исключения позволяют отличать arcsin от arccos , а также готовят к реализации CASE
Также я начал реализацию атомов — новейшей концепции Каллисто-2, позволяющей улучшить быстродействие языка. Атом — подпрограмма на языке МК, которой можно дать имя и вызывать из слов, написанных на Каллисто. В шитом коде атом, скорее всего, будет представлен своим адресом в памяти программ. Итого атом будет занимать мало места, а исполняться максимально быстро. За скорость придётся платить. Атому недоступна такая «магия Форта», как параметризация слова через поле данных, а также (возможно) параметры вызова, скомпилированные в шитый код. Поэтому не все слова Каллисто-2 могут быть реализованы, как атомы.
Атом Каллисто-2 близок к примитиву Каллисто Классик, но есть и различия. Например, атом может быть словом высокого уровня, написанным в процедурном коде. Также не любая подпрограмма МК-161 является атомом — атому надо соблюдать ряд регистровых соглашений, чтобы не нарушить работу среды.
Сейчас черновик выводит номер своей версии и просит ввести слово, после чего выводит его на индикатор вместе с вычисленным хэшем. Всё готово для обновления адресного интерпретатора — введения атомов и процедурного кода в памяти программ, самого быстрого из известных.
Каллисто-2, черновик 24
Каллисто-2, черновик 24: http://the-hacker.ru/2019/Callisto2-d24.zip
Перешёл на новый адресный интерпретатор (АИ) с поддержкой атомов. Он примерно на треть (точно не измерял, подсчитал число инструкций) быстрее Каллисто Классик и занимает меньше места — 29 шагов вместо 48. Основная же выгода в том, что после вызова атома и до возврата из него накладные расходы на интерпретацию 0%. Атомы могут вызывать другие атомы (процедурный код), всё это обрабатывается традиционным ПП … В/О. Никакой ручной возни со стеком возврата, и даже два верхних элемента «бесконечного» стека данных доступны в регистрах X и Y.
Атомы сразу освободили 80 байт дорогой байтовой памяти, по сравнению с предыдущими черновиками — им не требуется поле кода. В шитый код атом компилируются очень просто, своим начальным адресом в памяти программ. При необходимости можно сделать полшага назад — ускорить АИ за счёт байтовой памяти, низведя атомы в привычный статус обработчиков.
АИ Каллисто-2 очень необычен для поклонников Форта (адрес NEXT теперь не используется, я даже закомментировал метку), зато очевиден для любителей ПМК.
«Я терпеть не могу компьютеров, особенно тех, которые что-то мне запрещают. Он думает, что если запретил мне выключать движок, то я так и послушался!» © Михаил Пухов
Новосибирск запретил нам исполнять код из памяти данных — Гарвард, гришь? Хорошо. Я написал короткие подпрограммы на все случаи жизни, а в памяти данных размещаем цепочку адресов этих подпрограмм. Плюс слова Форта, чьи поля данных интерпретируются разнообразными обработчиками.
У программистов Каллисто-2 будет даже CREATE DOES> для создания своих обработчиков — то, что мне не удалось сделать в 2017 (в 1.0 поддерживается только <BUILDS DOES>). Это уже заложено в новый АИ, гениальная отечественная реализация (Москва, 2019) гениальной идеи Чака Мура (Шарлотсвилл, 1971). Разработчику теперь не обязательно знать, что Каллисто запущена поверх Гарварда. :-)
Этот каллистянский трюк нам пригодится, и когда полезем в ПЗУ 8051. Вообще, новый АИ уже просится под напильник (заменить псевдоBCD на честную двоичку, десятичные регистры на РОН) — и в прошивку!
Вот, как знакомо и по ПМКшному теперь выглядят атомы Каллисто:
Каллисто-2, черновик 25
Каллисто-2, черновик 25: http://the-hacker.ru/2019/Callisto2-d25.zip
Внешне черновик тот же самый. Разве что пара багов исправлена.
Внутри два больших изменения — больше по форме, чем содержанию. Во-первых, я перешёл на общепринятые соглашения Форта для метакомпиляции, разные суровые THERE и C,-T
Старый наивный код мне нравился больше, но по мере роста и усложнения Каллисто формальности помогут избежать ошибок. Это большой шаг к метакомпиляции. Кросс-компилятор почти завершён, но я решил опубликовать этот черновик до важных финальных правок.
Второе изменение заключается в «причёсывании кросс-ассемблера». Обычно в Форте команды ассемблеров оканчиваются запятой. Мне долго удавалось этого избегать. Но раз уж мы держим курс на шустрый процедурный код, придётся как-то отличать в атомах, например, команду ПМК + от каллистянского слова +
Это я ещё игнорирую слово + СП-Форта, которое удаётся не выпускать за пределы стандартного словаря. :-) Также я сделал подсчёт и вывод числа реализованных слов. Сейчас Каллисто-2 знает 83 слова, в итоге получится примерно 300. Мы уже приближаемся к альфа-версии. Как только кросс-компилятор будет завершён, можно начать переносить уже готовые слова из Каллисто Классик. Но у меня в планах несколько серьёзных улучшений языка. Пока дорожная карта такая:
Напишите книгу про Каллисто и создание умных сред :-)
Допустим пока про реализацию под МК-161 (можно дать эмулятор для начала), а в последних разделах как для других платформ это использовать. Доходы от книги направьте на разработку железа под Каллисто :-) Можно над Бумстартере попробовать профинансировать. В подарки выставьте устройства+книгу, в пределах разумной стоимости я бы купил. В принципе я мог бы даже попробовать написать главы про создание системы компьютерной математики (для школы), потребуется хотя бы эмулятор, на котором хватит места и быстродействия языка. eMKatic же вроде может ???
Книга, развитие Каллисто
Замечательную книгу по Каллисто написал Миша Рамендик — Руководство, есть в комплекте. Будет готова Каллисто-2, может тоже напишет. Писать книги должны писатели.
Как учитель, я больше работаю над воспитанием последователей, кто сможет развивать систему дальше. С финансированием пока не очень хорошо. На уровне выживания, но чуть-чуть развивать систему удаётся. Перенос eForth’а сам по себе показывает успех идей Каллисто, но он также дал несколько интересных идей для развития.
В целом Каллисто-2 будет меньше выдавать себя за Форт. Кому нужен именно Форт, тем eForth’а достаточно. Каллисто-2 будет гораздо ближе к общеизвестному входному языку «Электроники МК-161», без лишних абстракций и излишних уровней иерархии. Но именно такой входной язык, который нужен. Бесконечный стек, имена подпрограмм и переменных, редактирование исходного текста и компиляция на борту — все эти достижения останутся.
Например, привычные всем П и ИП останутся для прямого обращения к регистрам. Слова @ и ! останутся лишь для двухбайтовых переменных. В Каллисто Классик они использовались также для доступа к десятичным регистрам. Эта проверка номера регистра при каждом обращении к памяти не нужна и только замедляет работу, выкину нафиг.
Трансляцию адресов и «единое адресное пространство» также выкину. Будут прямо те номера регистров и адреса, как их в Новосибирске придумали. Без имитации линейной памяти Форт-систем. Тоже должно ускорить работу. Чтение из памяти программ осуществляет слово ИПРГ, этого достаточно.
Ещё один (или не один) девайс как раз в тему
По идее хорошо должен подойти CASIO Algebra FX 2.0, там процессор 186, насколько я помню есть Си чуть ли не Borland C++ работает, хотя бы на первых порах пускай будет хоть одно устройство, где Каллисто будет работать на борту быстро ! Сейчас эти машинки очень дёшевы, максимум тыщи 4 за штуку, а возможности у них приличные, и их было выпущено много ! У вас же упоминается X86 реализация. Вообще популярны в мире CASIO Prizm особенно последняя cg50 (говорят их и в Москве охотно берут), там тоже программирование на С/С++ доступно, уже чуть ли не Python реализован, чем Каллисто хуже ? Если выпустим народный девайс, то думаю можно будет договориться о реализации с московским магазином калькуляторов, они даже сами хотели такое финансировать, главное начать ! Если что у меня есть все эти модели, можно будет проверить как будет работать на них хотя бы частичная реализация.
Метакомпиляция
Реализация на x86 не самоцель, а средство достижения метакомпиляции — чтобы Каллисто смогла откомпилировать саму себя. IBM PC с MS-DOS’ом предоставляет достаточно хорошую среду для этого. Объёмы памяти, текстовый редактор и другие средства разработки, всё подходит. При этом IBM PC сейчас эмулируют на всём, что работает.
Можно заняться реализацией Каллисто для Касио. Посмотрю в эту сторону, конечно. Тем более, что ищу подходящий компьютер. Но навскидку среда для метакомпиляции там менее удобна. Наличие же фанатов Касио будет двигать Каллисто немного в другую сторону, чем хотелось бы.
Метакомпиляция
(Удалено)