225 lines
17 KiB
Plaintext
225 lines
17 KiB
Plaintext
Бейсик Орион 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 в.пушков
|