3. ГРАФИКА.
КОМАНДЫ CHANGE U SWAP.
В МЕГАБЕЙСИК включены некоторые команды, которые позволяют
пользователю непосредственно манипулировать с файлом атрибутов.
Команда CHANGE_ позволяет изменить определенную часть байтов атри-
бутов. После этой команды записывают 2 числа, представляющие собой
маску и данные. Маска определяет, какой из битов каждого байта файла
атрибутов должен быть изменен. Данные указывают, в чем должно состо-
ять это изменение:
CHANGE1 - логическое NOT. Все единичные биты в каждом байте
становятся нулевыми и наоборот;
CHANGE 2 - логическое AND между всеми байтами файла атрибутов и
значением маски;
CHANGE 3 - логическое OR между всеми байтами файла атрибутов и
байтом данных.
Команда SWAP_ - позволяет поменять одни атрибуты на другие. По-
еле команды записываются два числа: первое число определяет значение
новых атрибутов, а второе - значение тех атрибутов, 'которые должны
измениться.
КОМАНДА FADE_
С помощью этой команды можно получить особые эффекты. Введите
и запустите следующую короткую программу:
10 FOR А=0 ТО 703
20 РОКЕ 22528+А,РЕЕК А
30 NEXT А
40 FADE0
Первые три строки этой программы обеспечивают заполнение файла
атрибутов случайными числами. В 40-й строке по команде FADE0 выпол-
няется сравнение значения каждого байта файла атрибутов с числом,
записанным после этой команды. Если эти значения равны, то байт ос-
тается неизменным, если же нет, то значение байта в файле атрибутов
изменяется, пока не станет равным записанному числу.
КОМАНДА INVEST
Это простая команда, по которой инвертируется весь экран. Цвет
INK изменяется на цвет PAPER, а цвет PAPER - на цвет INK.
КОМАНДА DEFG_.
Способ, позволяющий создавать в стандартном БЕЙСИКе новые символы
графики пользователя (UDG) довольно громоздок. В МЕГАБЕЙСИКЕ же эта
задача решается с помощью одной команды DEFG_, после которой записы-
вается символ (любая из литер от а до и) а затем 8 чисел, разделен-
ных запятыми. Символ определяет местонахождение UDG, а числа - его
форму.
КОМАНДЫ GET_ U FUT_.
В МЕГАБЕЙСИКЕ можно запомнить часть изображения экрана в ОЗУ, и
при необходимости вернуть это изображение на экран в любую позицию.
Для передачи части экрана в ОЗУ используют команду:
GET_0,а,у,х,d,w.
Здесь: а - адрес, начиная с которого хранится в ОЗУ изображение эк-
рана, у,х - соответственно номер строки и номер столбца верхнего ле-
вого угла сохраняемого участка экрана, d,w - длина и ширина этого
участка. Команды GET_ и PUT_ применяют такую же координатную систе-
му, что и команды ATTR и SCREENS. Их координаты абсолютны и не зави-
сят от положения верхнего левого угла окна на экране. Число байтов,
занимаемых изображением экрана в ОЗУ, определяется по формуле:
64*w*d.
Команда PUT_ прямо противоположна по действию команде GET_. За-
писывается она в следующей форме: PUT_f,a,y,x,d,w. Здесь f опреде-
ляет способ восстановления изображения экрана:
f=0 - изображение из ОЗУ переписывается в дисплейный файл без
изменений;
f=l - восстановление изображения осуществляется через логичес-
кое OR значений дисплейного файла и сохраняемого в ОЗУ изображения;
f=2 - восстановление через логическое XOR;
f=4 - то же, что и f=0, но вместо атрибутов, хранимых в памяти,
используются значения текущих атрибутов;
f=5 - то же, что и f=l, но используются текущие атрибуты;
f=6 - то же, что и f=2, но используются текущие атрибуты.
Переменные a,x,y,d,w аналогичны определяемым в команде GET_.
КОМАНДА SPUT_.
Это вариация команды PUT_, позволяющая не только восстановить
изображение экрана, но и увеличить его:
SPUTa,x,y,b,c,w,d
Здесь: а - начальный адрес блока в ОЗУ; х,у - координаты верх-
него левого угла экрана при восстановлении изображения; Ь,с - коэф-
фициенты увеличения по оси х и у соответственно. При этой команде
всегда используются текущие атрибуты, а координатная система точно
такая же, как и для команды SPRINT.
4. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ
ПРОЦЕДУРЫ.
МЕГАБЕЙСИК обеспечивает работу с процедурами, вызов которых осу-
ществляется по их имени. Точно так же, как и после команды, после
имени процедуры может быть записана серия арифметических выражений
или чисел. Эти выражения определяют необходимые переменные для рабо-
ты в процедуре.
Недостатком процедур в МЕГАБЕЙСИКе является то, что они не мо-
гут работать с локальными переменными; их переменные являются общими
для всей программы.
Используя процедуры, можно разделить всю Программу на ряд част-
ных задач. Каждая процедура отлаживается отдельно, а затем все они
объединяются в программу. Начало процедуры задается символом ' @*,
следом за которым записывается имя процедуры. После имени процедуры
записываются необходимые параметры. Окончание процедуры обозначает-
ся оператором ENDPROC_. Как только будет достигнут этот оператор,
управление выполнением программы будет передано оператору, записан-
ному за оператором вызова процедуры.
После оператора ENDPROC_ можно записать имя процедуры:
9000 @DISPLAY_A,A$
9010 PAPER A: INK 9
9020 M0DE_4: STIPPLE_6
9030 PRINT A$
9040 ENDPROC_DISPLAY
Это пример процедуры. В строке 9010 определяется имя процедуры
DISPLAY и, как видно, для ее работы необходимо определить две пере-
менные -А и А$. В строке 9030 определяется размер и оттенок симво-
лов, выводимых на экран. Для вызова процедуры необходимо записать,
например:
DISPLAY_2,"MEGABASIC"
Процедуры могут вызываться и из процедур.
REPEAT-UNTIL
Мега-Бейсик обеспечивает работу с циклами типа REPEAT-UNTIL. Опе-
ратор REPEAT определяет начало цикла. После оператора UNTIL должна
быть записана односимвольная переменная. Если значение этой перемен-
ной равно нулю, то цикл прерывается и выполнение программы переходит
к оператору, записанному после последнего оператора REPEAT, если же
эта переменная отлична от 0, то выполняется следующий оператор про-
граммы. Допускается вложение до 10 циклов типа REPEAT-UNTIL.
ПРОЦЕДУРНЫЙ СТЕК
Для хранения номеров строк операторов, к которым выполняется
возврат после использования процедур и циклов REPEAT-UNTIL, применя-
ется специальный стек. Когда вызывается процедура, номер строки,
следующий за оператором вызова, записывается в стек, что позволяет
системе знать адрес возврата после окончания процедуры.
Аналогично и для циклов типа REPEAT-UNTIL. Здесь также в стек
записываются номера строки и оператора, к которым осуществляется
возврат после оператора UNTIL.
После выполнения оператора ENDPROC_ и перехода к строке, номер
которой хранился в стеке, этот номер удаляется со стека. Любая по-
пытка записать в стек больше 10 номеров заканчивается сообщением
"PROC STACK OVERLOW" (Процедурный стек переполнен).
КОМАНДЫ POP U PUSH.
Оператор РОР_ служит для "снятия" значений со стека, оператор
PUSH_ - для записи значений в стек. За оператором PUSH_ следуют 2
числа: номер оператора в строке и номер строки. Для очистки стека
перед началом выполнения программ необходимо дать команду PCLEAR.
КОМАНДА BRANCH
По этой команде после выполнения каждой программной строки бу-
дет вызываться подпрограмма, записанная в строках основной програм-
мы. Начальная строка этой подпрограммы указывается после команды
BRANCH, а конец подпрограммы определяется оператором ENDPROC_.
ОПЕРАТОР МТASK
Это оператор многозадачного режима. Он позволяет выполнять про-
грамму одновременно из двух разных мест. Считается, что программа
как бы разделена на две части: первая начинается после строки, где
записан оператор MTASK_, а вторая - со строки, номер которой записан
после оператора MTASK_. МЕГАБЕЙСИК выполняет поочередно строки из
каждой части программы.
5. ОТЛАДКА И РЕДАКТИРОВАНИЕ ПРОГРАММ
ОПЕРАТОРЫ BRANCHTRON_, TROFF_ U SPEED.
Оператор BRANCH_ оказывается весьма полезным при отладке про-
грамм. Если, к примеру, Вас интересует какая-то переменная, то Вы
можете с помощью этой команды вызывать подпрограмму печати значения
этой переменной после каждой программной строки. Другой способ про-
верить выполнение программы - выводить на экран номер выполняемой
строки, что возможно по команде TRON_. При этом номер выполняемой
строки программы будет выведен в нижний угол экрана. Команда TROFF_
отменяет такой режим. Связана с этими двумя командами также команда
SPEED_, после которой записано число, определяющее скорость выполне-
ния программных строк. Максимально возможное число - 255. При этом
выполнение программы будет приостановлено до тех пор, пока пользова-
тель не нажмет любую клавишу.
КОМАНДЫ AUTO U DELETE.
При вводе больших программ весьма полезным может быть автомати-
ческий ввод номера следующей строки после нажатия клавиши ENTER. Та-
кой режим работы возможен при применении команды AUTO_, после кото-
рой следуют 2 числа, разделенные запятыми. Первое число задает на-
чальный номер строки, с которого начнется автоматическая нумерация,
а второе - шаг нумерации.
Остановить режим автонумерации можно так: EXTEND SYMB.SHIFT * L *.
Часто бывает необходимо удалить целый блок программных строк.
Эту задачу можно решить, используя команду DELETE_. После этой ко-
манды записывают два числа, являющиеся, соответственно, начальным и
конечным номерами строк удаляемого блока.
КОМАНДЫ BRON_ U BROFF_.
Желающие защитить свои программы от любопытных глаз, найдут
полезным возможность отключать клавишу BREAK. Это может быть сделано
при примении команды BROFF_. Возвращение клавише ее возможностей
осуществляется по команде BRON_.
КОМАНДА RESTART.
Многие версии языка Бейсик имеют команду ON ERROR GO ТО, позво-
ляющую не прерывать выполнение программы в случае обнаружения ошиб-
ки, а осуществлять обход строки с ошибкой. Аналогичная команда име-
ется и в МЕГАБЕЙСИКе. Это команда RESTART_, после которой записыва-
ется номер строки, к которой осуществляется переход в случае обнару-
жения ошибки. По команде RESTART_OFF такой режим отменяется. После
обработки ошибки с помощью команды RESTART_ некоторая полезная ин-
формация сохраняется в ячейках памяти:
5987 3/4 - номер строки, в которой обнаружена ошибка;
59875 - номер оператора внутри строки с ошибкой;
59862 - код обнаруженной ошибки.
6. ЗВУК
МЕГАБЕСИК открывает для Вас новые возможности создания звуков
на Вашем компьютере. Для этого необходимо использовать команду PLAY_
и генератор звука ISG
PLAY_n,l,s,d,f
Здесь:
п=0 - ноты;
п=1 - белый шум;
1 - длительность звучания на каждом шаге;
s - значение начальной звуковой частоты;
d - число шагов;
f - изменение частоты после каждого шага.
РЕЗИДЕНТНЫЙ ЗВУКОВОЙ ГЕНЕРАТОР
Если команда PLAY_ только улучшает возможности команды ВЕЕР,
то использование звукового генератора позволит получить новые эффек-
ты. Дело в том, что при выполнении программы в ZX SPECTRUM происхо-
дят прерывания 50 раз в секунду.' Во время обслуживания прерываний
выполняются например такие необходимые процессы, как сканирование
клавиатуры. В это же время может работать и резиденьный звуковой
генератор. В МЕГАБЕЙСИКе имеется ряд команд, которые могут управ-
лять этим генератором.
SOUND_n,а,b,с,d - команда для работы с звуковым буфером.
Здесь:
п=0 очистка звукового буфера перед очередной загрузкой;
п=1 добавление новой информации в звуковой буфер;
а=0 воспроизведение нот;
а=1 воспроизведение шума;
b - шаг звуковой частоты;
с - число шагов в последовательности нот;
d - число повторений последовательности нот.
Другие команды:
SOFF - отключение генератора;
SON - включение генератора;
SREPn - количество повторений звуковой последователь-
ности ; если п=0, то данные, записанные в зву-
ковом буфере будут использоваться только один
раз, в противном случае - многократно.
Когда выполняется команда PLAY, генератор автоматически отклю-
чается. Для включения генератора применяйте команду SON. Более слож-
ные звуковые эффекты можно получить, если замедлить выполнение про-
граммы. Этот короткий фрагмент программы демонстрирует работу гене-
ратора:
10 SOUND_ 0,0,1,20,255
20 SREPl
30 SON
40 MODE4: STIPPLE_6: FONT_2
50 VDU_(128+RND*15)
60 PAPER RND*7: INK 9
70 GO TO 50