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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
мНет описания правки
 
(не показаны 282 промежуточные версии 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 года.


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


При разработке Каллисто учитывались черновики готовящегося стандарта [http://www.forth200x.org/forth200x.html Forth 200x] — например, с помощью стандартных префиксов Форта для каждого числа можно отдельно задавать систему счисления. Также в Каллисто можно обнаружить наследие Форта ИТЭФ, от реализации которого отталкивались первые версии Каллисто. Несмотря на явное влияние стандартов языка Форт, при разработке Каллисто приоритет отдавался удобству и скорости работы на [[ЭКВМ]] — вообще говоря, не предназначенной разработчиками для алгоритмических языков высокого уровня.
== Краткая история Форта (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>


== Словарь Каллисто ==
Имя FORTH язык обрёл в 1968 году, когда интерпретатор заработал на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Говорят, что язык должен был называться FOURTH («четвёртое» поколение языков программирования), но ограничения операционной системы позволили дать файлу только пятибуквенное имя. Тогда Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.'').  
* [[COLD]] — Первая словарная статья
 
* [[WARM]]
Уже в 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'ых годах Форт начал широко распространяться в СССР — чуть позже [[ПМК]] и независимо от них.
* [[BYE]] — Выход из системы может использоваться как временный, отладочный останов.
 
* [[VERSION]] — Кладёт в стек номер версии Каллисто.
Тогда же появились первые советские реализации Форта, из которых на ''Каллисто'' сильнее всего повлияли ФОРТ-ЕС (Ленинград, 1986) и FORTH ИТЭФ (Москва, 1988), чьи исходные тексты были опубликованы в СССР их авторами. Эти «исходники» выложены на вики в качестве исторических примеров отечественной реализации слов ''Каллисто''.
* [[EXECUTE]] — Исполняет слово, [[CFA]] которого хранится в стеке.
 
* [[?BREAK]] — Проверяем клавиатуру на паузу и аварийную остановку.
Последние 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. Например, с помощью [[Префиксы чисел|стандартных префиксов Форта]] для каждого числа можно индивидуально задавать систему счисления.
* [[(LITERAL)]] — Код периода выполнения для литерала.
 
* [[TYPE (Каллисто)|TYPE]] — Передаёт u символов начиная с адреса a на выходное устройство.
Продолжателем Форта, повлиявшим на ''Каллисто'', является и язык {{colorForth}}, развиваемый Чаком Муром в одиночку. Несмотря на явное влияние зарубежных стандартов языка Форт, при разработке ''Каллисто'' приоритет отдавался совместимости с отечественными [[ПМК]], а также удобству и скорости работы на [[Электроника МК-161|«Электронике МК-161»]] — вообще говоря, не предназначенной [[НПП «СЕМИКО»|разработчиками из Новосибирска]] для алгоритмических языков высокого уровня.
* [[TYPE1]] — Вывести строку из памяти данных, заменяя управляющие коды и строго в одну строчку, до конца [[индикатор]]а.
 
* [[?BRANCH]] — Условный переход в шитом коде.
== Основные отличия ''Каллисто'' от Форта ==
* [[BRANCH]] — Безусловный переход в шитом коде.
Вместо фортовского цикла DO…LOOP ''Каллисто'' использует более простой и быстрый цикл [[FOR]][[NEXT]] из {{colorForth}}, а [[стек данных]] содержит привычные 12-разрядные [[десятичные числа]] ЭКВМ. Для отделения дробной части числа от целой служит десятичная запятая, как в ПМК и ЭКВМ.
* [[(FOR)]]
 
* [[(NEXT)]]
[[Файл:CallistoMag.png|left||264px|]]Помимо стандартных для Форта операций деления с остатком, ''Каллисто'' использует [[÷|традиционное для ПМК]] [[Слово ÷|деление с десятичной плавающей запятой]]. Сохранены традиционные для ПМК обозначения операций [[Слово ×|умножения]], [[Слово ↑|подъёма стека]], [[Слово ↔|обмена двух чисел на вершине стека]], математических функций, а также русскоязычные операции ПМК — [[ЗН]] , [[СЧ]] и т.д.
* [[(FIND)]] — Искать слово a1 в списке a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами.
 
* [[DIGIT]] — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
Предусмотрены слова [[Слово ИП|ИП]] и [[Слово П|П]] для обращения к [[Регистры функций МК|функциональным]] и другим [[Регистр памяти данных|регистрам ЭКВМ]] по их привычным номерам. В названиях слов ''Каллисто'' русские буквы можно использовать наряду с английскими, причём заглавные и строчные буквы считаются одинаковыми.
* [[РЕГ!]] — Запись в регистр ЭКВМ Rn при [[Стек|стеке ЭКВМ]], заполненном на основе стека Форта.
 
* [[РЕГ@]] — Чтение из регистра ЭКВМ Rn с сохранением [[Стек|стека ЭКВМ]] в переменных [[RX (Каллисто)|RX]] [[RY (Каллисто)|RY]] [[RZ (Каллисто)|RZ]] [[RT (Каллисто)|RT]]
В Каллисто 1.0 используется [[единое адресное пространство|единая адресация]], объединяющая разрозненные адресные пространства ЭКВМ. При этом размер ''адресуемой единицы'' памяти зависит от адреса и может колебаться от 1 байта до восьми (12-разрядные [[десятичные числа]]). Беззнаковые 16-битные целые считываются в [[Стек данных|стек]] из двух последовательных регистров памяти с помощью слова [[U@]]. Как принято в ЭКВМ, старший байт идёт по младшему адресу. Первые 10000 адресов памяти представляют из себя [[память программ]], в которой находится исполняемый код ''Каллисто'' на [[ЯМК|входном языке МК-161]]. По каждому из этих 10 тысячи адресов содержится 1 байт, доступный только для чтения.
* [[0=]]
 
* [[0-больше (Каллисто)|0&gt;]]
Из-за невозможности исполнять [[Система команд ЭКВМ|код МК-161]] из [[Память двоичных данных|области данных]] при написании порождающих слов вместо современной конструкции CREATE…DOES> используется устаревший, но не менее мощный механизм [[⟨BUILDS|&lt;BUILDS]] [[DOES⟩|DOES&gt;]]
* [[0-меньше (Каллисто)|0&lt;]]
 
* [[= (Каллисто)|=]]
После нажатия [[Клавиша Ввод|клавиши {{Синяя клавиша|Ввод}}]] введённые слова либо исполняются сразу, либо компилируются в [[словарь]], находящийся в [[Память двоичных данных|области двоичных данных]] ([[Единое адресное пространство|адреса]] 11000…15095). В этой же области располагается [[Стек возвратов Каллисто|стек возвратов]] — растущий «вниз», навстречу [[Словарь|словарю]]. [[Стек данных|«Бесконечный» стек данных]] располагается в области [[Регистр десятичных данных|десятичных регистров]] ([[Единое адресное пространство|адреса]] 10000…10999). Навстречу [[Стек данных|десятичному стеку]] растёт [[десятичный словарь]], где хранятся значения десятичных литералов и удобных переменных типа [[VALUE]].
* [[меньше (Каллисто)|&lt;]]
 
* [[больше (Каллисто)|&gt;]]
Из-за ограничений платформы [[буфер]] в ''Каллисто'' только один ([[Единое адресное пространство|адреса]] 15096…18167), а размер загружаемого в него [[блок]]а составляет 3 Кбайта.
* [[ENCL]]
 
* [[EMI]]
== Приложения и их распространение ==
* [[EMIT]] — Отображает на [[индикатор]]е символ, код которого находится в стеке.
Разработанные пользователем программы на ''Каллисто'' называются ''приложениями'' и могут распространяться со средой ''Каллисто'' в форме ''пакета'' — набора файлов для «Электроники МК-161», объединённых общим именем. Приложения могут запускаться сразу же после запуска ''Каллисто'' (см. слово [[APP]]) и возвращаться в [[Режим автоматической работы|автоматический режим]] после своего выполнения (см. слово [[BYE]]).
* [[C.]] — Выводит символ как в дампе, управляющие символы заменяются на "."
 
* [[↵ (Каллисто)|]]
Продвинутые разработчики могут использовать в своих приложениях программы для «Электроники МК-161» (расположенные в [[Память программ|памяти программ]]), изменяя исходный текст среды ''Каллисто''.
* [[BELL]]
 
* [[BEEP]]
=== Исходный текст ===
* [[(PLAY)]]
Помимо ввода с клавиатуры, исходный текст приложений может располагаться на внутреннем диске МК-161 в виде [[экран]]а в пронумерованном [[блок]]е (файле текста), откуда этот исходный текст загружается командой [[LOAD]]
* [[PLOT]] — Отображение точки на [[индикатор]]е
 
* [[DRAW]] — Рисует прямые линии, X и Y - координаты конца линии; L - код цвета/яркости, как и в случае [[PLOT]]
В отличии от ранних диалектов Форта [[Экран|экран Каллисто]] содержит 48 строк, занимает 3 Кб и при интерпретации считывается из [[буфер]]а, расположенного в [[текст|области текста]]. Из-за того, что строка [[экран]]а занимает традиционные 64 символа, использование [[Редактор текста|встроенного в ЭКВМ редактора]] является затруднительным. Разработчикам ''Каллисто'' предлагает перенесённый с Форта строковый редактор EDIT, а также возможность написать собственный редактор [[экран]]ов. Удобней всего использовать ''Каллисто'' с алфавитно-цифровой накладкой на клавиатуру («оверлеем») для быстрого посимвольного ввода команд и данных.
* [[ГРФ]] — Вывод графической информации.
 
* [[↖ (Каллисто)|↖]] — Очищаем [[индикатор]], оба курсора в левый верхний угол
[[Экран]]ы ''Каллисто'' можно передавать на компьютер и распространять в файлах с расширением mkt. В дистрибутиве ''Каллисто'' есть исходный текст компьютерной программы listmkt. Эта программа позволяет преобразовывать файлы mkt в текстовые, которые человеку легко читать и редактировать.
* [[AT-XY]] — Позиционирование курсора: COL ROW AT-XY
 
* [[DISKOFF]]
Несмотря на техническую возможность передавать [[экран]]ы с исходным текстом на компьютер и обратно, ''Каллисто'' рассчитана на то, чтобы вести разработку прямо на борту [[Электроника МК-161|«Электроники МК-161»]], без использования иностранных программ и зарубежного оборудования.
* [[KEY]] — Ожидает ввод символа с клавиатуры, при вводе посылает его код в стек.
 
* [[ACCEPT]]
=== Исполняемый код ===
* [[1+]] — Прибавление 1.
Откомпилированные приложения хранятся в памяти «Электроники МК-161», откуда слово [[SAVE"]] сохраняет их на внутренний диск. Слово [[LOAD"]] позволяет быстро (за несколько секунд) загрузить и выполнить приложение.
* [[2+]] — Прибавление 2.
 
* [[1-]] — Вычитание 1.
Исполняемый код представляет собой два файла, содержащих образы двоичных (mkb) и десятичных (mkd) регистров сразу после компиляции вашего приложения. Для запуска такого приложения потребуется в точности та исполняемая версия ''Каллисто'', которой приложение было откомпилировано. Поэтому удобней всего хранить исполняемый код в виде ''пакета'' из трёх файлов под одним именем, среди которых есть переименованный исполняемый файл ''Каллисто'' (Callisto.mkp). Переменная [[APP]] обеспечит, при необходимости, автозапуск вашего приложения.
* [[2×]] — Умножение на 2 (двоичный сдвиг влево).
 
* [[2/]] — Целочисленное деление на 2 (двоичный сдвиг вправо).
Свободная лицензия ''Каллисто'' запрещает закрытие исходного текста транслятора. Для соблюдения этой лицензии при распространении вашего исполняемого кода предлагается включить в дистрибутив (их можно вынести в отдельный подкаталог) два дополнительных файла, технически не требующихся для запуска вашей программы на «Электронике»:
* [[]] — Деление на 2 чисел с десятичной плавающей запятой.
* исходный текст использованной версии ''Каллисто'', содержащий все внесённые в него изменения (Callisto.mkl)
* [[+ (Каллисто)|+]] — Сложение.
* текст свободной лицензии, по которой распространяется эта (стандартная или изменённая вами) версия ''Каллисто'', например PRAVO.TXT
* [[- (Каллисто)|-]] — Вычитание b из a.
 
* [[× (Каллисто)|×]] — Умножение.
Всего получается пять обязательных файлов, которые для удобства предлагается упаковать в один архив дистрибутива словно пять пальцев одной ладони складываются в кулак. В этот же архив можно добавить документацию на ваше приложение и остальные файлы, которые вы сочтёте полезными для ваших пользователей.
* [[÷ (Каллисто)|÷]] — Деление с десятичной плавающей запятой.
 
* [[/ (Каллисто)|/]] — Целочисленное деление a на b, помещение частного в стек.
'''Включать в дистрибутив исходный текст ваших программ не обязательно вы сами свободно выбираете лицензию для распространения своих авторских материалов.''' Защита от закрытия исходного кода ([https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BF%D0%B8%D0%BB%D0%B5%D1%84%D1%82 «авторское лево»], ''англ.'' copyleft) распространяется только на сам транслятор ''Каллисто'', защищённый законами об авторском праве (и на любые программы, использующие его код).
* [[MOD]] — Получение остатка от деления a на b.
 
* [[/MOD]] — Деление с остатком a на b.
Приложения, написанные вами на ''Каллисто'', вы вправе распространять под любой лицензией.
* [[×/]] — Операция масштабирования -- умножение n1 на n2 с последующим делением на n3.
 
* [[×/MOD]] — Остаток и частное от деления произведения n1*n2 на n3.
== Примечания ==
* [[NEGATE]] — Смена знака числа в стеке.
<references />
* [[Больше-меньше (Каллисто)|&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<sup>2</sup>]] — Возведение в квадрат.
* [[√ (Каллисто)|√]] — Квадратный корень.
* [[1/X (Каллисто)|1/X]] — Обратная величина.
* [[Yˣ|Y<sup>x</sup>]] — Степенная функция.
* [[СЧ]] — Случайное число.
* [[ЗН]] — Знак числа.
* [[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]]
* [[VARIABLE]]
* [[VALUE]]
* [[DOES-больше (Каллисто)|DOES&gt;]]
* [[F-решётка-больше (Каллисто)|F#&gt;]] — Размещает преобразованную строку сразу после словаря, возвращает адрес и число символов.
* [[F-решётка-S (Каллисто)|F#S]] — Преобразовывает число с плавающей запятой в строку символов.
* [[меньше-F-решётка (Каллисто)|&lt;F#]] — Начинает преобразования чисел с плавающей запятой.
* [[0 (Каллисто)|0]]
* [[1 (Каллисто)|1]]
* [[2 (Каллисто)|2]]
* [[3 (Каллисто)|3]]
* [[π (Каллисто)|$\pi$]] — Число пи.
* [[BL]]
* [[C/L]] — Количество символов в одной строке экрана Форта.
* [[B/BUF]]
* [[RT (Каллисто)|RT]]
* [[RZ (Каллисто)|RZ]]
* [[RY (Каллисто)|RY]]
* [[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]]
* [[$EX]] — Десятичное значение порядка вводимого числа
* [[ERB]]
* [[SAVIN]] — Сохраняем [[Больше-IN (Каллисто)|&gt;IN]] в [[INTERPRET]] для [[NUMBER]]
* [[, (Каллисто)|,]] — Компилирует число n в первую свободную ячейку словаря.
* [[C,]] — Компилирует байт c в очередной свободный байт словаря.
* [[Д,]] — Компилирует число x в первую свободную ячейку десятичного словаря.
* [[LATEST]]
* [[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]]
* [[(.")]] — Слово, компилируемое [[."]]
* [[."]] — При исполнении напечатать на терминале следующие литеры до кавычки исключительно.
* [[.(]] — Напечатать следующие литеры до закрывающей скобки исключительно.
* [[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]]
* [[LITERAL]]
* [[FLITERAL]] — Тоже, что и [[LITERAL]], но для плавучки.
* [[?STACK]]
* [[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://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* См. [[Список встроенных слов Каллисто]], [[Слова Каллисто по категориям]] и [[Палитра Каллисто]]
* [http://the-hacker.ru/2015/Callisto-0.3.5a.zip Каллисто v0.3.5a], последняя актуальная версия Каллисто
* См. также учебные статьи [[Первое знакомство с Каллисто]] и [[Простые программы на Каллисто]]
* Языки [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://vk.com/topic-10838600_30361028 Обсуждение Каллисто в Контакте], [http://mk-152.livejournal.com/53935.html в живом журнале] и [http://arbinada.com/pmk/ru/node/1195 на сайте Арбинады]
* [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://the-hacker.ru/2017/Callisto-1.zip Каллисто Классик 1.0], последняя актуальная версия ''Каллисто'' и [http://the-hacker.ru/Callisto.html её исходный текст]
* [https://www.youtube.com/watch?v=YPBFf55AAD4 Видеообзор Каллисто v0.8б] на YouTube
* Языки [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 (англ.)

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

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