□ ИСПОЛЬЗОВАНИЕ КАЛЬКУЛЯТОРА
Для лучшего понимания работы калькулятора полезно предста-
вить его в виде отдельного процессора со своим набором команд. Он
подключается RST 40 (28Ю и отключается "ENDCALC", код коман-
ды 56 (38h).
Пока калькулятор подключен, его операционные коды берутся из
ячеек, следующих за RST 40. Это набор отдельных байтов в обычной
программе Z80. Когда калькулятор получает команду "ENDCALC",
контроль возвращается Z80 и продолжается выполнение программы,
начиная с адреса, идущего за "ENDCALC". Некоторые операционные
коды требуют операторов, а некоторые могут быть использованы
только в начале, т.к. они требуют, чтобы регистры Z80 были установ-
лены для работы определенным образом.
При каждом использовании стека его размер изменяется на пять
байтов. Поэтому при каждом размещении числа на стек убедитесь в
наличии свободного места. Если размер свободной области не соот-
ветствует выполняемой операции, генерируется ошибка БЕЙСИКа.
Калькулятор не ограничен в выполнении числовых операций, он
также используется для выполнения строк БЕЙСИКа и команд
"VAL".
Об этом мы поговорим позже.
Операционные коды, доступные для понимания калькулятору,
описаны ниже с указанием их функций. В каждом случае при изме-
нении стека калькулятора используется пять байтов, по пять байтов
на каждый выполненный операционный кодi
X - значение ниже Y на стеке калькулятора, ^^лосжднее поме-
щенное на стек число. Результат вычислений всегда находится на
вершине стека калькулятор и этот результат равен Z. Например
операционный код вычитания (03), Х=5, Y=9,;X будет размещено на
стеке калькулятора после Y, RST 40 (28h) будёт. сопровождена бай-
том 03. После команды стек калькулятора содержит -5,ответ на
вершине в Z, поэтому X и Y вычеркиваются.
Переходы делаются командой перехода обычным образом.
□ ФУНКЦИИ, ВЫПОЛНЯЕМЫЕ ОПЕРАЦИОННЫМИ
КОДАМИ
Йослёдоштельность операционных кодов от 09 до 14 (OEh) рабо-
тает с численЩш^зяаченияад**. Т.к. регистр «В» должен содержать
код при непосредственном: выполнении команды, код может быть
использован только как первая команда после RST 40.
Рассмотрим второй набор операционных кодов для построчного
сравнения; результат 2>=1- истина, Ъ=0 - ложь (STACK СН.-5).
09 Y<=X
10 (OAh) Y>=X
11 (OBh) YOX
12 (OCh) Y>X
13 (ODh) Y<X
14 (OEh) Y=X
15 (OFh) ADDITION X+Y=Z (STACK CH.-5)
В следующем наборе команд по крайней мере одно из значений X
и Y должно содержать параметры строкц. Подробности получения
этих параметров и помещения их на стек даны ниже. Строковые
параметры помечены знаком доллара.
Операционные коды 17-22 (1 lh-16h) - строковые эквиваленты
кодов 09-14 (OEh), вызываемые операционным кодом, со-
держащимся в регистре «В». Вновь Z=1 истина, Z?=0 - ложь.
(STACK СН.-5)
17 (llh) Y$<=X$
18 (I2h) Y$>=X$
19 (13h) Y$<>X$
20 (I4h) Y$>X$
21 (15h) Y$<X$
22 (16h) Y$=X$
23 (I7h) ADDITION
X$+Y$=Z$. Две строки сцепляются в рабочей области и новые
параметры засылаются в Z$. Помните, что если размер окна
окажется недостаточным для копирования двух строк в рас-
ширенную рабочую область - генерируется ошибка БЕЙ-
СИКа. (STACK СН.-5)
24 (18h) VAL$
VAL$ Y$=Z$. Так же как и в случае, приведенном выше, в рабочей
области генерируется новая строка. Операционный код дол-
жен содержаться в регистре «В» во время выполнения.
Любые ошибки приведут к ошибке БЕЙСИКа. Эта программа
используется интерпретатором БЕЙСИКа и обрабатывается всеми
процедурами проверки синтаксиса. (STACK СН. 0)
25 (19h) USR$
Z=USR$. Опять таки используется интерпретаторрм БЕЙСИКа и
является предметом для проверки на cifflTaEck€;:Y$ должна
содержать параметр строки, состоящей из одной;8$квы от
«А» до "U". Z будет по завершении содержать адрес опреде-
ленной пользователем графики. (STACK СН. 0)
26 (lAh) READ IN
Эта подпрограмма позволяет разместить; к ;рабочей области через
любой поток (0-15 отдельный ;£>айт, взятий ИЗ;Y. Байт ин-
терпретируется как строка, a;Z$ - парамётры|строки. Если
флаг переноса не устанавливается, то никаких действий не
предпринимается и Z$ возвраищётся в виде пустой строки.
27 (lBh) NEGATE
Z=Y, но с обратным знаком^ (!5ТЩ|К:СН. 0)
28 (ICh) CODE
Z=CODE Y$.;; Как;; используемая интерпретатором БЕЙСИКа.
(STACK СН:Щ;|;;;;;:.:::
29 (lDh) VAL
Z=VAL Y$. Как используемая интерпретатором БЕЙСИКа и на
самом деле позволяет; после сканирования строки разме-
стить результат:1 в Z. Возможны ошибки БЕЙСИКа.
(STACK CtiM
ZHLEN Y$. Это проще;сщёлать без использования калькулятора,
все что делаётёЯ;;г|::это на стек помещаются байты длины
параметров строки. (STACK СН. 0)
Все нижеприведенные алгебраические функции помещают ре-
зультат (Z) на вершину стека калькулятора. Размер стека не меня-
ется.
31 (lFh) Z=SIN Y
32 (20h) Z=COS Y
33 (21h) Z=TAN Y
34 (22h) Z-ASN Y
35 (23h) Z-ACS Y
36 (24h) Z=ATN Y
37 (25h) Z-LN Y
38 (26h) Z=EXP Y
39 (27h) Z-INT Y
40 (28h) ZHSQR Y
41 (29h) Z»SGN Y
42 (2Ah) Z=ABS Y
43 (2Bh) PEEK
Z^PEEK Y. Как используемая интерпретатором БЕЙСИКа.
(STACK СН. 0)
44 (2Ch) IN Z=IN Y.
Выполняет команду "IN А,(С)" Z80 после того, как возьмет Y в
пару регистров "ВС" как целое число. (STACK СН. 0)
45 (2Dh) USR NO
Нужна осторожность, т.к. команда приводит к переходу по адресу
в Y. Используется БЕЙСИКОМ для перехода в машинные
коды. Адрес возврата 11563 (2D2Bh), программа помеще-
ния на стек содержимого "ВС", которая загрузит число в
регистр "ВС" при возвращении на стек калькулятора. Это
интересный операционный код, т.к. он открывает нам воз-
можность использования программ ПЗУ и ОЗУ рекурсивно,
из калькулятора. (STACK СН. 0)
46 (2Eh) STR$
Z$=Y. Верхнее значение со стека калькулятора выводится в
"WORKSPACE" и расценивается как строка, параметры ко-
торой затем помещаются на стек калькулятора. (STACK
СН. 0)
47 (2Fh) CHR$
Z$=CHR$ Y. Если 0 Y 255, то в "WORKSPACE" формируется
один пробел и значение переводится там в однобайтовый
вид. Затем оно интерпретируется как строка и параметры
возвращаются в Z$. (STACK CEL 0)
48 (30h) NOT
Z^l, если Y=0, иначе Z=0. (STACK CH.O) ";lji;:
49 (31h) DUPLICATE
Z=0. Y дублируется. (STACK CH.+5)
50 (32h) X MOD Y
При возврате Z^INT (X/Y). Округление идет в мёщЩгю сторону
(где исходно было X) X-INT(X/Y) .: (STACK СН. 0)
............... »
51 (33h) JUMP
Это эквивалентно команде JR Z80; (JUMP RELATIVE), но для
калькулятора. Длина перехода берется из ячёйки после опе-
рационного кода. Стек кмъкулятора не задействован.
(STACK CH.O)
52 (34Н) STK DATA
Позволяет считать значенйёйз ячеек; следующих за операцион-
ным кодом. Биты 6 й 7 первого: байта (показатель) после
операционного кода, определяют количество байтов, кото-
рые необходимы для формирования мантиссы, от 00 BIN для
1 и до l;i;;BIN: для 4. Число;;с; плавающей точкой затем
считывается в СЙк;калькулятора^ (STACK СН.+5)
53 (35h) DEC JR NZ
Прямой эквивалент.операционному коду "DJNZ" Z80, но для
калькулятора. Регистр «В» бёрется как системная перемен-
ная "BREG". Команда может быть использована несамосто-
ятельно, т;к. интенсивно;используется калькулятором для
; своих целей, следовательно значение "BREG" сомнительно.
:!;;;<STACK СН. 0)
54 ОШШЩШ-::,.
ZHU если (STACK СН. 0)
55 (37h) Y0
Z=1, если Y0, иначе Ъф. (STACK СН. 0)
56 (38h) ENDCALC
Передает управление Z80 к следующему адресу. (STACK СН. 0)
57 (39h) GET ARGT
Внутренняя программа калькулятора для задания значения Y для
SIN Y или COS Y. (STACK СН. 0)
58 (3Ah) TRUNCATE
Z=INT Y, где Z - это Y, округляется в сторону 0. (STACK СН. 0)
59 (3Bh) FP CALC2
Используется интерпретатором для выполнения одной команды
калькулятора. Для целей данной книги практического при-
менения не имеет.
60 (3Ch) Е ТО F.P.
Z=Y Е (показатель) регистр «А». (STACK СН. 0)
61 (3Dh) RE STACK
Z= положение плавающей точки в Y, где Y может быть маленьким
целым числом. (STACK СН. 0)
62 (3Eh) SERIES
Используется калькулятором для генерации полинома Чебыше-
ва. Практической ценности для нас не имеет. Вызывается
программой, использующей значения полинома.
63 (3Fh) STACK NO
Как и предыдущее, но используется для констант.
64 (40h) ST MEM
Используется для размещения числа в памяти. На входе регистр
«А» должен содержать "С0-С5", в соответствии с которыми
пять ячеек памяти будут использованы. (STACK СН.-5)
65 (41h) REC MEM
Получение числа из памяти. Процедура, обратная предыдущей.
(STACK СН.-5)
Для операций со строками параметры могут быть размещены на
стеке калькулятора с помощью программы 10934 (2AB6h), описан-
ной выше. Пара регистров "ВС" содержит длину строки, пара регист-
ров "DE" - адрес начала, регистр «А» - имя (в форме, описанной в
главе 2, команды "SAVE", "LOAD" и "VERIFY"). Для того, чтобы
помочь разобраться в работе калькулятора и поэкспериментировать,
в приложении «Полезные программы» дан соответствующий текст.