ПРОЧИЕ ОПЕРАТОРЫ И КОМАНДЫ_
IRON, SPEED, TROFF, DEFG, KEY, PRINTER, BACKUP, EXAMINE
В MegaBasic существует группа операторов
трассировки, служащая для отладки беисик-программ. Эти операторы можно
использовать как в тексте программы, так и в непосредственном режиме.
«Главным» ил них является оператор
TRON
Он включает режим замедленного выполнения
программы (трассировки). При этом в левом нижнем углу экрана
высвечивается номер выполняемой в данный момент строки (номер оператора
в строке не индицируется). Кстати, когда трассировка происходит при
работающем операторе MTASK, номера строк, относящиеся к программе и
подпрограмме, выделяются разными шрифтами.
Благодаря наличию оператора
SPEED_v
имеется возможность задавать скорость
трассировки. При v=0 — скорость максимальная, при v=254 —
минимальная. Если v=255,
ПРОЧИЕ ОПЕРАТОРЫ И КОМАНДЫ
программа выполняется в пошаговом режиме: по одному оператору при каждом нажатии любой клавиши.
Отменяется режим трассировки оператором
TROFF
Оператор
DEFG_a$,b1.....Ь8
облегчает построение символов, определяемых
пользователем (UDG). Строковая переменная а$ задает клавишу, при
нажатии которой в режиме курсора [G] будет вызываться определяемый
символ UDG, а 8 последующих чисел являются байтами, из которых
складывается соответствующий символ. Удобно задавать числа Ы...Ь8 не в
десятичной, а в двоичной форме с использованием оператора BIN
Spectrum-Бейсика — это придает наглядность процессу формирования
символа.
Из оставшихся нерассмотренными операторов особенно интересен
KEY_k,a$
Он позволяет закрепить за клавишами 0...9 произвольные последовательности символов.
Вызов запрограммированной последовательности
осуществляется в момент редактирования строки комбинацией клавиш
CS/SS+SS/k, где к задает номер цифровой клавиши (0...9).
Сама последовательность — это обычная
строка символов или символьная переменная длиною до 255 знаков. Она
записывается на место параметра а$.
Практически длина последовательности может и
превышать 255 знаков, но тогда клавиши нужно задействовать, скажем,
через одну. Иначе «хвост» предыдущей серии наедет на
область памяти, занятую последовательностью, привязанной к последующей
клавише. Для клавиши 9 это недопустимо, так как она последняя. Однако
длинные последовательности символов неудобны, поскольку они выводятся
достаточно медленно. Лучше использовать несколько более коротких серий.
Если одними и теми же последовательностями
символов приходится пользоваться постоянно, имеет смысл сохранить их на
ленте в виде кодового файла и подгружать его в MegaBasic по мере
необходимости. Область памяти, содержащая информацию о
последовательностях, начинается с адреса 59956. Участки памяти,
относящиеся к каждой клавише, занимают по 256 байт и должны
заканчиваться нулевым байтом. Таким образом, если запрограммирована
только одна клавиша 0, то для сохранения «привязанной» к
ней последовательности нужно выполнить оьератор
SAVE "KEYS"CODE 59956,256
Если запрограммированы все десять клавиш, длина файла возрастет до 2560 байт.
Приведем один красивый прием. Если вызываемая
клавишей последовательность символов представляет собой строку из
одного или нескольких операторов, то пользуясь встроенным
монитором-отладчиком, можно поставить в конце нее (в области памяти,
которая начинается с адреса 59956) число 13 (0D в шестнадцате-ричном
представлении), а вслед за ним ноль. Число 13 является кодом клавиши
Enter (возврат каретки), поэтому после вызова последовательности
нажатием CS/SS+SS/k строка операторов появится на экране и тут же
автоматически выполнится.
Оператор
PRINTERJ
обеспечивает простой способ переключения потока
выводимой информации с экрана на принтер. Чтобы в полной мере оценить
действие этого оператора, нужно, как минимум, подключить к компьютеру
принтер и, кроме того, занести в ячейки 59934/35 адрес драйвера
принтера. Если параметр оператора PRINTERJ равен нулю, то вывод будет
осуществляться на экран, в других случаях — на принтер.
Если после работы с принтером забыть выполнить
PRINTER_0, то может возникнуть недоразумение — никакой информации
на экране больше не будет появляться. Для исправления положения нужно
«вслепую» ввести оператор PRINTER_0, и все наладится.
Два последних описываемых оператора MegaBasic относятся к работе с магнитофоном. Один из них
BACKUP
представляет собой весьма несовершенный
ленточный копировщик. С его помощью можно копировать лишь файлы четырех
стандартных типов (BASIC, CODE, CHARACTER ARRAY и NUMBER ARRAY), причем
за длиной файла, чтобы он не на-ложился на MegaBasic, нужно следить
самим. Кроме того, не отслеживаются ошибки при загрузке: в любом случае
на ленту сбрасывается файл той длины, которая указана в заголовке. А
хуже всего то, что любая бейсик-программа, находящаяся в памяти, после
выполнения оператора BACKUP ликвидируется, очищая место для копируемых
файлов. Сам MegaBasic после этого обычно становится неработоспособным.
Так что если необходимо что-нибудь скопировать, не поленитесь загрузить
нормальный копировщик — затраты времени окупятся.
И, наконец, оператор
EXAMINE
поможет прочесть заголовки файлов с
магнитофона: название, длину, номер стартовой строки или адрес загрузки
кодового блока. В отличие от BACKUP, этот оператор вполне безобиден.
Сказать, что мы дали исчерпывающую информацию о
MegaBasic, будет самонадеянно. Это одна из тех «вещей в
себе», в которых всегда можно обнаружить что-нибудь новенькое.
Поэтому дерзайте — и будете вознаграждены.
1. Алфавитный список операторов MegaBasic
Таблица 16.
Оператор
|
Действие
|
Стр+
|
@<имя>_а,...,г$
|
Отмечает начало (заголовок) процедуры
|
222
|
AUTO_n,k
|
Запускает автоматическую нумерацию строк программы с номера п и с шагом к
|
204
|
BACKUP
|
Включает режим ленточного копировщика
|
230
|
BRANCH_n
|
Инициирует ветвление программы с выполнением подпрограммы, начинающейся со строки п
|
223
|
BROFF
|
Отключает действие клавиши Break
|
226
|
BRON
|
Возобновляет действие клавиши Break
|
226
|
CALL_z
|
Запускает программу в машинных кодах с адреса z
|
226
|
CMANGE_a1 ,a2
|
Заменяет атрибуты экрана (см. в тексте)
|
212
|
CLW_m,w CLW_m
|
Очищает окно w или текущее окно способом m
|
210
|
CURRENT_w
|
Устанавливает текущим окно w
|
209
|
DEFG_a$,b1 ...b8
|
Формирует символ UDG из байтов Ы...Ь8 и связывает его с клавишей а$
|
229
|
DELETE_n1 ,n2
|
Удаляет блок программы со строки п1 до строки п2
|
204
|
DOKE_z,b
|
Заносит двухбайтовое число b в ячейки с адресами z и z+1
|
226
|
DOWN_n,c,a$
|
Выводит строковую переменную а$, начиная со строки n (0...23) и столбца с (0...63)
|
208
|
EDIT_n
|
Вызывает на редактирование строку п
|
205
|
ENDPROC_<mma>
|
Отмечает конец блока процедуры
|
222
|
EXAMINE
|
Считывает заголовки файлов с ленты
|
230
|
FADE_a
|
Циклически декрементирует значения атрибутов экрана до значения а
|
211
|
FONTJ
|
Включает шрифт номер f (0...2)
|
206
|
FX_i,w
|
Переключает вывод потока i (0...6) в окно w
|
209
|
|
|
ар.
|
GET_ m#z#n#c#htg
|
Переносит в режиме m в буфер по адресу z
фрагмент экрана с координатами: п — начальная строка, с —
начальный столбец, h — высота, g — ширина
|
212
|
INVERT
|
Инвертирует атрибуты всего экрана
|
211
|
KEY_k,a$
|
Задает строку а$ для вывода клавишами CS/SS+SS/k,
где к — цифровая клавиша (0...9)
|
229
|
MODE_w,m MODE_m
|
Устанавливает размер m (1...4) символов для вывода в окно w
|
207
|
MON
|
Вызывает встроенный монитор-отладчик
|
226
|
MTASK_n
|
Инициирует параллельное выполнение подпрограммы, начинающейся со строки п
|
223
|
PAN_mflp
|
Выполняет горизонтальный скроллинг окна на р (—255...255) пикселей в режиме m (0, 1)
|
219
|
PANW_p
|
Выполняет горизонтальный циклический скроллинг окна на р (—255...255) пикселей
|
219
|
PCLEAR
|
Очищает стек процедур
|
224
|
PLAY__fmfs,f,r,q
|
Воспроизводит музыкальную фразу,
параметры: m — режим, s — темп, f — начальная
частота, г — число шагов, q — размер шага
|
220
|
POP
|
Выталкивает из стека процедур последний адрес возврата (номер строки и оператора)
|
225
|
PRINTERJ
|
Переключает вывод информации на принтер/экран, i — номер потока
|
230
|
PUShLs, n
|
Заносит в стек процедур адрес возврата (п — номер строки, s — номер оператора в ней)
|
225
|
РиТ_т,г,п,с,Ь,д
|
Возвращает на экран кадр, ранее
помещенный в буфер оператором GET: m — режим, z — адрес
буфера, п — начальная строка, с — начальный столбец, h
— высота кадра, g — ширина кадра
|
212
|
REPEAT
|
См. UNTIL
|
224
|
RESTART_n RESTART_OFF
|
Инициирует/прекращает переход по ошибке на строку п
|
225
|
SCROLL W_p
|
Выполняет вертикальный скроллинг окна на р пикселей
|
219
|
SCROLL_m,p
|
Выполняет вертикальный циклический скроллинг окна на р пикселей в режиме m
|
219
|
|
A^fefftM*
|
с*1*
|
SOFF
|
Прекращает работу звукового генератора
|
221
|
SON
|
Запускает звуковой генератор в соответствии с данными, заданными оператором SOUND
|
221
|
SOUND_a,m,q,r,n
|
Помещает данные в буфер звукового
генератора: а — способ заполнения буфера, m — режим, q
— шаг, г — число шагов, п — число циклов
|
220
|
SPEED_s
|
Задает скорость трассировки s (0...255)
|
228
|
SPRINT_xlylulvlgfh
|
Выводит текст увеличенными символами,
масштаб и местоположение которых определены параметрами: х —
горизонтальная координата (0...255), у — вертикальная координата
(0...191), и — увеличение по горизонтали, v — увеличение по
вертикали, g — ширина, h — высота
|
208
|
SPROFF
|
Прекращает вывод спрайтов
|
217
|
SPRON_s,m
|
Инициирует вывод спрайта номер s в режиме m (0...255)
|
216
|
SPUT_z,x,y,u,vfg,h
|
Выводит на экран изображение кадра с
увеличением: z — адрес буфера, х — горизонтальная
координата, у — вертикальная координата, и — увеличение по
горизонтали, v — увеличение по вертикали, g — ширина, h
— высота
|
214
|
SREP_m
|
Устанавливает однократное циклическое воспроизведение звуков оператором SON
|
221
|
STIPPLE_d
|
Осуществляет штриховку символов в режиме MODE_4 с плотностью d (0...15)
|
207
|
SWAP_a2,a1
|
Заменяет на экране атрибуты а1 на атрибуты а2
|
211
|
TROFF
|
Отменяет режим трассировки
|
229
|
TRON
|
Включает режим трассировки
|
228
|
UNTIL_r
|
Повторяет группу операторов, заключенных между REPEAT и UNTIL, до тех пор, пока значение г не станет нулевым
|
224
|
VDU__b1bn
|
Аналог конструкции PRINT CHR$ Ы,,... bn, где bn — коды символов
|
207 209
|
WINDOW_n,c,h,g
|
Устанавливает положение и размеры
текущего окна: п — начальная строка (0...23), с — начальный
столбец (0...63), h (1...24) — высота, g — ширина (1...64)
|
209
|
MEGABASIC._______..__......_.
2. Распределение памяти при работе с MegaBasic_
P_RAMT (23732)- 65535
Символы, определяемые пользователем
UDG (23675)- 65368
Интерпретатор MegaBasic
- 62515
Область программируемых клавиш
— 59956
Интерпретатор MegaBasic
45000
Свободная область
RAMTOP (23730) -EJJNE (23641). VARS (23627) -PROG (23635) -
Переменные Бейсика
Бейсик-программа
3. Использование MegaBasic с системой TR-POS
Поскольку MegaBasic работает во 2-м режиме
прерываний процессора (IM2), то на любые попытки обратиться к дисковой
операционной системе «в лоб» он реагирует весьма
болезненно. Чтобы организовать корректную работу с TR-DOS, необходимо
на время обращения к диску переключаться в режим прерываний IM1. Для
этого нужно добавить в MegaBasic две подпрограммы в кодах, вписав в
бейсик-загрузчик несколько строк:
10 CLEAR 44979: REM Опускаем RAMTOP на Ю байт
40 RANDOMIZE USR 15619: REM : LOAD "MegaCode"CODE
41 FOR n=44980 TO 44989: READ i: POKE n,i: NEXT n: REM Размещаем подпрограммы
42 DATA 243,237,86,251,201,243,237,94,251,201
90 RANDOMIZE USR 56100: REM Запуск MegaBasic
Теперь обращаться к диску из MegaBasic можно следующим образом:
100 RANDOMIZE USR 44980
110 RANDOMIZE USR 15619: REM: LOAD "filename"
120 RANDOMIZE USR 44985
В строке 100 происходит переход в режим IM1, затем могут быть любые операции с диском, а 120-я строка восстанавливает IM2.
Отметим, что этот способ не обеспечивает корректного выхода в TR-DOS с помощью инструкции RANDOMIZE USR 15616.