Диалекты бейсика для ZX Spectrum 1992 г.

Megabasic - Прочие операторы и команды. Приложения: Алфавитный список операторов MegaBasic; Распределение памяти при работе с MegaBasic; Использование MegaBasic с системой TR-DOS.


ПРОЧИЕ ОПЕРАТОРЫ И КОМАНДЫ_

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.




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


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

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



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

Похожие статьи:
История одного спектрумиста - Я, спектрум и снова спектрум.
Читатель-читателю - Драйвер ввода в режимах последовательного и прямого доступа из файлов системы TR-DOS.
Part three - Вы мне должны деньги! - Извините, но это уже по моему усмотрению...
Напоследок - Авторы и приветы.
Rest in Paint - Beard^AMD приобрел на днях автомобиль.

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