Передовица » Макулатура » Штатная документация » Агат-7 Книга 7 » Фг.00012-02 35 01

Фг.00012-02 35 01

    УТВЕРЖДЕН

Фг.00012-02 35 01-ЛУ

МАШИНА ВЫЧИСЛИТЕЛЬНАЯ ЭЛЕКТРОННАЯ

ПЕРСОНАЛЬНАЯ "АГАТ"

Система программирования "Бейсик"

Интерпретатор языка "Бейсик"

Описание языка

Фг.00012-02 35 01

1989

 

* * *

АННОТАЦИЯ

В настоящем документе приведено неформальное описание языков программирования "Бейсик-Агат" и APPLESOFT, поставляемых на гибком магнитном диске (ГМД) ИКП1.

Эти версии в основном совместимы, различия указываются в соответствующих разделах документа.

Описание предназначается для ознакомления с языком "Бейсик", реализованным на ПЭВМ "Агат", для ознакомления с языком "APPLESOFT", который функционирует в режиме "APPLE" ПЭВМ "Агат" исполнения 9, либо при использовании модуля расширения Фг3.089.121 в составе "Агат-7", а также в качестве справочного материала для программистов, знакомых с какой-либо версией языка "Бейсик" по опыту работы или изучавших основы этого языка.

Описание языка не содержит сведений о его реализации. Информация, полезная при разработке сложных программ (использование нестандартной периферии, работа на пределе технических параметров ПЭВМ) содержится в руководстве программиста Фг.00012-02 33 01).

Документ содержит разделы "Общие сведения" и "Элементы языка", в нем описано внешнее представление данных и команд собственно версии языка "Бейсик", средства графических режимов и возможности для программирования в системе команд процессора.

СОДЕРЖАНИЕ

1. Общие сведения  
2. Элементы языка
  2.1. Представление данных
  2.2. Представление операций
  2.3. Представление команд 
  2.4. Средства программирования на языке ассемблера

1.ОБЩИЕ СВЕДЕНИЯ

Язык программирования "Бейсик" предназначается для использования профессиональными программистами при разработке широкого класса программ на ПЭВМ "Агат", а также для применения неподготовленными пользователями при решении простых вычислительных задач на уровне калькулятора и при эксплуатации ими готовых программных изделий в качестве языка управления заданиями.

Логической основой построения данной версии языка "Бейсик" служат стандартные средства языка "Бейсик", который является его подмножеством.

В интересах удовлетворения предъявленным требованиям проведены следующие расширения:

1) введено раздельное представление для целых и вещественных чисел без ограничений на применимость арифметических и специальных операций над ними;

2) в версии "Бейсик- Агат" введен набор средств, соответствующих возможностям отображения, предоставляемых дисплейной системой ПЭВМ "Агат", а именно:

цветной текстовый режим в нормальном, инверсном и мерцающем изображении, 32*32 символа, 8 цветов;

черно-белый текстовый режим в нормальном или инверсном изображении, 64*32 символа;

графический цветной режим 128*128 элементов разложения, 8 цветов;

графический черно-белый режим 256*256 элементов разложения;

3) в версии "Бейсик- Агат" введен набор средств программирования на машинно-ориентированном языке типа ассемблера, обеспечивающий формирование в памяти ПЭВМ "АГАТ" и исполнение фрагментов программ в системе команд процессора. В набор включены также средства отладки машинных программ.

Объединение перечисленных средств в одном интерпретаторе позволяет разрабатывать высокоэффективные программы, пользуясь экономичной по памяти записью на средствах высокого уровня для редко используемых ветвей программы и применяя машинное кодирование для ветвей, несущих наибольшую вычислительную нагрузку.

Отладка такой гибридной программы, проводимая на едином исходном тексте, существенно упрощается по сравнению с традиционной технологией включения отдельно отлаженных кодовых элементов общей программы.

Кроме того, использование средств языка высокого уровня в интересах ассемблирования позволяет легко получить весь набор удобств, предоставляемый макрогенераторами с условной сборкой, управляя процессом ассемблирования с помощью обычных условных операторов и операторов перехода на подпрограмму.


Язык программирования "APPLESOFT" предоставляет пользователю возможность работать в нормальном, инверсном или мерцающем изображении в монохромном текстовом режиме 40*24 символа, а так же в графическом цветном режиме 280*192 элемента разложения, 6 цветов.

2. ЭЛЕМЕНТЫ ЯЗЫКА

2.1. Представление данных

2.1.1. Вид записи в программе и диапазоны возможных значений простых переменных приведены в табл.1.

                                            Tаблица 1
_______________________________________
  Тип       !  Имя   ! Диапазон       !
---------------------------------------
                        -38          38
Вещественные !  АВ   !10  <abs(X)< ?10

Целые        !  АВ%  !+/-32767 
Строковые    !  АВc  !0-255 символов

Примечание: А - буква, В - последовательность из букв и цифр.

2.1.2. Примеры записи переменных с индексами (элементов массивов) приведены в табл.2.

                                          Tаблица 2
_______________________________
  Tип        ! Имя              
