Каллисто
Каллисто — компактный диалект языка Форт с элементами 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>
- !CSP
- HERE
- ALLOT
- ДHERE
- ДALLOT
- [
- ]
- HEX
- DECIMAL
- -TRAILING
- UPPER
- DEFINITIONS
- 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
- DP
- VOCL
- AUTOEXEC
- GRXY
- BLK
- >IN
- SCR
- OFFSET
- CONTEXT
- CURRENT
- STATE
- BASE
- DPL
- CSP
- R#
- HLD
- $EX
- ERB
- SAVIN
- ,
- C,
- Д,
- LATEST
- SPACE
- N>LINK
- NAME>
- N>BODY
- ?ERROR
- ?COMP
- ?EXEC
- ?PAIR
- ?CSP
- ?LOAD
- COMPILE
- SMUDGE
- (;CODE)
- <BUILDS
- COUNT
- (.")
- ."
- .(
- QUERY
- \0
- PAD
- WORD
- CONVERT
- FINDN
- NUMBER
- FL
- ERROR
- ID.
- CREATE
- [COMPILE]
- TO
- LITERAL
- FLITERAL
- ?STACK
- INTERPRET
- IMMEDIATE
- VOCABULARY
- (
- QUIT
- ABORT
- EMPTY-BUFFERS
- SAVE-BUFFERS
- FLUSH
- BUFFER
- BLOCK
- (LINE)
- MESSAGE
- LOAD
- \
- \S
- -->
- 'N
- [']
- >MARK
- >RESOLVE
- <MARK
- <RESOLVE
- UNTIL
- AGAIN
- BEGIN
- THEN
- ELSE
- IF
- WHILE
- REPEAT
- FOR
- NEXT
- SPACES
- I#>
- SIGN
- I#
- I#S
- <I#
- (.)
- I.
- .
- I.R
- LIST
- INDEX
- WORDS
- COPY
- DEPTH
- DUMP
- .S
- КАТ
- SAVE-TEXT
- RGRW
- LORW
- R/W
- SAVE"
- LOAD"
- ;CODE
- FORTH — Делает словарь FORTH контекстным.
- TASK
Ссылки
- Обсуждение Каллисто в Контакте и на сайте Арбинады
- Каллисто v0.3.5a, последняя актуальная версия Каллисто
- Языки Форт и colorFORTH в Википедии
- Каллисто в Википедии — спутник Юпитера, в честь которого назван язык Каллисто