Орион-128/Радио 05-91/Бейсик Орион
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: В. СУГОНЯКО, В. САФРОНОВ |
РЕДАКТОР ПАМЯТИ
Все, кому приходилось заниматься вводом вручную шестнадцатиричных кодов дампов программ, публикуемых в журнале, знает, какое это трудоемкое занятие. Обычно это приходится делать пользуясь директивой М МОНИТОРа, которая рассчитана для исправления нескольких ячеек в уже существующей программе. Трудности можно значительно уменьшить, если воспользоваться для этого специальной программой ввода и редактирования шестнадцатиричных дампов — редактора памяти. Правда, саму программу (ее коды приведены в табл.1) придется вводить, как обычно.
Программа рассчитана для работы в области ОЗУ начиная с адреса 0В000H. Изменить стартовый адрес необходимо монитором «М128$» (директива «FILE ADDRESS»).
Работа с программой не требует особых пояснений: запустите программу и введите начальный адрес просмотра — на экран будет выведено изображение, представленное на рис.1. Перемещая курсор клавишами управления, установите его там, где предполагаете производить изменения. Введите новое значение байта или тетрады байта. При этом одновременно будет изменяться контрольная сумма строки (правая колонка), а также сумма всего блока.
Несколько слов об общем управлении программой. Клавиши F1, F3 позволяют листать «страницы» (блоки) памяти соответственно «вверх» и «вниз». Чтобы оперативно изменить адрес просмотра, нажмите клавишу F2 и введите четыре символа нового адреса (вместе с незначащими нулями). Клавиша F4 — возврат в операционную систему.
Программа производит модификацию ячеек памяти сразу, по мере того, как вы вводите новые значения с клавиатуры, поэтому информация на экране всегда соответствует тому, что находится в ОЗУ в данный момент. Не следует проделывать какие-либо изменения в области 0В000Н — 0FFFFH. Здесь находится системная область памяти, и ее модификация может уничтожить весь ваш труд. Перед началом ввода дампа новой программы необходимо предварительно обнулить область памяти, в которую вы будете заносить коды.
Надеемся, что описанный редактор памяти значительно упростит вам операцию ввода Бейсика «ORION».
БЕЙСИК «ORION»
Язык Бейсик является одним из наиболее популярных языков программирования персональных компьютеров, особенно для тех, кто только начинает пробовать свои силы на этом поприще. Не случайны поэтому и многочисленные просьбы читателей, уже собравших «Орион», как можно скорее опубликовать для него Бейсик. Некоторые читатели даже попробовали, по аналогии с пакетом «МИКРОН» (РЕДАКТОР, АССЕМБЛЕР, ДИЗАССЕМБЛЕР), запустить на «Орионе» «Бейсик Радио-86РК» [1] или Бейсик — «МИКРОН» [2]. К сожалению, различия в построении интерфейса дисплея «Радио-86РК» и «Ориона» и наличие в последнем внутреннего квазидиска делают невозможным использование этих программ в полном объеме и оставляют недоступными для пользователя большинство возможностей, которыми обладает «Орион».
Предлагаемый здесь интерпретатор языка Бейсик для ПРК ОРИОН (BASIC — ORION VERSION 1.0) является минимальной 8-килобайтной версией.
Пользуясь версией интерпретатора, можно практически полностью реализовать все заложенные в ОРИОН возможности, не вникая в тонкости построения видеоконтроллера, таблицы распределения адресов и многой другой специальной информации, которую совершенно необходимо знать тем, кто пишет программы в машинных кодах или на языке АССЕМБЛЕР.
При разработке интерпретатора Бейсик для ОРИОНа, впрочем, как и самого компьютера, авторы ориентировались (во всяком случае стремились к этому) в первую очередь на пользователей, являющихся читателями журнала «Радио», и старались максимально использовать уже опубликованный материал по «Микро-80» и «Радио-86РК». Вводя в интерпретатор новые (по отношению к предыдущим Бейсикам) команды и операторы, предпринята попытка учесть и распространяющийся в нашей стране «BASIC-MSX» и, по возможности, приблизить их структуру и синтаксис к этому стандарту. Разумеется, нельзя говорить о полной программной совместимости программ, написанных на «BASIC-MSX» и нашем Бейсике, однако, если вам придется делать перевод программ, написанных, например, на кассетном Бейсике IBM (THE IBM PERSONAL COMPUTER BASIC VERSION 1.10), то эта работа потребует от вас минимальных усилий.
Общая для большинства версий Бейсика часть команд и операторов уже достаточно полно была описана в [1], [2] и [3]. Это дает нам возможность не повторять вновь, начиная с азов, уроки Бейсика, а отослать читателя к более ранним публикациям журнала и соответствующей литературе. В этой статье мы приведем полное описание операторов и особенностей языка, не встречавшихся ранее. Все остальные операторы будут приведены в виде списка с краткой аннотацией.
И в заключение краткого вступления, прежде чем перейти непосредственно к Бейсику, мы хотим высказать еще одно замечание. Интерпретатор языка Бейсик — довольно сложная программа и надо прямо сказать, еще не успела пройти достаточно длительной «обкатки». В таких программах рано или поздно могут обнаружиться ошибки, и от этого не застрахованы даже программы, работающие в гораздо более серьезных областях человеческой деятельности (вспомним хотя бы о космических аппаратах) потерянных из-за ошибок в программах бортовых компьютеров) . Вышесказанное не означает, конечно, что ошибки в интерпретаторе обязательно должны быть.
Мы считаем, что настоящую обкатку Бейсик начнет проходить только после этой публикации, и надеемся, читатели не будут излишне строги к авторам этого программного продукта для ПРК ОРИОН, а помогут в случае обнаружения каких-либо недостатков интерпретатора их оперативно устранить.
ОСОБЕННОСТИ РАБОТЫ ИНТЕРПРЕТАТОРА
Интерпретатор «BASIC/ORION» предназначен для работы только в среде операционной системы «ORDOS» [4]. Он должен находиться на одном из квазидисков «А» или «В» в виде командного файла, то есть иметь в имени файла признак «$». Обычно используется стандартное имя «BASIC$».
На диск «В» интерпретатор можно занести директивой «S» операционной системы после ввода и проверки кодов из табл.2 (поблочные контрольные суммы приведены в табл.3).
Таблица 3
0000 — 00FF C60B 0100 — 01FF FAB5 0200 — 02FF 0F18 0500 — 03FF A404 0400 — 04FF 9800 0500 — 05FF 8402 0600 — 06FF CD2D 0700 — 07FF DC2C 0800 — 08FF 6EC7 0900 — 09FF FDBA 0A0B — 0APF SB45 0B00 — 0BFF A038 0C00 — 0CFF 9E8F 0D00 — 0DFF 52B8 0E00 — 0EFF 7E36 0F00 — 0FFF 4DF9 1000 — 10FF 1678 1100 — 11FF 28A2 1200 — 12FF 72C9 1300 — 13FF CD70 1400 — 14FF 6203 1500 — 15FF 209D 1600 — 16FF D59E 1700 — 17FF 842C 1800 — 18FF 68БА 1900 — 19FF SF98 1A00 — 1AFF 59FC 1B00 — 1BFF 9FII 1C00 — 1CFF 27EF 1D00 — 1DFF A941 lE00 — 1EFF 2D20 1F00 — 1FFF 31E4
После запуска интерпретатора на дисплее должно появиться сообщение:
BASIC*ORION* VERSION 1.0/1990 OK:
Возможна и такая ситуация, когда на экране появится сообщение ДИСК!, а нажатие любой клавиши приведет к передаче у правления обратно в ОС. Чтобы объяснить, что происходит в этом случае, необходимо вспомнить структуру памяти компьютера «Орион-128». Дополнительная страница ОЗУ, начиная с адреса 0C000Н по адрес 0EFFFH, используется операционной системой как квазидиск. В то же время область памяти дополнительной страницы с адреса 0С000Н по 0EFFFH отведена под атрибуты цвета экрана, то есть в этой области хранится информация о цвете точек, выводимых на дисплей. Вопрос о приоритете использования этой общей области в каждом конкретном случае решается той программой, которая в данный момент выполняется в памяти компьютера.
Перед тем, как начать работу, интерпретатор проверяет, до какого адреса заполнен квазидиск, и, если этот адрес превышает 0С000Н, выводит сообщение «ДИСК!». В этом случае вам не остается ничего другого, как удалить ненужные файлы с тем, чтобы освободить для Бейсика область цветового ОЗУ. В процессе работы интерпретатор сам установит допустимый размер квазидиска, а по окончании работы — восстановит его максимальный размер.
Сообщение. «ОК:» в Бейсике играет ту же роль, что и угловая скобка в ОС или «==>» в «Мониторе-1», и показывает, что интерпретатор завершил выполнение очередного действия и ожидает от вас следующей команды.
При первоначальном запуске интерпретатора директива «NEW» выполняется автоматически — обнуляются все переменные и массивы, очищается программный буфер и стек. «Старая» программа, находившаяся в ОЗУ, интерпретатором не воспринимается, поэтому, закончив работать с Бейсиком, не забудьте сохранить на диске «В» вашу программу, иначе она будет потеряна. Если все же возникнет ситуация, когда вы перейдете в ОС, случайно забыв записать программу на диск (допустим, нажав клавишу «сброс»), дело еще можно поправить, имея некоторый навык работы с памятью в шестнадцатиричных кодах. Для этого надо вызвать программу М128$ и директивой «DUMP» или «MODIFY» посмотреть содержимое ячеек 0005 и 0006. В этой паре ячеек хранится адрес конца вашей программы. Можно поступить и по другому — директивой «DUMP» просмотреть область памяти, начиная с адреса 2200Н (с этой ячейки всегда начинается текст программы на Бейсике), для того, чтобы примерно определить, где находится ее конец. Признаком конца программы являются три последовательных ячейки с нулевыми значениями (00 00 00). Зная начальный (2200H) и конечный адреса, легко сохранить на квазидиске вашу программу директивой «S».
РАБОТА С КЛАВИАТУРОЙ
В режиме ввода и редактирования строки работа функциональных и управляющих клавиш несколько отличается от привычной по другим программам, в частности в ORDOS. Рассмотрим эти отличия.
Клавиши <-, ->, ТАБ («курсор влево» и «курсор вправо») выполняют свои обычные функции и служат для установки курсора в нужную позицию строки. Это же можно отнести и к клавише ТАБ. Строкой в Бейсике считается последовательность введенных значащих символов (то есть имеющих HEX коды от 20 до 7E включительно), длиной от 0 («пустая строка») до 127 символов. Действие данных клавиш возможно только в пределах введенной строки. За границы строки курсор выйти не может. Например, при завершении интерпретатором выполнения каких-то действий и переходе его в режим ожидания ввода очередной команды на экран выводится сообщение «ОК:» и курсор устанавливается в первую позицию следующей строки экрана. Попытки нажатия клавиш <-, -> и ТАБ ни к чему не приведут. Попробуйте теперь ввести с клавиатуры последовательность символов, например:
БЕЙСАК/ОРИОН-128 (ошибка введена умышленно)
Клавиши <-, -> ТАБ будут работать в пределах введенной вами строки — от буквы «Б» до цифры 8.
Клавиша F2 — уничтожение символа в позиции курсора с одновременным сдвигом оставшейся правой части строки влево.
Вернемся к приведенному выше примеру. Установите курсор под буквой «А» и нажмите клавишу F2. Буква «А» при этом исчезнет, а вся оставшаяся справа от курсора часть строки сместится на одну позицию влево. Курсор при этом остается на месте. Нажмите теперь клавишу с буквой «И», и вы получите на экране строку:
БЕЙСИК/ОРИОН-128
Похоже, но несколько иначе работает клавиша ЗБ («забой») — она уничтожает один символ, стоящий слева от курсора и перемещает курсор на его место. Таким образом, манипулируя указанными клавишами, можно исправлять неправильно набранные символы и дописывать новые.
Клавиши F1, F3, УГОЛ и СТР вводят в строку часто используемые в непосредственном режиме команды Бейсика: LIST, RUN, EDIT, CLS. Для их выполнения надо нажать клавишу ВК.
Клавиши «Курсор вверх», «Курсор вниз», ПС в режиме ввода и редактирования никаких действий не производят и не используются.
Для остановки работы БЕЙСИК программы нажмите клавишу F4. Это приведет к выводу на дисплей сообщения «СТОП В (НОМЕР СТРОКИ)» и переходу интерпретатора в режим ожидания ввода команды. Работа программы может быть продолжена директивой «CONT».
Все зарезервированные слова Бейсика можно вводить сразу — целым словом. Для этого необходимо вначале нажать клавишу АР2 (при этом на месте курсора появляется светлый прямоугольник с буквой «К»), а затем нажать еще одну из символьных клавиш. Действие клавиши АР2 отменяется ее повторным нажатием. Соответствие ключевых слов Бейсика символьным клавишам приведено в табл.4.
Таблица 4.
@/Ю | FILES | К/К | KILL | V/Ж | CLEAR |
A/А | READ | L/Л | LINE | W/G | SCREEN |
В/Б | BOX | М/М | DIM | X/b | CONT |
С/Ц | COLOR | N/H | NEXT | Y/b | SYSTEM |
D/Д | DATA | О/О | POKE$ | Z/3 | PAINT |
Е/Е | DEF | Р/П | PSET | [/Ш | SAE |
F/Ф | FOR | Q/Я | PEEK | \/Э | REM |
G/Г | GOTO | R/P | RETURN | ]/Ц | LOAD |
H/X | THEN | S/C | STOP | ~/Ч | STEP |
I/И | INPUT | Т/Т | RESTORE | //щ | |
J/Й | GOSUB | U/У | CUR | ?/3Б | NEW |
TAB | INT | STR$ | |||
0 | SPC | 5 | SGN | OR | |
SQR | POS | + | AND | ||
1 | RND | 6 | INP | NOT | |
COS | BS | < | СНR$ | ||
2 | SIN | 7 | USR | LEFT | |
ATN | ( | FRE | FN | ||
3 | TAN | 8 | LEN | „ | DFL |
LOG | ) | VAL | > | MID$ | |
4 | EXP | 9 | ASC$ | . | RIGHT$ |
Здесь надо сделать следующие пояснения: за клавишами букв русского и латинского алфавитов, а также клавишами ? и ЗБ закреплено по одному ключевому слову, независимо от того, в каком регистре — верхнем или нижнем — находится клавиатура. В эту группу слов попали все наиболее часто встречающиеся команды и операторы интерпретатора, причем там, где это возможно, сохранена фонетическая привязка к слову. Остальные клавиши могут выводить на экран по два различных слова, в зависимости от состояния регистра. К этой группе относятся в основном названия функций, большая часть из которых является трехбуквенными словами. Такое «устройство» клавиатуры не предполагает обязательного изучения таблицы перед тем, как вы начнете работать на Бейсике, или необходимости иметь таблицу постоянно перед глазами. Пользуясь вначале только несколькими клавишами для ввода запомнившихся слов и вводя остальные слова непосредственно по буквам, вы можете постепенно осваивать новые клавиши.
ОПИСАНИЕ КОМАНД, ОПЕРАТОРОВ И ФУНКЦИЙ ЯЗЫКА
В приведенном ниже перечне команд, операторов и функций языка мы придерживались следующего соглашения: все, что набрано без угловых или квадратных скобок, является обязательными атрибутами, в том числе круглые скобки и запятые. Угловыми скобками отмечены параметры, которые могут быть представлены в числовой форме, в форме выражений, требующих вычисления, либо строковые константы и переменные. В квадратные скобки заключены параметры, которые являются необязательными и могут отсутствовать.
КОМАНДЫ
- CONT — продолжение выполнения программы после останова, начиная с очередного оператора.
- EDIT [НОМЕР СТРОКИ] — вывод на экран заданной программной строки для редактирования. Если номер строки не задан, выводится первая строка программы.
- FILES — вывод на экран каталога квазидиска «В».LIST [НОМЕР СТРОКИ]- вывод на экран строк программы из памяти, начиная с заданного номера, либо всей программы, если номер строки не указан.
- LLIST НОМЕР СТРОКИ — вывод строк программы из памяти на принтер, начиная с заданного номера, либо всей программы, если не указан номер строки. Выполняется только при наличии в системе файла с именем «LPT», содержащего драйвер печатающего устройства.
- LOAD «(ИМЯ)» — загрузка Бейсик — программы из файла с заданным именем, если имя имеет стандартное расширение «.BS» (с одновременным стиранием программных строк, переменных и массивов, находившихся в памяти до этого момента), либо — загрузка в ОЗУ программы в машинных кодах (блока данных) из файла с заданным именем и выполнение ее, если в имени имеется признак командного файла — «$».
- NEW — удаление из памяти всех программных строк, переменных и массивов.
- RUN [НОМЕР СТРОКИ] — выполнение находящейся памяти программы; если задан номер, то программа выполняется, начиная с указанной строки.
- RUN «(ИМЯ)» -загрузка программы из файла с заданным именем (с одновременным стиранием программных строк, переменных и массивов, находившихся в памяти до этого момента) и запуск программы со строки, имеющей наименьший номер. (Только для файлов, имя которых имеет стандартное расширение «.BS»).
- SAVE «(ИМЯ)» -создание в диске «В» файла с именем «ИМЯ.BS» и запись в него Бейсик — программы из оперативной памяти.
- SYSTEM — передача управления операционной системе.
ОПЕРАТОРЫ
- BOX ([(КООРДИНАТА X)], [(КООРДИНАТА Y)], (ШИРИНА), (ВЫСОТА), [(ЦВЕТ ФОНА)], [(ЦВЕТ ПЕРЕДНЕГО ПЛАНА)]) — окраска прямоугольника шириной (ШИРИНА), точек и высотой, заданной значением (ВЫСОТА), расположенного вправо и вверх — от точки, где было закончено последнее графическое построение (если отсутствуют необязательные параметры в первых квадратных скобках), либо от точки, координаты которой заданы значениями (КООРДИНАТА X) и (КООРДИНАТА Y). Окрашивание производится фоном и цветом переднего плана, заданного последним оператором COLOR, либо значениями, заданными во вторых квадратных скобках.
- CLS — очистка экрана дисплея.
- COLOR (ЦВЕТ ФОНА), (ЦВЕТ ПЕРЕДНЕГО(ПЛАНА) — установка цвета фона и цвета переднего плана. Обратить внимание на оператор SCREEN$.
- CLEAR [ЧИСЛОВОЕ ЗНАЧЕНИЕ] — присваивание нулевых значений всем строковым и числовым переменным и элементам массивов. Если задан необязательный параметр, то происходит резервирование дополнительного буфера для переменных, определяемый значением параметра.
- CUR (СТРОКА), (СТОЛБЕЦ) — установить курсор в позицию, заданную параметрами (СТРОКА), (СТОЛБЕЦ).
- DATA (СПИСОК ПЕРЕМЕННЫХ) — добавление строковых и числовых констант к программному списку значений для операторов READ.
- DEF FМ(ИМЯ ФУНКЦИИ) (ФИКТИВНАЯ ПЕРЕМЕННАЯ) (ВЫРАЖЕНИЕ)- присвоение имени строковой или числовой функции и задание ее определения в виде выражения.
- DIM (ИМЯ МАССИВА) [ИНДЕКС[.ИНДЕКС]] [,[ИМЯ(ИНДЕКС),…] — распределение памяти для массивов. Задаваемое в качестве параметра значение ИНДЕКС определяет максимальное значение индекса (размерность) массива. В одном операторе DIM может определяться несколько массивов.
- DPL [((КООРДИНАТА ХО), (КООРДИНАТА YO))] (ПРИРАЩЕНИЕ U), (ПРИРАЩЕНИЕ V) [, (ЦВЕТ] — построение линии из точки, в которой было закончено последнее графическое построение либо из точки с графическими координатами (КООРДИНАТА ХО), (КООРДИНАТА YO) до точки с координатами, имеющими значение (XO+U), (YO+V) цветом, заданным необязательным параметром (ЦВЕТ) либо цветом последнего оператора COLOR.
- FOR (ПЕРЕМЕННАЯ) (НАЧАЛЬНОЕ ЗНАЧЕНИЕ) ТО (КОНЕЧНОЕ ЗНАЧЕНИЕ) [STEP (ПРИРАЩЕНИЕ)] — начало цикла FOR/NEXT.
- GOSUB (НОМЕР СТРОКИ) — передача управления в подпрограмму с заданным номером строки (см. RETURN).
- GOTO (НОМЕР СТРОКИ) — передача управления строке с заданным номером.
- IF (УСЛОВИЕ) THEN (ОПЕРАТОР) [:ОПЕРАТОР :…] — выполнение оператора (операторов), следующего за THEN, если условие выполняется, в противном случае переход на следующую строку.
- IF (УСЛОВИЕ) THEN (НОМЕР СТРОКИ) — условная передача управления на строку с заданным номером.
- INPUT ["ЗАПРОС";] (ПЕРЕМЕННАЯ) СПИСОК ПЕРЕМЕННЫХ)] — присваивание вводимых с клавиатуры значений переменной (или нескольким переменным). Если после текстового сообщения («ЗАПРОС») введено «;», на экран выводится знак вопроса, если вместо «;» введено ", " — знак вопроса не выводится.
- KILL (ИMЯ.BS) — удаление с квазидиска «В» файла с заданным именем.
- LINE [((КООРДИНАТА Х0), (КООРДИНАТА Y0), (КООРДИНАТА X), (КООРДИНАТА Y)[,(ЦВЕТ)] — построение линии от точки, где было закончено — последнее графическое построение (или от точки с графическими координатами (КООРДИНАТА ХО), (КООРДИНАТА YO)), до точки с координатами (КООРДИНАТА X), (КООРДИНАТА Y) заданным в качестве необязательного параметра (ЦВЕТ) цветом либо цветом последнего оператора COLOR.
- LPRINT [СПИСОК ЗНАЧЕНИЙ] [;] или [,] — вывод на печать перечисленных в списке значений (см. PRINT). Оператор выполняется только при наличии в системе файла с именем «LPT», содержащего — драйвер печатающего устройства.
- NEXT [ПЕРЕМЕННАЯ] — окончание цикла FOR/NEXT.
- ON (ВЫРАЖЕНИЕ) GOTO (НОМ.СТРОКИ) [,(НОМ.СТРОКИ),…] — переход к строке с одним из указанных номеров в зависимости от конкретного значения заданного выражения.
- ON (ВЫРАЖЕНИЕ) GOSUB (НОМ.СТРОКИ) [,(НОМ.СТРОКИ),…] — передача управления в подпрограмму строке с одним из указанных номеров в зависимости от конкретного значения сданного выражения.
- PAINT (КООРДИНАТА X), (КООРДИНАТА Y) (ЦВЕТ) — закраска ограниченной фигуры произвольных очертаний заданным цветом до границы того же цвета, начиная из точки с графическими координатами X, Y (только для режима SCREEN$).
- POKE (АДРЕС), (ЗНАЧЕНИЕ) -запись заданного значения в ячейку с заданным адресом.
- PRINT [СПИСОК ЗНАЧЕНИЙ] [;] или [,] — вывод на экран перечисленных в списке значений. Если после оператора не стоит «;» или ", " формируется сигнал возврата каретки и перевода строки. Если значения в списке разделяют «;», то они будут выводиться друг за другом, если ", ", то вывод очередного значения будет производиться в начало следующей зоны (14 позиций).
- PSET (КООРДИНАТА X), (КООРДИНАТА Y) [,(ЦВЕТ)] — вывод на экран дисплея отдельной точки с графическими координатами X, Y.
- READ (ПЕРЕМЕННАЯ) [.(ПЕРЕМЕННАЯ),…] — присваивание переменным с заданными именами значений из списка, созданного операторами DATA.
- REM [КОММЕНТАРИЙ] — задание комментария. Все символы, следующие за командным словом и стоящие в той же самой программной строке не исполняются и интерпретируются как комментарий.
- RESTORE — восстановление положения указателя списка значений операторов DATA так, что указатель будет соответствовать первому значению первого оператора DATA.
- RETURN — возврат управления из подпрограммы оператору, стоящему непосредственно за оператором GOSUB, вызывавшим эту подпрограмму.
- SCREEN (РЕЖИМ) — выбор режима работы экрана. Режим 0 — МОНОХРОМ, режим 1 — четырехцветный, режим 2 — 16-цветный.
- STOP — прекращение выполнения программы, вывод на экран сообщения «СТОП в (НОМЕР СТРОКИ)» и переход к режиму немедленной обработки.
ФУНКЦИИ
- ABS (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление абсолютной величины числового значения.
- ASC (СТРОКОВОЕ ЗНАЧЕНИЕ) — определение кода символа заданного строкового значения.
- ATN (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление арктангенса заданного числового значения.
- CHR$ (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — определение символа, соответствующего заданному числовому значению.
- ЕХР (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление экспоненты заданного числового значения.
- COS (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — -вычисление косинуса заданного числового значения.
- FN ИМЯ (ЗНАЧЕНИЕ) — вызов функции, предварительно определенной оператором DEF PN.
- FRE (ЗНАЧЕНИЕ) — выдача сообщения об объеме свободной памяти. Параметр (значение является фиктивным и никак не используется.
- INP (ЗНАЧЕНИЕ) — определение кода клавиши, нажатой в настоящий момент. Параметр (значение
- INT (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — определение наибольшего целого числа, не превосходящего заданное числовое значение.
- LEFT$ (СТРОКОВОЕ ЗНАЧЕНИЕ, ДЛИНА) — выделение из строкового значения подстроки заданной длины, начиная с крайнего левого символа.
- LEN (СТРОКОВОЕ ЗНАЧЕНИЕ) — подсчет кол-ва символов в заданном строковом значении.
- LOG (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление натурального логарифма заданного числа.
- MID$ (СТРОКОВОЕ ЗНАЧЕНИЕ, НАЧАЛЬНЫЙ СИМВОЛ, ДЛИНА) — выделение части строкового значения, начинающейся с номера начального символа заданной длины.
- PEEK (АДРЕС) — выдача содержимого ячейки памяти с заданным адресом.
- POS (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — выдача номера столбца, соответствующего текущему положению курсора на экране. ЧИСЛОВОЕ ЗНАЧЕНИЕ — фиктивный параметр.
- RIGHT$ (СТРОКОВОЕ ЗНАЧЕНИЕ, ДЛИНА) — выделение из строкового значения подстроки заданной длины, начиная с крайнего правого символа.
- RND (1) — генерация случайного числа, лежащего в интервале [0,1]. Значение функции RND (0) повторяет последнее случайное значение.
- SGN (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — выдача знака заданного числового значения, результат выполнения функции равен +1, если число положительно, −1, если оно отрицательно, и 0, если число равно 0.
- SIN (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление синуса заданного числового значения.
- SPC (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — пропуск заданного числа позиций в выводимой на печать строке. Используется только с оператором PRINT.
- SQR (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление квадратного корня заданного числового значения.
- STR$ (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — преобразование заданного числового значения в строку символов.
- TAN (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — вычисление тангенса заданного числового значения.
- TAB (ЧИСЛОВОЕ ЗНАЧЕНИЕ) — горизонтальная табуляция. Используется только с оператором PRINT.
- USR (АДРЕС) — передача управления программе в машинных кодах, находящейся по заданному адресу. Если программа заканчивается оператором RET, то значением функции будет значение аккумулятора процессора после выполнения программы.
- VAL (СТРОКОВОЕ ЗНАЧЕНИЕ) — преобразование строкового значения в число.
Описание операторов.
Рассмотрим работу некоторых операторов более подробно, в основном тех, действие которых имеет свою специфику для ПРК «Орион-128».
SCREENX
SCREENX — включение цветового режима дисплея. Х может принимать значения 0, 1, 2. При Х=0 включается монохромный (зелено-черный) режим, при Х=1 — четырехцветный и при Х=2 — 16-цветный режим. Оператор SCREEN для данной версии Бейсика является выполняемым, то есть при появлении его в программе немедленно происходит переключение дисплея на отображение уже имеющейся на экране графической информации в том режиме, который указан в качестве параметра в операторе SCREEN. Одновременно он является установочным и влияет на то, как будут выполняться встречающиеся за ним в программе операторы CLS, COLOR, PRINT, BOX, PAINT, PSET, LINE, DPL.
COLOR X, Y
Оператор задания цвета. X и Y- любые целые числа в интервале от 0 до 15. Х — цвет фона, Y — цвет переднего плана. Само по себе выполнение оператора COLOR не приводит ни к каким изменениям на экране, однако следующие за ним операторы CLS, PSET, LINE, BOX, PAINT, PRINT выводят информацию на дисплей в том цветовом решении, которое задано оператором COLOR. В цветовом режиме 1 (то есть если перед этим был выполнен оператор SCREEN 1) значения Х и Y должны лежать в пределах 0-3, тем не менее выполнение оператора COLOR с большими значениями (но не более 15) не будет воспринято как ошибка. Значения цвета при этом установятся равными остатку от деления Х и Y на 4. Так, в режиме SCREEN 2 оператор COLOR 6,15 установит цвет выводимых точек белыми на темно-желтом фоне, а оператор COLOR 2,3 — голубыми на темно-зеленом. Если же включен режим SCREEN 1, отображение информации и в том и в другом случае будет происходить синим цветом на зеленом фоне. В режиме SCREEN 0 оператор COLOR не выполняется. При «холодном» запуске интерпретатора устанавливается режим 2 и цвет выводимой на дисплей информации 0,15, то есть белые символы на черном фоне. В данном случае Бейсик неявно выполняет действия, которые эквиваленты выполнению следующих операторов: SCREEN 2: COLOR 0,15: CLS (ВК] Если в операторе COLOR задать одинаковые параметры, например COLOR 0,0, то выводимая на экран информация будет сливаться с фоном и станет не видна. Выходить из такой ситуации придется, набирая «вслепую» приведенную выше строку операторов, либо использовать кнопку системного сброса.
CLS
Очистка экрана. В режимах SCREEN 1 и SCREEN 2 экран окрашивается в цвет, указанный первым параметром последнего выполнявшегося оператора COLOR.
ГРАФИЧЕСКИЙ И СИМВОЛЬНЫЙ ЭКРАН
Графический экран «Ориона» представляет собой поле 384х256 точек соответственно по горизонтали и вертикали. Началом координат считается точка в левом нижнем углу экрана — она имеет координаты 0,0. Крайняя правая нижняя точка имеет координаты 383,0, правая верхняя — 383,255 и левая верхняя — 0,255. Таким образом, центром экрана можно считать точку (192,128). В отличие от других компьютеров подобного типа переключение режимов дисплея в «Орионе» не изменяет разрешающую способность экрана, а влияет лишь на то, каким образом происходит окраска точек. Это обстоятельство следует учитывать при работе с графикой на ПРК «Орион»: если вы выполните какие-то графические построения в одном из режимов, а после этого переключитесь в другой режим, изображение на экране может предстать полным хаосом, лишенным всякого смысла.
Строго говоря, как такового символьного дисплея у «Ориона» нет, и вывод символов происходит в графическом режиме. Тем не менее символы выводятся на экран в строго определенные позиции. Таких позиций 64 в строке и 25 в вертикальной колонке. Для определения места, куда будет выведен символ, используются координаты курсора — их значения лежат в пределах 0-63 по горизонтали и 0-24 по вертикали. Отсчет ведется так же, как и в графическом режиме, от левого нижнего угла экрана.
CUR
Для установки курсора в нужную позицию используется оператор:
CUR X, Y — здесь Х — символьная координата по горизонтали, Y — по вертикали. В некоторых Бейсиках используется аналогичный оператор LOCATE X, Y, действие которого при этом совершенно такое же. Чтобы немного проиллюстрировать сказанное, попробуйте ввести и выполнить следующую программу:
10 SCREEN 2: COLOR 1,14: CLS 20 CUR 26,12: PRINT «ОРИОН-128»
В режиме SCREEN 2 вывод информации оператором PRINT происходит только на передний план экрана дисплея, а цветовая атрибутика остается та, которая уже существовала в этом месте. Так, в приведенном примере оператор CLS устанавливает цветовые атрибуты для всего экрана «1,14» — ярко-желтый цвет на темно-синем фоне.
BOX
Чтобы изменить цветовые атрибуты прямоугольной области в Бейсик, введен специальный оператор:
BOX [(X, Y) P, Q [,F, С]
Наличие в синтаксисе оператора квадратных скобок говорит о том, что параметры в них не являются обязательными и могут отсутствовать. Так, это оператор может принимать вид: BOX (X, Y) P, Q, F, С либо BOX P, Q, F, С либо BOX P, Q
Действие этого оператора заключается в том, что он заменяет атрибуты цвета всех точек прямоугольной области теми значениями фона и цвета переднего плана, которые либо заданы последним оператором COLOR (последний из трех приведенных выше операторов), либо значениями параметров F и С. Графическую информацию, уже имеющуюся в этом месте экрана, оператор BOX не стирает. В режиме 2 возможна окраска только восьми горизонтально расположенных смежных точек экрана одновременно, поэтому значение Р в операторе BOX определяет размер окрашиваемого прямоугольника по горизонтали количеством таких «восьмерок». Q — высота прямоугольника и в точках. Так, Р=2, Q=16 зададут прямоугольник (квадрат) размерами 16х16 точек. Левый нижний угол прямоугольника располагается там, где закончилось последнее графическое построение, или же в точке с координатами (X, Y), но обязательно в точке, значение горизонтальной координаты которой кратно 8. Так, оператор BOX (3, 15) 2,16 построит цветовой прямоугольник, левый нижний угол которого находится в точке (0,15), а не (3,15), как это указано в операторе. Попробуйте дополнить программу, которую вы вводили выше еще одной строкой:
30 COLOR 4,15: PSET 144,120: BOX 10,20
и выполнить всю программу. Почти эквивалентны этой строке и такие варианты:
30 COLOR 4,15: BOX (144,120) 10,20 или 30 PSET 144,120: BOX 10,20,4,15 или 30 BOX (144,120) 10,20,4,15
Некоторые отличия в работе этих программ все же будут. Так, в первых двух вариантах присутствует оператор COLOR, который может изменить действие графических операторов в строках, идущих после 30-й. В первом и третьем вариантах присутствует явный оператор PSET, который выведет на экран точку с координатами (144,120), а во втором и четвертом случаях этого не произойдет.
В приведенном в начале примере мы воспользовались оператором PRINT. В зависимости от того, какой режим дисплея включен в настоящий момент, действие этого оператора несколько различно. Если в режиме SCREEN 2 оператор PRINT выводит информацию в том цветовом решении, которое уже было задано в этом месте экрана независимо от того, какие операторы COLOR ему предшествуют, то в режиме SCREEN 1 оператор PRINT выводит каждый символ в виде матрицы 6х10 точек, окрашивая фон и передний план матрицы теми цветами, которые заданы последним оператором COLOR. Например:
10 SCREEN 1: COLOR 0,2: CLS 20 COLOR 1,3: PRINT «КРАСНО-СИНИЙ» 30 COLOR 2,1: PRINT «ЗЕЛЕНО-КРАСНЫЙ» 40 COLOR 3,0: PRINT «СИНЕ-ЧЕРНЫЙ» 50 COLOR 0,2: STOP
Кроме того, в режиме SCREEN 1 блокируется скроллинг экрана при переводе строки, если курсор находится в нижней строке экрана, как это происходит в режимах 0 и 2. В такой ситуации курсор переходит на верхнюю строку, а экран остается неподвижным.
ПОСТРОЕНИЕ ТОЧЕК И ЛИНИЙ
PSET X, Y [,С]
Для построения точки в любом месте экрана — параметр С в этом операторе необязателен и может отсутствовать. Если его нет, то на экран выводится точка с координатами Х и Y, окрашенная в цвет, заданный вторым параметром в последнем операторе COLOR. Если присутствует параметр С — цвет, то точка будет нарисована этим цветом. Если далее вновь встретится оператор PSЕТ без третьего параметра С, то эта точка опять же будет нарисована цветом, заданным последним оператором COLOR. В качестве примера рассмотрим следующую последовательность операторов (предполагается, что компьютер работает в режиме SCREEN 2):
COLOR 0,15: PSET 0,0: PSET 10,0,12: PSET 20,0
При выполнении этой строки будут выведены 3 точки: первая — цветом 15 (белый), вторая — 12 (красный) и третья — опять белым.
Для режима SCREEN 1 оператор PSET работает также, необходимо только учитывать допустимое количество цветов: 0-15 для режима 2 и 0-3 — для режима 1. Кроме того, в режиме 2 вывод на экран точки в некоторую позицию вызовет перекрашивание соседних 7-й горизонтальных точек переднего плана в тот же цвет, фон при этом не затрагивается.
LINE
Для построения линий используется оператор
LINE [(X0, Y0)] X, Y [,С] или DPL (X0, Y0) X, Y [,С]
Оператор LINE строит линию до точки с координатами X, Y из точки, где было закончено последнее построение, либо из точки с графическими координатами (X0, Y0), если эти параметры заданы в операторе. Оператор DPL отличается от LINE только тем, что параметры Х и Y в нем являются относительными координатами к той точке, откуда начинает строиться линия и могут принимать как отрицательные, так и положительные значения. В отношении третьего (необязательного) параметра «С» справедливо все, что было сказано выше об операторе PSET.
В этой версии Бейсика отсутствуют такие графические операторы, как, например, CIRCLЕ, однако построение окружности можно просто выполнить с помощью небольшой подпрограммы, пользующейся только операторами PSET и LINE, то же самое, кстати, можно отнести ко многим средствам расширенных Бейсиков — практически все их операторы можно эмулировать, пользуясь простыми средствами, имеющимися в вашем Бейсике или в крайнем случае с помощью функции «USR» или оператора «LOAD» и небольших программ в машинных кодах. В качестве еще одного примера приведем программу построения двух цветных окружностей:
10 SCREEN 2: COLOR 0,15: CLS 20 XC=192: YC=128: R=80: N=50: C=14: GOSUB 1000 30 XC=100: YC=100: R=40: N=50: C=9: GOSUB 1000 900 STOP 1000 REM ПОДПРОГРАММА 1010 REM ПОСТРОЕНИЯ ОКРУЖНОСТИ 1020 PSET XC+R, YC, С 1030 FOR 1-0 TO 6.3 STEP 6.284/N 1040 LINE XC+R*COS (1), YC+0.8*R*SIN (1), С 1050 NEXT: RETURN
со строки с номером 1000 здесь приведена универсальная подпрограмма построения произвольной окружности. Для обращения к подпрограмме должны быть заданы следующие параметры: ХС, YC — координаты центра окружности, R — радиус, С — цвет и N — количество шагов разбиения (на самом деле подпрограмма строит не окружность, а N — угольник, и чем больше N, тем ближе его форма к окружности, но при увеличении N увеличивается и время, затрачиваемое на построение). В строках 20 и 30 задаются параметры и происходит вызов подпрограммы. Следует отметить, что если в вашей программе окружность строится несколько раз, имеет смысл поступить по другому — в начале программы определить и вычислить два массива — синусов и косинусов, а потом для построения пользоваться ими. Этот способ резко ускорит выполнение программ. В строке 1040 значение координаты Y умножается на коэффициент 0.8. Это делается, чтобы выправить геометрию экрана, так как по горизонтали экран «Ориона-128» несколько сжат.
PAINT
Для режима 1 существует еще один графический оператор:
PAINT X, Y, С — выполнение этого оператора позволяет закрасить (залить) область, ограниченную линией какого-либо цвета этим же цветом, начиная от точки С координатами X, Y. При этом фигура, которая закрашивается, может иметь любую сложность, важно только, чтобы в ней не было разрывов, иначе произойдет «заливка» всего экрана. Чтобы проиллюстрировать действие этого оператора, исправьте начальные строки предыдущего примера следующим образом:
10 SCREEN 1: COLOR 3,2: CLS 20 XC=192: YC=128: R=80: N=50: C==2: GOSUB 1000 25 PAINT ХС, YC, С=30 ХС=100: YC=100: R=40: N=50: C=1l: GOSUB 1000 35 PAINT ХС, YC, С 900….
Результатом работы этой программы будут два цветных круга.
КОМАНДЫ РАБОТЫ С ФАЙЛАМИ ОПЕРАЦИОННОЙ СИСТЕМЫ
Из Бейсика «ОРИОН» исключены команды непосредственной записи программ на магнитную ленту и их чтения. Вместо этого введены команды, с помощью которых программа может быть оформлена в виде стандартного файла «ORDOS», записана на квазидиск и считана оттуда. Запись и чтение таких файлов на магнитную ленту осуществляется программой «СН$» в общем стандарте. Директив работы с файлами в Бейсике пять: SAVE, LOAD, RUN, KILL, FILES.
SAVE
SAVE «ИМЯ» — эта команда создает на диске «В» файл и записывает в него программу из программного буфера Бейсик-интерпретатора. «Посадочный» (стартовый) адрес таких программ равен 2200Н. При выполнении директивы интерпретатор всегда добавляет к имени, которое выбрали для вашей программы расширение «BS». Таким образом, если вы решили создать файл и с помощью директивы SAVE хотите присвоить ему имя, например, «ПРОГ1», введите SAVE «ПРОГ1», и на диске «В» в результате выполнения этой команды появится файл с именем «ПРОГ1.BS» (заметим, что расширение имени можно набирать вместе с именем: так, выполнение команд SAVE «ПРОГ1» и SAVE «ПРОГ1.BS» приведет к совершенно одинаковому результату). Так как в операционной системе "OR DOS " длина имени ограничена восемью символами, имена Бейсик — программ не должны превышать пяти символов. Попытка создать файл с более длинным именем (но не более восьми символов) не будет воспринята как ошибка — при выполнении директива отсечет лишние символы, ограничив собственно имя пятью. Пример: директива SAVE «ПРОГ1234» создаст на диске файл с именем «ПРОГ1.BS» (разумеется, если файла с таким именем еще нет на диске).
LOAD
LOAD «ИМЯ» — эта директива может загрузить из диска «В» программу на Бейсике (если имя файла имеет расширение «.BS») либо произвольный командный файл или блок данных. В первом случае директива читает из файла с именем «ИМЯ.BS» Бейсик -программу и записывает ее в программный буфер интерпретатора. Программа, которая находилась в буфере ранее, при этом теряется (даже если нумерация строк этих программ различна). Все имевшиеся числовые и строковые переменные обнуляются.
При загрузке командного файла (имеющего в имени символ «$» директива LOAD работает аналогично соответствующей директиве операционной системы «ORDOS». Если придерживаться определенных соглашений (программа из командного файла не должна нарушать стек и заканчиваться командой RET), то после ее выполнения управление будет передано обратно интерпретатору. Следует помнить также, что программа, загружаемая директивой LOAD, не должна располагаться в областях, используемых при работе самим Бейсиком.
RUN
Загрузить программу на Бейсике, а после загрузки еще и запустить считанную программу можно с помощью директивы RUN «ИМЯ». Все сказанное об, именах файлов для Бейсик — программ при объяснении работы директивы SAVE в полной мере относится и к командам LOAD и RUN. Используя директиву RUN «ИМЯ», можно организовать работу программ на Бейсике таким образом, что программа в зависимости от тех или иных обстоятельств сама загружает другую Бейсик — программу и передает ей управление, та, в свою очередь, следующую и так далее, то есть оператор RUN «ИМЯ» можно использовать не только в непосредственном, но и в программном режиме. Применять директиву RUN для загрузки в ОЗУ командных файлов нельзя.
FILES
FILES — эта команда выводит на экран дисплея каталог файлов диска «В», а также стартовый адрес и длину каждого файла в шестнадцатиричном виде.
KILL
KILL «ИМЯ.BS» — директива уничтожения файла. Для выполнения директивы KILL, в отличие от остальных директив работы с файлами, имя программы должно вводиться полностью, включая расширение. Работа директивы аналогична работе директивы «Е» операционной системы. При использовании этой команды следует соблюдать осторожность так же, как и при работе с директивой «Е» ОС — уничтоженный файл чаще всего восстановить уже невозможно.
В. СУГОНЯКО, В. САФРОНОВ
Московская обл.
ЛИТЕРАТУРА
- Долгий А. Бейсик для «Радио-86РК».- Радио. 1987, № 1.
- Барчуков В., Фадеев Е. Бейсик «Микрон». — Радио, 1988, № 8.
- Зеленко Г., Панов В., Попов С. Бейсик для «Микро-80».- Радио, 1985, № 1-3; 1986, № 2, 3.
- Сугоняко В., Сафронов В. Операционная система «ORDOS» для ПРК «Орион-128».-Радио, 1990, № 8.
Отсканировано с журнала Радио № 4, № 5 1991 г.
Отредактировано Лесных Ю. 2001 г.