Каллисто 0.9б

Каллисто 0.9б:
the-hacker.ru/2016/Callisto-0.9b.zip

Изменения отражены в листинге:
the-hacker.ru/2016/Callisto.html
Главное изменение в новой ветке 0.9 — в архив включён файл words.txt

В файле words.txt в алфавитном порядке перечислены все слова Каллисто: их имена, стековая диаграмма и краткое описание в одну строчку. Для специалиста этого файла достаточно, чтобы начать программировать на Каллисто. Разработать этот короткий точный файл в 45 Кб было трудней, чем написать Каллисто. Кстати, его создаёт из исходного файла Callisto.mkl программа mkwords.c — которая также есть в дистрибутиве.

Из нововведений главное — косвенная адресация! Всё, как в ПМК — автоинкремент, автодекремент, целая часть числа. Аналоги КИП и КП, вот только работают теперь они не только с регистрами 0…6, а с любыми переменными VARIABLE и FVARIABLE

Косвенная адресация ++@ и ++! работает с предварительным автоувеличением (как КИП4…КИП6 и КП4…КП6)

Косвенная адресация −−@ и −−! работает с предварительным автоуменьшением (как КИП0…КИП3 и КИП4…КИП6)

FVARIABLE это новое порождающее слово из Форта-94. Оно отличается от VARIABLE лишь тем, что созданная им переменная будет класть на стек адрес десятичного регистра, а не байтового. Также я освободил 30 десятичных регистров для программ на Каллисто. Точнее, продумал я это давно. Но теперь изменил нужный байт и вместо R50 первый доступный регистр это R20.

На примере FVARIABLE, как устроена косвенная адресация в Каллисто (указатель P можно объявить, как VARIABLE и ничего особо не изменится, ведь дробная часть указателя традиционно отбрасывается):

CREATE Строка 10 ALLOT
Строка 10 DUMP
FVARIABLE P
Строка P !
P ++@ .
P ++@ .
'П' P −−!
'К' P −−!
Строка 10 DUMP

Убрано много повторений кода. Чтобы вместить эти нововведения, пришлось пройтись по всему тексту и оптимизировать его, иногда довольно жёсткими приёмами вроде кодово-адресной связки. Слова @ ! +! 0! и т.п. перестали адекватно работать с регистрами функций (это их ускорило) —пользуйтесь специализированными словами ИП и П.

Русский