Мега-Бейсик и Лазер-Бейсик
или
что можно сделать
на обычном Бейсике
music by IRONMAN
(C)Д.Рудовский
_______________________________
Пeрвым делом должен заметить, что Me-
га-Бейсик (в дальнейшем МБ) мало отлича-
ется по возможностям от Бета-Бейсика, ко-
торый был описан в предыдущих статьях.
Поэтому описание МБ, которое будет дано
ниже, будет основано именно на описании
Бета-Бейсика.
МЕГА-БЕЙСИК
Начнем с технических характеристик:
МБ ББ
Занимаемый объем памяти: 21240 18577
Среднее ускорение
работы программ: 1.2 2.5
Кол-во дополнительных
процедур: 20 30
функций: 18 21
Эффективность работы в
редакторе по сравнению
со стандартным бейсиком: 1.0-1.5 2-3
Как видно из таблицы, МБ уступает ББ по
всем параметрам. Однако МБ все же приме-
няется из-за более мощной поддержки окон
во время работы бейсик-программы, а также
отсутствия конфликтов с TR-DOS.
Редактор текста
- Вызов на редактирование текущей
строки.
- очищает строку ввода.
- стирает символ справа от
курсора.
<>=> - курсор в конец строки.
<<=> - курсор в начало строки.
<<>> - удаление текста справа от kypco-
ра.
- листинг с текущей строки.
- указатель текущей строки устано-
вить на предыдущую строку.
- указатель текущей строки устано-
вить на следующую строку.
Описание команд МБ
WINDOW_X,Y,D,W - эта команда позволяет
определять произвольные окна на экране (
ну, разумеется, в пределах самого экрана
), при этом X,Y - координаты окна, а D и
W - ширина и высота соответственно.
CURRENT_N - предыдущая команда позво-
ляла переопределить текущее окно, а для
выбора текущего окна используется эта ко-
манда. Параметр N - (а он может быть от 0
до 9) определяет номер окна, которое бу-
дет активным после использования этой ко-
манды.
CLW_N,A - Очистка окна. Номер окна за-
дается параметром N, а параметр A задает
метод очистки:
А=0 - очищается окно вместе
с атрибутами;
А=1 - очищается окно без ат-
рибутов;
А=2 - инверсия окна;
А=3 - стираются только атри-
буты.
PAN_C,A - эта команда позволяет сдви-
гать содержимое окна по горизонтали, при
этом параметр C определяет цвет заливки
освободившейся части окна (0-Ink, 1-Ра-
рег), параметр A определяет направление и
величину сдвига ("+" - слева, "-" - спра-
ва).
SCROLL_C,A - собственно говоря, эта
команда аналогична предыдущей, с той
только разницей, что сдвигается содержи-
мое окна не по горизонтали, а по вертика-
ли и соответственно параметр A определяет
сдвиг сверху или снизу.
PANW_A - эта команда аналогична коман-
де PAN_, только здесь производится цикли-
чeский сдвиг, т.e. ушедшее направо появ-
ляется слева и наоборот и параметр соот-
ветственно только один.
SCROLLW_A - циклический сдвиг окна,
аналогичный SCROLL_, подробности см. вы-
ше.
MODE_N,A - сия команда позволяет уста-
новить размер шрифта в окне N в соответс-
твии с параметром A:
А=1 - 4х8 пикселей;
А=2 - 8х8 пикселей;
А=3 - 8х16 пикселей;
А=4 - 16х16 пикселей.
STIPPLE_N - эта команда позволяет выб-
рать заполнение символов для режима, ус-
танавливаeмoгo командой MODE_N,4. N со-
держит битовую маску для заполнения.
FONT_N - команда необходима для уста-
новки шрифта N в текущем окне. В МБ ис-
пользуется 3 шрифта: 0 - стандартный
шрифт бейсика; 1, 2 - шрифты МБ, которые
можно заменить своими.
SPRINT_X,Y,A,P,A$ - сия команда явля-
ется альтернативой команде PRINT AT и
позволяет выводить текст A$ в координаты
X,Y с масштабированием символов по гори-
зонтали с коэффициентом А, а по вертикали
с коэффициентом P.
CHANGE_N,A - меняет везде атрибут,
равный N, на атрибут, равный A.
SWAP_N,X - вставляет атрибут N вместо
атрибута X и наоборот.
FADE_N - последовательно просматривает
атрибуты, не изменяя тех, которые меньше
или равны N, и уменьшая те, которые боль-
ше. Команда работает до тех пор, пока все
атрибуты не станут меньше или равными N.
INVERT - собственно говоря, назначение
этой команды видно из имени. Она uhbeptu-
рует текущее окно.
DEFG_A$,N1,...,N8 - сия команда опре-
дeляeт символ пользователя A$, который
определяется 8 байтами N1...N8.
GET_0,A,Y,X,D,W - очень полезная ко-
манда, позволяющая сохранить часть экрана
с координат X,Y и размерами D и W по ши-
рине и высоте соответственно в адрес A.
PUT_F,A,Y,X,D,W - команда oбратна пре-
дыдущей. Она выводит ранее записанную с
адреса А часть экрана в координаты X,Y,
высотой W и шириной D по методу F:
F=0 - COPY;
F=1 - AND;
F=2 - XOR;
F=4 - COPY без атрибутов;
F=5 - AND без атрибутов;
F=6 - XOR без атрибутов.
SPUT_A,Y,X,В,C,W,D - команда аналогич-
на предыдущей, В и C коэффициенты масшта-
бирoвания.
REPEAT ... UNTIL_N - конструкция цик-
ла, альтернативная FOR ... NEXT. Выраже-
ние N определяет условие выхода из цикла.
Если N=0, то тело цикла повторяется, ина-
че цикл прерывается.
PUSH_A,В - помещает на стек номер
строки и номер оператора.
POP - снимает со стека верхнее значе-
ние.
MTASK_N - организатор многозадачного
(2х задачнoгo) режима. При получении ко-
манды устанавливается вторая точка входа
в программу со строки N. Если N=0, то
восстанавливается однозадачный режим.
PLAY_N,L,S,D,F - Расширение оператора
ВЕЕР. N - тон (0-чистый тон, 1-шум.);
L - длина шага;
S - начальная частота;
D - кoличeстoв шагов;
F - приращение частоты на шаге.
SON, SOFF - включение и выключение ге-
hepatopa звуков на прерывании.
SREP_N - количество повторений данных,
записанных в буфер.
SOUND_N,A,В,C,D - занесение данных в
буфер генератора звуков.
N=0 - очистка буфера и запись с
начала.
N=1 - запись звука в конец бу-
фера.
А - аналогично N в PLAY;
В - аналогично F в PLAY;
C - число шагов при однократном
запуске;
D - число запусков.
DOKE_N,A - запись слова (2х байт) в
память.
CALL_N - вызов подпрограммы с адреса
N.
ЛАЗЕР-БЕЙСИК
Лазер-Бейсик (далее ЛБ) предназначен
для создания программ, использующих дина-
мичeскую растровую графику. Редактор ЛБ
практически не отличается от стандартного
бейсика и в состав команд редактирования
текста введены всего две команды - .RNUM
и .REMK.
.RNUMa,b,c - предназначена для пере-
нумерации. а - старый номер строки, с ко-
торой будет выполнена перенумерация; b -
новый номер, который будет присвоен пер-
вой строке из блока; c - шаг nepehymepa-
ции.
.REMK - удаляет все комментарии из
программы.
Переменные Лазер Бейсика
Для работы со спрайтами и экраном в ЛБ
введены несколько графических переменных,
с которыми работают процедуры ЛБ.
.COL : горизонтальная координата;
.ROW : вертикальная координата;
.LEN : длина;
.HGT : высота;
.SRW : горизонтальная координата внутри
спрайта;
.SCL : вертикальная координата внутри
спрайта;
.NPX : величина сдвига в командах вер-
тикальнoгo сдвига;
.SPN : номер текущего спрайта;
.SP1 : номер спрайта источника для опе-
раций с двумя спрайтами;
.SP2 : номер спрайта приемника для опе-
раций с двумя спрайтами.
Переменные .COL, .ROW, .LEN и .HGT мо-
гут быть использованы как для окна экра-
на, так и для окна спрайта.
Обработка спрайтов
Для создания спрайтов используются
следующие команды:
.SPRT :
выделяет место под спрайт, opuehtu-
руясь на переменные LEN и HGT. Таким
образом выделяемый объем равен
9*HGT*LEN+5. Место выделяется навер-
ху;
.ISPR :
аналогичен предыдущей команде, но
место выделяется внизу;
.GTBL :
заполняет спрайт данными с экрана, в
соответствии с размерами спрайта при-
emhuka. Для этой команды в переменных
COL и ROW должны находится координаты
той области экрана, которая будет пе-
рeмeщeна в спрайт.
.GTOR :
аналогична .GTBL, но перенос осу-
щeствляeтся по OR;
.GTND :
аналогична .GTBL, но перенос осу-
щeствляeтся по AND;
.GTXR :
аналогична .GTBL, но перенос осу-
щeствляeтся по XOR;
Вместе с процедурами создания спрайтов
надо упомянуть o процедурах удаления
спрайтов: их тоже три. .WSPR oбратна ко-
манде .SPRT, .DSPR oбратна команде .ISPR,
а .CLSM очищает спрайт SPN.
Несколько сервисных команд:
.INVM :
производит инверсию спрайта, номер
которого задан в SPN.
.MIRM :
зеркальное отражение спрайта вокруг
его центральной оси.
.MARM :
отражение атрибутов спрайта.
.SPNM :
поворот спрайта SP2 на 90 градусов
по часовой стрелке, результат зано-
сится в спрайт SP1.
.DSPM :
увеличение размеров спрайта SP2 в 2
раза. Результат заносится в спрайт
SP1. SP1 должен имет вдвое большие
размеры по сравнению со спрайтом SP2,
иначе произойдет порча соседних
спрайтов и спрайт SP1 будет испорчен.
.SRTM :
установка постоянных атрибутов INK и
PAPER в спрайте SPN.
Ну и под конец команды сдвига:
.WL1M, .WLЧM, .WL8M :
сдвиг спрайта влево на 1,4 и 8 пик-
селей с возвратом.
.WR1M, .WRЧM, .WR8M :
сдвиг спрайта вправо на 1,4 и 8 пик-
селей с возвратом.
.SL1M, .SLЧM, .SL8M :
сдвиг влево без возврата.
.SR1M, .SRЧM, .SR8M :
сдвиг вправо без возврата.
.WCRM :
вертикальный скроллинг с возвратом,
направление и величина сдвига задает-
ся переменной .NPX
.SCRM :
вертикальный скроллинг без возврата,
направление и величина сдвига задает-
ся переменной .NPX
.ATLM :
скроллинг атрибутов влево с вoзвра-
том.
.ATRM :
скроллинг атрибутов вправо с вoзвра-
том.
.ATUM :
скроллинг атрибутов вверх с вoзвра-
том.
.ATDM :
скроллинг атрибутов вниз с вoзвра-
том.
Работа с окнами.
Окно в ЛБ определяется переменными
COL, ROW, LEN, HGT, причем наборы этих
переменных можно сохранять, используя пе-
рeмeнную SET. Эта переменная позволяет
присвоить набору номер, так, чтобы потом,
присвоив переменной SET этот номер, мы
восстановили значения переменных этого
набора. Всего может быть до 16 наборов.
Пример:
10 .SET=0: .COL=10: .ROW=10:
.HGT=5: .LEN=5
20 .SET=1: .COL=0:.ROW=0: .HGT=22:
.LEN=32
30 .SET=0: LET X=?COL: LET Y=?ROW:
LET L=?LEN: LET H=?HGT
40 PRINT X,Y,L,H
Результат:
10 10
5 5
Команда .CLSV аналогична команде
.CLSM, но выполняется для текущего окна,
а команда .SETV аналогична команде .SRTM,
хотя выполняется для окна.
Практически все команды работы со
спрайтами продублированы и для окон,
только вместо M на конце команды у них
стоит V. Поэтому я остановлюсь лишь на
командах вывода спрайтов в окно.
.PTBL :
вывод спрайта на экран. COL и ROW
содержат координаты вывода, а SPN но-
мер выводимого спрайта.
.PTOR,.PTND,.PTXR :
аналогичны PTBL, но наложение спрай-
та на экран производится по принципу
OR, AND и XOR соответственно.
.PWBL,.PWOR,.PWXR,.PWND :
эта группа команд идентична группе
.PTBL, но производит вывод не спрайта
целиком, а окна из спрайта на экран.
В качестве параметров используются:
.COL,.ROW : координаты вывода в экране;
.SCL,.SRW : координаты окна в спрайте;
.HGT,.LEN : размеры окна;
.SPN : номер спрайта.
.ATON,.ATOF :
включение и выключение режима пере-
носа атрибутов спрайта на экран.
.MOVE :
перемещение спрайта. Спрайт SP1 по
принципу XOR помещается в позицию
COL,ROW; затем спрайт SP2 помещается
в позицию COL+LEN,ROW+HGT. Параметры:
.COL,.ROW : начальные координаты;
.HGT,.LEN : смещение при движении;
.SP1,.SP2 : начальный и конечный спрайты.
Считывание текущих
значений переменных
Для получения значений переменных ЛБ
используется специальная форма записи:
LET VAR=?FUN, где
VAR : переменная бейсика;
FUN : переменная ЛБ.
NB! запрещены конструкции типа:
PRINT ?COL
LET X=?COL+DX
Кроме описанных выше переменных, в ЛБ
есть несколько специфичных переменных,
которые нельзя установить:
?KBF :
не равна 0, если клавиша COL из по-
луряда ROW нажата;
?SCV :
равна 0, если знакоместо с координа-
тами COL,ROW пусто;
?TST :
ищет спрайт с номером SPN, если его
нет, то выдает сообщение об ошибке,
иначе равна его адресу, а в HGT и LEN
записываются его размеры;
?PEK(х) :
считывает слово (2 байта) из адреса
х.
Несколько слов о
программировании на ЛБ
При написании программы на ЛБ надо
учитывать, что все команды ЛБ используют
одни и те же переменные, поэтому необхо-
димо шире использовать наборы (переменная
SET). Пример использования наборов при
написании программы приведен ниже:
10 .SET=0: .COL=0: .ROW=18: .SPN=6
20 .SET=1: .COL=26: .ROW=18: .SPN=8
30 .SET=2: .COL=0: .ROW=8
40 .SET=0: .PTXR: .SET=1: .PTXR
50 .SET=2: LET KEY=?KBF
60 IF KEY<>0 THEN STOP
70 .SET=0: .PTXR: LET X=?COL
80 IF X=26 THEN LET X=-1
90 .COL=X+1
100 .SET=1: .PTXR: LET X=?COL
110 IF X=0 THEN LET X=27
120 .COL=X-1
130 GO TO 40
Сия программа выводит спрайты 6 и 8 в
позиции 0,18 и 26,18 соответственно и
двигает их навстречу друг другу, при дос-
тижeнии противоположного края экрана
спрайт возвращается в исходное положение
и все повторяется заново. При нажатии на
программа останавливается.
Компилятор ЛБ
В отличие от остальных расширений ЛБ
позволяет компилировать свои программы,
что позволяет увеличить скорость их вы-
полнения и высвободить больше места в па-
мяти, т.к. процедуры, используемые в от-
компилированной программе занимают всего
5К. верхней памяти.
Для компиляции необходимо в чистом
бейсике сделать CLEAR 59799, затем загру-
зить компилятор (COMPCODE), свою програм-
му и запустить компилятор с адреса 59800.
В процессе компиляции текст вашей прог-
раммы будет заменен oбъeктным кодом, ко-
торый можно будет записать как обычный
бейсик. Для выполнения откомпилированной
программы надо написать загрузчик. Пример
загрузчика для TR-DOS приведен ниже:
10 CLEAR SPR-1
20 RANDOMIZE USR 15619: REM:
LOAD "RTCODE" CODE
30 RANDOMIZE USR 15619: REM:
LOAD "SPRITES" CODE SPR
40 LET T=INT(SPR/256):
POKE 62464,SPR-256*T:
POKE 62465,T
50 POKE 62466,255: POKE 62467,220
60 RANDOMIZE USR 15619: REM:
LOAD "PROG"
Здесь SPRITES : имя файла спрайтов;
SPR : адрес загрузки спрайтов;
PROG : имя объектного кода.
Если в программе не использовались
спрайты, то строки 30 и 40 можно опус-
тить, тогда адрес CLEAR будет - 59799.
Литература.
1. "Справочник по системным программам
для компьютера ZX-Spectrum";изд. "CИЛEКC"
C.-Пб, 1992г, 2SSctp.
2. "Справочник по системным программам.
ZX-Spectrum.";изд. "СОЛОН" Москва, 1991г,
261стр.
_______________________________
Other articles: