ZX-Ревю 1991 №4-5 1990 г.

Мега-Бейсик - продолжение. Управление выполнением программы. Процедуры.


(Продолжение) Управление выполнением программы Процедуры.

Мега-Бейсик обеспечивает работу с процедурами, вызов которых осуществляется по их имени, точно так же, как и после команды, после имени процедуры может быть записана серия арифметических выражений или чисел. Эти выражения определяют необходимые переменные для работы в процедуре.

Недостатком процедур в Мега-Бейсике является то, что они не могут работать с локальными переменными: их переменные являются общими для всей программы.

Используя процедуры, можно разделить всю программу на ряд частных задач. Каждая процедура отлаживается отдельно, а затем все они объединяются в программу. Начало процедуры задается символом '@', следом за которым записывается имя процедуры. После имени процедуры записываются необходимые параметры. Окончание процедуры обозначается оператором ENDPROC_. Как только будет достигнут этот оператор, управление выполнением программы будет передано оператору, записанному за оператором вызова процедуры.

После оператора ENDFROC_ можно записать имя процедуры: 9000 @DISPLAY_A,A$ 9010 PAPER A: INK 9 9020 MODE_4: STIPPLE_5 9030 PRINT A$ 9040 ENDPROC_DISPLAY

Это пример процедуры. В строке 9010 определяется имя процедуры DISPLAY и, как видно, для ее работы необходимо определить две переменные - A и A$. В строке 9030 определяется размер и оттенок символов, выводимых на экран. Для вызова процедуры необходимо записать, например:

DISPLAY_2,"MEGABASIC"

Процедуры могут вызываться и из процедур.

REPEAT-UNTIL

Мега-Бейсик обеспечивает работу с циклами типа REPEAT-UNTIL. Оператор REPEAT определяет начало цикла. После оператора UNTIL должна быть записана односимвольная переменная. Если значение этой переменной равно нулю, то цикл прерывается и выполнение программы переходит к оператору, записанному после последнего оператора REPEAT, если же эта переменная отлична от 0, то выполняется следующий оператор программы. Допускается вложение до 10 циклов типа REPEAT-UNTIL.

Процедурный стек

Для хранения номеров строк операторов, к которым выполняется возврат после использования процедур и циклов REPEAT-UNTIL, применяется специальный стек. Когда вызывается процедура, номер строки, следующий за оператором вызова, записывается в стек, что позволяет системе знать адрес возврата после окончания процедуры.

Аналогично и для циклов типа REPEAT-UNTIL. Здесь также в стек записываются номера строки и оператора, к которым осуществляется возврат после оператора UNTIL.

После выполнения оператора ENDPROC_ и перехода к строке, номер которой хранился в стеке, этот номер удаляется со стека. Любая попытка записать в стек больше 10 номеров заканчивается сообщением "PROC STACK OVERFLOW" (Процедурный стек переполнен).

Команды POP и PUSH. Оператор POP_ служит для "выталкивания" значений со стека, оператор PUSH_ для записи значения в стек. За оператором PUSH_ следуют 2 числа: номер оператора в строке и номер строки. Для очистки стека перед началом выполнения программ необходимо записать команду PCLEAR.

Команда BRANCH_. По этой команде после выполнения каждой программной строки будет вызываться подпрограмма, записанная в строках основной программы. Начальная строка этой подпрограммы указывается после команды BRANCH, а конец подпрограммы определяется оператором ENDPROC_.

Оператор MTASK_. Это оператор многозадачного режима. Он позволяет выполнять программу одновременно из двух разных мест. Считается, что программа как бы разделена на две части: первая начинается после строки, где записан оператор MTASK_, а вторая - со строки, номер которой записан после оператора MTASK_. Мега-Бейсик выполняет поочередно строки из каждой части программы.

Отладка и редактирование программ

Операторы BRANCH_, TRON_, TROFF_ и SPEED.

Оператор BRANCH_ оказывается весьма полезным при отладке программ. Если, к примеру, Вас интересует какая-то переменная, то Вы можете с помощью этой команды вызывать подпрограмму печати значения этой переменной после каждой программной строки. Другой способ проверить выполнение программы - выводить на экран номер выполняемой строки, что возможно по команде TRON_. При этом номер выполняемой строки программы будет выведен в нижний угол экрана, команда TROFF_ отменяет такой режим. Связана с этими двумя командами также команда SPEED_, после которой записано число, определяющее скорость выполнения программных строк. Максимально возможное число - 255. При этом выполнение программы будет приостановлено до тех пор, пока пользователь не нажмет любую клавишу.

