|
FORTH - приложения. Слова системы FP50. Слова целочисленного "Форта". Распределение памяти в системе FP50.
|
ПРИЛОЖЕНИЕ 1
СЛОВА СИСТЕМЫ FP50
Команды операций с плавающей точкой
|
|
Состояние стека
|
Описание выполняемой операции
|
ДО операции
|
после операции
|
^
|
Вывод TOS
на экран или принтер
|
х,у,5
|
х,у
|
|
Сложение TOS с 205 и помещение результата в стек
|
х,3,5
|
х,8
|
-
|
Вычитание TOS из 20S и помещение результата в стек
|
х.3,5
|
х,-2
|
*
|
Умножение TOS на 20S и помещение результата в стек
|
х,3,5
|
х,15
|
/
|
Деление 20S на TOS и помещение результата в стек
|
х,3,5
|
х,0
|
Стрелка вверх
|
Возведение 20S в степень TOS и помещение результата в стек
|
х,3,5
|
х,24
|
>
|
Помещение 1 в стек, если 20S”TOS, иначе — 0.
|
х,3,5
|
х,0
|
<
|
Помещение 1 в стек, если 20S”0, иначе — 0.
|
х,3,5
|
х,1
|
>=
|
Помещение 1 в стек, если 205” = TOS, иначе — 0.
|
х,4,4
|
х,1
|
<=
|
Помещение 1 в стек, если 20S“=TOS, иначе — 0.
|
х,5,4
|
х,0
|
о
|
Помещение 1 в стек, если 20S“”TOS, иначе — 0.
|
х,5,4
|
х,1
|
=
|
Помещение ) в стек, если 20S = TOS, иначе — 0.
|
х,3,5
|
х,0
|
•
|
Сохранить. При записи сразу после имени переменной
осуществляется присвоение переменной значения TOS. Если TOS =4, то запись А!
; присвоит переменной 'А' значение 4.
|
х,у,4
|
х,У
|
@
|
При помещении сразу за именем переменной осуществляет
присвоение TOS значения этой переменной. Например, если В = 0.8, то В@ ;
присвоит TOS = 0.8
|
х,У
|
х,у.0.8
|
f
|
Чтение. Печатает значение переменной, имя которой
сопровождает. Так, если С =-21, то С? ; выведет '-21 .
|
x,y,z
|
x,y,z
|
+!
|
Увеличение. Складывает значение TOS со значением
переменной, имя которой • сопровождает. Если TOS =4 и А = 7, то А + ! ;
выполнит А = 11.
|
х,у,4
|
х,У
|
1
Апостроф
|
Находит слово в словаре и помещает в TOS его
компиляционный адрес, т.е. если этот адрес равен 44098, то ' ; . ; выдаст
значение 44098.
|
х.У
|
х, у, 44098
|
0>
|
Помещает в стек 1, если TOS”0, иначе — 0.
|
х,у,4
|
х,у,1
|
0<
|
Помещает в стек 1, если TOS“0, иначе — 0.
|
х,у,4
|
х,у,0
|
0=
|
Помещает в стек 1, если TOS = 0, иначе — 0.
|
х,у,4
|
х,у,0
|
1+
|
Добавляет 1 к значению TOS и размещает его в TOS.
|
х,у,4
|
х,у,5
|
2+
|
Добавляет 2 к значению TOS и размещает его в TOS.
|
х,у,4
|
х,у,6
|
2-
|
Отнимает 2 от значения TOS и размещает его в TOS.
|
х,у,4
|
х,у,2
|
2TOCS
|
Передает 2 элемента стека данных в стек вычислений ('SP' используется стеком возврата).
|
x,y,z
|
х
|
79-STA
|
Печатает сообщение, описывающее FP50 как разновидность
стандартного языка ФОРТ-79.
|
x,y,z
|
x,y,z
|
ABORT
|
Чистит стек, делая его длину равной 0 независимо от места
использования этого слова, и возвращает в командный режим.
|
x,y,z
|
-
|
ABS
|
Помещает в TOS его положительное значение.
|
х,у,-3
|
х,у,3
|
ACSD
|
Замещает TOS
значением угла в градусах, COS
которого равен TOS.
|
х,у,0.5
|
х,у,60
|
ACSR
|
Замещает TOS значением угла • радианах, COS которого равен TOS.
|
х,у,0.5
|
х,у,1.05
|
AND
|
Если и 20S и TOS”0, то происходит их замещение значением TOS, иначе — нулем.
|
х.2,-1
|
х,0
|
AT
|
Перемещает позицию печати на строку 20S в колонку TOS.
|
x.y.z
|
х
|
ATTR
|
Читает цветовые параметры знакоместа в строке 20S и
колонке TOS, например, если 20S = 7. TOS = 3, а цветовой параметр
знакоместа (7,3) равен 56, то ATTR сделает TOS z 56. Координаты должны быть целочисленными и не
выходить за пределы экрана. Если же это произошло, то возвратит значение
ближайшего знакоместа, равное 100.
|
х,7,3
|
х,56
|
ASND
|
Замещает TOS значением угла в
|
|
|
ASNR
|
Замещает TOS значением угла в радианах, SIN которого равен TOS.
|
|
|
ATND
|
Замещает TOS значением угла в градусах, TAN которого равен TOS.
|
|
|
ATNR
|
Замещает TOS значением угла в радианах, TAN которого равен TOS.
|
|
|
BLEEP
|
Воспроизводит ноту длительностью 20S единиц с высотой тона
TOS. 20S и TOS должны быть целыми. Единичная длительность меняется в
зависимости от высоты тона.
|
x,y,z
|
х
|
BRIGHT
|
Присваивает значение TOS параметру управления яркостью — 0
или 1. Используется перед командами печати
|
x,y,z
|
х,у
|
С®
|
Смотри раздел 8.2
|
|
|
С
|
Смотри раздел 8.2
|
|
|
С?
|
Смотри раздел 8.2
|
|
|
CDUMP
|
Смотри раздел 8.2
|
|
|
CIRCLE
|
Чертит окружность с центром в координатах 30S, 20S и радиусом TOS. Работает с
целыми числами.
|
а,х,у
|
а
|
CL8
|
Чистит экран и перемещает позицию печати в верхний левый
угол.
|
x,y,z
|
х.У
|
CMOVE
|
Смотри раздел 8.2
|
|
|
COSD
|
Заменяет TOS значением COS угла в градусах.
|
х,у,6
|
х,у,0.5
|
COSR
|
Заменяет TOS значением COS угла а радианах.
|
х,у,2
|
х,у,-0.416
|
COUNT
|
Смотри раздел 8.2
|
|
|
CR
|
Возврат каретки — перемещает позицию печати в начало
следующей страницы.
|
x,y,z
|
x,y,z
|
CSTOD
|
Смотри раздел 8.2
|
|
|
DELETE
|
Смотри раздел 8.2
|
|
|
DEPTH
|
Выдает число элементов стека, записанных перед командой 'DEPTH . 7 — число записанных элементов
стека.
|
x,y,z
|
x,y,z,7
|
DO
|
Команда управления циклом. Смотри раздел 5.13.
|
|
|
DRAW
|
последней нанесенной точки к точке, заданной координатами
пикселя
(20S,TOS). Работает с
|
x,y,z
|
х
|
DROP
|
Удаляет TOS.
|
х,у,г
|
Х,У
|
DUMP
|
Смотри раздел 8.2.
|
|
|
DUP
|
Копирует TOS так, что оно отображается в стеке дважды.
|
x,y,z
|
x,y,z,z
|
?DUP
|
Выполняет DUP, обеспечивая при этом дублирование TOS, если
оно имеет ненулевое значение.
|
х,у,0
|
х,у,0
|
EMIT
|
Печатает символ, соответствующий коду в TOS,
255, то оно уменьшается по модулю 256, а если представлено
не целым числом, то оно не будет воспринято.
|
х,у,2
|
х,У
|
ERASE
|
Смотри раздел 8.2.
|
|
|
EXECUT
|
Смотри раздел 8.2.
|
|
|
EXIT
|
от выполнения текущей команды или слова. Нельзя
использовать внутри DO-циклов (см. 'EXITLP').
|
х.у.г
|
x,y,z
|
EXITLP
|
Выполняет функцию EXIT внутри DO-циклов.
|
x,y,z
|
Х,У,2
|
ESP
|
Замещает TOS значением 'Е" в степени TOS.
|
|
|
EXPECT
|
Смотри раздел 8.2.
|
|
|
FIELD
|
Перемещает позицию печати в
так же, как и запятая в командах печати БЕЙСИКА.
|
х,у,г
|
x,y,z
|
PILL
|
Смотри раздел 8.2.
|
|
|
FIND
|
Смотри раздел 8.2.
|
|
|
FLASH
|
Присваивает параметру управления мерцанием значение TOS,
которое равно 0 или 1. Используется перед командами печати.
|
x,y,z
|
x,y,z
|
FLGST
|
Смотри раздел 8.2.
|
|
|
1
|
Индекс, управляющий самым внутренним циклом.
|
|
|
>IN
|
Помещает адрес систем.ной переменной, которая хранит
смещение слова, в стек. ”IN C@; дает количество символов, прочитанных с помощью 'WORD' ранее (т.е. после последней команды 'QUERY').
|
X,ViZ
|
х, у,23681
|
INK
|
Присваивает параметру управления цветом чернил значение
TOS (от 0 до 8). Используется перед командами печати.
|
x,y,z
|
х,У
|
INKEY
|
Помещает код ASCII клавиши, нажатой в данный момент, в TOS или 255, если не была нажата
ни одна из клавиш. Пример: нажата клавиша 'А'.
|
x,y,z
|
x,y,z,65
|
INVERS
|
Присваивает параметру управления инверсией значение TOS (0
или 1). Используется перед командами печати.
|
x,y,z
|
х,У
|
J
|
Индекс следующего за самым внутренним циклом.
|
|
|
К
|
Индекс третьего по отношению к самому внутреннему циклу.
|
|
|
KEY
|
Ожидает нажатия какой-либо клавиши и затем помещает ее
ASCII-код в стек. Если не нажата ни одна из клавиш, то содержимое стека не
меняется.
|
x,y,z
|
Xiy,z
|
LEAVE
|
Присваивает индексу самого внутреннего цикла значение
ограничителя цикла. Используется для принудительного завершения цикла.
|
Х.У.2
|
x,y,z
|
LN
|
Заменяет TOS
значением его натурального логарифма.
|
|
|
LOOP
|
Аналогична команде БЕЙСИКА •NEXT".
|
x,y,z
|
x,y,z
|
+LOOP
|
Задает шаг изменения индекса цикла равным TOS (TOS должен быть положительным).
|
x,y,z
|
х,У
|
-LOOP
|
Задает шаг изменения индекса цикла равным -TOS (TOS д.б.
положительным).
|
x.y.z
|
х,У
|
MAX
|
Выбирает из стека два элемента. Возвращает в стек только
большее их значение.
|
х,2,7
|
х.7
|
MIN
|
Выбирает из стека два элемента. Возвращает в стек только
меньшее значение.
|
х,7,2
|
х,2
|
MOVE
|
Смотри раздел 8.2
|
|
|
NEGATE
|
Меняет знак TOS, т.е. умножает на -1.
|
х,у,6
|
х,у,-6
|
NOT
|
Выбирает TOS и заменяет его на 1, если TOS=0, и 0, если TOS^O
|
х,у,0
|
Х,У,1
|
NUMBER
|
Используется для выполнения подпрограмм. Смотри раздел 8.2
|
|
|
OR
|
Выбирает из стека два элемента и заменяет их значением
TOS, если
20S=0 или 0, если
205^0.
|
х,3,-2 х,0,3 х.0,0
|
х,1 х,3 х,0
|
OVER
|
Копирует значение 20S в вершину стека.
|
x,y,z
|
x,y,z,y
|
P@
|
Смотри раздел 8.2
|
|
|
P!
|
Смотри раздел 8.2
|
|
|
I PAD
|
Выдает в стек адрес области памяти, отмеченной как 'PAD' (символы в нее вводятся командой 'QUERY', а читаются командой 'WORD').
|
x,y,z
|
x, у,3288
|
PAPER
|
Присваивает параметру управления цветом бумаги •••
значения TOS (от 0 до 8). Используется перед командами печати.
|
x,y,z
|
х.У
|
PICK
|
Заменяет TOS значением элемента стека, номер которого
находится в TOS, например, седьмым элементом стека является 4, следовательно,
2 PICK ; идентично слову 'OVER'.
|
3,4,5,7
|
3,4.5,4
|
PLOT
|
Наносит на экран пиксель с координатами (20S.TOS). Работает с целочисленными
операндами.
|
x,y,z
|
X
|
POINT
|
Читает содержимое пикселя (20S,TOS) и выдает целочисленный результат —
0 — для бумаги, 1 — для чернил (PAPER и INK — соответственно). Работает только с
целыми числами.
|
x,y,z
|
X
|
PROVER
|
Присваивает параметру управления 'OVER' значение TOS, равное 0 или 1.
Используется перед командами печати.
|
x,y,z
|
х,У
|
PRSTRG
|
Выполняет подпрограммы. Смотри раздел 8.2.
|
|
|
QUERY
|
Воспринимает вводимые с клавиатуры символы и помещает их в
область памяти 'PAD' (см.
приложение 3; адреса 32883-33023 — область ввода символов по команде 'QUERY') пока не будет нажата клавиша 'ENTER'. При нажатии "ENTER" будет занесен код '13', что будет
являться признаком конца данных. Максимальная длина строки знаков, вводимая
по 'QUERY', равна 141 символу, после набора
которых признак конца устанавливается автоматически. 'QUERY', кроме того, сбрасывает сдвиги,
выполненные словом 'WORD' и
хранящиеся в системной переменной по адресу 23681 (см. '”IN'). Область "PAD" читается с помощью слова 'WORD'.
|
x,y,z
|
x,y,z
|
QUIT
|
Возвращает компьютер в командный режим:*"*”-для FP50 и ###” — для ED50.
|
Х,У,2
|
x,y,z
|
R@
|
Смотри раздел 8.2
|
|
|
>R
|
Смотри раздел 8.2
|
|
|
R>
|
Смотри раздел 8.2
|
|
|
RND
|
Помещает а стек случайное число из диапазона О* = RND”!
|
x,y,z
|
х, у,0.707
|
ROLL
|
Удаляет из стека значение элемента с номером TOS и помещает его в вершину стека.
|
3,4,5,2
|
3,5,4
|
ROT
|
Переставляет три верхних элемента по часовой стрелке.
|
x,y,z
|
y,z,x
|
SIND
|
Замещает TOS значением SIN угла в градусах.
|
х,у,30
|
x,y,0.5
|
SINR
|
Замещает TOS значением SIN угла в радианах.
|
х,У,2
|
х, у,0.909
|
SGN
|
Замещает TOS единицей, если TOS”0, -1, если TOS“0, и 0 — если TOS =0.
|
х,у,-3
|
хх, у,-1
|
SPACE
|
Перемещает позицию печати на один символ вправо или на
начало новой строки.
|
x,y,z
|
х.у
|
SPACES
|
Перемещает начало печати на количество символов, заданных
в TOS. TOS ие может быть равен 0, превышать значение 256 и должен быть целым
числом.
|
x,y,z
|
х,У
|
SPTOCS
|
Смотри раздел 8.2
|
|
|
SQR
|
Замещает TOS его квадратным корнем /
|
х,у,2
|
х,у,1.41
|
STKSWP
|
Смотри раздел 8.2
|
|
|
SWAP
|
Меняет местами значения 20S и TOS.
|
x,y,z
|
x,z,y
|
TAB
|
Перемещает позицию печати в колонку с номером TOS.
|
x,y,z
|
Х,У
|
TAND
|
Замещает TOS значением тангенса угла в градусах.
|
х,у,45
|
х,у,1
|
TANR
|
Замещает TOS значением тангенса угла в радианах.
|
х,у,1
|
х,у,1.55
|
-TRAIL
|
Смотри раздел 8.2
|
|
|
TYPE
|
Смотри раздел 8.2
|
|
|
VLIST
|
Отображает на экране слова и подпрограммы, размещенные в
словаре FP50. При появлении мерцающего квадрата с запросом на свертку нажмите
клавишу
'Y"
|
x,y,z
|
x,y,z
|
WAIT
|
Если вы нажали клавишу 'У, то команда не выполняет никаких
действий. Если вы не нажали Y', то
будет ожидаться выполнение этого нажатия, что сигнализируется мерцающим
квадратом в нижней правой части экрана. Это может быть использовано для
управления сверткой и для предотвращения немедленного возврата в командный
режим после получения на экране требуемой информации.
|
x,y,z
|
x,y,z
|
WORD
|
Читается один символ, введенный по 'QUERY' в 'PAD'-область и помещает его в TOS. Чтение происходит по направлению к
началу области 'PAD'. Смещение
при этом фиксируется в системной переменной по адресу 23681.Смотри -QUERY', -PAD-, и '”IN'.EcnH, например, следующий читаемый символ
'В', то:
|
Х,У,2
|
х,у,6б
|
WRDSCH
|
Для выполнения подпрограмм см. раздел 8.2.
|
|
|
А,В,С... Y,Z (кроме
U,K)
|
23 переменных в исходном состоянии равны 0.
|
|
|
|
|
|
|
|
|
|
|
Команды, приведенные ниже, работают аналогично словам языка
ФОРТ, но в действительности словами не являются и, следовательно, в словаре не
отображаются:
: — префикс ':' используется для описания новых слов;
; — метка окончания команды;
клавиша SPACE — разделитель слов;
! Е — (строчная) для загрузки ED50
из FP50;
F — (строчная) для удаления слов из
словаря; смотри раздел 5.5;
proff — (строчные буквы)
подключение принтера;
PRON — (строчные буквы) отключение
принтера;
RET — (строчные буквы) для загрузки
FP50 из ED50;
S — (строчная) запись на ленту;
Z — (строчная) копирование
содержимого экрана на принтер.
ПРИЛОЖЕНИЕ 2
СЛОВА ЦЕЛОЧИСЛЕННОГО ФОРТА
Слова, не имеющие пояснения, выполняют функции аналогичных
слов (без знака %), описанных в приложении 1.
%.
%+
%-
%*
%/
%>
%<
%=
%>=
%<=
%<>
%!
%(§>
%+! кроме того, что 65536 %+! приведет к вычитанию.
%0=
%1+
%1-
%2+
%2-
%AND
%DO
%DUMP
% FIELD перемещает позицию вывода в
следующее знакоместо. С принтером не работает.
%LEAVE
%+LOOP
%MIN
%МАХ
%MOD выдает остаток от деления.
Например, запись: 13 4
%MOD ; поместит в
TOS значение 1. %/MOD поместит целую часть
частного от деления в TOS, а остаток в 20S. Так, после
выполнения команды:
13 4 %/MOD ;
TOS“3, 20S-1.
%MOVE
%NOT
%OR
%XOR если один из элементов TOS или
20S больше 0, а
другой нет (т.е. равен 0), то происходит выбор из стека этих
двух элементов, а в TOS помещается значение, большее 0. Иначе (т.е.
Ьба элемента равны 0 либо больше 0) — оба элемента удаляются
из стека, а TOS становится равным 0. Примеры:
' 4 7 %XOR . выдаст 0 , 4 0 %XOR . выдаст 4 ',
0 0 %XOR . выдаст 0. r %1 переменная управления циклом (смотри раздел 6.6). 1 exit%l это единственное слово
целочисленного ФОРТА, перед которымвнет символа %. Оно является аналогом слова 'EXITLP' из приложения 1.
ПРИЛОЖЕНИЕ 3
РАСПРЕДЕЛЕНИЕ ПАМЯТИ В СРЕДЕ FP50
АДРЕСА
|
ФУНКЦИИ
|
0 – 16383
|
ПЗУ (ROM)
|
16384 - 23295
|
Экранная область
|
23296 - 23546
|
Буфер
|
23547 - 23733
|
Системные переменные
|
23734 - 32767
|
Бейсик-программа и стек данных
|
32768 - 32882
|
Переменные (23"5 байт)
|
32883 - 33023
|
Область 'PAD'
|
33024 - 33791
|
Символы (96"8 байт)
|
33792 - 44031
|
Словарь
|
44032 - 65367
|
Область размещения подпрограмм (слов) и стек возврата
|
65368 - 65536
|
Графические символы, определяемые пользователем (UOG)
|
|
|