--------------------------------
Вещественные !  АВ  ( 3,12,7 )
Целые        !  АВ% ( 3,12,7 )
Строковые    !  АВc ( 3,12,7 )

Размер массива ограничивается доступной памятью.

Идентификация переменных проводится по всем символам имени, длина которого не более 250 символов, и по типу переменной. Таким образом, одному идентификатору могут соответствовать три разные простые переменные и еще три разных массива.

В языке "APPLESOFT" переменная идентифицируетя по первым двум символам имени.

2.1.3. Различаются вещественные, целые и строковые константы.

Вещественные константы представляются в естественном формате, например:

123.456
.53
или в экспоненциальном формате
 1.234 Е-5=0.00001234
-1.234 Е5 = -123400

Вещественные числа могут быть присвоены вещественным и целым переменным, при присваивании целой переменной засылается целая часть значения, которая должна принадлежать диапазону представления целых.

Целые константы представляются в десятичном или шестнадцатеричном виде (от ¤0 до ¤FFFF ). Числам от ¤0 до ¤7FFF соответствуют положительные целые, от ¤8001 до ¤FFFF - отрицательные от минус 32767 до минус 1. Целого, соответствующего ¤8000, нет, поэтому вблизи этих значений лучше пользоваться вещественными переменными. Переход через ¤8000 вызывает неправильности и для вещественных переменных, которые можно проиллюстрировать следующими истинными условиями:

  $8100<$7F00
  $7F00+$200>$8100
Целые константы присваиваются целым и вещественным переменным.

В языке "APPLESOFT" целые константы представляются только в десятичном виде.

Строчные константы имеют длину не более 237 символов и могут содержать любые символы, кроме перевода строки и кавычек. Можно проверить, как выполняется PRINT строки, состоящей из многих УПР-Г.

Присваивать строчные константы можно только строковым переменным.

2.2. Представление операций

Арифметические операции:
"=" присваивание (переменная = выражение);
"-" взятие с обратным знаком (унарная), вычитание (бинарная);
"+" сложение;
"*" умножение;
"/" деление;
"^" возведение в степень;
Операции сравнения и логические:
"="   равно;
"<>"  не равно;
"<"   меньше;
">"   больше;
"<="  меньше или равно;
">="  больше или равно;
"NOT" логическое "не";
"AND" логическое "и";
"OR"  логическое "или";
Логическое "истина" тождественно арифметической "1", "ложь" - "0".
 Для строковых переменных применимы отношения "=", "<", ">" и "<>".

2.3. Представление команд

Команды "Бейсика" подразделяются на 4 типа:

А - команды, начинающиеся с ключевого слова (см.пп.2.3.1, 2.3.2, 2.3.4, 2.3.5, 2.3.6, DIM из п.2.3.3 данного документа);

В - присваивания, начинающиеся с имени переменной;

C - команды ассемблера, начинающиеся с "!";

D - команды отладочного набора, начинающиеся с "*".

В языке "APPLESOFT" реализованы только команды типов А и В.

Для различения команд типов А и В имена не должны начинаться с фрагментов, тождественных ключевым словам. Имена, употребляемые в качестве меток ассемблерного текста, не могут, кроме того, начинаться с фрагментов, совпадающих с мнемоникой операций системы команд.

Внутри строк программы и директив непосредственного исполнения команды типов А и В разделяются ":", оно же отделяет от них команды типа С. Между собой команды типа С разделяются "!". При записи команд типа D после других команд разделителем также является ":". После команд типа D ":" может быть принято за элемент такой команды (например, * ¤100:), поэтому располагать их в середине строки не рекомендуется.

Внутри команды слова, при необходимости, разделяются пробелами. Так, в команде

     IF A<B THEN PRINT ABC

1-й, 3-й и 4-й пробелы необязательны, поскольку находятся после ключевых слов. Отсутствие 2-го пробела будет воспринято как ошибка, так как образуется слово BTHEN, неотличимое от правильного имени переменной.

В APPLESOFT все пробелы не обязательны и имена не должны содержать ключевых слов.

Номера строк программы не должны превышать 65535.

2.3.1. Язык "Бейсик" ПЭВМ "Агат" интерпретирует следующие системные команды:

LOAD - загружает программу с магнитной ленты (МЛ) (бытовой магнитофон);

SAVE - записывает программу на МЛ;

NEW - устанавливает начальное состояние памяти, стирает программу и данные;

RUN - запуск программы со строки с наименьшим номером. Для запуска с промежуточной точки указать номер строки (например, RUN 200);

STOP - останавливает программу ( с выдачей текста строки, в которой произошел останов);

END  - конец программы;

<УПР-Ц> - останавливает программу или выдачу текста программы с выдачей текста строки и подсветкой оператора, на котором произошел останов (в APPLESOFT при останове сообщается только номер строки останова);

CONT - продолжает выполнение программы после STOP или <УПР-Ц>;

TRACE   - включает режим вывода номера строки при выполнении каждого оператора;

NOTRACE - отменяет TRACE;

PEEK(X) - значение байта по адресу Х;

POKE X,Y - заносит Y (0<=Y<=255) по адресу Х;

