MEGA BASIC
Сегодня мы заканчиваем печать инструкции по работе с языком программирования MEGA-BASIC и приводим окончание списка дополнительных команд, а также перечень системных сообщений программы.
Начиная со следующего выпуска мы последовательно начнем рассматривать версии
другого, не менее мощного языка - BETA BASIC.
* * *
CURRENT_n - по этой команде текущим становится окно n.
DEFG_A$,n... - эта команда позволяет определить символ UDG. Форма UDG задается 8 числами, записанными после a$, которое в свою очередь определяет адрес ОЗУ, где этот символ будет храниться.
DELETE_a,b - эта команда используется для удаления блока программных строк. Здесь a - номер первой строки, а b - номер последней строки удаляемого блока. Если a>b, то на экране появится сообщение "B Integer out of range".
DOKE_a,b - эта команда эквивалентна следующим:
POKE a,b-256*INT(b/256)
POKE a+1,INT(b/256)
DOWN_y,x,a$ - по этой команде строка символов a$ выводится в нижнюю часть экрана.
EDIT_n - по этой команде n-я строка переписывается в область редактора строк и активизируется редактор,
ENDPROC_n - эта команда определяет конец процедуры, имя процедуры может быть записано после команды.
EXAMINE - по этой команде на экран выводится содержимое заголовка вводимой с кассеты программы, т.е. имя, длина в байтах и начальный адрес в ОЗУ вводимого файла.
FADE_n - по этой команде каждый раз уменьшается на 1 содержимое каждого байта атрибутов экрана. Этот процесс повторяется до тех пор, пока значение каждого байта не станет равным n.
FONT_n - эта команда позволяет выбрать необходимый символьный набор из имеющихся в памяти. Команда не действует в режиме MODE 1, так как в этом режиме используется собственный символьный набор.
FX_n,m - команды выбора окна на экране.
GET_0,a,y,x,d,w - эта команда используется для сохранения в памяти изображения экрана.
INVERT - по этой команде инвертируется весь экран; цвет INK меняется на цвет PAPER, а цвет PAPER на цвет INK.
KEY_n,A$ - эта команда используется для задания функциональных клавиш. Здесь n -номер клавиши, а A$ - строка символов, закрепленных за этой клавишей.
MODE_(n),a - эта команда используется для выбора размеров выводимых на экран символов. Если после команды записаны два числа, то первое определяет номер окна.
MON - по этой команде вызывается фронт-панель. При этом пользователь может не только узнать содержимое ячеек памяти и регистров процессора, но и изменить их. Возврат в Мега-Бейсик осуществляется нажатием SPACE.
MTASK_n - по этой команде программа может выполняться одновременно с двух
точек.
PAN_n,m - эта команда позволяет перемещать попиксельно вправо и влево содержимое текущего окна экрана без изменения значений атрибутов.
PCLEAR - по этой команде очищается стек PROCEDURE/REPEAT-UNTIL.
PLAY_n,l,s,d,f - эта команда используется для исполнения звуковых эффектов.
POP_n - по этой команде в стек PROCEDURE/REPEAT-UNTIL записывается число n.
PRINTER_n - эта команда используется для вывода на принтер или другие периферийные устройства.
PUSH_n,m - эта команда используется для записи значения в стек PROCEDURE/REPEAT-UNTIL.
PUT_1 ,a,y^,d,w - эта команда используется для восстановления изображения, хранящегося в памяти, на экран. Команда противоположна команде GET.
REPEAT - оператор, определяющий начало цикла REPEAT-UNTIL. Если стек PROCEDURE/REPEAT-UNTIL заполнен, то на экране появляется сообщение "PROC stack overflow"
RESTART_n - эта команда эквивалентна команде ON ERROR GO TO, которая существует в других версиях BASIC.
RESTART_OFF - использование этой команды приводит к отмене режима программной обработки ошибок.
SCROLL_n,m - по этой команде осуществляется перемещение вверх или вниз значений текущего окна.
SOFF - команда выключения ISG.
SON - команда включения ISG.
SPEED_n - команда управления скоростью выполнения программы при включенном режиме трейсирования TRON.
SPRINT_x,y,a,b,c$ - это команда вывода на принтер строки символов, размер которых задается пользователем.
SFROFF_n,m - выключение спрайтов.
SPRON_n,m - включение спрайтов.
SPUT_x,y,a,b,c,w,d - эта команда подобна команде PUT, но в данном случае размеры изображения могут быть увеличены в двух направлениях заданием коэффициентов c,b.
SREP_n - это команда повторения звуков, информация о которых записана в звуковом буфере.
STIPPLE_n - эта команда позволяет создавать теневые эффекты для символов, записанных в режиме MODE 4.
SWAP_n,m - это команда для манипуляций с файлом атрибутов. При этом значение байта файла атрибутов меняется с n на m.
TRON - команда включения режима трассировки. При трассировке номер выполняемой программной строки выводится в нижнем левом углу экрана.
TROFF - команда выключения режима трассировки.
UNTIL_a - эта команда определяет конец цикла REPEAT-UNTIL.
VDU a,(a...) - эта команда эквивалентна PRINT CHR$.
WINDOW_y,x,d,w - по этой команде задается размер и расположение на экране текущего окна.
Новые сообщения об ошибках
FX NOT IMPLEMENTED - ошибка, связанная с командой FX...., Вы попытались использовать несуществующее назначение.
ILLEGAL WINDOW - ошибка команд FX или CURRENT. Вы попытались использовать более чем 10 окон.
LINE NOT FOUND - ошибка команды EDIT. Вы попытались редактировать строку, которой нет в программе.
MISSING PARAMETERS - некорректная запись чисел или параметров в командах.
WINDOW TOO LARGE - эта запись может появиться при использовании команды WINDOW, если размеры окна слишком большие.
WINDOW TOO SMALL - эта запись появляется, если один из размеров окна равен нулю.
X TOO LARGE или Y TOO LARGE - выход за пределы экрана.
В нашей почте лежат письма от читателей, которые либо начали работу с МЕГАБЕЙСИКом, либо собираются ее начать, но хотели бы видеть образец программы, написанной на этом языке.
Самое простое, что можно им порекомендовать - это просмотреть листинг файла DEMO, который прилагается к программе. Но поскольку файл DEMO предназначен прежде всего для того, чтобы наилучшим образом представить программу в работе, а не в просмотре, он выглядит не очень читабельным.
Идя навстречу высказанным пожеланиям, мы приводим распечатку программы, предназначенной для исследования оператора PLAY. Программа взята из журнала YOUR SPECTRUM (N15, июнь, 1985 г.).
Прелесть программы в том, что во-первых Вы наглядно увидите насколько же текст ее более понятен и компактен по сравнению с обычным Бейсиком, а во-вторых, сможете неплохо разобраться с командой PLAY, прощупать ее возможности.
После этой команды следуют несколько параметров и влияние их на работу команды на первый взгляд совсем неочевидно.
Наберите эту программу и запустите. Вертикальным перемещением курсора Вы сможете выбрать тот параметр, который хотите поменять, а горизонтальным перемещением - изменить этот параметр. После этого нажмите "пробел" и слушайте, что у Вас получилось.
1000 |
REM PLAY EXPL0RER |
1010 |
REM BY L A PRIVETT |
1020 |
REM MARCH 1985 |
1030 |
|
1040 |
PCLEAR |
1050 |
SETSCREEN |
1060 |
SETDISPLAY |
1070 |
SETVALUE |
1080 |
B0XIN |
1090 |
SCANKEYS |
1100 |
ST0P |
1110 |
|
1120 |
|
1130 |
|
Вот собственно и вся программа - она занимает 7 строк, начиная со строки 1040 - по строку 1100.
Все остальное - вспомогательные процедуры.
2000 @SETSCREEN
2010 WIND0W_0,0,22,64
2020 PAPER 0
2030 INK 6
2040 BRIGHT 1
2050 OVER 0
2060 INVERSE 0
2070 M0DE_2
2080 CLS
2090 DRAW 255,0
2100 DRAW 0,175
2110 DRAW 255,0
2120 DRAW 0,-175
2130 F0NT_1
2140 LET a$="PLAY_ EXPLORER 2150 SPRINT_20,10,1,2,A$ 2160 INK 3
2170 ENDPR0C_SETSCREEN 2180 : 2190 : 2200 :
3000 @SETDISPLAY 3010 LET A$="A B C D E" 3020 LET B$="= = = = =" 3030 INK 5 3040 D0WN_5,8,A$ 3050 D0WN_5,12,B$ 3060 F0NT_2
SPRINT_10,150
PRINT AT 2,40;"USE CURSOR" PRINT AT 3,40;" KEYS TO " PRINT AT 4,40;"SELECT AND" PRINT AT 5,401" CHANGE " INK 6 PLOT 0,36 DRAW 255,0 INK 6
PRINT AT 8,40;"SPACE FOR" PRINT AT 9,40;" PLAY " BEEP .1,0
ENDPROC_SETDISPLAY
@SETVALUE DIM M(5) DIM V(5) DIM P(5) FOR F=1 TO 5 LET P(F)=3+F*2 LET V(F)=0 NEXT F
RESTORE 4180 FOR F=1 TO 5 READ Q LET M(F)=Q
PRINT AT 3+F*2,16;V(F) PRINT AT 3+F*2,24;M(F) NEXT F LET PRE=1 LET POS=1
DATA 1,255,255,255,255 ENDPROC SETVALUE
@BOXIN
PLOT 20,60: DRAW 111,0 DRAW 0,79: DRAW -111,0
DRAW 0,-79 PLOT 95,0: PLOT 95,19 MODE_1 PRINT AT 1 PRINT " PRINT " INK 4
PRINT AT 15,25 PRINT AT 15,14 MODE_2 INK 2
PRINT AT 12,40 INK 6
MAX" ACTUAL"
Q TO QUIT"
'L.PRIVETT"
PRINT AT 15,40 ENDPROC_BOXIN
@SCANKEYS LET Z$ = " OVER 1 PAPER 1 INVERSE 1
PRINT AT P(1),6;Z$
REPEAT
LET FINISH=0
IF IN 63486=239 THEN LEFT IF IN 61438 = 251 THEN RIGHT IF IN 61438=247 THEN UP IF IN 61438=239 THEN D0N IF IN 64510=254 THEN QUIT IF IN 32766=254 THEN N0ISE BEEP .005,-16 UNTIL_FINISH ENDPR0C_SCANKEYS
@D0N
LET P0S=P0S+1
IF P0S>5 THEN LET P0S=5
P0SITI0N
ENDPR0C_D0N
@UP
LET P0S=P0S-1
IF P0S<1 THEN LET P0S=1
P0SITI0N
ENDPR0C_UP
@P0SITI0N
PRINT AT P(PRE),6; Z$ PRINT AT P(P0S),6; Z$ LET PRE=P0S ENDPR0C_P0SITI0N
@LEFT
LET S=P0S
LET V(S)=V(S)-1
IF V(S)<0 THEN LET V(S)=0
0VER 0
PRINT AT P(S),16;V(S); " 0VER 1
ENDFR0C_LEFT
@RIGHT
LET S=P0S
LET K=M(P0S)
LET V(S)=V(S)+1
IF V(S)>K THEN LET V(S)=K
0VER 0
PRINT AT P(S),16; V(S); " 0VER 1
ENDPR0C_RIGHT
@QUIT
LET FINISH=200 PAPER 0 INK 7
8040 |
OVER 0 |
|
8050 |
CLS |
|
8060 |
ENDPR0C_QUIT |
|
8070 |
|
|
8080 |
|
|
8100 |
@N0ISE |
|
8110 |
LET A=V(1): LET B=V(2) |
8120 |
LET C = V(3): |
LET D=V(4) |
8130 |
LET E=V(5): MODE_1 |
8140 |
0VER 0 |
|
8150 |
INK 7 |
|
8160 |
PAPER 0 |
|
8170 |
PRINT AT 20,26 |
A |
8180 |
PRINT AT 20,32 |
B |
8190 |
PRINT AT 20,38 |
C; " " |
8200 |
PRINT AT 20,46 |
D; " " |
8210 |
PRINT AT 20,54 |
E; " "; |
8220 |
M0DE_2 |
|
8250 |
PAPER 1 |
|
8260 |
OVER 1 |
|
8270 |
INK 6 |
|
8280 |
PLAY A,B,C,D,E |
|
8310 |
ENDPROC NOISE |
|