Команды AUTO и DELETE.

При вводе больших программ весьма полезным может быть автоматический ввод номера следующей строки после нажатия клавиши ENTER. Такой режим работы возможен при применении команды AUTO_, после которой следует 2 числа, разделенных запятой. Первое число задает начальный номер строки, с которого начнется автоматическая нумерация, а второе - шаг нумерации.

Остановить режим автонумерации можно так: EXTEND SYMB.SHIFT 'L'. Часто бывает необходимо удалить целый блок программных строк. Эту задачу можно решить, используя команду DELETE_. После этой команды записывают два числа, являющиеся соответственно начальным и конечным номерами строк удаляемого блока.

Команды BRON_ и BROFF_.

Желающие защитить свои программы от любопытных глаз, найдут полезным возможность отключать клавишу BREAK. это может быть сделано при применении команды BROFF_. Возвращение клавише ее возможностей осуществляется по команде BRON_.

Команда RESTART. Многие версии языка Бейсик имеют команду ON ERROR GO TO, позволяющую не прерывать выполнение программы в случае обнаружения ошибки, а осуществлять обход строки с ошибкой. Аналогичная команда имеется и в Мега-Бейсике. Это команда RESTART_, после которой записывается номер строки, к которой осуществляется переход в случае обнаружения ошибки. По команде RESTART_OFF такой режим отменяется. После обработки ошибки с помощью команды RESTART, некоторая полезная информация сохраняется в ячейках памяти: 59873/4 - номер строки, в которой обнаружена ошибка; 59875 - номер оператора внутри строки с ошибкой; 59862 - код обнаруженной ошибки.

Звук.

Мега-Бейсик открывает для Вас новые возможности создания звуков на Вашем ZX SPECTRUM. Для этого необходимо использовать команду PLAY_ и генератор звука ISG

PLAY_n,l,s,d,f

Здесь:

n=0 - ноты;

n=1 - белый шум;

l - длительность звучания на каждом шаге; s - значение начальной звуковой частоты; d - число шагов;

f - изменение частоты после каждого шага.

ISG

Если команда PLAY_ только улучшает возможности команды BEEP, то использование звукового генератора ISG позволит получить новые эффекты. Дело в том, что при выполнении программы в ZX SPECTRUM происходят прерывания 50 раз в секунду. Во время обслуживания прерывания специальная программа в машинных кодах производит сканирование клавиатуры. В это же время и работает ISG. В Мега-Бейсике имеется ряд команд, которые могут управлять этим генератором.

SOUND_n,a,b,c,d - команда для работы с звуковым буфером. Здесь:

n=0 очистка звукового буфера перед очередной загрузкой;

n=1 добавление новой информации в звуковой буфер;

a=0 воспроизведение нот;

а=1 воспроизведение шума;

b - шаг звуковой частоты;

c - число шагов в последовательности нот;

d - число повторений последовательности нот.

Другие команды: SOFF - отключение ISG; SON - включение ISG;

SREP_n - количество повторений звуковой последовательности; если n=0, то данные, записанные в звуковом буфере будут использоваться только один раз, в противном случае -многократно.

Когда выполняется команда PLAY, ISG автоматически отключается. Для включения ISG применяйте команду SON. Более сложные звуковые эффекты можно получить, если замедлить выполнение программы. Этот короткий фрагмент программы демонстрирует работу ISG:

10 SOUND_ 0,0,1,20,255 20 SREP_1 30 SON

40 MODE_4: STIPPLE_6: FONT_2 50 VDU_(128+RND*15) 60 PAPER RND*7: INK 9 70 GO TO 50

Машинные коды и МЕГА-БЕЙСИК

Команды DOKE и CALL.

Мега-Бейсик позволяет включать в текст основной программы и фрагменты в машинных кодах. Мега-Бейсик занимает в ОЗУ участок памяти, начиная с адреса 45000.

