7. МАШИННЫЕ КОДЫ И МЕГА-БЕЙСИК
КОМАНДЫ DOKE U CALL.
МЕГАБЕЙСИК позволяет включать в текст основной программы и фра-
гменты в машинных кодах. Надо только учесть, что такой машинный код
не помешал нормальной работе самого МЕГАБЕЙСИКа. Сам же МЕГАБЕЙСИК
занимает в ОЗУ участок памяти, начиная с адреса 45000.
Поэтому все программы в машинных кодах должны быть размещены в
ОЗУ до этого адреса. Для того, чтобы записать в память двухбайтное
число, можно воспользовать командой DOKE, которая поддерживается в
МЕГАБЕЙСИКе. После этой команды должны быть записаны два числа: пер-
вое определяет адрес, куда записываются данные, а второе - записыва-
емое число.
Для вызова программ, записанных в машинных кодах, н,а исполнение
в МЕГАБЕЙСИКе используется команда CALL_. После этой команды записы-
вается число, указывающее адрес вызываемой подпрограммы, а затем
произвольные числа, которые передаются в машинный стек и затем ис-
пользуются как параметры в подпрограмме.
Таким образом, в отличие от стандартного БЕЙСИКа, в котором по
команде RANDOMIZE USR nn можно только запустить машинный код, здесь
он не только запускается, но и удобно организована передача в него
параметров (значений переменных).
FRONT-PANEL.
Фронт-панель - это режим работы программы, который позволяет
пользователю вносить изменения в ячейки памяти и регистры микропро-
цессора путем записи шестнадцатиричных чисел и является по сути
встроенным монитором.
Фронт-панель активизируется при выполнении команды MON, либо
после 'SPACE F' при выполнении программы.
Фронт-панель использует окно 3, в котором после активизации
фронт-панели Вы увидите столбцы НЕХ-чисел. Слева - регистры процес-
сора и их значения, а справа - распечатка участка ОЗУ. Звездочка
указывает на текущий регистр, а инверсная полоса - текущую ячейку
памяти. Все изменения производятся с помощью однобуквенных команд,
после которых могут быть записаны до трех шестнадцатиричных чисел:
SPACE - возврат в БЕЙСИК;
R пп - запись в текущий регистр 16-битового НЕХ-числа;
L nn пп пп - перемещение участка памяти. Здесь:
1-е число определяет начальный адрес перемещаемого блока;
2-е число задает новый начальный адрес;
3-е число определяет длину перемещаемого блока в байтах;
М пп - смещение указателя ячейки памяти на адрес пп;
S - установка точки выхода в программе для текущей ячейки;
К - продолжение выполнения программы после S;
и - восстановление точки выхода;
I пп пп пп - заполнение блока ОЗУ. Здесь:
1-е число - начальный адрес блока;
2-е число - длина блока;
3-е число - байт, которым заполняется блок;
J nn - вызов подпрограммы в машинных кодах, расположенной по
адресу пп;
ENTER - смещение указателя ячейки памяти на один байт вперед;
- смещение указателя ячейки памяти на один байт назад.
ПРИЛОЖЕНИЕ 1.
НОВЫЕ КОМАНДЫ.
Ниже приводится перечень новых команд МЕГАБЕЙСИКа. Здесь лите-
ра после команды определяет число или числовое выражение, а литера
со знаком $ - символьное выражение.
AUTO_a,b - автоматическая нумерация вводимых строк. Для вы-
ключения такого режима необходимо нажать " = " и ENTER.
BACKUP - эта команда используется для копирования файлов. Пос-
ле ввода этой команды на экране появляется сообщение:
"START ТАРЕ"
Как только на входе EAR появится сигнал, оно сменится новым
сообщением "OK searching" и будет идти загрузка очередного файла с
кассеты. После окончания загрузки на экране появляется сообщение:
"Start tape, then press any key".
Когда Вы будете готовы записать этот файл на кассету, нажмите
любую клавишу и файл скопируется. После этого система запросит Вас
о необходимости еще одной копии. Если Вам она нужна, то нажмите
клавишу "Y", если же нет, то нажмите "N". После этой ' команды необ-
ходимо выполнить команду NEW.
BRANCH_n - по этой команде будет вызываться подпрограмма после
выполнения каждой программной строки.
BROFF - выключение клавиши BREAK.
BRON - включение клавиши BREAK после команды BROFF.
CALL_a(n,п...) - вызов программы в машинных кодах, находя-
щейся в оперативной памяти по адресу "а".
После адреса в скобках могут быть записаны числа, которые запи-
сываются на машинный стек для использования в подпрограмма.
CHANGEa,b - это команда для изменения атрибутного файла. Здесь
'а'- маска, а * Ь * - данные.
CLW_(n),h - эта команда используется для очистки окон. Если за-
писаны два числа, то первое определяет, какое из окон очищается. Ес-
ли же записано только одно число, то очищается текущее окно.
CURRENT_n - по этой команде текущим становится окно п.
DEFG_A$,n... - эта команда позволяет определить символ UDG.
Форма UDG задается 8 числами, записанными после А$, которое в свою
очередь определяет адрес ОЗУ, где этот символ будет храниться.
DELETE_a,b - эта команда используется для удаления блока про-
граммных строк. Здесь а - номер первой строки, a b - номер последней
строки удаляемого блока. Если а>Ь, то на экране появится сообщение
"В Integer out of range"
DOKEa,b - эта команда служит для засылки целых чисел от 0 до
65535 в пару смежных ячеек памяти. Она эквивалетна:
POKE_a,b-256*INT(b/256)
POKE а+1,INT(b/256)
DOWN_y,x,a$ - по этой команде строка символов А$ выводится о
нижнюю часть экрана.
EDIT_n - по этой команде n-я строка переписывается в область
редактора строк и активизируется редактор.
ENDPROC_n - эта команда определяет конец процедуры. Имя проце-
дуры может быть записано после команды.
EXAMINE - по этой команде на экран выводится содержимое заголо-
вка вводимой с кассеты программы, т.е. имя, длина в байтах и началь-
ный адрес в ОЗУ вводимого файла.
FADE_n - по этой команде каждый раз уменьшается на 1 содержимое
каждого байта атрибутов экрана. Этот процесс повторяется до тех пор,
пока значение каждого байта не станет равным п.
FONT__n - эта команда позволяет выбрать необходимый символьный
набор из имеющихся в памяти. Команда не действует в режиме MODE 1,
так как в этом режиме используется собственный символьный набор.
FX_n,m - команды выбора окна на экране.
GET_0,a,y,x,d,w - эта команда используется для сохранения в па-
мяти изображения экрана.
INVERT - по этой команде инвертируется весь экран: цвет INK ме-
няется на цвет PAPER, а цвет PAPER на цвет INK.
KEY_n,A$ - эта команда используется для задания функциональных
клавиш. Здесь п - номер клавиши, а А$ - строка символов, закреплен-
ных за этой клавишей.
MODE_(n),a - эта команда используется для выбора размеров выво-
димых на экран символов. Если после команды записаны два числа, то
первое определяет номер окна.
MON - по этой команде вызывается фронт-панель. При этом пользо-
ватель может не только узнать содержимое ячеек памяти и регистров
процессора, но и изменить их. Возврат в МЕГАБЕЙСИК осуществляется
нажатием SPACE.
MTASK_n - по этой команде программа может выполняться одновре-
менно с двух точек.
PAN_n,m - эта команда позволяет перемещать попиксельно вправо и
влево содержимое текущего окна экрана без изменения значений атрибу-
тов .
PCLEAR - по этой команде очищается стек PROCEDURE/REPEAT-UNTIL.
PLAY_n/1, s, d, f - эта команда используется для исполнения звуко-
вых эффектов.
РОР_п - по этой команде в стек PROCEDURE/REPEAT-UNTIL записыва-
ется число п.
PRINTER_n - эта команда используется для вывода на принтер или
другие периферийные устройства.
PUSH_n,m - эта команда используется для записи значения в стек
PROCEDURE/REPEAT-UNTIL.
PUT_l,a,y,x,d,w - эта команда используется для восстановления
изображения, хранящегося в памяти, на экран. Команда противоположна
команде GET.
REPEAT - оператор, определяющий начало цикла REPEAT-UNTIL. Если
стек PROCEDURE/REPEAT-UNTIL заполнен, то на экране появляется сооб-
щение "PROC stack overflow".
RESTART_n - эта команда эквивалентна команде ON ERROR GO ТО,
которая существует в других версиях БЕЙСИКа.
RESTART__OFF - использование этой команды приводит к отмене ре-
жима программной обработки ошибок.
SCROLL_n,m - по этой команде осуществляется перемещение вверх
или вниз значений текущего окна.
SOFF - команда выключения звукогенератора.
SON - команда включения звукогенератора.
8PEED_n - команда управления скоростью выполнения программы при
включенном режиме трассировки TRON.
8PRINT_x,у, a, b,с$ - это команда вывода на принтер строки симво-
лов, размер которых задается пользователем.
SPROFF_n,m - выключение спрайтов.
SPRON_n,m - включение спрайтов.
SPUT_x,y,а,Ь,c,w,d - эта команда подобна команде PUT, но в дан-
ном случае размеры изображения могут быть увеличены в двух направле-
ниях заданием коэффициентов с, Ь.
SREP_n - это команда повторения звуков, информация о которых
записана в звуковом буфере.
STIPPLE__n - эта команда позволяет создавать полутоновые эффекты
для символов, записанных в режиме MODE 4.
SWAP_n,m - это команда для манипуляций с файлом атрибутов. При
этом значение байта файла атрибутов меняется с п на т.
TRON - команда включения режима трассировки. При трассировке
номер выполняемой программной строки выводится в нижнем левом углу
экрана.
TROFF - команда выключения режима трассировки.
UNTIL_a - эта команда определяет конец цикла REPEAT-UNTIL.
VDU а,(а...) - эта команда эквивалентна PRINT CHR$.
WINDOW_y,x,d,w - по этой команде задается размер и расположение
на экране текущего окна.
ПРИЛОЖЕНИЕ 2.
СООБЩЕНИЯ ОБ ОШИБКАХ
FX NOT IMPLEMENTED - ошибка, связанная с командой FX....- Вы
попытались использовать несуществующее назначение.
ILLEGAL WINDOW - ошибка команд FX • или CURRENT. Вы попытались
использовать более чем 10 окон.
LINE NOT FOUND - ошибка команды EDIT. Вы попытались редактиро-
вать строку, которой нет в программе.
MISSING PARAMETERS - некорректная запись чисел или параметров в
командах.
WINDOW ТОО LARGE - эта запись может появиться при использовании
команды WINDOW, если размеры окна слишком велики.
WINDOW ТОО SMALL - эта запись появляется, если один из разме-
ров окна равен нулю.
X ТОО LARGE или Y ТОО LARGE - выход за пределы экрана.
ПРИЛОЖЕНИЕ 3.
ПРИМЕР ПРОГРАММИРОВАНИЯ НА МЕТА-БЕЙСИКЕ
В качестве примера мы приводим распечатку программы, предназна-
ченной для исследования оператора PLAY. Программа взята из журнала
YOUR SPECTRUM (N15, ИЮНЬ, 1985 г.).
Прелесть программы в том, что во-первых Вы наглядно увидите,
насколько же текст ее более понятен и компактен по сравнению с обыч-
ным БЕЙСИКОМ, а во-вторых, сможете неплохо разобраться с командой
PLAY, прощупать ее возможности.
После этой команды следуют несколько параметров и влияние их на
работу команды на первый взгляд совсем неочевидно.
Наберите эту программу и запустите. Вертикальным перемещением
курсора Вы сможете выбрать тот параметр, который хотите поменять, а
горизонтальным перемещением - изменить этот параметр. После этого
нажмите "ПРОБЕЛ" и слушайте, что у Вас получилось.
1000 REM PLAY EXPLORER 1060 SETDISPLAY
1010 REM BY L A PRIVETT 1070 SETVALUE
1020 REM MARCH 1985 1080 BOXIN
1030 : 1090 SCANKEYS
1040 PCLEAR 1100 STOP
1050 SETSCREEN
Вот, собственно, и вся программа - она занимает 7 строк, начи-
ная со строки 1040 - по строку 1100. Все остальное - вспомогатель-
ные процедуры.
2000 @SETSCREEN
2010 WINDOW_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 ENDPROC SETSCREEN
Процедура SETDISPLAY.
3000 @SETDISPLAY
3010 LET A$="А В С D E"
3020 LET B$="= = = = ="
3030 INK 5
3040 D0WN_5,8,A$
3050 D0WN_5,12,B$
3100 PRINT AT 4,40;"SELECT AND"
3110 PRINT AT 5,40;" CHANGE "
3120 INK 6
3130 PLOT 0,36
3140 DRAW 255,0
3150 UNK 6
3060 FONT_2
3070 SPRINT_10,150,2,2,"PLAY"
3080 PRINT AT 2,40;"USE CURSOR"
3090 PRINT AT 3,40;" KEYS TO "
3160 PRINT AT 8>40;"SPACE FOR"
3170 PRINT AT 9,40;" PLAY
3180 BEEP .1,0
3200 ENDPROC_SETDISPLAY
Процедура SETVALUE.
4000 @SETVALUE
4010 DIM M(5)
4020 DIM V(5)
4030 DIM P(5)
4040 FOR F=1 TO 5
4050 LET P(F)=3+F*2
4060 LET V(F)=0
4070 NEXT F
4080 RESTORE 4180
4090 FOR F=1 TO 5
4100 READ Q
4110 LET M(F)=Q
4120 PRINT AT 3 + F*2,16;V(F)
4130 PRINT AT 3+F*2,24;M(F)
4140 NEXT F
4150 LET PRE=1
4160 LET POS=l
4180 DATA 1,255,255,255,255
42 00 ENDPROC_SETVALUE
Процедура BOXIN
5000 @BOXIN
5010 PLOT 20,60: DRAW 111,0
5020 DRAW 0,79: DRAW -111,0
5030 DRAW 0,-79
5040 PLOT 95,0: DRAW 0,36