WAIT X,Y,Z - ожидает пока истинно <Х>=Z под поразрядной маской Y (<X> - содержимое байта по адресу Х). Например, WAIT ¤C000,¤80,0 ожидает любого нажатия на клавиатуре;

CALL X  - вызов кодовой подпрограммы по адресу Х;

USR(X)  - вызов кодовой подпрограммы с передачей значения. Значение Х помещается в ячейках  ¤9D - ¤A2 (157-163). Адрес кодовой подпрограммы должен быть подготовлен в ячейках 11-12, в ячейке 10 - код команды безусловного перехода 76 (¤4C);

& - свободное ключевое слово, служит для расширения набора директив пользователем. Директива пользователя должна быть записана непосредственно за знаком "&", команду перехода на программу обработки необходимо занести в ячейки памяти ¤3F5 - ¤3F7. В момент входа в программу в аккумуляторе первый символ директивы (следующий за "&" символ); признак переноса C = 0, если этот символ - цифра, в ячейках ¤B8,¤B9 - адрес этого символа;

HIMEM:  - устанавливает верхнюю границу памяти под переменные и строки, используемые программой. Значения переменных теряются, установленное значение HIMEM  увеличивать нельзя;

LOMEM:  - то же, для нижней границы памяти (нельзя уменьшать). Исходные значения HIMEM (¤С000) и LOMEM (  ¤1908) устанавливаются директивой ДОС "FP " или CALL ¤E000.

В языке "APPLESOFT" исходные значения HIMEM и LOMEM устанавливаются соотвественно в ¤803 и ¤9600 с ДОС или в ¤803 и ¤C000 без ДОС.

2.3.2. Для редактирования, а также при выводе текстовой информации на экран ВКУ используются следующие команды:

LIST   - выдача текста программы. Команда LIST без параметров выдает весь текст;

LIST 100,200  - выдает строки с номерами 100<=N<=200;

LIST 100,     - выдает строки с номерами не меньше 100;

LIST,200      - выдает строки с номерами не больше 200;

LIST 150      - выдает строку 150;

Описанные ниже модификации команды LIST в языке "APPLESOFT" не реализованы.

LIST "текст" - выдает все строки, содержащие указанный текст (просматривается текст строк в формате вывода командой LIST без редактирующих переводов строки, см. ниже);

LIST "текст1'текст2" - заменяет вхождения фрагментов, указанных в качестве "текст1", на "текст2" и выдает измененные строки. Диапазон поиска и замены может быть указан перед кавычками по тем же правилам, что и для выдачи.

Формат выдачи определяется следующими правилами:

до и после каждого ключевого слова и символа выдается пробел;

перед каждым именем длиной 2 и больше символов выдается пробел;

после номера строки выдается пробел (только в "Бейсик- Агат").

Формат, в котором выполняется поиск и замена фрагментов, может быть проверен директивой LIST" ". Изменение номера строки с помощью замены, например:

   LIST 100"100'150"

не приводит к уничтожению строки 100, а добавляет к программе строку 150.

При выдаче текста без поиска и замены добавляются редактирующие переводы строк и табуляция, обеспечивающие легкость чтения программы;

DEL X,Y  - уничтожает строки программы от номера Х до номера Y включительно;

REM      - комментарий до конца строки, при выполнении игнорируется;

VTAB Y   - устанавливает курсор на строку экрана с номером Y (0<=Y<=31), в APPLESOFT 1<=Y<=24;

HTAB X   - передвигает курсор на Х-ю позицию текущей экранной строки. В режиме 32*32   1<=X<=32, в режиме 64*32   1<=X<=64, в режиме APPLESOFT 1<=х<=40.


TAB(X)  - элемент оператора PRINT , то же, что HTAB, но при X меньше значения текущей горизонтальной позиции экрана не исполняется.

Нумерация строк и позиций на экране сверху вниз и слева направо;

POS(0)  - значение, номер позиции от левого края текстового окна. В скобках значение несущественно;

SPC(X)  - элемент оператора PRINT, вывод Х пробелов;

HOME    - очистка текстового окна, курсор помещается в верхнем левом углу экрана;

CLEAR   - чистка переменных. В конце текста программы во внутреннем представлении хранятся все имена переменных длиною 2 и более символов, набранные с клавиатуры в процессе отладки. Среди них могут находиться имена, исключенные из программы, и некоторые ошибочные директивы, которые не влияют на ход исполнения, но "засоряют" память и приводят к неоправданному увеличению длины программы. Директива CLEAR позволяет исключить все лишние имена из внутреннего представления программы. При ее выполнении, кроме того, на экран выдается весь текст программы в формате поиска/замены (в APPLESOFT CLEAR обнуляет переменные без "чистки" и выдачи листинга);

FRE(0)  - значение, объем свободной памяти, выполняется "чистка мусора" в области хранения строк (значение аргумента несущественно);

SPEED=X - задает скорость (0-255) вывода текста.

FLASH   - включает мерцающий режим вывода текста;

INVERSE - включает инверсный (черный по светлому фону) режим вывода текста;

NORMAL  - включает прямой (светлый по черному) режим вывода текста.

Последние три команды в черно-белом алфавитно-цифровом режиме 64х32 символа не исполняются.

2.3.3. Для описания массивов и работы со строковыми переменными или константами предназначены следующие команды:

DIM A(X,Y,Z)   - описание массива (описан трехмерный массив А с диапазоном индексов 0-X, 0-Y, 0-Z, занята память под (X+1)*(Y+1)*(Z+1) вещественных элементов). Количество размерностей ограничивается только общим объемом памяти;

LEN(A¤)       - значение, число символов в строке-аргументе;

STR¤(X)       - значение, строка, содержащая текстовое представление целого или вещественного аргумента;

VAL (A¤)       - значение, вещественное, текстовое представление которого расположено в начале аргумента (до первого не числового символа);

CHR¤(X)        - значение, символ, код которого равен Х;

ASC (A¤)       - код первого символа строки-аргумента;

В версии "Бейсик-Агат" содержимым строчной переменной могут быть как русские (большие и малые) так и латинские (большие и малые) буквы. Коды букв приведены в Таблице 3.

В версии APPLESOFT содержимым строчной переменной могут быть только малые латинские буквы.

                                         Таблица 3.
 ------------------------------------------------------
 !лат.! код! лат.! код !рус.! код ! рус.! код !Зна-! код !
 !мал.!    ! бол.!     !мал.!     ! бол.!     !ки  !     !
 !-------------------------------------------------------
 !    !    !     !     !  ю !  96 !  Ю  ! 224 !    ! 160 !
 ! a  ! 65 !  A  ! 193 !  а !  97 !  А  ! 225 !  ! ! 161 !
 ! b  ! 66 !  B  ! 194 !  б !  98 !  Б  ! 226 !  " ! 162 !
 ! c  ! 67 !  C  ! 195 !  ц !  99 !  Ц  ! 227 !  # ! 163 !
 ! d  ! 68 !  D  ! 196 !  д ! 100 !  Д  ! 228 !  ¤ ! 164 !
 ! e  ! 69 !  E  ! 197 !  е ! 101 !  Е  ! 229 !  % ! 165 !
 ! f  ! 70 !  F  ! 198 !  ф ! 102 !  Ф  ! 230 !  & ! 166 !
 ! g  ! 71 !  G  ! 199 !  г ! 103 !  Г  ! 231 !  ' ! 167 !
 ! h  ! 72 !  H  ! 200 !  х ! 104 !  Х  ! 232 !  ( ! 168 !
 ! i  ! 73 !  I  ! 201 !  и ! 105 !  И  ! 233 !  ) ! 169 !
 ! j  ! 74 !  J  ! 202 !  й ! 106 !  Й  ! 234 !  * ! 170 !
 ! k  ! 75 !  K  ! 203 !  к ! 107 !  К  ! 235 !  + ! 171 !
 ! l  ! 76 !  L  ! 204 !  л ! 108 !  Л  ! 236 !  , ! 172 !
 ! m  ! 77 !  M  ! 205 !  м ! 109 !  М  ! 237 !  - ! 173 !
 ! n  ! 78 !  N  ! 206 !  н ! 110 !  Н  ! 238 !  . ! 174 !
 ! o  ! 79 !  O  ! 207 !  о ! 111 !  О  ! 239 !  / ! 175 !
 ! p  ! 80 !  P  ! 208 !  п ! 112 !  П  ! 240 ! 0  ! 176 !
 ! q  ! 81 !  Q  ! 209 !  я ! 113 !  Я  ! 241 ! 1  ! 177 !
 ! r  ! 82 !  R  ! 210 !  р ! 114 !  Р  ! 242 ! 2  ! 178 !
 ! s  ! 83 !  S  ! 211 !  с ! 115 !  С  ! 243 ! 3  ! 179 !
 ! t  ! 84 !  T  ! 212 !  т ! 116 !  Т  ! 244 ! 4  ! 180 !
 ! u  ! 85 !  U  ! 213 !  у ! 117 !  У  ! 245 ! 5  ! 181 !
 ! v  ! 86 !  V  ! 214 !  ж ! 118 !  Ж  ! 246 ! 6  ! 182 !
 ! w  ! 87 !  W  ! 215 !  в ! 119 !  В  ! 247 ! 7  ! 183 !
 ! x  ! 88 !  X  ! 216 !  ь ! 120 !  Ь  ! 248 ! 8  ! 184 !
 ! y  ! 89 !  Y  ! 217 !  ы ! 121 !  Ы  ! 249 ! 9  ! 185 !
 ! z  ! 90 !  Z  ! 218 !  з ! 122 !  З  ! 250 ! :  ! 186 !
 !    !    !     !     !  ш ! 123 !  Ш  ! 251 ! ;  ! 187 !
 !    !    !     !     !  э ! 124 !  Э  ! 252 ! <  ! 188 !
 !    !    !     !     !  щ ! 125 !  Щ  ! 253 ! =  ! 189 !
 !    !    !     !     !  ч ! 126 !  Ч  ! 254 ! >  ! 190 !
 !    !    !     !     !  ъ ! 127 !  Ъ  ! 255 ! ?  ! 191 !
 ---------------------------------------------------------

