≡ Передовица » Макулатура » Штатная документация » Агат-7 Книга 7 » Фг 00003-01 35 02
Фг 00003-01 35 02УТВЕРЖДЕН Фг 00003-01 35 02-ЛУ МАШИНА ВЫЧИСЛИТЕЛЬНАЯ ЭЛЕКТРОННАЯПЕРСОНАЛЬНАЯ "АГАТ"Программное обеспечениеИнтерпретатор языка "Бейсик"Описание языкаФг 00003-01 35 021985
* * *АННОТАЦИЯВ настоящем документе приведено неформальное описание языков программирования "Бейсик". Описание предназначается для ознакомления с языком "Бейсик", реализованным на ПЭВМ "Агат", а также в качестве справочного материала для программистов, знакомых с какой-либо версией языка "Бейсик" по опыту работы или изучавших основы этого языка. Описание языка не содержит сведений о его реализации. Информация, полезная при разработке сложных программ (использование нестандартной периферии, работа на пределе технических параметров ПЭВМ "АГАТ") содержится в руководстве программиста Фг.00003-01 33 02. Документ содержит разделы "Общие сведения" и "Элементы языка", в нем описано внешнее представление данных и команд собственно версии языка "Бейсик", средства графических режимов и возможности для программирования в системе команд процессора. СОДЕРЖАНИЕ1. Общие сведения 2. Элементы языка 2.1. Представление данных 2.2. Представление операций 2.3. Представление команд 2.4. Средства программирования на языке ассемблера 1.ОБЩИЕ СВЕДЕНИЯЯзык программирования "Бейсик" предназначается для использования профессиональными программистами при разработке широкого класса программ на ПЭВМ "АГАТ", а также для применения неподготовленными пользователями при решении простых вычислительных задач на уровне калькулятора и при эксплуатации ими готовых программных изделий в качестве языка управления заданиями. Логической основой построения данной версии языка "Бейсик" служат стандартные средства языка "Бейсик", который является его подмножеством. В интересах удовлетворения предъявленным требованиям проведены следующие расширения: 1) введено раздельное представление для целых и вещественных чисел без ограничений на применимость арифметических и специальных операций над ними; 2) введен набор средств, соответствующих возможностям отображения, предоставляемых дисплейной системой ПЭВМ "АГАТ", а именно: текстовый режим в нормальном, инверсном и мерцающем изображении, 32*32 символа, 8 цветов; псевдографический цветной режим 64х64 элемента разложения, 8 цветов; графический цветной режим 128*128 элементов разложения, 8 цветов; графический черно-белый режим 256*256 элементов разложения;; 3)введен набор средств программирования на машинно-ориентированном языке типа ассемблера, обеспечивающий формирование в памяти ПЭВМ "АГАТ" и исполнение фрагментов программ в системе команд процессора. В набор включены также средства отладки машинных программ. Объединение перечисленных средств в одном интерпретаторе позволяет разрабатывать высокоэффективные программы, пользуясь экономичной по памяти записью на средствах высокого уровня для редко используемых ветвей программы и применяя машинное кодирование для ветвей, несущих наибольшую вычислительную нагрузку. Отладка такой гибридной программы, проводимая на едином исходном тексте, существенно упрощается по сравнению с традиционной технологией включения отдельно отлаженных кодовых элементов общей программы. Кроме того, использование средств языка высокого уровня в интересах ассемблирования позволяет легко получить весь набор удобств, предоставляемый макрогенераторами с условной сборкой, управляя процессом ассемблирования с помощью обычных условных операторов и операторов перехода на подпрограмму. 2. ЭЛЕМЕНТЫ ЯЗЫКА2.1. Представление данных 2.1.1. Простые переменные приведены в табл.1. Tаблица 1 _______________________________________ Тип ! Имя ! Диапазон ! --------------------------------------- -38 38 Вещественные ! АВ !10 <abs(X)<o10 Целые ! АВ% !+/-32767 Строковые ! АВc !0-255 символов Примечание: А - буква, В - последовательность из букв и цифр. 2.1.2. Массивы приведены в табл.2. Tаблица 2 _______________________________ Tип ! Имя -------------------------------- Вещественные ! АВ ( 3,12,7 ) Целые ! АВ% ( 3,12,7 ) Строковые ! АВc ( 3,12,7 ) Размер массива ограничивается доступной памятью. Идентификация переменных проводится по всем символам имени, длина которого не ограничивается, и по типу переменной. Таким образом, одному идентификатору могут соответствовать три разные простые переменные и еще три разных массива. 2.1.3. Константы. Вещественные константы представляются в естественном формате, например: 123.456 .53 или в экспоненциальном формате 1.234 Е-5=0.00001234 -1.234 Е5 = -123400 Вещественные числа могут быть присвоены вещественным и целым переменным, при присваивании целой переменной засылается целая часть значения, которая должна принадлежать диапазону представления целых. Целые константы представляются в десятичном (диапазон ±32767) или шестнадцатеричном виде (от ¤0 до ¤FFFF ). Числам от ¤0 до ¤7FFF соответствуют положительные целые, от ¤8001 до ¤FFFF - отрицательные от минус 32767 до минус 1. Целого, соответствующего ¤8000, нет, поэтому вблизи этих значений лучше пользоваться вещественными переменными. Переход через ¤8000 вызывает неправильности и для вещественных переменных, которые можно проиллюстрировать следующими истинными условиями: $8100<$7F00 $7F00+$200>$8100 Целые константы присваиваются целым и вещественным переменным. Строчные константы имеют длину не более 237 символов и могут содержать любые символы, кроме перевода строки и кавычек. Можно проверить, как выполняется PRINT строки, состоящей из многих УПР-Г. Присваивать строчные константы можно только строковым переменным. 2.2. Представление операций Арифметические операции: "=" присваивание (переменная = выражение); "-" взятие с обратным знаком (унарная), вычитание (бинарная); "+" сложение; "*" умножение; "/" деление; "^" возведение в степень; Операции сравнения и логические: "=" равно; "<>" не равно; "<" меньше; ">" больше; "<=" меньше или равно; ">=" больше или равно; "NOT" логическое "не"; "AND" логическое "и"; "OR" логическое "или"; Логическое "истина" тождественно арифметической "1", "ложь" - "0". Для строковых переменных применимы отношения "=", "<", ">" и "<>". 2.3. Представление команд Команды "Бейсика" подразделяются на 4 типа: А - команды, начинающиеся с ключевого слова (см.пп.2.3.1, 2.3.2, DIM, 2.3.4, 2.3.5, 2.3.6 данного документа); В - присваивания, начинающиеся с имени переменной; C - команды ассемблера, начинающиеся с "!"; D - команды отладочного набора, начинающиеся с "*". Для различения команд типов А и В имена не должны начинаться с фрагментов, тождественных ключевым словам. Имена, употребляемые в качестве меток ассемблерного текста, не могут, кроме того, начинаться с фрагментов, совпадающих с мнемоникой операций системы команд. Внутри строк программы и директив непосредственного исполнения команды типов А и В разделяются ":", оно же отделяет от них команды типа С. Между собой команды типа С разделяются "!". При записи команд типа D после других команд разделителем также является ":". После команд типа D ":" может быть принято за элемент такой команды (например, * ¤1000:), поэтому располагать их в середине строки не рекомендуется. Внутри команды слова, при необходимости, разделяются пробелами. Так, в команде IF A<B THEN PRINT ABC 1-й, 3-й и 4-й пробелы необязательны, поскольку находятся после ключевых слов. Отсутствие 2-го пробела будет воспринято как ошибка, так как образуется слово BTHEN, неотличимое от правильного имени переменной. Номера строк программы не должны превышать 65535. 2.3.1. Системные команды: LOAD - загружает программу с магнитной ленты (МЛ) (бытовой магнитофон); SAVE - записывает программу на МЛ; NEW - устанавливает начальное состояние памяти, стирает программу и данные; RUN - запуск программы со строки с наименьшим номером. Для запуска с промежуточной точки указать номер строки (например, RUN 200); STOP - останавливает программу с выдачей текста, в которой произошел останов); END - конец программы; <УПР-Ц> - останавливает программу или выдачу текста программы с выдачей текста строки и подсветкой оператора, на котором произошел останов; CONT - продолжает выполнение программы после STOP или <УПР-Ц>; TRACE - включает режим вывода номера строки при выполнении каждого оператора; NOTRACE - отменяет TRACE; PEEK(X) - значение байта по адресу Х; POKE X,Y - заносит Y (0<=Y<=255) по адресу Х; WAIT X,Y,Z - ожидает пока истинно <Х>=Z под поразрядной маской Y (содержимое байта по адресу Х). Например, WAIT ¤C000,¤80,0 ожидает любого нажатия на клавиатуре; CALL X - вызов кодовой подпрограммы по адресу Х; USR(X) - вызов кодовой подпрограммы с передачей значения. Значение Х помещается в ячейках ¤9D - ¤A2 (157-163). Адрес кодовой подпрограммы должен быть подготовлен в ячейках 11-12, в ячейке 10 - 76 (¤4C); HIMEM: - устанавливает верхнюю границу памяти под переменные и строки, используемые программой. Значения переменных теряются, установленное значение HIMEM увеличивать нельзя; LOMEM: - то же, для нижней границы памяти (нельзя уменьшать). Исходные значения HIMEM (¤9600 с ДОС, ¤С000 без ДОС) и LOMEM ( ¤808) устанавливаются директивой ДОС "FP " или CALL ¤E000. 2.3.2. Редактирование, текстовый ввод: LIST - выдача текста программы; LIST - выдает весь текст; LIST 100,200 - выдает строки от 100 до 200; LIST 100, - выдает строки с номерами не меньше 100; LIST,200 - выдает строки с номерами не больше 200; LIST150 - выдает строку 150; LIST "текст" - выдает все строки, содержащие указанный текст (просматривается текст строк в формате вывода командой LIST без редактирующих переводов строки, см. ниже); LIST "текст1,текст2" - заменяет вхождения фрагментов, указанных в качестве "текст1" на "текст2" и выдает измененные строки. Диапазон поиска и замены может быть указан перед кавычками по тем же правилам, что и для выдачи. Формат выдачи определяется следующими правилами: до и после каждого ключевого слова и символа выдается пробел; перед каждым именем длиной 2 и больше символов выдается пробел; после номера строки выдается пробел. Формат, в котором выполняется поиск и замена фрагментов, может быть проверен директивой LIST" ". Изменение номера строки с помощью замены, например: LIST 100"100,150" не приводит к уничтожению строки 100, а добавляет к программе строку 150. При выдаче текста без поиска и замены добавляются редактирующие переводы строк и табуляция, обеспечивающие легкость чтения программы; DEL X,Y - уничтожает строки программы от номера Х до номера Y включительно; REM - комментарий до конца строки, при выполнении игнорируется; VTAB Y - устанавливает курсор на строку экрана с номером Y (1<=Y<=31); HTAB X - передвигает курсор на Х-ю позицию текущей экранной строки. Нумерация строк и позиций на экране сверху вниз и слева на право; TAB(X) - элемент оператора PRINT , то же, что HTAB; POS(0) - значение, номер позиции от левого края текстового окна. В скобках значение несущественно; SPC(X) - элемент оператора PRINT, вывод Х пробелов; HOME - очистка экрана, курсор помещается в верхнем левом углу экрана; CLEAR - чистка переменных. В конце текста программы во внутреннем представлении хранятся все имена переменных длиною 2 и более символов, набранные с клавиатуры в процессе отладки. Среди них могут находиться имена, исключенные из программы, и некоторые ошибочные директивы, которые не влияют на ход исполнения, но "засоряют" память и приводят к неоправданному увеличению длины программы. Директива CLEAR позволяет исключить все лишние имена из внутреннего представления программы. При ее выполнении, кроме того, на экран выдается весь текст программы в формате поиска/замены; FRE(0) - значение, объем свободной памяти, выполняется "чистка мусора" в области хранения строк (значение аргумента несущественно); FLASH - включает мерцающий режим вывода текста; INVERSE - включает инверсный (черный по светлому фону) режим вывода текста; NORMAL - включает прямой (светлый по черному) режим вывода текста. Последние три команды в черно-белом алфавитно-цифровом режиме 64х32 символа не исполняются. SPEED=X - задает скорость (0-255) вывода текста. 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) - значение, символ, код КОИ-8 которого равен Х; ASC (A¤) - код КОИ-8 первого символа строки-аргумента; LEFT¤(A¤,X) - строка из первых Х символов аргумента; RIGHT¤(A¤,X) - строка из последних Х символов аргумента; MID¤(A¤,X,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, 5E-7, СТРОКА - определяет список данных. Строки в списке не должны содержать ","; RESTORE - устанавливает в начальное положение указатель списка данных. Следующим READ будет прочитан первый элемент списка; 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 - используется в программе обработки ошибок. Выполняет возврат на оператор, при выполнении которого обнаружена ошибка. 2.3.6. Графика и игровые датчика: GR=N - включение графики среднего разрешения (64 64). N - номер страницы размером 2К байт, при этом N=31 и N=2; MGR=N - включение графики среднего разрешения. N - номер страницы размером 8К байт, при этом N=7 и N=1; HGR=N - включение графики высокого разрешения. Параметры такие же, как у оператора MGR. Команды включения графических режимов очищают включенную экранную страницу памяти; COLOR=X - устанавливает цвет для последующих графических операторов (0<=X<=15). Кодировка цветов в зависимости от значения Х приведена ниже: 0 или 8 - черный; 1 или 9 - красный; 2 или 10- зеленый; 3 или 11 - желтый; 4 или 12- синий; 5 или 13 - фиолетовый; 6 или 14 - голубой ; 7 или 15 - белый; 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-й образ (кодировка образов Фг.00003-01 33 02) в точке X,Y текущим цветом; XDRAW I AT X,Y - воспроизводит I-й образ, но цветом, дополнительным к цвету экрана; SCALE=X - устанавливает масштаб воспроизведения образов (1-255); ROT=X - устанавливает угол поворота образов по часовой стрелке. Для SCALE=1 дискрет 90° или 16 единиц ROT , для SCALE=2 - 45° или 8 единиц ROT и т.д. Включение нового режима всегда очищает экран. Диапазоны допустимых значений координат для GR от 0 до 63, для MGR от 0 до 127, для HGR от 0 до 255; TEXT=N - устанавливает текстовый режим; RIBBON=X - устанавливает цвет символов в текстовом режиме при (0<=Х<=15); PDL(X) - значение, установленное ручкой Х-го игрового датчика. 2.3.7. Элементарные математические функции: 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.1. Управления ассемблированием: *{СМЕЩЕНИЕ,} АДРЕС: - используется для входа в режим ассемблирования. В случае совпадения адреса и смещения смещение указывать не обязательно. АДРЕС - выражение, задающее начальный адрес записи формируемого кода при ассемблировании. СМЕЩЕНИЕ - выражение, задающее начальное значение адреса, используемого для ссылок на формируемый код (адрес программы при исполнении). Например, в результате выполнения *¤1234,¤1100:!МЕТКА:=МЕТКА!: по адресу ¤1100 будет записано слово ¤3412 ! - сигнал входа в ассемблер и разделитель команд ассемблирования внутри строки; должен предшествовать каждой команде ассемблера; !: - пустая команда ассемблера, служит сигналом перехода на второй проход или конца ассемблирования. Ассемблирование проводится в два прохода. На первом проходе определяются форматы операндов и значения меток, форматы команд записываются на место объектного кода. Просмотр текста происходит в порядке исполнения строк программы на языке "Бейсик", содержащих команды ассемблера. При исполнении на первом проходе оператора {!:}, который служит сигналом на второй проход, управление передается на первый встреченный, после входа в режим ассемблирования, оператор "!". Программа должна обеспечивать второе исполнение операторов ассемблирования в том же порядке, что и на первом проходе (при этом все операторы "Бейсика" во время второго прохода выполняются еще раз). На втором проходе формируется объектный код, значения меток сохраняются и могут быть в дальнейшем использованы в качестве операндов CALL, &, USR, а также отладочными директивами (см. далее). Команды ассемблера могут быть помечены. Метками служат целые и вещественные переменные языка "Бейсик", например: 5 КОН = ¤FDDF 10 ! MI:!M2%:LDA ¤AA55!STA ¤666 20 !JSR КОН!RTS 30 !: Команды ассемблера подразделяются на программные команды и константы. 2.4.2. Константы 1) ! <выражение> - загружает 5 байт вещественным значением выражения, вычисленным на втором проходе, в представлении интерпретатора; 2) < <выражение> - загружает 1 байт старшим байтом целого значения выражения; 3) > <выражение> - то же, но загружает младший байт; 4) = <выражение> - загружает 2 байта целым значением в порядке "младший,старший", то есть в формате адреса системы команд процессора; 5) @ <выражение> - то же, что и = , но в порядке "старший,младший", то есть в формате целого значения интерпретатора; 6) ¤{hex hex} - ( четное число шестнадцатеричных цифр ) шестнадцатеричная загрузка зоны; 7) "строка длиной N" - загружает N байт кодами КОИ-7 символов строки ( при этом старший разряд "0" ); 8) # <выражение> - увеличивает значение счетчиков адреса и смещения на значение выражения. Пример использования констант в языке ассемблера: 5 M1=¤100:LNGHT=15: M2%=M1-LNGHT:X=1.57 10 *¤1000:!SIN(X)+COS(X)!=M1*12 20 !>M1+16*LNGHT+M2%+100 30 !¤AAB6F7FD0001 40 ! M1+256+80 50 !=¤FDF4 !¤B1 60 !"ТАБЛИЦА"!К:: После RUN сформируется код 1000 - 81 00 1A 15 68 00 0C 45 1008 - AA B6 F7 FD 00 01 02 50 1010 - F4 FD B1 74 61 62 6C 69 1018 - 63 61 где 1000-1004 - представление вещественного 1.00079601 1005-1006 - адрес ¤C0000 (12*256) 1007 - младший байт значения ¤100+¤FD+¤F1+¤64=¤352 1008-100 - последовательность байт AAB6F7FD0001 100-100 - целое представление 592=¤250 1010-1011 - адрес ¤FDF4 1012 - байт ¤81 1012-1019 - текст "ТАБЛИЦА" К получило значение ¤101A=4122. 2.4.3. Программные команды Первое поле программной команды - мнемокод операции, затем может следовать операнд. Мнемокоды и виды адресации записываются точно так как это описано в документе Фг3.032.002 ТО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. Средства отладки: Здесь и в дальнейшем под адресом ячейки памяти будем понимать значение выражения. * <выражение> - осмотр содержимого ячейки памяти по заданному адресу; Например, *¤1000 1000 - BВ *<выражение 1> . <выражение 2> - осмотр интервала памяти по заданнным начальному и конечному адресам; Например, после директивы *¤100.¤127 на экране появится следующая информация: 0100 - AA AA AA AA AA AA AA AA 0118 - 10 10 10 10 10 10 10 10 0120 - 1D 1D 1D 1D 1D 1D 1D 1D *<выражение 1>#<выражение 2> . <выражение 3> М - передвижение интервала памяти; *<выражение 1>#<выражение 2>.<выражение 3>V - сравнение двух интервалов памяти; * {<выражение>} L - вывод текста программы в мнемокоде системы команд, с заданного адреса или, если адрес не указан, продолжение листинга. Выводится 28 строк текста программы; *<выражение 1>.<выражение 2>Т - вывод текста в кодировке КОИ-7 в заданном интервале; *<выражение>G - выполнение программы в кодах системы команд с заданного адреса; *{<выражение 1>}.<выражение 2>S - выполнение программы в кодах системы команд с адреса, определяемого выражением 1, до прерывания, осуществляемого по адресу, определяемому выражением 2. Если выражение 1 отсутствует, то начальным адресом считается адрес последнего прерывания. При пользовании директивой S следует учитывать: 1) исходное включение памяти для отлаживаемой программы отличается от используемого интерпретатором. Модуль эмулятор ПЗУ включается в состояние PCC=$A0($E0 в интерпретаторе); модуль дополнительного ОЗУ включается в состояние PCC=$80($09 в интерпретаторе); В адресном пространстве отлаживаемой программы на этот момент имеется копия ДОС (адреса дополнительного ОЗУ) и интерпретатор "Бейсик" с включенным основным банком $D000-$DFFF. Переключения банков памяти, выполняемые отлаживаемой программой, запоминаются (содержимые РСС в ячейках ¤Е8-Е9 интерпретатора) и повторяются при последующих исполнениях "S"; 2) содержимое ячеек ¤0 - ¤3FF отлаживаемой программы хранится в адресах ¤8000-83FF и не портится при его работе; 3) содержимое регистров отлаживаемой программы запоминается в ячейках ¤45-¤49 интерпретатора, адрес точки останова - в 0-1. Осмотр и изменение регистров следует проводить директивой УПР-Е системного монитора. 4) содержимое текстового экрана отлаживаемой программы хранится в ячейках ¤8400-¤8BFF интерпретатора и не показано на экране в диалоге интерпретатора. Для его просмотра рекомендуется переписать эту зону в текущий экран. Предусмотрено использование "S" для отладки программ, размещаемых на адресах ПЗУ, следует только следить за сохранностью интерпретатора, размещенного в массиве 0 модуля-эмулятора ПЗУ, и загружать отлаживаемую программу в массив 1. *<выражение 1>.<выражение 2>W - запись интервала памяти на магнитную ленту (МЛ); *<выражение 1>.<выражение 2>R - считывание интервала памяти с МЛ. * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |