Бейсик Орион V2.4 Занимаемые адреса озу: 0000-2625h, адрес начала программы: 2800h (независимо от адреса посадки файла .bs). В предлагаемой версии интерпретатора устранены ошибки, обнаруженные в версии 1.1 ("радио", № 4,5, 1991), улучшена работа некоторых команд, операторов и функций, добавлена обработка шестнадцатиричных чисел и введены новые операторы и команды: get, put, sound, delete, auto, renum, merge, else. Интерпретатор работает как с процессором кр580вм80, так и с z80. рассмотрим изменения более подробно. Улучшение существующих команд, операторов и функций 1. выполнение в непосредственном режиме - устранена ошибка, вызванная неправильной работой подпрограммы вывода символа на экран (порча буфера ввода). 2. ввод строки программы - устранена ошибка определения адреса конца программы. 3. прерывание выполнения программы при нажатии упр+c работа программы приостанавливается (раздается звуковой сигнал, и после отпускания клавиши на экране появляется курсор). При повторном нажатии упр+c работа программы прерывается, а при нажатии любой другой клавиши - продолжается. 4. обработка чисел устранена ошибка при анализе чисел с плавающей запятой и отрицательным порядком. Введена обработка шестнадцатиричных чисел в диапазоне 0..ffffh. синтаксис шестнадцатиричного числа: &<шестнадцатиричные цифры> 5. команда edit - после входа в edit курсор устанавливается между номером строки и ее текстом. При нажатии упр+c изменения строки не сохраняются. 6. команды list/llist изменен синтаксис команд: list {n} llist {n} - выводят строку программы с указанным номером на экран и печать соответственно. если номер не указан, то выводится вся программа; list {n1},{n2} llist {n1},{n2} - выводят строки программы с номерами от n1 (или сначала) до n2 (или до конца) включительно. вместо запятой можно использовать знак "-". при первом запуске llist (lprint) файл lpt ищется сначала на диске "b", а потом на диске "a". 7. команды run и load загрузка файлов (.bs) с диска производится независимо от их адреса "посадки" в область 2800h (адрес начала программы). при загрузке контролируется об'ем свободной памяти. 8. оператор lprint на печать могут быть выведены символы с кодами, большими 7fh. Ширина печати задается в ячейке с адресом 0007h и может быть изменена оператором poke 7,<ширина печати> . если задать значение 0, то печать будет происходить без ограничения ширины. В операторе lprint теперь работают функции tab, spc и запятая в качестве разделителя. 9. оператор input - при нажатии "вк" без ввода значения заносится 0 для числовой переменной и пустая строка - для символьной. 10. оператор restore в операторе restore разрешается указывать номер строки, на которую необходимо установить указатель data: restore {n} если номер строки n указан, указатель data устанавливается на строку n (если такой строки в программе нет, выдается ошибка 08), в противном случае - на начало программы. 11. функция pos pos(0) - позиция курсора в строке (0..63), pos(1) или pos(-1) - позиция печатающей головки (0..ширина печати-1). функция pos(1) контролирует следующие символы: 0dh - сбрасывает pos(1) в 0, 08h - уменьшает pos(1) на 1 (если pos(1)>0), все остальные символы с кодами, большими 1fh, увеличивают pos(1) на 1. следует учитывать, что использование управляющих esc-последовательностей вносит несоответствие в pos(1). 12. функция inp inp(-1) - опрос готовности принтера. если в системе есть файл с именем "lpt", и принтер готов, то выдается значение "истина" (-1), в противном случае - "ложь" (0). inp(0) - ввод символа с клавиатуры (0f803h), inp(1) - опрос кода нажатой клавиши (0f81bh). inp(строка) - проверка наличия файла с именем, заданным параметром (строка), на диске 'b:' . если файл найден, выдается значение "истина" (-1), в противном случае - "ложь" (0). новые операторы и команды ------------------------- 1. оператор get (ар2 + ~e) синтаксис: get "имя" {(x,y)} {режим изображения {,режим цвета}} - считывает с квазидиска на экран графический массив (спрайт) с именем "имя.pc", представленный в формате графичес- кого редактора penx$. если отсутствуют необязательные коорди- наты (x,y) загрузки левого нижнего угла картинки, то в качестве этой точки выбирается точка последнего графического построения. режим экрана 1 не поддерживается. необязательный параметр {режим изображения} определяет, какую операцию над байтами изображения спрайта и экрана необхо- димо выполнить при загрузке (по умолчанию принимается 1): 0 - изображение не загружается, 1 - изображение на экране заменяется изображением спрайта, 2 - выполняется операция "исключающее или", 3 - выполняется операция "об'единительное или", 4 - выполняется операция "логическое и", 5 - изображение спрайта инвертируется. указанная операция не действует на цветовые атрибуты. зна- чения x лежат в пределах 0..383, y -в пределах 0..255, при этом если читаемый фрагмент не умещается на экране, будет выведена только его часть. необязательный параметр {режим цвета} может принимать сле- дующие значения (по умолчанию - 1): 0 - цвет не загружается ("монохромный" режим), 1 - загружается цвет спрайта, 2 - устанавливается цвет последнего оператора color. при загрузке графического фрагмента используется промежу- точный буфер спрайтов с конечным адресом 7fffh. в ячейке 7ffch хранится высота загруженного спрайта, в ячейке 7ffdh - его ши- рина, в ячейках 7ffeh,7fffh - начальный адрес буфера (в соотве- тствии со стандартом penx$). 2. оператор put (ар2 + ~f) синтаксис: put "имя" {(x,y)} ширина,высота - записывает на квазидиск под именем "имя.pc" графический фрагмент экрана с цветом в фор- мате графического редактора penx$. необязательные параметры (x,y) задают координаты левого нижнего угла спрайта на экране (если они не заданы, то выбирается точка последнего графическо- го построения). размеры сохраняемого спрайта- (ширина*8) х (вы- сота) точек. в отличие от оператора get, сохраняемый спрайт должен полностью помещаться на экране. режим экрана 1 не поддерживается. при сохранении графического фрагмента используется проме- жуточный буфер спрайтов с конечным адресом 7fffh. 3. оператор sound (ар2 + ~g) синтаксис: sound f,t {,f,t,...} - формирует звуковой сигнал (серию сигналов) со средней частотой f (гц) и длительностью t (мс). оператор sound удовлетворительно генерирует сигналы с частотами от 1 гц до 4 кгц (более высокая частота не обеспечивается из-за ограниченной тактовой частоты процессора). нотный диапазон: от большой октавы до 4 октавы включительно. если задано f=0, то формируется пауза заданной длительности. диапазон значений дли- тельности от 1 мс до 32 с. оператор sound отбрасывает дробную часть значений f и t. 4. оператор else (ар2 + <- ) оператор else выполняется в операторе if в случае ложного значения условного выражения. синтаксис: if <условие> then <операторы> {:else <операторы> } где в качестве операторов тоже могут использоваться конструк- ции if..then..else. после else, также как и после then, может сразу стоять номер строки перехода. 5. команда delete (ар2 + ~d) или (ар2 + k5) синтаксис: delete n - удаление строки программы с номером n, delete {n1},n2 - удаление строк от n1 (или с начала прог- раммы) до n2. номера, задаваемые в команде delete, должны соот- ветствовать существующим строкам программы. вместо запятой до- пускается использовать знак "-". 6. команда auto (ар2 + вк) синтаксис: auto {n}{,m} - ввод и редактирование строк программы с автоматическим выбором очередного номера строки. величина n за- дает начальный номер строк (по умолчанию 10), m - шаг изменения номеров (по умолчанию 10). после ввода команды auto на экране появляется начальный номер строки n (а если строка существует в программе, то и текст строки), и осуществляется переход в режим "edit". после нажатия "вк" введенная строка заносится в прог- рамму, интерпретатор вычисляет номер следующей строки, и про- цесс ввода (редактирования) строки повторяется. для выхода из команды auto необходимо нажать упр+c. прерывание команды auto происходит также в случае ошибки (например, переполнение памяти или выбор номера строки больше 65529). особенностью команды auto является возможность изменения естественного хода нумерации, так как в команде запоминается номер последней введенной строки и относительно него вычисляет- ся следующий номер. для реализации такой возможности необходи- мо отредактировать номер строки, при этом следует помнить, что при вводе номера без текста строки соответствующая строка (если она есть в программе) будет удалена. 7. команда renum (ар2 + ~n) или (ар2 + ком) синтаксис: renum {n}{,m} - перенумерация строк программы. значения n и m аналогичны параметрам в команде auto. команда renum сначала просматривает всю программу с целью выявления номеров несуществующих строк в командах run, goto, gosub, on, then, else, restore, а также проверяет допустимость новых номеров строк (номер строки не должен превышать 65529) с выдачей сообщений об ошибках "?08 ошибка в..." и "n>65529 ошиб- ка" соответственно. если указанных ошибок не обнаружено, то начинается коррек- тировка программы. в случае программы большого об'ема возможна выдача сообщения о переполнении памяти ("?07 ошибка"), при этом программа окажется скорректированной не полностью, что приведет к ее порче. поэтому перед выполнением renum целесообразно прог- рамму сохранить на квазидиске. 8. команда merge (ар2 + ~i) или (ар2 + таб) синтаксис: merge "имя файла" - вставляет строки программы, храня- щейся на диске под именем "имя файла" (.bs), в текущую програм- му. особенностью интерпретатора является возможность использо- вания в операторах run, load, merge, save, kill, get, put в ка- честве имени файла не только строковых констант, но и строко- вых переменных и выражений, за исключением элементов массивов. строковое выражение должно быть заключено в скобки. уточнения описания basic ------------------------ 1. оператор next next i,j,..,k - заменяет несколько операторов: next i: next j: .. next k 2. функция rnd rnd(0) - повтор последнего псч, rnd(1) - выдача нового псч, rnd(-x) - инициализация датчика псч в соответствии с x. 3. функция fre fre(число) - об'ем свободной памяти fre(строка) - об'ем буфера символьных переменных. 20.02.93 в.пушков