LEFT¤(A¤,X)     - строка из первых Х символов аргумента;

RIGHT¤(A¤,X)   - строка из последних Х  символов аргумента;

MID¤(A¤,X,Y)   - строка из Y символов А¤, начиная с Х-го.

В качестве примера приведена небольшая программа, с помощью которой можно сортировать массив слов по первому символу латинского алфавита:

100 FOR I=2 TO N
150 FOR J=I-1 TO 1 STEP -1
180 IF ASC (LEFT¤(M¤(I),1))<ASC (LEFT¤(M¤(J),1))
    THEN A¤=M¤(I): M¤(I)=M¤(J): M¤(J)=A¤
300 NEXT
330 NEXT
Здесь М¤   - имя сортируемого массива.
Далее приводятся примеры работы со строками.
В¤ = "АГАТ" : А¤ = "БЕЙСИК" : А¤ = А¤+"-"+В¤
После выполнения этих действий строковой переменной А¤ принадлежит строка "БЕЙСИК-АГАТ". Если набрать директиву
 PRINT RIGHT¤(A¤,4)
то на экране ВКУ будет напечатано: АГАТ.
Директива
PRINT MID¤(A¤,6,3)
приведет к тому, что на экране ВКУ будет напечатано: К-А.
Директива
А=LEN(A¤)
вызовет присвоение переменной А значения 11.
Следующая программа напечатает на экране ВКУ латинский алфавит:
10 FOR I=1 TO 26
20 PRINT I;".";CHR¤(I+¤40)
30 NEXT

При работе с массивами необходимо помнить о том, что не объявленные в операторе DIM массивы автоматически получают размерность всех индексов от 0 до 10. Объявление в операторе DIM массива должно предшествовать его использованию в программе.

Идентификация идентификаторов осуществляется так, что переменные А, А%, А¤, А%(I), А¤(J) являются различными, а появление в одной программе массивов А(1,2) и А(3,4,5) ведет к ошибке и останову интерпретации.

2.3.4. Ввод/вывод данных осуществляется с помощью следующих команд:

INPUT I%,X,A¤   - ввод целого, вещественного и строкового значений с клавиатуры или заменяющего ее устройства. Перед вводом каждого элемента выдается "?" (перед каждым вторым, третьим и т.д. - "??"). Вводимое значение отображается на экране, действуют стандартные средства редакции в строке. Данные на вводе записываются по правилам для констант, строки можно вводить без кавычек, но тогда они не должны содержать запятых, которые используются в качестве разделителей единиц данных на вводе;

INPUT "НАЧИНАЙТЕ ВВОД";А  - строковая константа заменяет первый "?" при вводе;

GET A¤    - ввод одного символа с клавиатуры. Все символы равноправны. На экране введенный символ не отображается;

READ X   - присваивает Х значение очередного элемента списка данных, определенного оператором DATA;

DATA 1,¤FF69,РАЗНЫЕ,ЗНАЧЕНИЯ,"ОДНО,ЗНАЧЕНИЕ"    - список данных для операторов READ. В примере записано два целых и три строковых значения - правила употребления запятых в строках такие же, как на вводе;

RESTORE  - устанавливает в начальное положение указатель списка данных. Следующим READ будет прочитан первый элемент первого по тексту программы (но не по порядку исполнения операторов DATA) списка;

PRINT A¤;I%;X  - вывод на экран или заменяющее его устройство значений элементов списка. Разделитель ";" задает печать вплотную за предыдущим элементом. Разделитель "," - в очередную треть экрана. Наличие ";" в конце списка PRINT задает для следующего PRINT печать в ту же строку, иначе каждый следующий оператор осуществляет вывод с новой строки. При наборе программы "?" тождественен слову PRINT.

2.3.5. Ниже приведены команды передачи управления:

GOTO 360  - переход на строку 360;

GOSUB 1100  - переход на строку 1100 с запоминанием адреса возврата;

RETURN   - возврат к оператору, следующему за последним по выполнению GOSUB;

POP      - удаление последнего адреса возврата из списка;

ON X GOTO 100,200,300,400  - переключатель-переход на строку с Х-м номером из списка;

ON X GOSUB ...  - переключатель-вызов, вызывает Х-ю из перечисленных подпрограмм;

DEF FN SEC(X)=1/SIN(X)   - определяет функцию SEC, теперь можно пользоваться Y=1-FNSEC(.1*A)  . Количество аргументов при описании функций не более 1;

IF X=1 THEN PRINT Y    - последовательность операторов после THEN и до конца строки выполняется только при истинности логического выражения IF , иначе выполнение продолжается со следующей строки;

FOR I=1 TO 15 STEP 4: NEXT    - цикл, выполняет операторы между оператором FOR и соответствующим ему NEXT с I=1, затем с I=5, I=9 и т.д., пока не будет I>15 , тогда выполняются операторы, следующие за NEXT. Если STEP опустить, будет использован шаг 1; хотя бы одно выполнение операторов цикла происходит всегда;

