■ MEGA-BASIC
1. Введение
MEGA-BASIC (MB) размещается на ленте вместе с другой про-
граммой SPRITE-DESIGER (SD). В последующем SD позволит вам
создавать свои собственные спрайты для дальнейшего использования.
После загрузки MB с ленты на экране появится запрос записи его на
диск. При ответе на запрос символом "М" выполнится запись, осталь-
ные ответы - отказ от записи.
ZX-SPECTRUM имеет различные устройства интерфейса 1 с
двумя различными ПЗУ. Если вы собираетесь использовать MB с
дисководами, то вы должны включить ПЗУ интерфейса 1, например:
CLOSE #0: PRINT PEEK 23729.
Если на экране появился 0, то это значит, что старое ПЗУ не
выключилось, но при этом нет необходимости прерывать загрузку.
При появлении на экране мигающей цифры 80 включается новое
ПЗУ. Для полного взаимодействия с MB после загрузки программы
необходимо набрать:
РОКЕ 47006,183
После этого MB будет легко загружать все остальные програм-
мы.
1.1. Клавиатура
После загрузки MB на экране появится фирменная заставка, а
курсор будет находиться в левом нижнем углу экрана. В MB для ввода
данных используется весь экран (он не делится на две части, как в
стандартном BASIC-E).
1.1.1. Изменение функции клавиатуры
В MB функции клавиатуры изменены - все команды надо наби-
рать полубуквенно. Такая замена системы дает многие преимущест-
ва-, а для облегчения наббра команд существуют следующие
сокращения:
A.TTR ER.ASE ME.RGE RES.TORN
ВЕЕР EXP M.OVE RET.URN
Пример сокращения:
C.;DR.
Сокращения отличные от приведенных выше не допускаются.
Пробелы обязательны.
Нижняя строка экрана показывает текущий вид курсора. Смена
вида курсора выполняется обычным способом.
Возможности редактирования у MB гораздо больше, чем у обыч-
ного BASIC-A, и как следствие этого - изменение назначения некото-
рых клавиш:
Экран разделен на четыре окна, каждое из которых использует-
ся в специальных целях:
Окно 0 - для ввода информации пользователем и для сообщений
об ошибках;
Окно 1 - для автоматического листинга, управляемого операто-
ром;
Окно 3 - используется передней панелью (см. далее).
После загрузки кажется,что на экране одно окно, но это четыре
окна, атрибуты которых совпадают.
Для копирования текстов используется курсор копера, который
может двигаться по текущему окну с помощью нажатия клавиш,
описанных ранее. Курсор копера используется только в окнах 0,2,3.
Вызов на редактирование выполняется двумя способами: кла-
вишей CAPS SHIFT, ка^ описано ранее, и командой EDIT. После
EDIT следует номер редактируемой строки. Если данный номер от-
сутствует в программе, то вызывается строка с ближайшим номером,
который больше указанного. Если же нет и таковой, то выводиться
сообщение об ошибке:
LINE NOT FOUND
1.1.3. Клавиши, определяемые пользователем
В MB предоставлена возможность запрограммировать верхний
ряд клавиш в качестве функциональных для извлечения строк сим-
волов длиной до 255 символов. Для программирования этих клавиш
используется команда KEY__, затем вводится числовое и строковое
выражения, разделенные запятой. Числовое выражение обозначает,
какая клавиша программируется, строковое (длиной до 255 симво-
лов) - определяет новую функцию. Прибавление CHR$ 13 в конце
строки позволит осуществить автоввод. Существуют две встроенные
функциональные клавиши: RUN и LOAD, например:
KEY_4,"PRINT " +CHAR$
VERIFY="RUN"+CHR$ 13
1.1.4. Клавиши контроля
Во время выполнения программы пробел используется, как ре-
гистровая клавиша. В случае необходимости вставки пробела необхо-
димо одновременно нажать SIMBOL SHIFT и пробел. Одновременное
нажатие пробела и любой другой клавиши воспринимается как кла-
виша контроля: CONTROL F - вызывает переднюю панель;
CONTROL Е - вызывает выполнение программы на экране ESCAPE;
CONTROL Р - выход из системы MB (переход в обычный BASIC).
1.2. Вывод на экран
1.2.1. Окна
MB дает большие возможности по использованию символов раз-
личной формы и размеров. Например, есть возможность организо-
вать вывод в определенную часть экрана, которая может иметь любые
размеры. Эти части называются окнами. Всего их десять. Они нуме-
руются от 0 до 9 и все они могут быть определены в программе
(использование окон 0-3 описано ранее). При выполнении програм-
мы оператор PRINT автоматически использует окно 2. Однако воз-
можно переключение окон командой CORRENT_N. Если N9, то
выдается ошибка MEDICAL WINDOW.
Используя команду CURRENT можно одновременно управлять
тремя окнами, переключая их.
Команда WINDOW X,Y,D,W определяет размер и позицию окна
на экране, где:
X - позиция левой колонки окна;
Y - позиция верхней строки окна;
D - глубина окна;
W - ширина окна.
При этом максимальные размеры окна 64*24 символа.
Назначение функций ATTR... - использует новое начало коор-
динат - левый верхний угол текущего окна.
Если Y+D 24 или X+W 64, то выдается сообщение об ошибке:
WINDOW ТО LARGE, а если D или W 0, то сообщение: WINDOW
ТОО SMALL.
После выполнения переназначения окна позиция печати уста-
навливается в левый верхний угол текущего окна.
1.2.2. Команды CLS и CLW
Для стирания всего экрана используется стандартная команда
CLS. Команда CLW_ используется для стирания отдельного окна. За
этой командой следует одно число (очищается текущее окно), или два
числа, где первое - это номер окна, а второе - тип стирания:
CLW_N,0 - стирает окно N, не изменяя значения цветовых ат-
рибутов;
CLW_N,1 - тон и фон не меняются, но стирание производится
цветом тона;
CLW_N,2 - окно N инвертируется;
CLW_N,3 - стирает только атрибуты; позволяет изменить цвета,
не затрагивая изображения.
* Во всех этих командах текущая позиция печати устанавливает-
ся в левый верхний угол окна. Команда CLW_N всегда использует
текущий атрибут, т.е. после выполнения команды CLW__0,0 (если при
этом текущим было окно 3) очищается окно 0 с использованием
атрибутов окна 3.
1.2.3. Команды PAN и SCROLL
MB дает возможность сдвига окон вверх, вниз, влево и вправо
точка за точкой, используя команды PAN_ (вправо, влево) и
SCROLL_ (вверх, вниз). Каждая команда имеет два аргумента. Пер-
вый аргумент определяет, каким цветом фона или тона заполнить
освободившуюся часть окна (1 - INK, 0 - PAPER). Второй аргумент
определяет в каком направлении и на сколько происходит сдвиг. Если
он положителен, то сдвиг происходит слева (сверху) направо (вниз),
а если отрицателен, то наоборот.
Можно производить сдвиг окна циклически с использованием
команд PANW_ и SDROLW_. Эти команды имеют один аргумент,
определяющий величину и направление сдвига. Сдвиг может быть
остановлен в любой момент нажатием клавиши "М".
1.2.4. Команда FX
Команда FX_ используется для управления работой системы
MB:
FX_0,N - организует окно для ввода пользователем сообщений
об ошибках;
FX_1,N - устанавливает окно для автоматического сдвига;
FX_2,N - устанавливает окно для вывода по командам пользо-
вателя;
FX_3,N -организует окно для передней панели. (N - номерокна)
Пример программы:
10 ВО. 0
20 CURRENT_0: WINDOWJ),0,15,32
30 PA. 2: INK 7: LLWJ)
40 CURRENT_1: WINDOWJ),32,22,32
50 PA. 1: INK 7: CLWJ)
60 CURRENTJ2: WINDOW_15,0,7,32
70 PA. 7: INK 1:CLWJ0
1.2.5. Команды MODE и STIPPLE
Используя команду установки режима MODE_, можно изме-
нять размер символов, выводимых на экран.
MODE_N, 1 - удвоение горизонтальной разрешающей способно-
сти (64 символа в строке 4*8);
MODERN,2 - стандартный символ ZX - SPEKTRUM (размер
8*8);
MODERN,3 - удвоение высоты символа (размер 8*16);
MODERN,4 - удвоение высоты и ширины символа (размер
16*16); Каждое окно может иметь свой собственный набор символов.
Режим 4 позволяет сделать символы полосатыми. Символы ре-
жима 4 в четыре раза больше обычных. Следовательно, каждая точка
символа занимает 4 точки на экране.
Команда STIPPLE_ позволяет регулировать заполнение этих
точек цветом тона, что создает эффект тени. Команда имеет числовой
аргумент от 0 до 15. Аргумент 15 дает полностью заполненный сим-
вол. Аргумент 0 делает его прозрачным.
1.2.6. Команда FONT
MB имеет три символьных набора. Их выбор осуществляется
командой FONT_ с одним аргументом, определяющим символьный
набор:
FONT J) - стандартный ZX-SPECTRUM набор;
FONT_l - набор типа ВВС MIKRO, ACORN ELEKTRON;
FONT_2 - набор типа ANSTRAD СРС 464.
FONT_ устанавливает символьный набор для всех видов печати
во всех окнах. Новые символьные наборы' размещаются в ОЗУ и,
соответственно, могут быть при необходимости замещены. Каждый
символ определяется 8 байтами (аналогично графике пользователя).
Новые наборы определяют символы от CHR$ 32 до CHR $ 127. Набор
типа ВВС MIKRO размещается с адреса 48000, набор типа AMSTRAD
СРС - с адреса 45000. Для определения символа с кодом А$ надо
изменить 8 байт, первый из которых расположен по адресу (45000 или
48000)+8* (CODE А$ -32).
Стандартный символьный набор ZX-SPEKTRUM содержит пе-
чатные и служебные символы. В символьный набор MB включено
несколько новых значений:
CHR$l-4 - установка режима текущего окна (эквивалент
MODE J;
CHR$ 7 - инверсия символа, находящегося под курсором;
CHR$ 24-31 - устанавливает окно, используемое для вывода:
CHR$ 24 - окно 0; CHR$ 31 - окно 7;
CHR$ 1-4 - введена также новая команда VDU_,
эквивалентная CHR$.
Например:
VDU_65,66 печатает АВ.
Строки символов в MB могут быть выведены сверху вниз при
использовании команды DOWNEY,Х,А$, где Y - строка первого сим-
вола, X - его столбец. Если размера окна не хватит, то окно стирается
и новый символ выводится вверху окна.
1.2.7. Команды SPRINT и PRINTER
Команда SPRINT_X,Y,A,P,A$ позволяет выводить на экран
символ любого размера. X и Y определяют точку печати первого
символа, А (В) - определяет, во сколько раз символы увеличиваются
в направлении X (Y). А$ - строка символов, выводимая на печать. При
выходе за пределы строки окно стирается и печать возобновляется с
левого края окна. Начало отсчета, как и в других командах MB -
левый верхний угол экрана.
Команда PRINTER_ используется для вывода содержимого эк-
рана на периферийные устройства, например, принтер. Команда за-
канчивается числовым выражением. Если его результат равен 0, то
вывод происходит на экран, а если не 0, то каждый раз при печати
символа будет вызываться подпрограмма в машинных кодах, адрес
которой размещается в двух байтах, расположенных по адресам
59934 и 59935. Код символа располагается в аккумуляторе. Возврат в
основную программу выполняется по команде RET.
Внимание!!!
Необходимо всегда помнить, что во время работы MB, во избе-
жание сброса системы MB, запрещено использовать команды CLEAR,
OPEN# 2, CLOSE#.
1.3. Графика
1.3.1. Команды CHANGE и SWAP
MB содержит ряд команд, которые позволяют работать с атри-
бутами напрямую. CHANGE_ - это новая команда, которая позволя-
ет инвертировать отдельные биты каждого байта атрибута, не
затрагивая другие части. Эта команда сопровождается двумя число-
выми выражениями, представляющими маску и данные. Маска пока-
зывает, какие из битов каждого байта должны быть изменены. Маска
записывается в двоичном формате. Если бит равен 1, то соответству-
ющий байт атрибутов инвертируется. Данные показывают, какие
изменения должны быть внесены. Эта процедура сопровождается
следующими шагами:
CHANGE_1 - маска инвертируется;
CHANGE_2 - логическое умножение каждого байта атрибута с
инвертированной маской;
CHANGE_3 - логическое сложение каждого байта атрибута с
байтом данных.
Команда SWAP_ позволяет обменивать байты атрибутов. Она
имеет два аргумента, первый из которых - это новый атрибут, а
второй - старый. Область атрибутов просматривается, и если встре-
чается "старый" атрибут, то он заменяется на "новый".
1.3.2. Команда FADE
Команда FADE__ производит некоторые интересные эффекты.
Наберите следующую программу:
10 FOR F=0 ТО 703
20 POKE 22528+F, PEEK F
30 NEXT F
40 FADE_0
Три первые строки заполняют область атрибутов произвольны-
ми значениями. Четвертая строка самая важная: команда FADE_
имеет числовой аргумент. При ее использовании просматривается
вся область атрибутов. Если встречается байт, равный аргументу, то
он не изменяется. В противном случае байт декрементируется. Этот
процесс продолжается до тех пор, пока все байты не выравняются с
числовым аргументом.
1.3.3. Команда INVERT
Эта команда не имеет аргументов и все ее действие заключается
в том, что экран инвертируется, т.е. тон становится фоном, а фон
тоном.
1.3.4. Команда DEFG
Способ, которым в стандартном ZX-SPECTRUM задаются гра-
фические символы для пользователя, довольно трудоемкий, MB пре-
доставляет более легкие возможности задания графики пользователя
с помощью команды DEFG_. Эта команда сопровождается строковым
выражением, за которым следуют восемь чисел, разделенных запя-
той. Строковое выражение задает назначение клавиши (от "А" до
"U").
А восемь чисел в двоичной форме представляют графический
символ. Первое число - верхний ряд, последнее - нижний.
1.3.5. Команды GET и PUT
В MB есть возможность сохранения текущего содержимого экра-
на в памяти и возвращения его на экран в разные позиции, ^о
выполняется командами GET_ - сохранить экранную область в памя-
ти, PUT_ - воссоздание экрана.
Формат команды GET_:
get_o,a,y,x,d,w
где:
A - адрес, с которого начинается размещение экранной инфор-
мации;
Y/X - номер строки/столбца левого верхнего угла области, ко-
торую необходимо сохранить;
D/W - глубина/ширина зоны, которая сохраняется в памяти
(количество знакомест по вертикали/горизонтали); команды GET и
PUT имеют систему координат, единую с командами ATTR,
SCREEN@. Эти команды абсолютны, т.е. не зависят от положения
окна на экране (как, например, для PRINT AT). GET_ размещает
экранную информацию ОЗУ, а следом за ней располагаются байты
атрибутов. Для резервирования специальной области под сохранение
экрана используется команда CLEAR. Вычисление объема буфера
может быть произведено следующим образом: 9*W*D.
Назначение команды PUT_ противоположное по отношению к
GET_.
Формат команды:
PUTJF,A,Y,X,D,W
где F определяет способ восстановления информации на экран:
F=0 - экран замещается данными из буфера;
F=1 - логическое сложение экрана и буфера, результат выводит-
ся на экран;
F=2 - исключающее или экрана и буфера;
F=4 - аналогично F=0, но атрибуты не изменяются;
F=5 - аналогично F=l, но атрибуты не изменяются;
F=6 - аналогично F=2, но атрибуты не изменяются.
1.3.6. Команда SPUT
Эта команда является модификацией команды PUT_. Она по-
зволяет расширить информацию, выводимую обратно на экран. Фор-
мат команды:
SPUT_A,Y,X,B,C,W,D
где А - начальный адрес буфера;
Y,X - координаты точки размещения левого верхнего угла
блока;
В/С - увеличение по X/Y;
W - ширина блока в знакоместах (как и для GET_);
D - глубина блока в знакоместах (в 8 раз больше, чем для
GET J.
SPUT_ всегда использует текущие атрибуты и не изменяет их,
т.е. эта команда блок атрибутов в ОЗУ не использует.
1.4. Управление выполнением программы
MB предоставляет возможность использования процедур - под-
программ, которые вызываются по их именам, как будто это новые
команды. И точно также, как и команда, имя процедуры сопровож-
дается несколькими выражениями, если это необходимо. Эти выра-
жения могут быть присвоены переменной при запуске процедуры,
которая используется в дальнейшем во всей процедуре.
Например, недостатком программ MB является невозможность
использования локальных переменных. Но используя процедуры,
можно свести программу к отдельным подзадачам. В этом случае
каждой задаче соответствует своя процедура, отладка каждой из ко-
торых может выполняться отдельно, а на завершающем этапе проце-
дуры объединяются в единую программу. Присваивая этим
процедурам осмысленные имена, появляется возможность повысить
читаемость программы.
Начало процедуры отмечается символом "@", за которым следу-
ет имя процедуры. Определение имени процедуры должно быть пер-
вым утверждением в строке. Если эта процедура имеет параметры, то
за именем следует символ подчеркивания "_" и параметры, отделен-
ные друг от друга запятыми. Конец процедуры обозначается выраже-
нием ENDPROC__. После выполнения этой команды возобновляется
процесс выполнения основной программы. Для большей наглядности
после ключевого слова ENDPROC_ добавляется имя процедуры.
Например:
9000 @DISPLAY_A,A$
9010 PAPER A:INK 9
9020 MODE 4: STIPPLE_6
9030 PRINT A$
9040 ENDPROC_DISPLAY
Эта простая программа, начинающаяся со строки 9000, опреде-
ляет процедуру с именем DISPLAY и параметрами: числовой пере-
менной А и строковой А$. В ней устанавливается желаемый цвет,
размер букв и строка А$ выводится на экран. Для обращения к про-
цедуре используется выражение вида:
DISPLAYS, "MEGA-BASIC"
В связи с тем, что переменные не являются локальными, необ-
ходимо выбирать их имена так, чтобы не было накладок на другие
переменные, имеющие такие же имена. Процедуры могут быть вы-
званы только из программы, поэтому они не могут быть использованы
в прямом режиме.
1.4.1. Циклы типа REPEAT-UNTIL
MB предоставляет возможность работать с циклами типа
REPEAT-UNTIL. Ключевое слово REPEAT используется для обоз-
начения начала цикла. UNTIL_ с числовым аргументом управляет
выполнением цикла. Если аргумент равен 0, то выполняется тело
цикла, а если он больше 0, то цикл завершается. Глубина вложения
циклов типа REPEAT-UNTIL достигает 10.
1.4.2. Стек процедур и циклов REPEAT-UNTIL
Стек используется процедурами и циклами REPEAT-UNTIL
для хранения номера строки и номера утверждения, т.е. при вызове
процедуры номер строки и номер следующего оператора в строке
заносится в стек, являясь адресом возврата при окончании процеду-
ры. После окончания команды REPEAT в стек также заносятся номер
строки и утверждения, следующего за REPEAT, что позволяет в
случае необходимости вернуться в начало цикла. В конце процедуры
(ENDPROC) происходит переход по адресу, находящемуся на вер-
шине стека, и этот адрес удаляется из стека. Аналогично, если выра-
жение после UNTIL верное, то вершина стека удаляется. Если стек
пуст, но встречается еще один возврат из процедуры или цикла, то на
экран выдается сообщение об ошибке:
PROC STACK ONDERFLOW
объем стека - 10 значений, т.е. любая попытка занести туда 11-й
адрес приведет к сообщению об ошибке:
PROC STACK OVERFLOW
1.4.3. Команда POP и PUSH
POP - команда для удаления значений из стека, a PUSH - для
занесения значений в стек. PUSH имеет два аргумента: номер утвер-
ждения в строке и номер строки. Для очистки стека в случае исполь-
зования процедур и циклов REPEAT-UNTIL в начале программы
должна использоваться комбинация PCLEAR.
1.4.4. Команда BRANCH
Команда BRANCH заставляет компьютер исполнять подпрог-
рамму по окончании каждой строки программы. Команда имеет один
аргумент, указывающий на начало подпрограммы. Если его значение
равно 0, то MB не передает управление подпрограмме, а действут как
обычно. Конец программы обозначается командой ENDPROC_.
1.4.5. Команда MTASK
MB позволяет осуществить простейший двухзначный режим.
Команда MTASK позволяет выполнить программу с двух точек входа.
В начале программы записываем две команды MTASK_NN, где NN -
номер строки, определяющей точку входа для выполнения одного из
параллельных процессов. Если номер равен 0, то соответствующий
параллельный процесс запрещается, а точка входа маскируется. При
использовании этого режима каждая команда обращения к ZX-
INTERFACE-1 сопровождается двойным двоеточием "::".
1.5. Отладка и редактирование программ
1.5.1. Команды BRANCH, TRON, TROFF, SPEED
Команда BR ANCH_ может оказаться очень полезной при отлад-
ке программ. Например, вас интересует значение отдельной пере-
менной. Для вывода ее значения на экран используется
подпрограмма BRANCH.
Другой метод контроля выполнения программ - это программа
TRON_ (трассировка), которая выводит в левый нижний угол номер
выполняемой в данный момент строки.
Команда TROFF_ прекращает трассировку.
Команда SPEED_ позволяет установить желаемую скорость вы-
полнения программы; здесь N - скорость (от 0 до 225). SPEED_0 -
выполнение с максимальной скоростью. При увеличении N скорость
уменьшается; SPEED_255 приводит к останову программы после
каждой команды. Выполнение возобновляется при нажатии на лю-
бую клавишу.
1.5.2. Команды AUTO и DELETE
При наборе больших программ удобно входить в режим AUTO_,
в которой номер строки печатается автоматически после каждого
нажатия ENTER. Эта команда требует два аргумента, разделенные
запятой. Первый - начальный номер, второй - приращение. Для вы-
хода из этого режима нажмите одновременно SS+L в режиме
EXTENDED. Часто бывает необходимо удалять большие блоки про-
граммы. Для этого используется команда DELETE^. Она имеет два
аргумента - первая и последняя строки, подлежащие удалению.
1.5.3. Команды BRON и BROFF
Специально для желающих защитить свою программу от лиш-
них глаз существует команда BROFF_, которая запрещает прерыва-
ние выполнения программы при нажатии на клавишу "BREAK".
Разрешение прерывания программы осуществляется командой
BRON. Многие версии BASIC имеют команды ON ERROR GOTO,
которые позволяют изменить работу системы при обнаружении
ошибки. Эквивалент этой команды в MB - RESTART^, которая имеет
один числовой аргумент, определяющий адрес перехода в случае
ошибки. Для возобновления нормального режима работы необходимо
выполнить команду RESTART_OFF. RESTART не срабатывает при
ошибке в INTERFACE-1 или в самом MB. Для вывода сообщения об
ошибке полезно знать информацию, находящуюся по адресам:
59873/4.. .номер строки с ошибкой,
59875.. .номер утверждения в строке,
59862.. .номер ошибки.
1.6. Звук
MB предоставляет вам два новых способа вывода звука для ZX-
SPECTRUM - команду PLAY и генератор звука по прерыванию
(ГЗП). Формат:
PLAY_N,L,S,D,F
где N - выбор звука (0 - чистый тон, 1 - белый шум), L - длина
каждого шага, S - начальная частота, D - количество шагов, F -
приращение частоты после каждого шага. Переменные D и F при
необходимости могут быть повторены нужное количество раз.
1.6.1. Генератор звука по прерыванию
(INTERRUPT SOUND GENERATOR)
Если команда PLAY_ - всего лишь расширение команды ВЕЕР,
то MB предоставляет возможность вывода звука в процессе выполне-
ния программы. Это возможно благодаря ГЗП. Вы знаете, что 50 раз
в секунду работа процессора прерывается и происходит переход на
короткую подпрограмму в машинных кодах, которая сканирует кла-
виатуру. В MB эта программа модифицирована для генерации звуков.
MB имеет ряд команд, обеспечивающих управление ГЗП и буфером
звука:
SOFF - запрет ГЗП - любой звук прерывается;
SON - разрешение ГЗП - звук возобнавляется;
SREP_N - если N=0, то данные будут записаны в буфер и звук
будет повторяться бесконечно;
SOUND__N,A,B,C,D - простая, но эффективная команда управ-
ления ГЗП. N устанавливает заполнение буфера. Если N=0, то содер-
жимое ГЗП возобновляется. Если N=1, то данные добавляются в
конец буфера звука. А - выбор звука (А=0 - чистый звук, А=1 - белый
шум). В - приращение частоты на каждом шаге. С - число шагов при
однократном запуске. D - число запусков.
При выполнении команды PLAY_ запрещается работа ГЗП, и
поэтому после PLAY_ всегда надо разрешать работу ГЗП с помощью
команды SON (отметим также, что ГЗП не функционирует при рабо-
те строкового редактора). Скорость выполнения зависит от сложно-
сти звука, который вы задали.
Пример использования ГЗП:
10 SOUND 0,0,1,20,255
20 SREP1
30 SON
40 MODE_4:STIPPLE_6:FONT_2
50 VDU_( 128+RND* 15)
60 PAPER RND*7:INK 9
70 GO TO 50
1.7. Машинные коды и YS MEGA-BASIC
1.7.1. Команды DOKE и CALL
MB предоставляет возможность запуска программ в машинных
кодах из Бейсик-программ. Однако MB имеет две особенности:
1) Область с адреса 45000 и выше занята самим MB, поэтому туда
ничего нельзя записывать;
2) MB имеет второй режим прерывания Z80, поэтому все про-
граммы с использованием системы прерывания потребуют особого
внимания для нормальной работы.
При работе с Z80 часто бывает необходимо заносить в ОЗУ
двухбайтовые константы. Специально для этого в MB есть команда
DOKE_ с двумя аргументами, разделенными запятой. Первый аргу-
мент - адрес, второй - данные. Данные размещаются в соответствии
со стандартом Z80: младший байт - первый, старший - второй. Коман-
да CALL_ используется для вызова подпрограмм в машинных кодах.
Она имеет один аргумент - начальный адрес подпрограммы. В случае
необходимости за адресом может следовать любое количество число-
вых выражений.
1.7.2. Передняя панель
Передняя панель активизируется либо командой MON_, либо
нажатием CONTROL Р во время выполнения программы. Для пере-
дней панели используется окно 3, которое должно иметь не менее 20
строк и 40 столбцов для правильного функционирования.
Сразу после включения передней панели вы увидите колонки
16-ричных цифр. Слева (на голубом) состояние регистров (аккуму-
лятор сверху). Регистор флагов выведен в двоичной форме. Звездочка
означает текущий регистр. Справа выводится содержимое текущей
области памяти, текущий байт - инверсной строкой. Внизу на зеле-
ном фоне - строка вывода. Передняя панель управляется нескольки-
ми односимвольными командами, за которыми может следовать до
трех 16-ричных чисел. Все такие числа должны записываться полно-
стью, при вводе двухбайтовых чисел необходимо записывать четыре
знака.
<SPACE> - возврат в Бейсик;
<R> NN - загрузка текущего регистра 16-битным числом;
<Р> - сдвиг указателя текущего регистра.
Перемещение массива памяти с адреса NN1 по адресу NN2
объемом NN3:
<М> NN - устанавливает адрес текущей области памяти, кото-
рая выводится на панель;
<S> - устанавливает точку прерывания в адрес текущей области
памяти;
<К> - возобновляет выполнение программы, прерванной в точке
прерывания;
<U> - восстановление точки прерывания;
<I> NN1 NN2 N3 - заполнение массива с адреса NN1 и длиной
NN2 константой N3;
<J> NN - вызывает подпрограмму в машинных кодах по адресу
NN;
<ENTER> - инкремент адреса текущей области памяти;
<-> - декремент адреса текущей области памяти.
Примечание: N - байт в 16-ричной форме; NN - двухбайтовое
слово в 16-ричной форме.
Если в начале строки ввода записываются два числа, предвстав-
ляющие байт, то он записывается в ОЗУ по адресу текущего байта,
текущий адрес инкрементируется.
■ COPY - COPY ( PIRATE 02 )
Небольшой, простой в использовании копировщик, который в то
же время предоставляет широкие возможности, выходящие далеко за
рамки простого копирования программ: позволяет изменять парамет-
ры заголовка (например, имя файла), просматривать и изменять
содержимое загружаемого файла, запускать машинные программы и
др.
Команды COPY-COPY
CAT - (клавиша "С") просмотр списка имен файлов на экране
(не более 10 имен);
LOAD - (клавиша "J") загрузка файла в память:
LOAD - загружает программу с очередным номером;
LOAD N - загружает файл на место N. Если N=1, то
загруженные перед этим файлы теряются,
и загрузка производится в начало рабочей
области (с адреса 23296);
LOAD N ТО М - загружает файлы с номером от N до М;
LOAD ТО М - загружает файлы от очередного номера до М;
LOAD AT NN - загружает файлы с адреса NN, по умолчанию
файл с номером 1 загружается с адреса 23296;
можно задать NN=23040, в этом случае
величина рабочей области для загрузки файлов
увеличивается до 42496 байтов. По умолчанию
величина этой области равна 42240 байта
(очевидно, что NN задавать нельзя);
LOAD (NN - считывает первые NN байтов файла,
например: LOAD (6912 - загрузка только
данных для экрана;
LOAD (NN ТО - загрузка файла без первых NN байт;
LOAD N (NN - загрузка первых NN байт с номером N;
SAVE - (клавиша "S") запись из памяти на кассету:
SAVE - сохраняет все загруженные файлы без пауз;
SAVE N - сохраняет все файлы, начиная с номера N;
SAVE N ТО М - сохраняет файлы с номерами от N до М;
SAVE ТО М - сохраняет файлы с номерами от 1 до М
SAVE STEP S - сохраняет все загруженные файлы; между
файлами делаются паузы в S секунд;
SAVE N ТО М STEP S -
сохраняет все файлы от N до NN с паузами
в S секунд.
VERIFY - (клавиша "Vм) проверка правильности записанных файлов:
VERIFY - аналогично LOAD;
VERIFY N - аналогично LOAD N;
VERIFY N TO M - аналогично LOAD N TO M;
VERIFY TO M - аналогично LOAD TO M.
LET - (клавиша "L") изменение полей заголовка файла:
LET P-NAME, LENr START, PROG
- изменение имени, длины, начального адреса
и поля длины программы в файле с номером Р.
Любой из этих параметров может быть
пропущен, но при этом должны быть
сохранены запятые перед используемыми
параметрами.
Например:
LET 2 = AAA,, 1 - файл с номером 2 будет
иметь имя AAA, стартовый адрес 1;
LET 3 = 500,1,5- файл с номером 3 будет
иметь длину 500 байт, стартовый адрес 1,
длина программы 5 байт;
LIST [NN ] - (клавиша "К") распечатка на экране очередных 15
байт памяти. Программа показывает адрес
памяти, десятичное значение байта, величину
двубайтового числа из двух соседних байтов
и код символа. NN - задает адрес памяти
(умолчание - 0). Нажатие клавиши ENTER
приводит к распечатке следующих 15 байт.
РОКЕ - (клавиша "О") изменение десятичного значения
одного из двух соседних байтов:
POKE NN,M - запись в ячейку памяти с адресом NN
величины М (М);
РОКЕ NN ММ - запись в ячейку NN и NN+1 двубайтового
числа ММ в формате INTEL (младший байт
первым).
Команда РОКЕ позволяет вносить изменения
непосредственно в программы и данные.
USR - (клавиша "U") вызывает выполнение программы
пользователя на машинном языке процессора:
USR NN - вызывает программу пользователя с адреса NN;
USR - (тождественно USR О) сброс с очисткой памяти.
RETURN - (клавиша "Y") возврат в монитор, инициализируются
системные переменные и таблица каналов, UDG и
машинный стек;
Остальная память не изменится.
COPY - (клавиша "Z") перевод программы в специальный режим
для копирования файлов без заголовка длиной 49096
байтов. После выдачи команды программа загружает файл
в память, а затем, по нажатию клавиши "CAPS SHIFT"
выгружает ее необходимое число раз. Повторная загрузка
возможна только если остается не менее 200 байтов
незанятой памяти.
COPY (без парам.) - копирование отдельного файла
размером 49096 байт, без заголовка. Заголовок (если он
есть) пропускается автоматически. Запись на кассету после
загрузки файла выполняется после нажатия клавиши
"CAPS SHIFT".
COPY NN - копирование отдельного файла размером до
49152 байт, без заголовка. Ленту следует установить за
заголовком файла, т.к. если программа устанавливает
заголовок, то наступает сбой. После записи одной копии
также наступает сбой.
NN - назначает адрес, в котором будут находиться 29 байт
копирующей процедуры (вместо 29 байт копируемого файла)
Например: 16353 NN 65350
COPY 16387 - процедура "вмонтируется" в правую строку
экрана;
COPY 23698 - программа "вмонтируется" в пространство
памяти калькулятора (МЕМВОТ).
Сбой процедуры COPY происходит в результате ошибки
чтения и после завершения копирования.
Примечания
1. Все слова команд, записанные прописными (или жирными)
буквами, являются ключевыми словами BASICa (если не указано
иначе); вводить как в BASICe.
2. Нажатие клавиши ENTER вызывает повторение последней
команды, но без параметров.
3. DELETE (CAPS-O) стирает целую команду, а не только по-
следний введенный символ.
Обозначения файлов:
Р - программа;
В - машинный код (BYTES);
А - числовой массив;
$ - символный массив.