ZX-Ревю 1991 №6 1990 г.

Mega basic - заканчиваем печать инструкции по работе с языком программирования MEGA-BASIC и приводим окончание списка дополнительных команд, а также перечень системных сообщений программы.


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

2,2,"PLAY"

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

DRAW 0,36 DRAW 160,0

,26;"A С

E"

D"

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




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Новости - ALEX ART'а забрали в армию 22 июня.
От авторов - Статус газеты изменен.
Начало - содержание номера.
Игрушки - ROBOCOP 2.
Блиц-опрос - интервью с музыкантом Avatar.

В этот день...   21 ноября