Операционная система Спектрума 1993 г.

Калькулятор - использование калькулятора.


□ ИСПОЛЬЗОВАНИЕ КАЛЬКУЛЯТОРА

Для лучшего понимания работы калькулятора полезно предста-
вить его в виде отдельного процессора со своим набором команд. Он
подключается 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"). Для того, чтобы
помочь разобраться в работе калькулятора и поэкспериментировать,
в приложении «Полезные программы» дан соответствующий текст.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Press - обзор свежей прессы: Explorer 1,2,3, IzhNews #0C, Body, Zx-Light, Inferno #2, ULTIMATUM#2, MADNESS #1, KoSME#0.
Проба пера - Стихи А. Баженова: Наболело, понимаеш-ш-шь..., Причин для радости немного,Уже октябрь дождем холодным...,REMEMBER!, Одиночество, Волны плещут за кормой..., ождаясь, мы тут и умираем... На перекретке двух миров.
Железо - Много функций на одном теле (об АОН'ах).
BBS на ZX - О версиях терминальной программы Macro Modem. Скоро откроется новая сеть - Omega Net.
WANTED - Розыск программ...

В этот день...   24 ноября