Каллисто: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
Строка 23: | Строка 23: | ||
* [[(FOR)]] | * [[(FOR)]] | ||
* [[(NEXT)]] | * [[(NEXT)]] | ||
* [[(FIND)]] — Искать слово a1 в списке a2. При успехе дать NFA его статьи и c - байт длины с флагами. | * [[(FIND)]] — Искать слово a1 в списке a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами. | ||
* [[DIGIT]] — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE | * [[DIGIT]] — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE | ||
* [[РЕГ!]] — Запись в регистр ЭКВМ Rn при стеке ЭКВМ, заполненном на основе стека Форта. | * [[РЕГ!]] — Запись в регистр ЭКВМ Rn при стеке ЭКВМ, заполненном на основе стека Форта. | ||
Строка 42: | Строка 42: | ||
* [[(PLAY)]] | * [[(PLAY)]] | ||
* [[PLOT]] — Отображение точки на экране | * [[PLOT]] — Отображение точки на экране | ||
* [[DRAW]] — Рисует прямые линии, X и Y - координаты конца линии; L - код цвета/яркости, как и в случае PLOT | * [[DRAW]] — Рисует прямые линии, X и Y - координаты конца линии; L - код цвета/яркости, как и в случае [[PLOT]] | ||
* [[ГРФ]] — Вывод графической информации. | * [[ГРФ]] — Вывод графической информации. | ||
* [[↖ (Каллисто)|↖]] — Очищаем экран, оба курсора в левый верхний угол | * [[↖ (Каллисто)|↖]] — Очищаем экран, оба курсора в левый верхний угол | ||
Строка 99: | Строка 99: | ||
* [[!RP]] — Присваивает указателю стека возвратов исходное (базовое) значение из переменной R0. | * [[!RP]] — Присваивает указателю стека возвратов исходное (базовое) значение из переменной R0. | ||
* [[EXIT]] | * [[EXIT]] | ||
* [[LEAVE]] — Досрочно прерывает цикл FOR .. NEXT (только для области данных) | * [[LEAVE]] — Досрочно прерывает цикл [[FOR]] .. [[NEXT]] (только для области данных) | ||
* [[UNLOOP]] | * [[UNLOOP]] | ||
* [[больше-R (Каллисто)|>R]] — Переносит 16-битное число из стека данных в стек возвратов. | * [[больше-R (Каллисто)|>R]] — Переносит 16-битное число из стека данных в стек возвратов. | ||
Строка 120: | Строка 120: | ||
* [[ERASE]] — Записывает u нулевых байтов в память начиная с адреса a. | * [[ERASE]] — Записывает u нулевых байтов в память начиная с адреса a. | ||
* [[BLANK]] — Записывает n кодов пробела (32) в память, начиная с адреса a. | * [[BLANK]] — Записывает n кодов пробела (32) в память, начиная с адреса a. | ||
* [[HOLD]] — Вводит в текущую ячейку выходного буфера PAD символ, код которого в стеке | * [[HOLD]] — Вводит в текущую ячейку выходного буфера [[PAD]] символ, код которого в стеке | ||
* [[TIB]] — Занесение в стек начального адреса входного буфера терминала (Terminal Input Buffer). | * [[TIB]] — Занесение в стек начального адреса входного буфера терминала (Terminal Input Buffer). | ||
* [[+!]] — Добавляет к содержимому ячейки с адресом a число n | * [[+!]] — Добавляет к содержимому ячейки с адресом a число n | ||
Строка 130: | Строка 130: | ||
* [[C!]] — Записывает байт c по адресу a. | * [[C!]] — Записывает байт c по адресу a. | ||
* [[BODY-больше (Каллисто)|BODY>]] — [[PFA]] ---> [[CFA]] | * [[BODY-больше (Каллисто)|BODY>]] — [[PFA]] ---> [[CFA]] | ||
* [[!CSP]] — Запомнить адрес вершины стека в | * [[!CSP]] — Запомнить адрес вершины стека в [[CSP]]. | ||
* [[HERE]] — Выдаёт адрес первой свободной ячейки в словаре. | * [[HERE]] — Выдаёт адрес первой свободной ячейки в словаре. | ||
* [[ALLOT]] — Добавляет n байт к полю параметров слова, описанного последним. | * [[ALLOT]] — Добавляет n байт к полю параметров слова, описанного последним. | ||
Строка 141: | Строка 141: | ||
* [[-TRAILING]] | * [[-TRAILING]] | ||
* [[UPPER]] | * [[UPPER]] | ||
* [[DEFINITIONS]] — Контекстный словарь VOCABULARY становится текущим, все последующие описания связаны с этим словарём. | * [[DEFINITIONS]] — Контекстный словарь [[VOCABULARY]] становится текущим, все последующие описания связаны с этим словарём. | ||
* [[UPDATE]] — Устанавливает в буфере флаг "спасения". | * [[UPDATE]] — Устанавливает в буфере флаг "спасения". | ||
* [[X (Каллисто)|X]] — Даёт номер загруженного блока. | * [[X (Каллисто)|X]] — Даёт номер загруженного блока. | ||
Строка 179: | Строка 179: | ||
* [[SCR]] — Служит для хранения текущего значения номера редактируемого экрана. | * [[SCR]] — Служит для хранения текущего значения номера редактируемого экрана. | ||
* [[OFFSET]] — Переменная, содержащая смещение, добавляемое к номеру блоку на стеке словом [[BLOCK]] для получения физического номера блока. | * [[OFFSET]] — Переменная, содержащая смещение, добавляемое к номеру блоку на стеке словом [[BLOCK]] для получения физического номера блока. | ||
* [[CONTEXT]] — Переменная указывает на словарь VOCABULARY, в котором происходит поиск слов во время интерпретации входного потока. | * [[CONTEXT]] — Переменная указывает на словарь [[VOCABULARY]], в котором происходит поиск слов во время интерпретации входного потока. | ||
* [[CURRENT]] — Переменная указывает словарь VOCABULARY, в который вводятся определения новых слов. | * [[CURRENT]] — Переменная указывает словарь [[VOCABULARY]], в который вводятся определения новых слов. | ||
* [[STATE]] | * [[STATE]] | ||
* [[BASE]] | * [[BASE]] | ||
Строка 189: | Строка 189: | ||
* [[$EX]] — Десятичное значение порядка вводимого числа | * [[$EX]] — Десятичное значение порядка вводимого числа | ||
* [[ERB]] | * [[ERB]] | ||
* [[SAVIN]] — Сохраняем >IN в INTERPRET для NUMBER | * [[SAVIN]] — Сохраняем [[>IN]] в [[INTERPRET]] для [[NUMBER]] | ||
* [[, (Каллисто)|,]] — Компилирует число n в первую свободную ячейку словаря. | * [[, (Каллисто)|,]] — Компилирует число n в первую свободную ячейку словаря. | ||
* [[C,]] — Компилирует байт c в очередной свободный байт словаря. | * [[C,]] — Компилирует байт c в очередной свободный байт словаря. | ||
Строка 198: | Строка 198: | ||
* [[NAME-больше|NAME>]] — [[NFA]] ---> [[CFA]] | * [[NAME-больше|NAME>]] — [[NFA]] ---> [[CFA]] | ||
* [[N-больше-BODY|N>BODY]] — [[NFA]] ---> [[PFA]] | * [[N-больше-BODY|N>BODY]] — [[NFA]] ---> [[PFA]] | ||
* [[?ERROR]] — | * [[?ERROR]] — диагностика ошибок Форт ИТЭФ | ||
* [[?COMP]] | * [[?COMP]] | ||
* [[?EXEC]] | * [[?EXEC]] | ||
Строка 215: | Строка 215: | ||
* [[\0 (Каллисто)|\0]] — (Пустое слово) - закончить интерпретацию. | * [[\0 (Каллисто)|\0]] — (Пустое слово) - закончить интерпретацию. | ||
* [[PAD]] — Выдаёт адрес буфера для промежуточного хранения последовательностей символов | * [[PAD]] — Выдаёт адрес буфера для промежуточного хранения последовательностей символов | ||
* [[WORD]] — Считывает одно слово из входного или экранного буфера и размещает его, начиная с адреса HERE | * [[WORD]] — Считывает одно слово из входного или экранного буфера и размещает его, начиная с адреса [[HERE]] | ||
* [[CONVERT]] | * [[CONVERT]] | ||
* [[FINDN]] — Поиск слова в активных словарях | * [[FINDN]] — Поиск слова в активных словарях | ||
* [[NUMBER]] — Преобразует в число последовательность символов, начиная с a+1 с учётом BASE, | * [[NUMBER]] — Преобразует в число последовательность символов, начиная с a+1 с учётом [[BASE]], | ||
* [[FL]] | * [[FL]] | ||
* [[ERROR (Каллисто)|ERROR]] — Диагностика ошибок Форт ИТЭФ | * [[ERROR (Каллисто)|ERROR]] — Диагностика ошибок Форт ИТЭФ | ||
* [[ID.]] — Печатает имя слова, записанное в соответствии с требованиями словаря Форта | * [[ID.]] — Печатает имя слова, записанное в соответствии с требованиями словаря Форта | ||
* [[CREATE]] — Формирует слово с именем XXX (заголовок и CFA), оставляя его поле параметров пустым. | * [[CREATE]] — Формирует слово с именем XXX (заголовок и [[CFA]]), оставляя его поле параметров пустым. | ||
* [[lbr-COMPILE-rbr (Каллисто)|[COMPILE]]] — Скомпилировать следующее слово, независимо от его признака IMMEDIATE. | * [[lbr-COMPILE-rbr (Каллисто)|[COMPILE]]] — Скомпилировать следующее слово, независимо от его признака [[IMMEDIATE]]. | ||
* [[TO]] | * [[TO]] | ||
* [[LITERAL]] | * [[LITERAL]] | ||
* [[FLITERAL]] — Тоже, что и LITERAL, но для плавучки. | * [[FLITERAL]] — Тоже, что и [[LITERAL]], но для плавучки. | ||
* [[?STACK]] | * [[?STACK]] | ||
* [[INTERPRET]] — Интерпретирует последовательность слов, пока там что-то есть. | * [[INTERPRET]] — Интерпретирует последовательность слов, пока там что-то есть. | ||
Строка 233: | Строка 233: | ||
* [[(]] — Комментарий -- пропустить следующий текст до закрывающей круглой скобки. | * [[(]] — Комментарий -- пропустить следующий текст до закрывающей круглой скобки. | ||
* [[QUIT]] — Очищает стек возвратов, устанавливает режим исполнения и возвращает управление терминалу. | * [[QUIT]] — Очищает стек возвратов, устанавливает режим исполнения и возвращает управление терминалу. | ||
* [[ABORT]] — Прерывает исполнение, делает словарь FORTH контекстным, исполняет QUIT | * [[ABORT]] — Прерывает исполнение, делает словарь [[FORTH]] контекстным, исполняет [[QUIT]] | ||
* [[EMPTY-BUFFERS]] — Буфер отмечается как пустой, независимо от содержания. Обновлённый блок на диск не записывается. | * [[EMPTY-BUFFERS]] — Буфер отмечается как пустой, независимо от содержания. Обновлённый блок на диск не записывается. | ||
* [[SAVE-BUFFERS]] — Если находящийся в буфере экран был изменён, скидывает его на диск. | * [[SAVE-BUFFERS]] — Если находящийся в буфере экран был изменён, скидывает его на диск. | ||
* [[FLUSH]] — Если экран изменён, скидывает его на диск и выкидывает его из памяти. | * [[FLUSH]] — Если экран изменён, скидывает его на диск и выкидывает его из памяти. | ||
* [[BUFFER]] — Резервирует блок в памяти и приписывает ему номер u (как и BLOCK ), но сам блок с диска не считывается. | * [[BUFFER]] — Резервирует блок в памяти и приписывает ему номер u (как и [[BLOCK]] ), но сам блок с диска не считывается. | ||
* [[BLOCK]] — Записывает в стек адрес первого байта в буфере с блоком, номером которого u. | * [[BLOCK]] — Записывает в стек адрес первого байта в буфере с блоком, номером которого u. | ||
* [[(LINE)]] — Выдаёт адрес a и длину u строки L с экрана S. | * [[(LINE)]] — Выдаёт адрес a и длину u строки L с экрана S. | ||
Строка 246: | Строка 246: | ||
* [[---больше (Каллисто)|-->]] — Даёт команду немедленно приступить к интерпретации следующего по порядку экрана. | * [[---больше (Каллисто)|-->]] — Даёт команду немедленно приступить к интерпретации следующего по порядку экрана. | ||
* [['N]] — Ищет слово с именем XXX (из входного или экранного буфера) в словаре Форта. | * [['N]] — Ищет слово с именем XXX (из входного или экранного буфера) в словаре Форта. | ||
* [[lbr-'-rbr (Каллисто)|[']]] — Скомпилировать CFA следующего слова как числовой литерал. | * [[lbr-'-rbr (Каллисто)|[']]] — Скомпилировать [[CFA]] следующего слова как числовой литерал. | ||
* [[больше-MARK (Каллисто)|>MARK]] — Отметить текущий адрес для ссылки вперёд. | * [[больше-MARK (Каллисто)|>MARK]] — Отметить текущий адрес для ссылки вперёд. | ||
* [[больше-RESOLVE (Каллисто)|>RESOLVE]] — Разрешить ссылку вперёд в адресе a. | * [[больше-RESOLVE (Каллисто)|>RESOLVE]] — Разрешить ссылку вперёд в адресе a. | ||
* [[меньше-MARK (Каллисто)|<MARK]] — Отметить текущий адрес для ссылки назад. | * [[меньше-MARK (Каллисто)|<MARK]] — Отметить текущий адрес для ссылки назад. | ||
* [[меньше-RESOLVE (Каллисто)|<RESOLVE]] — Разрешить ссылку назад в адрес a. | * [[меньше-RESOLVE (Каллисто)|<RESOLVE]] — Разрешить ссылку назад в адрес a. | ||
* [[UNTIL]] — Конец цикла "BEGIN UNTIL". | * [[UNTIL]] — Конец цикла "[[BEGIN]] [[UNTIL]]". | ||
* [[AGAIN]] — Конец бесконечного цикла "BEGIN AGAIN". | * [[AGAIN]] — Конец бесконечного цикла "[[BEGIN]] [[AGAIN]]". | ||
* [[BEGIN]] — Начало циклов "BEGIN". | * [[BEGIN]] — Начало циклов "[[BEGIN]]". | ||
* [[THEN]] — Конец ветвления "IF". | * [[THEN]] — Конец ветвления "[[IF]]". | ||
* [[ELSE]] — Начало 2-ой ветви ветвления "IF". | * [[ELSE]] — Начало 2-ой ветви ветвления "[[IF]]". | ||
* [[IF]] — Начало ветвления "IF". | * [[IF]] — Начало ветвления "[[IF]]". | ||
* [[WHILE]] — Ветвление "WHILE" в цикле "BEGIN WHILE REPEAT". | * [[WHILE]] — Ветвление "[[WHILE]]" в цикле "[[BEGIN]] [[WHILE]] [[REPEAT]]". | ||
* [[REPEAT]] — Конец цикла "BEGIN WHILE REPEAT". | * [[REPEAT]] — Конец цикла "[[BEGIN]] [[WHILE]] [[REPEAT]]". | ||
* [[FOR]] — Начало цикла со счётчиком. Цикл исполнится ровно n раз. | * [[FOR]] — Начало цикла со счётчиком. Цикл исполнится ровно n раз. | ||
* [[NEXT]] — Конец цикла со счётчиком. | * [[NEXT]] — Конец цикла со счётчиком. | ||
* [[SPACES]] — Вывод заданного числа "цифровых" (шириной в цифру) пробелов на экран. | * [[SPACES]] — Вывод заданного числа "цифровых" (шириной в цифру) пробелов на экран. | ||
* [[I-решётка-больше (Каллисто)|I#>]] — Завершает преобразование целого числа | * [[I-решётка-больше (Каллисто)|I#>]] — Завершает преобразование целого числа | ||
* [[SIGN]] — Вводит знак "минус" в выходной буфер PAD, если n<0 | * [[SIGN]] — Вводит знак "минус" в выходной буфер [[PAD]], если n<0 | ||
* [[I-решётка (Каллисто)|I#]] — Преобразует одну цифру целого числа и записывает её в выходной буфер PAD | * [[I-решётка (Каллисто)|I#]] — Преобразует одну цифру целого числа и записывает её в выходной буфер [[PAD]] | ||
* [[I-решётка-S (Каллисто)|I#S]] — Преобразует целое число до тех пор, пока не будет получен 0 | * [[I-решётка-S (Каллисто)|I#S]] — Преобразует целое число до тех пор, пока не будет получен 0 | ||
* [[меньше-I-решётка (Каллисто)|<I#]] — Начинает процесс преобразования целого числа в последовательность кодов символов. | * [[меньше-I-решётка (Каллисто)|<I#]] — Начинает процесс преобразования целого числа в последовательность кодов символов. | ||
* [[(.)]] — Как I. -- только не выводит число на экран, а возвращает нам адрес и длину строки. | * [[(.)]] — Как [[I.]] -- только не выводит число на экран, а возвращает нам адрес и длину строки. | ||
* [[I.]] — Вывод целого числа, за которым следует один пробел. | * [[I.]] — Вывод целого числа, за которым следует один пробел. | ||
* [[. (Каллисто)|.]] — Вывод числа, за которым следует один пробел. | * [[. (Каллисто)|.]] — Вывод числа, за которым следует один пробел. | ||
* [[I.R]] — Напечатать n на терминале в поле длиной p справа. | * [[I.R]] — Напечатать n на терминале в поле длиной p справа. | ||
* [[LIST]] — Распечатывает экран с номером u и записывает его номер в переменную SCR | * [[LIST]] — Распечатывает экран с номером u и записывает его номер в переменную [[SCR]] | ||
* [[INDEX]] — Выводит на экран верхние строчки экранов, номера блоков которых входят в диапазон от нач до кон. | * [[INDEX]] — Выводит на экран верхние строчки экранов, номера блоков которых входят в диапазон от нач до кон. | ||
* [[WORDS]] — Просмотр полного списка операторов, хранящихся в данный момент в словаре | * [[WORDS]] — Просмотр полного списка операторов, хранящихся в данный момент в словаре | ||
Строка 286: | Строка 286: | ||
* [[LOAD"]] — Считать из файла словарь Форта и десятичный словарь. | * [[LOAD"]] — Считать из файла словарь Форта и десятичный словарь. | ||
* [[;CODE]] | * [[;CODE]] | ||
* [[FORTH]] — Делает словарь FORTH контекстным. | * [[FORTH]] — Делает словарь [[FORTH]] контекстным. | ||
* [[TASK]] | * [[TASK]] | ||
Версия от 01:08, 29 июля 2015
Каллисто — компактный диалект языка Форт с элементами colorFORTH, написанный для «Электроники МК-161» на РЯМК и предназначенный для программирования «на борту». Пока существует в альфа-версии, но уже позволяет определять новые слова, редактировать и компилировать экраны, успешно переносить на МК-161 старые программы, написанные на языке Форт. Актуальная версия — 0.3.5a.
Вместо фортовского цикла LOOP Каллисто использует более простой и быстрый цикл FOR из colorFORTH, а «бесконечный» стек содержит 12-разрядные десятичные числа ЭКВМ с плавающей запятой. Помимо обычной (для Форта) целочисленной операций деления, Каллисто использует традиционное для ПМК деление с плавающей запятой. Сохранены традиционные для ПМК обозначения операций умножения, подъёма стека, а также русскоязычные операции ПМК — ЗН , СЧ и т.д.
В отличии от ранних диалектов Форт экран Каллисто содержит 48 строк и занимает 3 Кб. Из-за того, что строка экрана занимает традиционные 64 символа, использование встроенного в ЭКВМ редактора является затруднительным. Программистам Каллисто предлагает строковый редактор, а также возможность написать собственный редактор экранов. Каллисто использует накладную алфавитно-цифровую клавиатуру для быстрого посимвольного ввода команд и данных.
Вводимые слова компилируются в словарь, находящийся в области двоичных данных. В этой же области располагается стек возвратов. «Бесконечный» стек данных располагается в области десятичных регистров. Там же располагается «десятичный словарь», где хранятся десятичные переменные типа VALUE
В Каллисто используется единое адресное пространство, при этом размер ячейки памяти зависит от адреса и может колебаться от 1 байта до 12-разрядного десятичного числа с плавающей запятой.
Словарь Каллисто
- COLD — Первая словарная статья
- WARM
- BYE — Выход из системы может использоваться как временный, отладочный останов.
- VERSION — Кладёт в стек номер версии Каллисто.
- EXECUTE — Исполняет слово, CFA которого хранится в стеке.
- ?BREAK — Проверяем клавиатуру на паузу и аварийную остановку.
- (LITERAL) — Код периода выполнения для литерала.
- TYPE — Передаёт u символов начиная с адреса a на выходное устройство.
- TYPE1 — Вывести строку из памяти данных, заменяя управляющие коды и строго в одну строчку, до конца индикатора.
- ?BRANCH — Условный переход в шитом коде.
- BRANCH — Безусловный переход в шитом коде.
- (FOR)
- (NEXT)
- (FIND) — Искать слово a1 в списке a2. При успехе дать NFA его статьи и c - байт длины с флагами.
- DIGIT — ASCII-DIGIT BASE => DIGIT-VALUE TRUE / FALSE
- РЕГ! — Запись в регистр ЭКВМ Rn при стеке ЭКВМ, заполненном на основе стека Форта.
- РЕГ@ — Чтение из регистра ЭКВМ Rn с сохранением стека ЭКВМ в переменных RX RY RZ RT
- 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
- |X| — Получение абсолютного значения.
- AND — 32-битное побитовое логическое умножение (И).
- OR — 32-битное побитовое логическое сложение (ИЛИ).
- XOR — 32-битное побитовое логическое исключающее ИЛИ (XOR).
- INVERT — 32-битное побитовое логическое отрицание (НЕ).
- MIN — Выделение минимума.
- MAX — Выделение максимума.
- 10x — Десятичный антилогарифм.
- Ex — Экспонента.
- LG — Десятичный логарифм.
- LN — Натуральный логарифм.
- X2 — Возведение в квадрат.
- √ — Квадратный корень.
- 1/X — Обратная величина.
- Yx — Степенная функция.
- СЧ — Случайное число.
- ЗН — Знак числа.
- [X] — Целая часть числа.
- {X} — Дробная часть числа.
- DEGREES — Даёт указание Форту (и ЭКВМ) принимать углы в градусах
- RADIANS — Даёт указание Форту (и ЭКВМ) принимать углы в радианах
- ARCSIN
- ARCCOS
- ARCTG
- SIN
- COS
- TG
- SP@ — Записывает в стек адрес вершины стека, до исполнения команды SP@
- !SP — Устанавливает указатель стека в исходное состояние из переменной S0.
- RP@
- !RP — Присваивает указателю стека возвратов исходное (базовое) значение из переменной R0.
- EXIT
- LEAVE — Досрочно прерывает цикл FOR .. NEXT (только для области данных)
- UNLOOP
- >R — Переносит 16-битное число из стека данных в стек возвратов.
- R> — Переносит 16-битное число из стека возвратов в стек данных.
- I — Копирует верхнее 16-битное число из стека возвратов в стек данных.
- LEV
- PICK — Копирует элемент стека с номером u и записывает его наверх стека.
- OVER — Копирует 2-й элемент стека и заносит его наверх.
- ↔ — Меняет местами два верхних элемента стека.
- 2SWAP — Меняет местами верхние две пары чисел в стеке.
- ↑ — Дублирует верхний элемент стека.
- ?DUP — Осуществляет операцию ↑ если x<>0
- 2DUP — Дублирует верхнюю пару чисел в стеке.
- ROT — Переносит 3-й элемент стека наверх.
- 2DROP — Удаляет из стека число двойной длины.
- DROP — Удаляет верхний элемент стека.
- CMOVE — Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.
- CMOVE>
- 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> — PFA ---> CFA
- !CSP — Запомнить адрес вершины стека в CSP.
- HERE — Выдаёт адрес первой свободной ячейки в словаре.
- ALLOT — Добавляет n байт к полю параметров слова, описанного последним.
- ДHERE — Выдаёт адрес первого свободного десятичного регистра в десятичном словаре.
- ДALLOT — Резервирует n десятичных регистров в десятичном словаре.
- [ — Переключить текстовый интерпретатор в режим исполнения
- ] — Переключить текстовый интерпретатор в режим компиляции.
- HEX — Устанавливает шестнадцатеричную систему счисления.
- DECIMAL — Устанавливает десятичную систему счисления для ввода-вывода.
- -TRAILING
- UPPER
- DEFINITIONS — Контекстный словарь VOCABULARY становится текущим, все последующие описания связаны с этим словарём.
- UPDATE — Устанавливает в буфере флаг "спасения".
- X — Даёт номер загруженного блока.
- :
- ;
- CONSTANT
- VARIABLE
- VALUE
- DOES>
- F#> — Размещает преобразованную строку сразу после словаря, возвращает адрес и число символов.
- F#S — Преобразовывает число с плавающей запятой в строку символов.
- <F# — Начинает преобразования чисел с плавающей запятой.
- 0
- 1
- 2
- 3
- $\pi$ — Число пи.
- BL
- C/L — Количество символов в одной строке экрана Форта.
- B/BUF
- RT
- RZ
- RY
- RX
- S0 — Переменная, содержит адрес дна стека данных.
- R0
- ДDP — Указатель десятичного словаря.
- WIDTH
- WARNING
- FENCE — Служит для защиты базового словаря от стирания с помощью оператора FORGET
- DP
- VOCL
- AUTOEXEC — Слово, xt которого хранится в переменной AUTOEXEC, будет выполнено после загрузки сохранения по LOAD"
- GRXY — Графический курсор
- BLK
- >IN
- SCR — Служит для хранения текущего значения номера редактируемого экрана.
- OFFSET — Переменная, содержащая смещение, добавляемое к номеру блоку на стеке словом BLOCK для получения физического номера блока.
- CONTEXT — Переменная указывает на словарь VOCABULARY, в котором происходит поиск слов во время интерпретации входного потока.
- CURRENT — Переменная указывает словарь VOCABULARY, в который вводятся определения новых слов.
- STATE
- BASE
- DPL
- CSP — Переменная для контрольного хранения значения указателя стека.
- R# — Позиция курсора при редактировании экрана.
- HLD
- $EX — Десятичное значение порядка вводимого числа
- ERB
- SAVIN — Сохраняем [[>IN]] в INTERPRET для NUMBER
- , — Компилирует число n в первую свободную ячейку словаря.
- C, — Компилирует байт c в очередной свободный байт словаря.
- Д, — Компилирует число x в первую свободную ячейку десятичного словаря.
- LATEST
- SPACE — Вывод одного пробела.
- N>LINK — NFA ---> LFA
- NAME> — NFA ---> CFA
- N>BODY — NFA ---> PFA
- ?ERROR — диагностика ошибок Форт ИТЭФ
- ?COMP
- ?EXEC
- ?PAIR
- ?CSP — Выдать ошибку "сбился указатель стека" если он не равен значению в CSP
- ?LOAD
- COMPILE — Компиляция 16-битного слова, следующего за оператором.
- SMUDGE — Изменить флаг "SMUDGE" в последней созданной статье.
- (;CODE) — Записать в поле кода последней статьи следующий адрес и закончить определение.
- <BUILDS
- COUNT
- (.") — Слово, компилируемое ."
- ." — При исполнении напечатать на терминале следующие литеры до кавычки исключительно.
- .( — Напечатать следующие литеры до закрывающей скобки исключительно.
- QUERY — Осуществляет ввод строки символов с клавиатуры.
- \0 — (Пустое слово) - закончить интерпретацию.
- PAD — Выдаёт адрес буфера для промежуточного хранения последовательностей символов
- WORD — Считывает одно слово из входного или экранного буфера и размещает его, начиная с адреса HERE
- CONVERT
- FINDN — Поиск слова в активных словарях
- NUMBER — Преобразует в число последовательность символов, начиная с a+1 с учётом BASE,
- FL
- ERROR — Диагностика ошибок Форт ИТЭФ
- ID. — Печатает имя слова, записанное в соответствии с требованиями словаря Форта
- CREATE — Формирует слово с именем XXX (заголовок и CFA), оставляя его поле параметров пустым.
- [COMPILE] — Скомпилировать следующее слово, независимо от его признака 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 — Закончить интерпретацию экрана.
- --> — Даёт команду немедленно приступить к интерпретации следующего по порядку экрана.
- 'N — Ищет слово с именем XXX (из входного или экранного буфера) в словаре Форта.
- ['] — Скомпилировать CFA следующего слова как числовой литерал.
- >MARK — Отметить текущий адрес для ссылки вперёд.
- >RESOLVE — Разрешить ссылку вперёд в адресе a.
- <MARK — Отметить текущий адрес для ссылки назад.
- <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#> — Завершает преобразование целого числа
- SIGN — Вводит знак "минус" в выходной буфер PAD, если n<0
- I# — Преобразует одну цифру целого числа и записывает её в выходной буфер PAD
- I#S — Преобразует целое число до тех пор, пока не будет получен 0
- <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
Ссылки
- Обсуждение Каллисто в Контакте и на сайте Арбинады
- Каллисто v0.3.5a, последняя актуальная версия Каллисто
- Языки Форт и colorFORTH в Википедии
- Каллисто в Википедии — спутник Юпитера, в честь которого назван язык Каллисто