NEXT   - конец цикла, после выхода из цикла его переменная получает первое из значений, не удовлетворяющее условию;

ONERR GOTO 1500    - подключение программы обработки ошибок, диагностируемых интерпретатором и ДОС. Начальный номер строки обработчика 1500. На экран диагностика не выдается;

RESUME   - используется в программе обработки ошибок. Выполняет возврат на оператор, при выполнении которого обнаружена ошибка. Если никаких мер не принято, ошибка повторится. Перед выполнением 'RESUME' следует устранить причину ошибки, например взять с обатным знаком операнд квадратного корня, устранить ошибочное обращение к диску заменой CHR$(4) (признака обращения к DOS) на некоторый нейтральный код.

2.3.6. Следующие команды предназначены для работы в графических режимах и ввода данных от игровых пультов:

MGR=N    - включение графики среднего разрешения.

N  - номер страницы размером 8К байт, при этом 1<=N<=3;

HGR=N    - включение графики высокого разрешения. Параметры такие же, как у оператора MGR.

Команды включения графических режимов очищают включенную экранную страницу памяти;

COLOR=X    - устанавливает цвет для последующих графических операторов (0<=X<=7).

Кодировка цветов в зависимости от значения Х приведена ниже:
1 - красный; 2 - салатовый; 3 - желтый;
4 - синий; 5 - сиреневый; 6 - голубой ;
7 - белый.

PLOT X,Y   - помещает точку текущего цвета в Х-ю позицию Y-й строки экрана;

PLOT X0,Y0 TO X1,Y1   - рисует прямую линию текущего цвета из точки X0,Y0 в точку X1,Y1. Если координаты начальной точки не указаны, используется конечная точка последнего по выполнению оператора PLOT;

SCRN (X,Y)  - значение, номер цвета точки X,Y;

DRAW I AT X,Y  - воспроизводит I-й образ (кодировка образов описана в документе Фг.00012-02 33 01) в точке X,Y текущим цветом;

XDRAW I AT X,Y  - воспроизводит I-й образ, но цветом, дополнительным к цвету экрана;

SCALE=X   - устанавливает масштаб воспроизведения образов (1-255);

ROT=X     - устанавливает угол поворота образов по часовой стрелке.

Для SCALE=1 дискрет 90 градусов или 16 единиц ROT , для SCALE=2 - 45 или 8 единиц ROT и т.д.

Диапазоны допустимых значений координат для MGR от 0 до 127, для HGR от 0 до 255;

TEXT=N   - устанавливает текстовый режим, N - номер страницы 2<=N<=63, страницы от 2 до 31 - цветные 32х32 символа, от 32 до 63 - черно-белые 32х64 символа;

RIBBON=X - устанавливает цвет символов в текстовом режиме (0<=Х<=7);

в версии APPLESOFT директива HGR2 устанавливает графический режим с разрешением 280*192 точки, а директива HGR- смешанный текст-графический режим.

В этой версии существуют директивA HPLOT X,Y, рисующая точку заданного цвета в позиции с координатами X и Y и директова HPLOT X,Y TO X1,Y1, соединяющая две точки экрана. Существует так же директива HCOLOR= I (1<=I<=6), устанавливающая цвет для последующих графических операторов.

PDL(X)   - значение, установленное ручкой Х-го игрового датчика (X = 0 или 1).

2.3.7. В языке "Бейсик" ПЭВМ "АГАТ" исполнения 9 и языке "APPLESOFT" реализованы следующие элементарные математические функции:

SIN(X)   - значение синуса (X рад);

COS(X)   - значение косинуса (X рад);

TAN(X)   - значение тангенса (X рад);

ATN(X)   - значение арктангенса Х;

INT(X)   - значение целой части Х;

RND(X)   - псевдослучайное значение в интервале 0,1. При X>0 элемент случайной последовательности. При X<0 запуск псевдослучайной последовательности (своей для каждого X). При Х=0 - повторение последнего результата;

SGN(X)   - 1 при Х>0, 0 при Х=0, минус 1 при Х<0;

ABS(X)   - модуль Х;

SQR(X)   - положительный квадратный корень X;

EXP(X)   - экспонента X;

LOG(X)   - натуральный логарифм Х.

2.4. Средства программирования на языке ассемблера

В яэыке "APPLESOFT" средства программирования на языке ассемблера не предусмотрены.

2.4.1. Для управления ассемблированием в языке "Бейсик" для ПЭВМ "Агат" исполнения 9 используются следующие команды:

*{СМЕЩЕНИЕ,} АДРЕС:   - используется для входа в режим ассемблирования. Задает адреса формируемого объектного кода при ассемблировании и исполнении (если предполагается исполнять программу не на тех адресах, на которые она записывается при ассемблировании). В случае совпадения адреса и смещения смещение указывать не обязательно.

АДРЕС      - выражение, задающее начальный адрес записи формируемого кода при ассемблировании.

СМЕЩЕНИЕ   - выражение, задающее начальное значение адреса, используемого для ссылок на формируемый код (адрес программы при исполнении).

