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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 12: Строка 12:


При разработке Каллисто учитывались черновики готовящегося стандарта [http://www.forth200x.org/forth200x.html Forth 200x] — например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления. Также в Каллисто можно обнаружить наследие Форта ИТЭФ, от реализации которого отталкивались первые версии Каллисто. Несмотря на явное влияние стандартов языка Форт, при разработке Каллисто приоритет отдавался удобству и скорости работы на [[ЭКВМ]] — вообще говоря, не предназначенной разработчиками для алгоритмических языков высокого уровня.
При разработке Каллисто учитывались черновики готовящегося стандарта [http://www.forth200x.org/forth200x.html Forth 200x] — например, с помощью стандартных префиксов Форта для каждого числа можно индивидуально задавать систему счисления. Также в Каллисто можно обнаружить наследие Форта ИТЭФ, от реализации которого отталкивались первые версии Каллисто. Несмотря на явное влияние стандартов языка Форт, при разработке Каллисто приоритет отдавался удобству и скорости работы на [[ЭКВМ]] — вообще говоря, не предназначенной разработчиками для алгоритмических языков высокого уровня.
== Словарь Каллисто ==
* [[COLD]] — Первая словарная статья, «холодная» перезагрузка.
* [[WARM]] — «Тёплая» перезагрузка.
* [[BYE]] — Выход из Каллисто в калькулятор ЭКВМ. Может использоваться, как временный останов для низкоуровневой отладки.
* [[VERSION]] — Кладёт в стек номер версии Каллисто.
* [[EXECUTE]] — Исполняет слово, [[CFA]] которого хранится в [[Стек данных|стеке]].
* [[?BREAK]] — Проверяем клавиатуру на паузу и аварийную остановку.
* [[(LITERAL)]] — Код периода выполнения для литерала.
* [[TYPE (Каллисто)|TYPE]] — Передаёт u символов начиная с адреса a на выходное устройство.
* [[TYPE1]] — Вывести строку из памяти данных, заменяя управляющие коды и строго в одну строчку, до конца [[индикатор]]а.
* [[?BRANCH]] — Условный переход в шитом коде.
* [[BRANCH]] — Безусловный переход в шитом коде.
* [[(FOR)]] — Начало цикла со счётчиком в шитом коде.
* [[(NEXT)]] — Конец цикла со счётчиком в шитом коде.
* [[(FIND)]] — Искать слово a1 в списке a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами.
* [[DIGIT]] — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
* [[РЕГ!]] — Запись в [[Регистр памяти данных|регистр ЭКВМ]] Rn при [[Стек калькулятора|стеке ЭКВМ]], заполненном на основе [[Стек данных|стека данных]].
* [[РЕГ@]] — Чтение из [[Регистр памяти данных|регистра ЭКВМ]] Rn с сохранением [[Стек калькулятора|стека ЭКВМ]] в переменных [[RX (Каллисто)|RX]] [[RY (Каллисто)|RY]] [[RZ (Каллисто)|RZ]] [[RT (Каллисто)|RT]]
* [[0=]]
* [[0-больше (Каллисто)|0>]]
* [[0-меньше (Каллисто)|0<]]
* [[= (Каллисто)|=]]
* [[меньше (Каллисто)|<]]
* [[больше (Каллисто)|>]]
* [[ENCL]]
* [[EMI]]
* [[EMIT]] — Отображает на [[индикатор]]е символ, код которого находится в [[Стек данных|стеке]].
* [[C.]] — Выводит символ как в дампе, управляющие символы заменяются на "."
* [[↵ (Каллисто)|↵]] — Вывести на терминал перевод строки.
* [[BELL]]
* [[BEEP]]
* [[(PLAY)]]
* [[PLOT]] — Отображение точки на [[индикатор]]е
* [[DRAW]] — Рисует прямые линии, X и Y - координаты конца линии; L - код цвета/яркости, как и в случае [[PLOT]]
* [[ГРФ]] — Вывод графической информации.
* [[↖ (Каллисто)|↖]] — Очищаем [[индикатор]], оба курсора в левый верхний угол
* [[AT-XY]] — Позиционирование курсора: COL ROW AT-XY
* [[DISKOFF]]
* [[KEY]] — Ожидает ввод символа с клавиатуры, при вводе посылает его код в [[Стек данных|стек]].
* [[ACCEPT]]
* [[1+]] — Прибавление 1.
* [[2+]] — Прибавление 2.
* [[1-]] — Вычитание 1.
* [[2×]] — Умножение на 2 (двоичный сдвиг влево).
* [[2/]] — Целочисленное деление на 2 (двоичный сдвиг вправо).
* [[2÷]] — Деление на 2 чисел с десятичной плавающей запятой.
* [[+ (Каллисто)|+]] — Сложение.
* [[- (Каллисто)|-]] — Вычитание b из a.
* [[× (Каллисто)|×]] — Умножение.
* [[÷ (Каллисто)|÷]] — Деление с десятичной плавающей запятой.
* [[/ (Каллисто)|/]] — Целочисленное деление a на b, помещение частного в [[Стек данных|стек]].
* [[MOD]] — Получение остатка от деления a на b.
* [[/MOD]] — Деление с остатком a на b.
* [[×/]] — Операция масштабирования -- умножение n1 на n2 с последующим делением на n3.
* [[×/MOD]] — Остаток и частное от деления произведения n1*n2 на n3.
* [[NEGATE]] — Смена знака числа в [[Стек данных|стеке]].
* [[Больше-меньше (Каллисто)|><]]
* [[S-больше-D (Каллисто)|S>D]]
* [[Bar-X-bar (Каллисто)||X|]] — Получение абсолютного значения.
* [[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/2015/Callisto-0.3.5a.zip Каллисто v0.3.5a], последняя актуальная версия Каллисто

Версия от 19:51, 10 августа 2015

Каллисто — компактный диалект языка Форт с элементами colorFORTH, написанный для «Электроники МК-161» на РЯМК и предназначенный для программирования «на борту». Пока существует в альфа-версии, но уже позволяет определять новые слова, редактировать и компилировать экраны, успешно переносить на МК-161 старые программы, написанные на Форте. Актуальная версия — 0.3.5a.

Вместо фортовского цикла DO…LOOP Каллисто использует более простой и быстрый цикл FORNEXT из colorFORTH, а «бесконечный» стек содержит 12-разрядные десятичные числа ЭКВМ с плавающей запятой. Помимо обычной (для Форта) целочисленной операций деления, Каллисто использует традиционное для ПМК деление с плавающей запятой. Сохранены традиционные для ПМК обозначения операций умножения, подъёма стека, а также русскоязычные операции ПМК — ЗН , СЧ и т.д. Предусмотрены команды РЕГ! и РЕГ@ для обращение к функциональным и другим регистрам ЭКВМ по их привычным номерам.

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

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

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

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

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

Ссылки