Поэтому все программы в машинных кодах должны быть размещены в ОЗУ до этого адреса. Для того, чтобы записать в память двухбайтное число, можно воспользоваться командой DOKE, которая поддерживается в Мега-Бейсике. После этой команды должны быть записаны два числа: первое определяет адрес, куда записываются данные, а второе -записываемое число.

Для вызова программ в машинных кодах в Мега-Бейсике используется команда CALL_. После этой команды записывается число, указывающее адрес вызываемой подпрограммы, а затем произвольные числа, которые передаются в машинный стек и затем используются как параметры в подпрограмме.

FRONT-PANEL.

Фронт-панель позволяет пользователю вносить изменения в ячейки памяти и регистры микропроцессора путем записи шестнадцатеричных чисел и является по сути встроенным монитором Мега-Бейсика.

Фронт-панель активизируется при выполнении команды MON, либо после 'SPACE F' при выполнении программы.

Фронт-панель использует окно 3, в котором после активизации фронт-панели Вы увидите столбцы HEX-чисел. Слева - регистры процессора и их значения, а справа -распечатка участка ОЗУ. Звездочка указывает на текущий регистр, а инверсная полоса -текущую ячейку памяти. Все изменения производятся с помощью однобуквенных команд, после которых могут быть записаны до трех шестнадцатеричных чисел:

SPACE - возврат в Бейсик;

R nn - запись в текущий регистр 16-битового HEX-числа;

L nn nn nn - перемещение участка памяти. Здесь:

1-е число определяет начальный адрес перемещаемого блока;

2-е число задает новый начальный адрес;

3-е число определяет длину перемещаемого блока в байтах;

M nn - смещение указателя ячейки памяти на адрес nn;

S - установка точки выхода в программе для текущей ячейки;

K - продолжение выполнения программы после S;

U - восстановление точки выхода;

I nn nn nn - заполнение блока ОЗУ. Здесь:

1-е число - начальный адрес блока;

2-е число - длина блока;

3-е число - байт, которым заполняется блок;

J nn - вызов подпрограммы в машинных кодах, расположенной по адресу nn;

ENTER - смещение указателя ячейки памяти на один байт вперед;

"-" - смещение указателя ячейки памяти на один байт назад.

Новые команды.

Ниже приводится перечень новых команд Мега-Бейсика. Здесь литера после команды определяет число или числовое выражение, а литера со знаком $ - символьное выражение.

AUTO_a, b - автоматическая нумерация вводимых строк. Для выключения такого режима необходимо нажать "=" и ENTER.

BACKUP - эта команда используется для копирования файлов. После ввода этой команды на экране появляется сообщение "START TAPE"

Как только на входе EAR появится сигнал, оно сменится новым сообщением "OK searching" и будет идти загрузка очередного файла с кассеты. После окончания загрузки на экране появляется сообщение:

"Start tape, then press any key".

Когда Вы будете готовы записать этот файл на кассету, нажмите любую клавишу и файл перепишется. После этого система запросит Вас о еще одной копии. Если Вам она нужна, то нажмите клавишу "Y", если же нет, то нажмите "N". После этой команды необходимо выполнить команду NEW.

BRANCH_n - по этой команде будет вызываться подпрограмма после выполнения каждой программной строки.

BROFF - выключение клавиши BREAK.

BRON - включение клавиши BREAK после команды BROFF.

CALL_a(n,n...) - вызов программы в машинных кодах, по адресу 'a'.

После адреса в скобках могут быть записаны числа, которые записываются на машинный стек для использования в подпрограмме.

CHANGE_a,b - это команда для изменения атрибутного файла. Здесь 'a'- маска, a 'b'-данные.

CLW_(n),h - эта команда используется для очистки окон. Если записаны два числа, то первое определяет, какое из окон очищается. Если же записано одно число, то очищается текущее окно.

(Окончание следует)




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
DUCK NEWS - О новейших играх, популярных в Москве : SEX INTIMY, ALLTIMEDOOM.
Мнение - Платформа Sрeccy в мирe с точки зрения Итальянца (Stefаnо) eng.
Лаборатория - О доработках Speccy: Аппаратная пауза, квази-турбо, Кварц 14300.
Презентация - редактор шрифтов Rainbow Font Editor 1.0: увлекательная история создания.
Read me - издание газеты - дело неблагодарное, никто даже спасибо не скажет ;-)

В этот день...   29 марта