Например, в результате выполнения

     *¤1234,¤3100:!МЕТКА:=МЕТКА!:

по адресу  ¤3100  будет записано слово ¤3412. Указание адреса должно обязательно предшествовать исполнению первой команды ассемблирования. Указание адреса между командами ассемблирования изменяет параметры последующей загрузки кода, сохраняя возможность перекрестных ссылок по меткам;

!   - сигнал входа в ассемблер и разделитель команд ассемблирования внутри строки; должен предшествовать каждой команде ассемблера;

!:  - пустая команда ассемблера, служит сигналом перехода на второй проход или конца ассемблирования.

Ассемблирование проводится в два прохода. На первом проходе определяются форматы операндов и значения меток, форматы команд записываются на место объектного кода. Просмотр текста происходит в порядке исполнения строк программы на языке "Бейсик", содержащих команды ассемблера. При исполнении на первом проходе оператора "!:", который служит сигналом на второй проход, управление передается на первый встреченный, после входа в режим ассемблирования, оператор "!". Программа должна обеспечивать второе исполнение операторов ассемблирования в том же порядке, что и на первом проходе (при этом все операторы "Бейсика" во время второго прохода выполняются еще раз). На втором проходе формируется объектный код, значения меток сохраняются и могут быть в дальнейшем использованы в качестве операндов CALL, &, USR, а также отладочными директивами (см. далее). При исполнении "!:" на втором проходе ассемблирование завершается. Для следующего входа в ассемблер снова требуется указать адреса формируемого кода.

Команды ассемблера могут быть помечены. Метками служат целые и вещественные переменные языка "Бейсик", например:

  5 КОН = ¤FDDF:*¤6000:
 10 ! MI:!M2%:LDA ¤AA55!STA ¤666
 20 !JSR КОН!RTS
 30 !:

Команды ассемблера подразделяются на программные команды и константы.

2.4.2. Ниже перечислены команды ассемблера, предназначенные для формирования констант:

1) ! <выражение> - загружает 5 байт вещественным значением выражения, вычисленным на втором проходе, в представлении интерпретатора;

2) < <выражение> - загружается старший байт целого значения, определяемого выражением;

3) > <выражение> - загружается младший байт значения;

4) = <выражение> - загружается 2 байта целого значения выражения в порядке "младший,старший", то есть в формате адреса;

5) @ <выражение> - то же, что и = , но в порядке "старший,младший", то есть в формате целого значения интерпретатора;

6) ¤{XX} - ( четное число шестнадцатеричных цифр ) шестнадцатеричная загрузка зоны;

7) "строка длиной N" - загружает N байт кодами КОИ-7 символов строки ( при этом старший разряд "0" );

8) # <выражение> - увеличивает значение счетчиков адреса и смещения на значение выражения (генерация свободной зоны).

Пример использования констант в языке ассемблера:
 5   M1=¤100:LNGHT=15: M2%=M1-LNGHT:X=1.57
 10  *¤3000:!SIN(X)+COS(X)!=M1*12
 20  !>M1+16*LNGHT+M2%+100
 30  !¤AAB6F7FD0001
 40  ! M1+256+80
 50  !=¤FDF4 !¤B1
 60  !"ТАБЛИЦА"!К::
После RUN сформируется код
 3000 - 81 00 1A 15 68 00 0C 45
 3008 - AA B6 F7 FD 00 01 02 50
 3010 - F4 FD B1 74 61 62 6C 69
 3018 - 63 61
где 
    3000-3004 - представление вещественного 1.00079601
    3005-3006  - адрес ¤C00 (12*256)
    3007   - младший байт значения  ¤100+¤F0+¤64+¤F1
    3008-300D - последовательность байт
    300E-300F  - целое представление ¤250
    3010-3011  - адрес ¤FDF4
    3012       - байт ¤B1
    3012-3019  - текст "ТАБЛИЦА"
Переменная К получит значение ¤301A.

2.4.3. В данном пункте изложены правила написания и использования программных команд ассемблера.

Первое поле программной команды - мнемокод операции, затем может следовать операнд.

В качестве содержимого операнда могут использоваться константы типа 2), 3), 4), а в непосредственных операндах и типа 7) длиной в 1 символ.

При использовании в качестве операндов констант типа 2), 3) - формат адресации однобайтный; типа 4) - двубайтный.

В случае отсутствия перед операндом знаков "<", ">", "=" формат адресации определяется следующим образом.

Если в выражении имеется идентификатор, значение которого не определено на первом проходе к данному моменту, то формат адресации двухбайтный, в противном случае он определяется значением выражения. Если значение выражения меньше 256, то формат адресации однобайтный. Если значение выражения больше 256, то формат адресации двухбайтный.

