Каллисто: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
мНет описания правки
 
(не показано 256 промежуточных версий 2 участников)
Строка 1: Строка 1:
'''Каллисто''' — компактный диалект языка Форт с элементами colorFORTH, написанный для [[Электроника МК-161|«Электроники МК-161»]] на [[РЯМК]] и предназначенный для программирования «на борту». Пока существует в альфа-версии, но уже позволяет определять новые слова, редактировать и компилировать экраны, успешно переносить на МК-161 старые программы, написанные на Форте. Актуальная версия — 0.3.5a.
[[Файл:Callisto-161.JPG|thumb|right|360px|''Каллисто'', запущенная на «Электронике МК-161» с накладной клавиатурой.]]


Вместо фортовского цикла DO…LOOP Каллисто использует более простой и быстрый цикл [[FOR]][[NEXT]] из colorFORTH, а [[Стек данных|«бесконечный» стек]] содержит 12-разрядные десятичные числа ЭКВМ с плавающей запятой. Помимо обычной (для Форта) целочисленной операций деления, Каллисто использует традиционное для ПМК деление с плавающей запятой. Сохранены традиционные для ПМК обозначения операций умножения, подъёма стека, а также русскоязычные операции ПМК — [[ЗН]] , [[СЧ]] и т.д. Предусмотрены команды [[РЕГ!]] и [[РЕГ@]] для обращение к функциональным и другим регистрам ЭКВМ по их привычным номерам.
'''Каллисто''' — хэкерское<ref>Не имеющее отношение к [[НПП «СЕМИКО»|производителю]] [[Электроника МК-161|«Электроники МК-161»]]. Русское слово хэкер происходит от английского слова [https://en.wikipedia.org/wiki/Hacker_(expert) hacker], но исключает паразитное значение «компьютерный преступник».</ref> расширение входного языка [[Электроника МК-161|«Электроники МК-161»]], предназначенное для разработки приложений «на борту» (без использования компьютера). '''Простые вычисления для [[«Электроники МК-61»]] и [[«Электроники МК-161»]] можно набивать и выполнять в строке ''Каллисто'' без изменений''', только добавьте пробел и [[Слово .|точку]] в конце для вывода результата.


В Каллисто используется [[единое адресное пространство]], при этом размер ячейки памяти зависит от адреса и может колебаться от 1 байта до 12-разрядного десятичного числа с плавающей запятой. Беззнаковые 16-битные целые считываются в [[Стек данных|стек]] из двух последовательных ячеек (байт) памяти с помощью слова [[U@]]. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 ячеек памяти представляют из себя [[память программ]], в которой находится исполняемый код Каллисто. Каждая из этих 10 тысячи ячеек содержит 1 байт, доступный только для чтения. Из-за невозможности исполнять [[Система команд ЭКВМ|код МК-161]] из [[Память двоичных данных|области данных]] при написании определяющих слов вместо конструкции CREATE…DOES> используется более древний, но не менее мощный механизм [[меньше-BUILDS|&lt;BUILDS]] … [[DOES-больше (Каллисто)|DOES&gt;]]
Среда ''Каллисто'' написана для [[Электроника МК-161|«Электроники МК-161»]] на [[РЯМК|расширенном языке МК]] и является компактным диалектом Форта с элементами {{colorForth}}. Распространяется под свободной лицензией с авторским левом ([https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82 copyleft]), за другой формой лицензирования обращайтесь к правообладателю.


После нажатия клавиши ВВОД введённые слова либо исполняются сразу, либо компилируются в словарь (dictionary), находящийся в [[Память двоичных данных|области двоичных данных]]. В этой же области располагается стек возвратов. «Бесконечный» стек данных располагается в области [[Регистр десятичных данных|десятичных регистров]]. Там же располагается «десятичный словарь», где хранятся удобные десятичные переменные типа [[VALUE]]
Транслятор ''Каллисто Классик'' (версия 1.0) выпущен 7 ноября 2017 года.


Помимо ввода с клавиатуры, исходный текст на языке Каллисто может располагаться на электронном диске в виде ''экрана'', в пронумерованном ''блоке'' (текстовом файле).
Подробное описание слов ''Каллисто'' с использованием [[Стековая нотация|стековой нотации]] см. в статье [[Слова Каллисто по категориям]]. Также см. статью [[Архитектура Каллисто]] и официальное Руководство по эксплуатации ([http://the-hacker.ru/2017/Callisto.pdf pdf], 40 стр.).


В отличии от ранних диалектов Форта экран Каллисто содержит 48 строк, занимает 3 Кб и при интерпретации считывается из [[буфер]]а в области [[текст]]а. Из-за того, что строка экрана занимает традиционные 64 символа, использование [[Редактор текста|встроенного в ЭКВМ редактора]] является затруднительным. Программистам Каллисто предлагает строковый редактор EDIT, а также возможность написать собственный редактор экранов. Каллисто использует накладную алфавитно-цифровую клавиатуру для быстрого посимвольного ввода команд и данных.
== Краткая история Форта (1958-2016) ==
Интересно, что разработка Форта началась в 1958 году, когда [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F Смитсоновская астрофизическая обсерватория] наняла [https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D1%80,_%D0%A7%D0%B0%D1%80%D0%BB%D1%8C%D0%B7_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%29 Чака Мура], студента [https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%81%D1%81%D0%B0%D1%87%D1%83%D1%81%D0%B5%D1%82%D1%81%D0%BA%D0%B8%D0%B9_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%81%D1%82%D0%B8%D1%82%D1%83%D1%82 МТИ], для расчёта на [https://ru.wikipedia.org/wiki/IBM_704 IBM EDPM 704] орбиты и оптического отслеживания советского [https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA-1 Спутника], запущенного 4 октября 1957 года абсолютно неожиданно для США.<ref>[http://www.colorforth.com/HOPL.html «Forth - The Early Years» Chuck Moore, 1991] ''(англ.)''</ref>


При разработке Каллисто учитывались черновики готовящегося стандарта [http://www.forth200x.org/forth200x.html Forth 200x] — например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления. Также в Каллисто можно обнаружить наследие Форта ИТЭФ, от реализации которого отталкивались первые версии Каллисто. Несмотря на явное влияние стандартов языка Форт, при разработке Каллисто приоритет отдавался удобству и скорости работы на [[ЭКВМ]] — вообще говоря, не предназначенной разработчиками для алгоритмических языков высокого уровня.
Имя FORTH язык обрёл в 1968 году, когда интерпретатор заработал на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Говорят, что язык должен был называться FOURTH («четвёртое» поколение языков программирования), но ограничения операционной системы позволили дать файлу только пятибуквенное имя. Тогда Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.'').  


== Словарь Каллисто ==
Уже в 1976 году Форт был принят [https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B6%D0%B4%D1%83%D0%BD%D0%B0%D1%80%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%BD%D0%BE%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%BE%D1%8E%D0%B7 Международным Астрономическим Союзом], как стандартный язык. Первые влиятельные стандарты Форта появились в 1979 и 1983 годах. В 1980-90'ых годах Форт начал широко распространяться в СССР — чуть позже [[ПМК]] и независимо от них.
* [[COLD]] — Первая словарная статья, «холодная» перезагрузка.
 
* [[WARM]] — «Тёплая» перезагрузка.
Тогда же появились первые советские реализации Форта, из которых на ''Каллисто'' сильнее всего повлияли ФОРТ-ЕС (Ленинград, 1986) и FORTH ИТЭФ (Москва, 1988), чьи исходные тексты были опубликованы в СССР их авторами. Эти «исходники» выложены на вики в качестве исторических примеров отечественной реализации слов ''Каллисто''.
* [[BYE]] — Выход из Каллисто в калькулятор ЭКВМ. Может использоваться, как временный останов для низкоуровневой отладки.
 
* [[VERSION]] — Кладёт в стек номер версии Каллисто.
Последние 20 лет общепризнанным в России и зарубежом является международный стандарт Форта ([http://www.iso.org/iso/ru/home/store/catalogue_tc/catalogue_detail.htm?csnumber=26479 ISO/IEC 15145:1997]), созданный на основе американского стандарта [http://forth.sourceforge.net/standard/dpans/dpans.htm ANS Forth] 1994 года. Ему на смену неторопливо готовится [http://www.forth200x.org/forth200x.html новый стандарт Форта] (условно называемый Форт-2012), черновики которого были учтены при разработке ''Каллисто'' наряду с критикой стандарта ANS. Например, с помощью [[Префиксы чисел|стандартных префиксов Форта]] для каждого числа можно индивидуально задавать систему счисления.  
* [[EXECUTE]] — Исполняет слово, [[CFA]] которого хранится в [[Стек данных|стеке]].
 
* [[?BREAK]] — Проверяем клавиатуру на паузу и аварийную остановку.
Продолжателем Форта, повлиявшим на ''Каллисто'', является и язык {{colorForth}}, развиваемый Чаком Муром в одиночку. Несмотря на явное влияние зарубежных стандартов языка Форт, при разработке ''Каллисто'' приоритет отдавался совместимости с отечественными [[ПМК]], а также удобству и скорости работы на [[Электроника МК-161|«Электронике МК-161»]] — вообще говоря, не предназначенной [[НПП «СЕМИКО»|разработчиками из Новосибирска]] для алгоритмических языков высокого уровня.
* [[(LITERAL)]] — Код периода выполнения для литерала.
 
* [[TYPE (Каллисто)|TYPE]] — Передаёт u символов начиная с адреса a на выходное устройство.
== Основные отличия ''Каллисто'' от Форта ==
* [[TYPE1]] — Вывести строку из памяти данных, заменяя управляющие коды и строго в одну строчку, до конца [[индикатор]]а.
Вместо фортовского цикла DO…LOOP ''Каллисто'' использует более простой и быстрый цикл [[FOR]][[NEXT]] из {{colorForth}}, а [[стек данных]] содержит привычные 12-разрядные [[десятичные числа]] ЭКВМ. Для отделения дробной части числа от целой служит десятичная запятая, как в ПМК и ЭКВМ.
* [[?BRANCH]] — Условный переход в шитом коде.
 
* [[BRANCH]] — Безусловный переход в шитом коде.
[[Файл:CallistoMag.png|left||264px|]]Помимо стандартных для Форта операций деления с остатком, ''Каллисто'' использует [[÷|традиционное для ПМК]] [[Слово ÷|деление с десятичной плавающей запятой]]. Сохранены традиционные для ПМК обозначения операций [[Слово ×|умножения]], [[Слово ↑|подъёма стека]], [[Слово ↔|обмена двух чисел на вершине стека]], математических функций, а также русскоязычные операции ПМК — [[ЗН]] , [[СЧ]] и т.д.
* [[(FOR)]] — Начало цикла со счётчиком в шитом коде.
 
* [[(NEXT)]] — Конец цикла со счётчиком в шитом коде.
Предусмотрены слова [[Слово ИП|ИП]] и [[Слово П|П]] для обращения к [[Регистры функций МК|функциональным]] и другим [[Регистр памяти данных|регистрам ЭКВМ]] по их привычным номерам. В названиях слов ''Каллисто'' русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.
* [[(FIND)]] — Искать слово a1 в списке a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами.
 
* [[DIGIT]] — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
В Каллисто 1.0 используется [[единое адресное пространство|единая адресация]], объединяющая разрозненные адресные пространства ЭКВМ. При этом размер ''адресуемой единицы'' памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные [[десятичные числа]]). Беззнаковые 16-битные целые считываются в [[Стек данных|стек]] из двух последовательных регистров памяти с помощью слова [[U@]]. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 адресов памяти представляют из себя [[память программ]], в которой находится исполняемый код ''Каллисто'' на [[ЯМК|входном языке МК-161]]. По каждому из этих 10 тысячи адресов содержится 1 байт, доступный только для чтения.
* [[РЕГ!]] — Запись в [[Регистр памяти данных|регистр ЭКВМ]] Rn при [[Стек калькулятора|стеке ЭКВМ]], заполненном на основе [[Стек данных|стека данных]].
 
* [[РЕГ@]] — Чтение из [[Регистр памяти данных|регистра ЭКВМ]] Rn с сохранением [[Стек калькулятора|стека ЭКВМ]] в переменных [[RX (Каллисто)|RX]] [[RY (Каллисто)|RY]] [[RZ (Каллисто)|RZ]] [[RT (Каллисто)|RT]]
Из-за невозможности исполнять [[Система команд ЭКВМ|код МК-161]] из [[Память двоичных данных|области данных]] при написании порождающих слов вместо современной конструкции CREATE…DOES> используется устаревший, но не менее мощный механизм [[⟨BUILDS|&lt;BUILDS]] [[DOES⟩|DOES&gt;]]
* [[0=]]
 
* [[0-больше (Каллисто)|0&gt;]]
После нажатия [[Клавиша Ввод|клавиши {{Синяя клавиша|Ввод}}]] введённые слова либо исполняются сразу, либо компилируются в [[словарь]], находящийся в [[Память двоичных данных|области двоичных данных]] ([[Единое адресное пространство|адреса]] 11000…15095). В этой же области располагается [[Стек возвратов Каллисто|стек возвратов]] — растущий «вниз», навстречу [[Словарь|словарю]]. [[Стек данных|«Бесконечный» стек данных]] располагается в области [[Регистр десятичных данных|десятичных регистров]] ([[Единое адресное пространство|адреса]] 10000…10999). Навстречу [[Стек данных|десятичному стеку]] растёт [[десятичный словарь]], где хранятся значения десятичных литералов и удобных переменных типа [[VALUE]].
* [[0-меньше (Каллисто)|0&lt;]]
 
* [[= (Каллисто)|=]]
Из-за ограничений платформы [[буфер]] в ''Каллисто'' только один ([[Единое адресное пространство|адреса]] 15096…18167), а размер загружаемого в него [[блок]]а составляет 3 Кбайта.
* [[меньше (Каллисто)|&lt;]]
 
* [[больше (Каллисто)|&gt;]]
== Приложения и их распространение ==
* [[ENCL]]
Разработанные пользователем программы на ''Каллисто'' называются ''приложениями'' и могут распространяться со средой ''Каллисто'' в форме ''пакета'' — набора файлов для «Электроники МК-161», объединённых общим именем. Приложения могут запускаться сразу же после запуска ''Каллисто'' (см. слово [[APP]]) и возвращаться в [[Режим автоматической работы|автоматический режим]] после своего выполнения (см. слово [[BYE]]).
* [[EMI]]
 
* [[EMIT]] — Отображает на [[индикатор]]е символ, код которого находится в [[Стек данных|стеке]].
Продвинутые разработчики могут использовать в своих приложениях программы для «Электроники МК-161» (расположенные в [[Память программ|памяти программ]]), изменяя исходный текст среды ''Каллисто''.
* [[C.]] — Выводит символ как в дампе, управляющие символы заменяются на "."
 
* [[↵ (Каллисто)|↵]] — Вывести на терминал перевод строки.
=== Исходный текст ===
* [[BELL]]
Помимо ввода с клавиатуры, исходный текст приложений может располагаться на внутреннем диске МК-161 в виде [[экран]]а в пронумерованном [[блок]]е (файле текста), откуда этот исходный текст загружается командой [[LOAD]]
* [[BEEP]]
 
* [[(PLAY)]]
В отличии от ранних диалектов Форта [[Экран|экран Каллисто]] содержит 48 строк, занимает 3 Кб и при интерпретации считывается из [[буфер]]а, расположенного в [[текст|области текста]]. Из-за того, что строка [[экран]]а занимает традиционные 64 символа, использование [[Редактор текста|встроенного в ЭКВМ редактора]] является затруднительным. Разработчикам ''Каллисто'' предлагает перенесённый с Форта строковый редактор EDIT, а также возможность написать собственный редактор [[экран]]ов. Удобней всего использовать ''Каллисто'' с алфавитно-цифровой накладкой на клавиатуру («оверлеем») для быстрого посимвольного ввода команд и данных.
* [[PLOT]] — Отображение точки на [[индикатор]]е
 
* [[DRAW]] — Рисует прямые линии, X и Y - координаты конца линии; L - код цвета/яркости, как и в случае [[PLOT]]
[[Экран]]ы ''Каллисто'' можно передавать на компьютер и распространять в файлах с расширением mkt. В дистрибутиве ''Каллисто'' есть исходный текст компьютерной программы listmkt. Эта программа позволяет преобразовывать файлы mkt в текстовые, которые человеку легко читать и редактировать.
* [[ГРФ]] — Вывод графической информации.
 
* [[↖ (Каллисто)|]] — Очищаем [[индикатор]], оба курсора в левый верхний угол
Несмотря на техническую возможность передавать [[экран]]ы с исходным текстом на компьютер и обратно, ''Каллисто'' рассчитана на то, чтобы вести разработку прямо на борту [[Электроника МК-161|«Электроники МК-161»]], без использования иностранных программ и зарубежного оборудования.
* [[AT-XY]] — Позиционирование курсора: COL ROW AT-XY
 
* [[DISKOFF]]
=== Исполняемый код ===
* [[KEY]] — Ожидает ввод символа с клавиатуры, при вводе посылает его код в [[Стек данных|стек]].
Откомпилированные приложения хранятся в памяти «Электроники МК-161», откуда слово [[SAVE"]] сохраняет их на внутренний диск. Слово [[LOAD"]] позволяет быстро (за несколько секунд) загрузить и выполнить приложение.
* [[ACCEPT]]
 
* [[1+]] — Прибавление 1.
Исполняемый код представляет собой два файла, содержащих образы двоичных (mkb) и десятичных (mkd) регистров сразу после компиляции вашего приложения. Для запуска такого приложения потребуется в точности та исполняемая версия ''Каллисто'', которой приложение было откомпилировано. Поэтому удобней всего хранить исполняемый код в виде ''пакета'' из трёх файлов под одним именем, среди которых есть переименованный исполняемый файл ''Каллисто'' (Callisto.mkp). Переменная [[APP]] обеспечит, при необходимости, автозапуск вашего приложения.
* [[2+]] — Прибавление 2.
 
* [[1-]] — Вычитание 1.
Свободная лицензия ''Каллисто'' запрещает закрытие исходного текста транслятора. Для соблюдения этой лицензии при распространении вашего исполняемого кода предлагается включить в дистрибутив (их можно вынести в отдельный подкаталог) два дополнительных файла, технически не требующихся для запуска вашей программы на «Электронике»:
* [[]] — Умножение на 2 (двоичный сдвиг влево).
* исходный текст использованной версии ''Каллисто'', содержащий все внесённые в него изменения (Callisto.mkl)
* [[2/]] — Целочисленное деление на 2 (двоичный сдвиг вправо).
* текст свободной лицензии, по которой распространяется эта (стандартная или изменённая вами) версия ''Каллисто'', например PRAVO.TXT
* [[]] — Деление на 2 чисел с десятичной плавающей запятой.
 
* [[+ (Каллисто)|+]] — Сложение.
Всего получается пять обязательных файлов, которые для удобства предлагается упаковать в один архив дистрибутива словно пять пальцев одной ладони складываются в кулак. В этот же архив можно добавить документацию на ваше приложение и остальные файлы, которые вы сочтёте полезными для ваших пользователей.
* [[- (Каллисто)|-]] — Вычитание b из a.
 
* [[× (Каллисто)]] — Умножение.
'''Включать в дистрибутив исходный текст ваших программ не обязательно — вы сами свободно выбираете лицензию для распространения своих авторских материалов.''' Защита от закрытия исходного кода ([https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82 «авторское лево»], ''англ.'' copyleft) распространяется только на сам транслятор ''Каллисто'', защищённый законами об авторском праве (и на любые программы, использующие его код).
* [[÷ (Каллисто)|÷]] — Деление с десятичной плавающей запятой.
 
* [[/ (Каллисто)|/]] — Целочисленное деление a на b, помещение частного в [[Стек данных|стек]].
Приложения, написанные вами на ''Каллисто'', вы вправе распространять под любой лицензией.
* [[MOD]] — Получение остатка от деления a на b.
 
* [[/MOD]] — Деление с остатком a на b.
== Примечания ==
* [[×/]] — Операция масштабирования -- умножение n1 на n2 с последующим делением на n3.
<references />
* [[×/MOD]] — Остаток и частное от деления произведения n1*n2 на n3.
* [[NEGATE]] — Смена знака числа в [[Стек данных|стеке]].
* [[Больше-меньше (Каллисто)|&gt;&lt;]]
* [[S-больше-D (Каллисто)|S&gt;D]]
* [[Bar-X-bar (Каллисто)|&#124;X&#124;]] — Получение абсолютного значения.
* [[AND]] — 32-битное побитовое логическое умножение (И).
* [[OR]] — 32-битное побитовое логическое сложение (ИЛИ).
* [[XOR]] — 32-битное побитовое логическое исключающее ИЛИ (XOR).
* [[INVERT]] — 32-битное побитовое логическое отрицание (НЕ).
* [[MIN]] — Выделение минимума из двух чисел.
* [[MAX]] — Выделение максимума из двух чисел.
* [[10ˣ|10<sup>x</sup>]] — Десятичный антилогарифм.
* [[Eˣ|E<sup>x</sup>]] — Экспонента.
* [[LG]] Десятичный логарифм.
* [[LN]] — Натуральный логарифм.
* [[X²|X<sup>2</sup>]] — Возведение в квадрат.
* [[√ (Каллисто)|√]] — Квадратный корень.
* [[1/X (Каллисто)|1/X]] — Обратная величина.
* [[Yˣ|Y<sup>x</sup>]] — Степенная функция.
* [[СЧ]] — Заносит в стек случайное число от 0 до 1.
* [[ЗН]] — Вычисляет знак числа.
* [[lbr-X-rbr (Каллисто)|&#91;X&#93;]] — Целая часть числа.
* [[lbc-X-rbc (Каллисто)|&#123;X&#125;]] — Дробная часть числа.
* [[DEGREES]] — Даёт указание Форту (и ЭКВМ) принимать углы в градусах
* [[RADIANS]] — Даёт указание Форту (и ЭКВМ) принимать углы в радианах
* [[ARCSIN]] — Вычисление арксинуса.
* [[ARCCOS]] — Вычисление арккосинуса.
* [[ARCTG]] — Вычисление арктангенса.
* [[SIN]] — Вычисление синуса.
* [[COS]] — Вычисление косинуса.
* [[TG]] — Вычисление тангенса.
* [[SP@]] — Записывает в стек адрес вершины [[Стек данных|стека]], до исполнения команды [[SP@]]
* [[!SP]] — Устанавливает указатель [[Стек данных|стека]] в исходное состояние из переменной [[S0]].
* [[RP@]] — Адрес текущей вершины [[Стек возвратов Каллисто|стека возвратов]].
* [[!RP]] — Присваивает указателю [[Стек возвратов Каллисто|стека возвратов]] исходное (базовое) значение из переменной [[R0 (Каллисто)|R0]].
* [[EXIT]] — Закончить исполнение текущего определения.
* [[LEAVE]] — Досрочно прерывает цикл [[FOR]] .. [[NEXT]] (только для области данных)
* [[UNLOOP]]
* [[На R|&gt;R]] — Переносит 16-битное число из [[Стек данных|стека данных]] в [[Стек возвратов Каллисто|стек возвратов]].
* [[С R|R&gt;]] — Переносит 16-битное число из [[Стек возвратов Каллисто|стека возвратов]] в [[Стек данных|стек данных]].
* [[I (Каллисто)|I]] — Копирует верхнее 16-битное число из [[Стек возвратов Каллисто|стека возвратов]] в [[Стек данных|стек данных]].
* [[LEV]]
* [[PICK]] — Копирует элемент [[Стек данных|стека]] с номером u и записывает его наверх [[Стек данных|стека]].
* [[OVER]] — Копирует 2-й элемент [[Стек данных|стека]] и заносит его наверх.
* [[↔ (Каллисто)|↔]] — Меняет местами два верхних элемента [[Стек данных|стека]].
* [[2SWAP]] — Меняет местами верхние две пары чисел в [[Стек данных|стеке]].
* [[↑ (Каллисто)|↑]] — Дублирует верхний элемент [[Стек данных|стека]].
* [[?DUP]] — Осуществляет операцию [[↑ (Каллисто)|↑]] если x<>0
* [[2DUP]] — Дублирует верхнюю пару чисел в [[Стек данных|стеке]].
* [[ROT]] — Переносит 3-й элемент [[Стек данных|стека]] наверх.
* [[2DROP]] — Удаляет из [[Стек данных|стека]] число двойной длины.
* [[DROP]] — Удаляет верхний элемент [[Стек данных|стека]].
* [[CMOVE]] — Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.
* [[CMOVE-больше (Каллисто)|CMOVE&gt;]]
* [[FILL]] — Записывает u байт c в память начиная с адреса a
* [[ERASE]] — Записывает u нулевых байтов в память начиная с адреса a.
* [[BLANK]] — Записывает n кодов пробела (32) в память, начиная с адреса a.
* [[HOLD]] — Вводит в текущую ячейку выходного буфера [[PAD]] символ, код которого в [[Стек данных|стеке]]
* [[TIB]] — Занесение в [[Стек данных|стек]] начального адреса входного буфера терминала (Terminal Input Buffer).
* [[+!]] — Добавляет к содержимому ячейки с адресом a число n
* [[TOGGLE]]
* [[@ (Каллисто)|@]] — Замещает адрес в [[Стек данных|стеке]] его содержимым, двухбайтовая ячейка содержит число со знаком.
* [[U@]] — Считываем в [[Стек данных|стек]] 2-х байтовое целое без знака.
* [[C@]] — Извлекает байт информации из ячейки, адрес которой находится в [[Стек данных|стеке]].
* [[! (Каллисто)|!]] — Записывает число x в ячейку с адресом a.
* [[C!]] — Записывает байт c по адресу a.
* [[BODY-больше (Каллисто)|BODY&gt;]] — [[PFA]] ---> [[CFA]]
* [[!CSP]] — Запомнить адрес вершины [[Стек данных|стека]] в [[CSP]].
* [[HERE]] — Выдаёт адрес первой свободной ячейки в словаре.
* [[ALLOT]] — Добавляет n байт к полю параметров слова, описанного последним.
* [[ДHERE]] — Выдаёт адрес первого свободного десятичного регистра в десятичном словаре.
* [[ДALLOT]] — Резервирует n десятичных регистров в десятичном словаре.
* [[lbr (Каллисто)|&#91;]] — Переключить текстовый интерпретатор в режим исполнения
* [[rbr (Каллисто)|&#93;]] — Переключить текстовый интерпретатор в режим компиляции.
* [[HEX]] — Устанавливает шестнадцатеричную систему счисления для ввода-вывода.
* [[DECIMAL]] — Устанавливает десятичную систему счисления для ввода-вывода.
* [[-TRAILING]] — Отсечь конечные пробелы.
* [[UPPER]]
* [[DEFINITIONS]] — Контекстный словарь [[VOCABULARY]] становится текущим, все последующие описания связаны с этим словарём.
* [[UPDATE]] — Устанавливает в [[буфер]]е флаг "спасения".
* [[X (Каллисто)|X]] — Даёт номер загруженного блока.
* [[Двоеточие (Каллисто)|:]] — Начать определение слова через двоеточие.
* [[; (Каллисто)|;]] — Закончить определение через двоеточие.
* [[CONSTANT]] — Определить следующее слово как константу со значением W.
* [[VARIABLE]] — Определить следующее слово как переменную с начальным значением нуль.
* [[VALUE]] — Определить следующее слово как десятичную переменную типа [[VALUE]].
* [[DOES-больше (Каллисто)|DOES&gt;]] — Начало «исполнения» в определяющем слове.
* [[F-решётка-больше (Каллисто)|F#&gt;]] — Размещает преобразованную строку сразу после словаря, возвращает адрес и число символов.
* [[F-решётка-S (Каллисто)|F#S]] — Преобразовывает число с плавающей запятой в строку символов.
* [[меньше-F-решётка (Каллисто)|&lt;F#]] — Начинает преобразования чисел с плавающей запятой.
* [[0 (Каллисто)|0]] — Константа нуль (значение «ложь»).
* [[1 (Каллисто)|1]] — Константа один.
* [[2 (Каллисто)|2]] — Константа два.
* [[3 (Каллисто)|3]] — Константа три.
* [[π (Каллисто)|$\pi$]] — Число пи.
* [[BL]] — Константа, код пробела (32).
* [[C/L]] — Количество символов в одной строке экрана Форта.
* [[B/BUF]] — Константа, число байт в [[Буфер|блочном буфере]].
* [[RT (Каллисто)|RT]] — Переменная, содержит [[RT]] ЭКВМ после чтения из регистра словом [[РЕГ@]].
* [[RZ (Каллисто)|RZ]] — Переменная, содержит [[RZ]] ЭКВМ после чтения из регистра словом [[РЕГ@]].
* [[RY (Каллисто)|RY]] — Переменная, содержит [[RY]] ЭКВМ после чтения из регистра словом [[РЕГ@]].
* [[RX (Каллисто)|RX]] — Переменная, содержит [[RX]] ЭКВМ после чтения из регистра словом [[РЕГ@]].
* [[S0]] — Переменная, содержит адрес дна [[Стек данных|стека данных]].
* [[R0 (Каллисто)|R0]] — Переменная, адрес дна [[Стек возвратов Каллисто|стека возвратов]].
* [[ДDP]] — Указатель десятичного словаря.
* [[WIDTH]]
* [[WARNING]]
* [[FENCE]] — Служит для защиты базового словаря от стирания с помощью оператора FORGET
* [[DP]]
* [[VOCL]]
* [[AUTOEXEC]] — Слово, [[xt]] которого хранится в переменной [[AUTOEXEC]], будет выполнено после загрузки сохранения по [[LOAD"]]
* [[GRXY]] — Графический курсор
* [[BLK]] — Переменная, номер входного блока-экрана.
* [[больше-IN (Каллисто)|&gt;IN]] — Переменная, смещение очередной литеры во входном текстовом буфере или экране.
* [[SCR]] — Служит для хранения текущего значения номера редактируемого экрана.
* [[OFFSET]] — Переменная, содержащая смещение, добавляемое к номеру блоку на стеке словом [[BLOCK]] для получения физического номера блока.
* [[CONTEXT]] — Переменная указывает на словарь [[VOCABULARY]], в котором происходит поиск слов во время интерпретации входного потока.
* [[CURRENT]] — Переменная указывает словарь [[VOCABULARY]], в который вводятся определения новых слов.
* [[STATE]] — Переменная с состоянием текстового интерпретатора: «Истина» — компиляция.
* [[BASE]] — Переменная, текущее основание системы счисления при вводе-выводе чисел.
* [[DPL]] — Переменная, позиция последней запятой в последнем введённом числе от конца.
* [[CSP]] — Переменная для контрольного хранения значения указателя [[Стек данных|стека]].
* [[R-решётка (Каллисто)|R#]] — Позиция курсора при редактировании экрана.
* [[HLD]] — Переменная — позиция последней литеры, перенесённой в буфер [[PAD]] по [[HOLD]].
* [[$EX]] — Десятичное значение порядка вводимого числа
* [[ERB]]
* [[SAVIN]] — Сохраняем [[Больше-IN (Каллисто)|&gt;IN]] в [[INTERPRET]] для [[NUMBER]]
* [[, (Каллисто)|,]] — Компилирует число n в первую свободную ячейку словаря.
* [[C,]] — Компилирует байт c в очередной свободный байт словаря.
* [[Д,]] — Компилирует число x в первую свободную ячейку десятичного словаря.
* [[LATEST]] — Дать NFA последней созданной статьи.
* [[SPACE]] — Вывод одного пробела.
* [[N-больше-LINK (Каллисто)|N&gt;LINK]] — [[NFA]] ---> [[LFA]]
* [[NAME-больше|NAME&gt;]] — [[NFA]] ---> [[CFA]]
* [[N-больше-BODY|N&gt;BODY]] — [[NFA]] ---> [[PFA]]
* [[?ERROR]] — диагностика ошибок Форт ИТЭФ
* [[?COMP]] — проверить, что текущий режим — компиляция.
* [[?EXEC]]
* [[?PAIR]]
* [[?CSP]] — Выдать ошибку "сбился указатель [[Стек данных|стека]]" если он не равен значению в [[CSP]]
* [[?LOAD]]
* [[COMPILE]] — Компиляция 16-битного слова, следующего за оператором.
* [[SMUDGE]] — Изменить флаг "SMUDGE" в последней созданной статье.
* [[(;CODE)]] — Записать в поле кода последней статьи следующий адрес и закончить определение.
* [[меньше-BUILDS|&lt;BUILDS]]
* [[COUNT]] — Дать адрес первой литеры и число литер N строки со счётчиком T.
* [[(.")]] — Слово, компилируемое [[."]]
* [[."]] — При исполнении напечатать на терминале следующие литеры до кавычки исключительно.
* [[.(]] — Напечатать следующие литеры до закрывающей скобки исключительно.
* [[QUERY]] — Осуществляет ввод строки символов с клавиатуры.
* [[\0 (Каллисто)|\0]] — (Пустое слово) - закончить интерпретацию.
* [[PAD]] — Выдаёт адрес буфера для промежуточного хранения последовательностей символов
* [[WORD]] — Считывает одно слово из входного или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]]
* [[CONVERT]]
* [[FINDN]] — Поиск слова в активных словарях
* [[NUMBER]] — Преобразует в число последовательность символов, начиная с a+1 с учётом [[BASE]],
* [[FL]]
* [[ERROR (Каллисто)|ERROR]] — Диагностика ошибок Форт ИТЭФ
* [[ID.]] — Печатает имя слова, записанное в соответствии с требованиями словаря Форта
* [[CREATE]] — Формирует слово с именем XXX (заголовок и [[CFA]]), оставляя его поле параметров пустым.
* [[lbr-COMPILE-rbr (Каллисто)|&#91;COMPILE&#93;]] — Скомпилировать следующее слово, независимо от его признака [[IMMEDIATE]].
* [[TO]] — Запись в переменную типа [[VALUE]].
* [[LITERAL]]
* [[FLITERAL]] — Тоже, что и [[LITERAL]], но для плавучки.
* [[?STACK]] — Выдать ошибку «Исчерпание [[Стек данных|стека]]», если он менее, чем пуст и «Исчерпание памяти» при зазоре, меньшем 5(?) элементов.
* [[INTERPRET]] — Интерпретирует последовательность слов, пока там что-то есть.
* [[IMMEDIATE]] — Преобразует слово, за описанием которого следует, в оператор, исполняемый при компиляции.
* [[VOCABULARY]] — Слово-описатель, которое создаёт новый словарь.
* [[(]] — Комментарий -- пропустить следующий текст до закрывающей круглой скобки.
* [[QUIT]] — Очищает стек возвратов, устанавливает режим исполнения и возвращает управление терминалу.
* [[ABORT]] — Прерывает исполнение, делает словарь [[FORTH]] контекстным, исполняет [[QUIT]]
* [[EMPTY-BUFFERS]] — Буфер отмечается как пустой, независимо от содержания. Обновлённый блок на диск не записывается.
* [[SAVE-BUFFERS]] — Если находящийся в буфере экран был изменён, скидывает его на диск.
* [[FLUSH]] — Если экран изменён, скидывает его на диск и выкидывает его из памяти.
* [[BUFFER]] — Резервирует блок в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам блок с диска не считывается.
* [[BLOCK]] — Записывает в [[Стек данных|стек]] адрес первого байта в буфере с блоком, номером которого u.
* [[(LINE)]] — Выдаёт адрес a и длину u строки L с экрана S.
* [[MESSAGE]]
* [[LOAD]] — Загружает экран с номером u (компилирует или исполняет)
* [[\ (Каллисто)|\]] — Закончить интерпретацию строки.
* [[\S]] — Закончить интерпретацию экрана.
* [[---больше (Каллисто)|--&gt;]] — Даёт команду немедленно приступить к интерпретации следующего по порядку экрана.
* [['N]] — Ищет слово с именем XXX (из входного или экранного буфера) в словаре Форта.
* [[lbr-'-rbr (Каллисто)|&#91;'&#93;]] — Скомпилировать [[CFA]] следующего слова как числовой литерал.
* [[больше-MARK (Каллисто)|&gt;MARK]] — Отметить текущий адрес для ссылки вперёд.
* [[больше-RESOLVE (Каллисто)|&gt;RESOLVE]] — Разрешить ссылку вперёд в адресе a.
* [[меньше-MARK (Каллисто)|&lt;MARK]] — Отметить текущий адрес для ссылки назад.
* [[меньше-RESOLVE (Каллисто)|&lt;RESOLVE]] — Разрешить ссылку назад в адрес a.
* [[UNTIL]] — Конец цикла "[[BEGIN]] [[UNTIL]]".
* [[AGAIN]] — Конец бесконечного цикла "[[BEGIN]] [[AGAIN]]".
* [[BEGIN]] — Начало циклов "[[BEGIN]]".
* [[THEN]] — Конец ветвления "[[IF]]".
* [[ELSE]] — Начало 2-ой ветви ветвления "[[IF]]".
* [[IF]] — Начало ветвления "[[IF]]".
* [[WHILE]] — Ветвление "[[WHILE]]" в цикле "[[BEGIN]] [[WHILE]] [[REPEAT]]".
* [[REPEAT]] — Конец цикла "[[BEGIN]] [[WHILE]] [[REPEAT]]".
* [[FOR]] — Начало цикла со счётчиком. Цикл исполнится ровно n раз.
* [[NEXT]] — Конец цикла со счётчиком.
* [[SPACES]] — Вывод заданного числа "цифровых" (шириной в цифру) пробелов на [[индикатор]].
* [[I-решётка-больше (Каллисто)|I#>]] — Завершает преобразование целого числа
* [[SIGN]] — Вводит знак "минус" в выходной буфер [[PAD]], если n<0
* [[I-решётка (Каллисто)|I#]] — Преобразует одну цифру целого числа и записывает её в выходной буфер [[PAD]]
* [[I-решётка-S (Каллисто)|I#S]] — Преобразует целое число до тех пор, пока не будет получен 0
* [[меньше-I-решётка (Каллисто)|<I#]] — Начинает процесс преобразования целого числа в последовательность кодов символов.
* [[(.)]] — Как [[I.]] -- только не выводит число на [[индикатор]], а возвращает адрес и длину строки.
* [[I.]] — Вывод целого числа, за которым следует один пробел.
* [[. (Каллисто)|.]] — Вывод числа, за которым следует один пробел.
* [[I.R]] — Напечатать n на терминале в поле длиной p справа.
* [[LIST]] — Распечатывает экран с номером u и записывает его номер в переменную [[SCR]]
* [[INDEX]] — Выводит на экран верхние строчки экранов, номера блоков которых входят в диапазон от нач до кон.
* [[WORDS]] — Просмотр полного списка операторов, хранящихся в данный момент в словаре
* [[COPY]] — Копирует экран n на экран m
* [[DEPTH]] — Выдаёт в [[Стек данных|стек]] полное количество чисел, хранившихся в стеке до исполнения этой команды.
* [[DUMP]] — Отображает u байт памяти начиная с адреса a
* [[.S]] — Распечатка всего содержимого [[Стек данных|стека]], оставляющая [[Стек данных|стек]] без изменений.
* [[КАТ]] — Поиск на электронном диске каталога Форта и переход в него.  Если каталога нет, он создаётся.
* [[SAVE-TEXT]] — Сохранить область текста в энергонезависимую память.
* [[RGRW]] — Чтение/запись файла регистров (словаря) в загруженном каталоге.
* [[LORW]] — Чтение/запись блока из файла в загруженном каталоге.
* [[R/W]]
* [[SAVE"]] — Сохранить в файлы словарь Форта и десятичный словарь.
* [[LOAD"]] — Считать из файлов словарь Форта и десятичный словарь, должны быть от той же версии Каллисто.
* [[;CODE]]
* [[FORTH]] — Делает словарь [[FORTH]] контекстным.
* [[TASK]] — Последнее стандартное слово в словаре.


== Ссылки ==
== Ссылки ==
* См. [[Список встроенных слов Каллисто]], [[Слова Каллисто по категориям]] и [[Палитра Каллисто]]
* См. также учебные статьи [[Первое знакомство с Каллисто]] и [[Простые программы на Каллисто]]
* [https://vk.com/topic-10838600_30361028 Обсуждение Каллисто в Контакте], [http://mk-152.livejournal.com/53935.html в живом журнале] и [http://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* [https://vk.com/topic-10838600_30361028 Обсуждение Каллисто в Контакте], [http://mk-152.livejournal.com/53935.html в живом журнале] и [http://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* [http://the-hacker.ru/2015/Callisto-0.3.5a.zip Каллисто v0.3.5a], последняя актуальная версия Каллисто
* [http://the-hacker.ru/2017/Callisto-1.zip Каллисто Классик 1.0], последняя актуальная версия ''Каллисто'' и [http://the-hacker.ru/Callisto.html её исходный текст]
* Языки [https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Форт] и [https://ru.wikipedia.org/wiki/ColorForth colorFORTH] в Википедии
* [https://www.youtube.com/watch?v=YPBFf55AAD4 Видеообзор Каллисто v0.8б] на YouTube
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_%28%D1%81%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA%29 Каллисто в Википедии] — спутник Юпитера, в честь которого назван язык Каллисто
* Языки [https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 Форт] и [https://ru.wikipedia.org/wiki/ColorForth colorFORTH], а также [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C Обратная польская запись] в Википедии
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_%28%D1%81%D0%BF%D1%83%D1%82%D0%BD%D0%B8%D0%BA%29 Каллисто в Википедии] — спутник Юпитера, в честь которого назван ''язык Каллисто''
* [http://fforum.winglion.ru/ Форум по Форту] и более мелкий [http://www.balancer.ru/tech/forum/viewforum.php?id=29 форум на Авиабазе]
* [http://the-hacker.ru/dpans94_ru_upd.html Стандарт ANS Forth] ''(перевод на русский)'', также без исправленных ошибок: [http://fforum.winglion.ru/att/dpans94/dpans94ru1251.txt в виде текста] и исходный архив ([http://www.forth.org.ru/forth/dpans94_ru.rar rar, 265 Кб])
* [http://www.computer-museum.ru/histsoft/fortran_sorucom_2011.htm Баранов С.Н. «Язык Форт в СССР и России»]
* Статья Андрея Черезова [http://www.enet.ru/win/cherezov/forth_ideas.html «Идеи языка Форт»] (кодировка Windows)
* Статья [http://www.compiler.su/russkij-yazyk-i-programmirovanie.php «Русский язык и программирование»] на compiler.su
* [http://tinyurl.com/Callisto-161 tinyurl.com/Callisto-161] — короткий адрес этой страницы (через зарубежный сайт)
 
== Литература ==
* [https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BB%D0%BB%D0%B8%D1%81%D1%82%D0%BE_(%D1%80%D0%BE%D0%BC%D0%B0%D0%BD) Мартынов Г.С. Каллисто. — Л.: Детгиз, 1957] — Советская н/ф книга, принёсшая в русский язык прилагательное ''каллистянский''.
* '''Семёнов Ю.А. Программирование на языке ФОРТ. — М.: Радио и связь, 1991.''' — В этой московской книге [http://www.ict.edu.ru/persons/index.php?a=pers&c=getForm&r=persDesc&d=light&id_pers=1945 Юрий Алексеевич] опубликовал исходный текст Форта ИТЭФ на макроассемблере IBM PC, сильно повлиявший на разработку ''Каллисто''. Всем энтузиастам ''Каллисто'' рекомендую разыскать эту интересную книгу и использовать её в качестве учебника с «Электроникой МК-161» в руках.
* '''Баранов С.Н., Ноздрунов Н.Р. Язык Форт и его реализации. — Л.: «Машиностроение». Ленингр. отд-ние, 1988. (ЭВМ в производстве)''' ISBN 5-217-00324-3 ББК 32.973 — В этой ленинградской книге опубликован исходный текст ФОРТа-ЕС, который соответствует стандарту Форт-83. ''Каллисто'' во многом близка этой советской реализации Форта, которая получила широкую известность в СССР.
* [http://www.nncron.ru/book/sf/ Л.Броуди «Начальный курс программирования на языке Форт»], она же [http://www.nncron.ru/download/sf.chm в формате chm (1,5 Мб)] и в оригинале (''англ.'': Leo Brodie [https://www.forth.com/starting-forth/ Starting Forth])
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20THINKING%20FORTH Л.Броуди «Способ мышления — Форт»], в [https://www.arbinada.com/en/node/336 формате chm], в виде текста ([http://www.forth.org.ru/~cactus/files/brodie.rar rar, 205 Кб]) и в оригинале (''англ.'': Leo Brodie [http://thinking-forth.sourceforge.net Thinking Forth])
* [http://galileo.phys.virginia.edu/classes/551.jvn.fall01/primer.htm Julian Noble. A Beginner's Guide to Forth.] (''англ.'')


[[Категория:Программы для ЭКВМ]]
[[Категория:Программы для ЭКВМ]]

Текущая версия от 21:46, 5 февраля 2024

Каллисто, запущенная на «Электронике МК-161» с накладной клавиатурой.

Каллисто — хэкерское[1] расширение входного языка «Электроники МК-161», предназначенное для разработки приложений «на борту» (без использования компьютера). Простые вычисления для «Электроники МК-61» и «Электроники МК-161» можно набивать и выполнять в строке Каллисто без изменений, только добавьте пробел и точку в конце для вывода результата.

Среда Каллисто написана для «Электроники МК-161» на расширенном языке МК и является компактным диалектом Форта с элементами colorForth. Распространяется под свободной лицензией с авторским левом (copyleft), за другой формой лицензирования обращайтесь к правообладателю.

Транслятор Каллисто Классик (версия 1.0) выпущен 7 ноября 2017 года.

Подробное описание слов Каллисто с использованием стековой нотации см. в статье Слова Каллисто по категориям. Также см. статью Архитектура Каллисто и официальное Руководство по эксплуатации (pdf, 40 стр.).

Краткая история Форта (1958-2016)[править]

Интересно, что разработка Форта началась в 1958 году, когда Смитсоновская астрофизическая обсерватория наняла Чака Мура, студента МТИ, для расчёта на IBM EDPM 704 орбиты и оптического отслеживания советского Спутника, запущенного 4 октября 1957 года абсолютно неожиданно для США.[2]

Имя FORTH язык обрёл в 1968 году, когда интерпретатор заработал на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Говорят, что язык должен был называться FOURTH («четвёртое» поколение языков программирования), но ограничения операционной системы позволили дать файлу только пятибуквенное имя. Тогда Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.).

Уже в 1976 году Форт был принят Международным Астрономическим Союзом, как стандартный язык. Первые влиятельные стандарты Форта появились в 1979 и 1983 годах. В 1980-90'ых годах Форт начал широко распространяться в СССР — чуть позже ПМК и независимо от них.

Тогда же появились первые советские реализации Форта, из которых на Каллисто сильнее всего повлияли ФОРТ-ЕС (Ленинград, 1986) и FORTH ИТЭФ (Москва, 1988), чьи исходные тексты были опубликованы в СССР их авторами. Эти «исходники» выложены на вики в качестве исторических примеров отечественной реализации слов Каллисто.

Последние 20 лет общепризнанным в России и зарубежом является международный стандарт Форта (ISO/IEC 15145:1997), созданный на основе американского стандарта ANS Forth 1994 года. Ему на смену неторопливо готовится новый стандарт Форта (условно называемый Форт-2012), черновики которого были учтены при разработке Каллисто наряду с критикой стандарта ANS. Например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления.

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

Основные отличия Каллисто от Форта[править]

Вместо фортовского цикла DO…LOOP Каллисто использует более простой и быстрый цикл FORNEXT из colorForth, а стек данных содержит привычные 12-разрядные десятичные числа ЭКВМ. Для отделения дробной части числа от целой служит десятичная запятая, как в ПМК и ЭКВМ.

Помимо стандартных для Форта операций деления с остатком, Каллисто использует традиционное для ПМК деление с десятичной плавающей запятой. Сохранены традиционные для ПМК обозначения операций умножения, подъёма стека, обмена двух чисел на вершине стека, математических функций, а также русскоязычные операции ПМК — ЗН , СЧ и т.д.

Предусмотрены слова ИП и П для обращения к функциональным и другим регистрам ЭКВМ по их привычным номерам. В названиях слов Каллисто русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.

В Каллисто 1.0 используется единая адресация, объединяющая разрозненные адресные пространства ЭКВМ. При этом размер адресуемой единицы памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные десятичные числа). Беззнаковые 16-битные целые считываются в стек из двух последовательных регистров памяти с помощью слова U@. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 адресов памяти представляют из себя память программ, в которой находится исполняемый код Каллисто на входном языке МК-161. По каждому из этих 10 тысячи адресов содержится 1 байт, доступный только для чтения.

Из-за невозможности исполнять код МК-161 из области данных при написании порождающих слов вместо современной конструкции CREATE…DOES> используется устаревший, но не менее мощный механизм <BUILDSDOES>

После нажатия клавиши  Ввод  введённые слова либо исполняются сразу, либо компилируются в словарь, находящийся в области двоичных данных (адреса 11000…15095). В этой же области располагается стек возвратов — растущий «вниз», навстречу словарю. «Бесконечный» стек данных располагается в области десятичных регистров (адреса 10000…10999). Навстречу десятичному стеку растёт десятичный словарь, где хранятся значения десятичных литералов и удобных переменных типа VALUE.

Из-за ограничений платформы буфер в Каллисто только один (адреса 15096…18167), а размер загружаемого в него блока составляет 3 Кбайта.

Приложения и их распространение[править]

Разработанные пользователем программы на Каллисто называются приложениями и могут распространяться со средой Каллисто в форме пакета — набора файлов для «Электроники МК-161», объединённых общим именем. Приложения могут запускаться сразу же после запуска Каллисто (см. слово APP) и возвращаться в автоматический режим после своего выполнения (см. слово BYE).

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

Исходный текст[править]

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

В отличии от ранних диалектов Форта экран Каллисто содержит 48 строк, занимает 3 Кб и при интерпретации считывается из буфера, расположенного в области текста. Из-за того, что строка экрана занимает традиционные 64 символа, использование встроенного в ЭКВМ редактора является затруднительным. Разработчикам Каллисто предлагает перенесённый с Форта строковый редактор EDIT, а также возможность написать собственный редактор экранов. Удобней всего использовать Каллисто с алфавитно-цифровой накладкой на клавиатуру («оверлеем») для быстрого посимвольного ввода команд и данных.

Экраны Каллисто можно передавать на компьютер и распространять в файлах с расширением mkt. В дистрибутиве Каллисто есть исходный текст компьютерной программы listmkt. Эта программа позволяет преобразовывать файлы mkt в текстовые, которые человеку легко читать и редактировать.

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

Исполняемый код[править]

Откомпилированные приложения хранятся в памяти «Электроники МК-161», откуда слово SAVE" сохраняет их на внутренний диск. Слово LOAD" позволяет быстро (за несколько секунд) загрузить и выполнить приложение.

Исполняемый код представляет собой два файла, содержащих образы двоичных (mkb) и десятичных (mkd) регистров сразу после компиляции вашего приложения. Для запуска такого приложения потребуется в точности та исполняемая версия Каллисто, которой приложение было откомпилировано. Поэтому удобней всего хранить исполняемый код в виде пакета из трёх файлов под одним именем, среди которых есть переименованный исполняемый файл Каллисто (Callisto.mkp). Переменная APP обеспечит, при необходимости, автозапуск вашего приложения.

Свободная лицензия Каллисто запрещает закрытие исходного текста транслятора. Для соблюдения этой лицензии при распространении вашего исполняемого кода предлагается включить в дистрибутив (их можно вынести в отдельный подкаталог) два дополнительных файла, технически не требующихся для запуска вашей программы на «Электронике»:

  • исходный текст использованной версии Каллисто, содержащий все внесённые в него изменения (Callisto.mkl)
  • текст свободной лицензии, по которой распространяется эта (стандартная или изменённая вами) версия Каллисто, например PRAVO.TXT

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

Включать в дистрибутив исходный текст ваших программ не обязательно — вы сами свободно выбираете лицензию для распространения своих авторских материалов. Защита от закрытия исходного кода («авторское лево», англ. copyleft) распространяется только на сам транслятор Каллисто, защищённый законами об авторском праве (и на любые программы, использующие его код).

Приложения, написанные вами на Каллисто, вы вправе распространять под любой лицензией.

Примечания[править]

  1. Не имеющее отношение к производителю «Электроники МК-161». Русское слово хэкер происходит от английского слова hacker, но исключает паразитное значение «компьютерный преступник».
  2. «Forth - The Early Years» Chuck Moore, 1991 (англ.)

Ссылки[править]

Литература[править]