Языки программирования: Мега-Бейсик, Бета-Бейсик, Бета-Бейсик, Лазер-Бейсик, ZX-Форт, Паскаль HP4TM 1993 г.

MEGA-BASIC - машинные коды и МЕГА-БЕЙСИК команды DOKE и CALL.


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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Software - новелла и проект новой игры по типу UFO 2.
Have a Fun! - ритча о том, как некий настойчивый гомосек искал путь к спасению, и что из этого вышло.
Вокруг света - IA-64: неофициальная хроника переворота.
Фенечки - говорят дети.
Железо - доработка Scorpion до подключении дополнительных дисководов C и D.

В этот день...   16 апреля