Предусмотрены дополнительные возможности введения комментариев в любой команде от символа ";" до конца команды ("!" или конец строки). Пример использования программных команд:

    5 GOTO 65
   10 REM МАКРООПРЕДЕЛЕНИЕ
   20 !PLA!STA¤0!PLA!STA¤1
   30 RETURN
   40 REM МАКРООПРЕДЕЛЕНИЕ ДЛЯ ВОЗВРАТА
   50 !LDA¤1!PHA!LDA¤0!PHA!RTS
   60 RETURN
   65   *4096  : ! BEGIN: NOP ; ТРЕБУЕТСЯ ДЛЯ ПРАВИЛЬНОГО НАЧАЛА ВТОРОГО ПРОХОДА
   70 REM ПОДПРОГРАММА ПЕЧАТИ И ВЫБРАСЫВАНИЯ 3 БАЙТ ИЗ СТЕКА
   80 GOSUB 10
   90 FOR I=1 TO 3
  100 !PLA!JSR¤FDE1; ПОДПРОГРАММА COUT СИСТЕМНОГО МОНИТОРА
  110 NEXT
  120 GOSUB 40
  130 MJ=0:REM ИСПОЛЬЗОВАНИЕ МАКРОСА С МЕТКАМИ
  140  SR=5000:  DS=8000:  LN=33:REM  ИСТОЧНИК,ПОЛУЧАТЕЛЬ ДЛИНЫ ПЕРЕПИСИ
  150 GOSUB 1000
  160 SR=5100: DS=7000: LN=99: GOSUB 1000
  170 !:END
 1000 MJ=MJ+1:REM НАЧАЛО МАКРООПРЕДЕЛЕНИЯ ПЕРЕПИСИ
 1010 !LDX#   ¤0! L(MJ):LDA=SR.X; ПРИ КАЖДОМ НОВОМ МАКРОВЫЗОВЕ МЕТКОЙ БУДЕТ ОЧЕРЕДНОЙ ЭЛЕМЕНТ МАССИВА
 1020 !STA DS,X!INX!CPX # LN
 1030 !BNE L(MJ) ; ПЕРЕХОД ВНУТРИ МАКРООПРЕДЕЛЕНИЯ
 1040 RETURN

2.4.4. Интерпретатор языка "Бейсик" предоставляет пользователю следующие средства отладки:

* <выражение> - осмотр содержимого ячейки памяти по заданному адресу;

 Например, 
          *¤3000
           3000 - 4В

*<выражение 1> . <выражение 2> - осмотр интервала памяти по заданнным начальному и конечному адресам;

 Например, после директивы *¤B1.¤C8 на экране появится следующая информация:
00B1- E6 B8 D0 02 E6 B9 AD 
00B8- 05 02 C9 3A B0 0A C9 20
00C0- F0 EF 38 E9 30 38 E9 D0
00C8- 60

*<выражение 1>#<выражение 2> . <выражение 3> М - передвижение интервала памяти;

*<выражение 1>#<выражение 2>.<выражение 3>V - сравнение двух интервалов памяти;

* [<выражение>] L - вывод текста программы в мнемокоде системы команд, с заданного адреса или, если адрес не указан, продолжение листинга.

Выводится 28 строк текста программы;

*<выражение 1>.<выражение 2>Т - вывод текста в кодировке КОИ-7 в заданном интервале;

*<выражение>G - выполнение программы в кодах системы команд с заданного адреса;

*<выражение 1>.<выражение 2>S - выполнение программы в кодах системы команд с адреса, определяемого выражением 1, до прерывания, осуществляемого по адресу, определяемому выражением 2.

Если выражение 1 отсутствует, то начальным адресом считается адрес последнего прерывания.

При пользовании директивой S следует учитывать:

1) исходное включение памяти для отлаживаемой программы отличается от используемого интерпретатором.

Состояние эмулятора ПЗУ на момент запуска/останова отлаживаемой программы хранится ¤е9, состояние дополнительного ОЗУ в ¤е8: иногда необходимо задать их перед запуском программы.

Переключения банков памяти, выполняемые отлаживаемой программой, запоминаются (содержимые РСС в ячейках ¤Е8-Е9 интерпретатора) и повторяются при последующих исполнениях "S";

2) содержимое ячеек ¤0 - ¤FFF отлаживаемой программы хранится в адресах ¤8000-8FFF банка 9 и не портится при работе интерпретатора;

3) содержимое регистров отлаживаемой программы запоминается в ячейках ¤45-¤49 интерпретатора, адрес точки останова - в 0-1. Осмотр и изменение регистров следует проводить директивой УПР-Е системного монитора;

4) содержимое текстового экрана отлаживаемой программы хранится в ячейках ¤9000-¤97FF банка С и не показано на экране в диалоге интерпретатора. Для его просмотра рекомендуется переписать эту зону в текущий экран.

Предусмотрено использование "S" для отладки программ, размещаемых на адресах ПЗУ, следует только следить за сохранностью интерпретатора, размещенного в массиве 0 модуля-эмулятора ПЗУ.

Команды осмотра содержимого памяти отладчика и команды загрузки в память системного монитора работают с учетом содержимого ячеек ¤E8 и ¤E9. Ассемблерные команды и директивы ДОС загружают код независимо от содержимого этих ячеек.

*<выражение 1>.<выражение 2>W - запись интервала памяти на магнитную ленту (МЛ);

*<выражение 1>.<выражение 2>R - считывание интервала памяти с МЛ.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *