[an error occurred while processing this directive]
.ов
.сс
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.
.ми0
.ао0
------------------------------------------------------
!лат.! код! лат.! код !рус.! код ! рус.! код !Зна-! код !
!мал.! ! бол.! !мал.! ! бол.! !ки ! !
!-------------------------------------------------------
! ! ! ! ! ю ! 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);
в версии ARRLESOFT директива 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 - считывание интервала памяти с МЛ. -7 в заданном интервале;
*<выражение>G - выполнение программы в кодах системы команд с заданного адреса;
*<выражение 1>.<выражение 2>S - выполнение программы в кодах системы команд с адреса, определяемого выражением 1, до
[an error occurred while processing this directive]