MEGA-BASIC
ВСТУПЛЕНИЕ
MEGA-BASIC
(M-B) представляет собой расширение стандартного Бейсика для
графического программирования. M-B размещается на ленте вместе с программой SPRITE-DESIGNER (S-D), который позволяет создавать свои
собственные элементы изображения (спрайты) для дальнейшего использования.
Фирменный
SPECTRUM имеет разделенные устройства интерфейса-1 с двумя различными
ПЗУ. Если вы собираетесь использовать M-B с микродрайвами, то вы должны
выключить ПЗУ интерфейса-1, например:
CLOSE #0: PRINT PEEK 23729
Если на экране 0, то старое ПЗУ
не выключилось, но нет необходимости останавливать загрузку.
При получении мигающего числа 80
на экране — включилось новое ПЗУ. Для полного взаимодействия с M-B надо набрать
после загрузки программы:
POKE 47006, 183
После этого M-B будет легко
разгружать все остальные программы.
КЛАВИАТУРА.
После загрузки
MEGA BASIC'a вы увидите фирменное сообщение. Для копирования MEGA BASIC'a на MICRODRIVE необходимо
нажать клавишу "М", если же в этом нет необходимости — достаточно
нажать любую другую клавишу.
В M-B для ввода данных
используется весь экран — он не делится на две части.
Все команды в M-B набираются
побуквенно, причем существует множество сокращений:
A.TTR ER.ASE ME.RGE RES.TORE
ВЕ.ЕР Е.ХР M.OVE RET.URN
В. IN
FL.ASH NEXT R. ND
BO.RDER F.ORMAT N.ОТ SA.VE
BR.IGHT GO S.UB OP.EN# S.CREEN$
CH.R$ G.O TO OV.ER
ST.R$
CI.RCLE I.NKEY$ PA.PER T.AB
CLE.AR INP.UT PAU.SE
TH.EN
CLOSED INV.ERSE PEEK U.SR
C.ODE L.EN PL.
ОТ V.AL$
CON.TINUE LI .NE P.OINT
VE.RlFY
DA.ТА
LI.ST RA.NDOMIZE
D.EFINE LP.RINT PR.INT
DR.AW
LO.AD RE.AD
Пробелы обязательны. Сокращения, отличные от приведенных не
допускаются.
Пример сокращения: С.; DR.
Нижняя строка дисплея показывает текущий вид курсора. Смена
курсора — обычным способом. Соответствие:
ZX-SPECTRUM BASIC MEGA-BASIC
L CAPS
OFF
С
CAPS ON
E CAPS
OFF EXTENDED
G CAPS
OFF GRAPHICS
РЕДАКТИРОВАНИЕ
M-B
представляет новые возможности при редактировании программ, поэтому назначение
многих клавиш изменено.
EDIT —
копирует текущую строку программы в строку вво-1 да при
редактировании;
TRUE VIDEO —
стирает строку ввода;
INVERSE VIDEO — стирает символ справа от курсора;
DELETE —
стирает символ слева от курсора;
О — стирает от курсора до конца строки;
<= — курсор в начало строки ввода;
>= — курсор в конец строки ввода;
CURSOR LEFT —
курсор влево;
CURSOR DOWN —курсор вниз;
CURSOR UP —
курсор вверх;
CURSOR RIGHT —
курсор вправо;
SCREEN$ —
автоматический листинг в окно 1, верхняя строка — текущая;
OR —
на одну строку вниз и прокрутка экрана;
AND —на
одну строку вверх и прокрутка экрана;
STOP —
курсор копера влево;
NOT —
курсор копера вниз;
STEP —
курсор копера вверх;
ТО — курсор копера вправо;
AT —
копирует символ курсора копера в строку ввода. Действует только с символами
стандартного размера;
OVER —
сдвиг курсора копера в следующее окно;
INVERSE —
сдвиг курсора копера в левый верхний угол текущего окна.
Экран разделен на четыре окна, каждое из которых используется
в специальных целях:
Окно 0 — для ввода информации пользователем и для сообщений
об ошибках;
Окно 1 — для автоматического листинга, управляемого
оператором;
Окно 2 — для вывода информации бейсик-командами;
Окно 3 — используется передней панелью.
После загрузки кажется, что на
экране одно окно, но это четыре окна, атрибуты которых совпадают. Для
копирования текстов используется курсор копера, который может двигаться по
текущему окну посредством нажатия клавиш, описанных ранее. Курсор копера
функционирует только в окнах 0, 1,2. Вызов на редактирование одновременно
нажать "CAPS SHIFT" и " 1", или "EDIT", затем ввести номер строки. Если данный
номер отсутствует в программе, то вызывается строка с ближайшим номером, больше
указанного. Если нет таковой, выводится сообщение об ошибке:
"LINE NOT FOUND".
КЛАВИШИ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
M-B дает возможность
программирования 10 функциональных клавиш верхнего ряда для извлечения строк
длиной до 255 символов. Для программирования этих клавиш вводится команда: KEY <числовое выражение>,<строка символов>
Числовое выражение обозначает,
какая клавиша программируется, строка определяет новую функцию. Прибавление CHR$ 13 в конце строки позволит осуществить автоввод.
Существуют
две встроенных функции с
автовводом: "RUN"' и
"LOAD:RUN" — вызываются нажатием VERIFY
и VAL$ соответственно. Пример: KEY
4, "PRINT "+CHR$ 34
КЛАВИШИ КОНТРОЛЯ
Во время выполнения программы
клавиатура приобретает дополнительные функции: нажатие одновременно пробела и "F" вызывает переднюю панель; пробела и
"Е" — останавливает программу, на экране появляется
"ESCAPE"; пробела и "R" —
перезапускает BASIC (BASIC-программа не стирается). При
необходимости ввести пробел нажатием одновременно SYMBOL
SHIFT и пробел.
ВЫВОД НА ЭКРАН ОКНА
М-В дает большие возможности по
использованию символов различной формы и размеров. Есть, например, возможность
организовать вывод на определенную часть экрана, которая может иметь любые
размеры, или даже занимать весь экран. Эти части называются окнами. М-В
позволяет вам организовать до 10 окон на экране, они нумеруются: 0...9. Все они
могут быть определены в программе (использование окон 0...9 описано ранее). При
выполнении программы оператор РRINТ автоматически использует окно 2. Однако
возможно переключение ввода/ вывода в другое окно командой
CURRENT М. Если N больше 9, то выдается ошибка:
"MEDICAL WINDOW". Используя команду CURRENT, можно
одновременно управлять тремя окнами, переключая их. Команда
WINDOW Y,X ,D,W определяет размер и позицию окна на экране. Y,X — координаты левого верхнего угла окна;
D — глубина, W — ширина окна. Все размеры даны в
знакоместах.
Ограничения на X, Y, D, W:
X,Y =
0-63; D,W >= 0; Y+D <= 24; X+W <= 64
Назначение функции ATTR и SCREEN при работе с окнами
прежнее и они используют прежний центр координат (левый нижний угол). Заметим,
что команда "PRINT AT .." использует в
качестве центра координат левый верхний угол текущего окна. После выполнения
переназначения окна текущая позиция печати устанавливается в верхний левый
угол этого окна.
КОМАНДЫ CLS И CLW
Стандартная команда CLS
используется для стирания всего экрана. Для стирания окон существует команда
CLW , за которой следует одно или два числа. Если их два, то первое — это
номер окна, второе — тип стирания. Если одно число, то очищается текущее окно.
Тип стирания:
0 — окно стирается, не изменяя
значений цвета и тона;
1 — окно стирается цветом тона,
тон и фон не изменяются;
2 — окно инвертируется;
3 — стираются только атрибуты —
позволяет изменить цвета, не меняя изображения.
Во всех этих командах текущая позиция
печати устанавливается в левый верхний угол экрана. В качестве атрибутов
команда CLW использует атрибуты текущего окна ("CLW 0,0" при текущем
третьем окне заполнит окно 0 атрибутами окна 3).
КОМАНДЫ PAN И SCROLL.
Во все окна можно выводить информацию,
причем изображение может быть сдвинуто в любую сторону на произвольное
расстояние. Это осуществляется командами "PAN
" и "SCROLL ", которые имеют два
аргумента: первый определяет цвет освободившейся части окна (1 — INK, 0 — PAPER). Второй аргумент определяет,
в каком направлении и насколько происходит сдвиг. Для
"PAN ": если оно больше нуля — сдвиг вправо, меньше нуля —
сдвиг влево. Для "SCROLL ": аргумент больше
нуля — сдвиг вверх, меньше нуля — сдвиг вниз.
Также может осуществляться
циклический сдвиг: "PANW " направление и шаг
сдвига, "SCROLL "направление и шаг сдвига.
Сдвиг может быть остановлен в любой момент нажатием клавиши "М".
КОМАНДА FX.
Функцию выполняемую окном,
определяет команда "FX”.
При запуске системы М-В функции
распределяются следующим образом:
Окно 0 — для ввода
пользователя и сообщений об ошибках;
Окно 1 —для листинга;
Окно 2 — для вывода информации BASIC-командами;
Окно 3 — для передней панели (редактор ассемблера).
Формат команды "FX": "FX
функция окна согласно вышеоговоренному, номер определяемого окна".
Например: FX 3,7 — отводит окно 7 передней панели.
Пример программы:
10 BORDER 0
20 CURRENT 0:
WINDOW 0,0,15.32
30 PAPER 2: INK
7: CLW 0
40 CURRENT I: WINDOW 0,32,22,32
50 PAPER I: INK 7: CLW
0
60 CURRENT 2: WINDOW 15.0.7,32
70 PAPER 7:
INK I: CLW 0
КОМАНДЫ MODE И STRIPLE.
М-В позволяет установить четыре размера символов: "MODE номер окна, размер символа".
Размер:
если 1, ТО 4*8 точек (64 символа в строке);
если 2, ТО 8*8 точек (стандарт);
если 3, ТО 8*16 точек;
если 4; ТО 16*16 точек.
Каждое окно может иметь
собственный размер символов, в каждом окне могут быть совмещены символы
различных размеров. Для четвертого режима (MODE номер
окна,4") возможно регулировать заполнение командой
"STRIPLE " заполнение (число от 0 до
15), 0 дает прозрачные символы, 15 — полностью заполненные.
КОМАНДА FONT.
С помощью команды "FONT"
можно менять символьный набор:
"FONT
0" — стандартный набор;
"FONT 1" — набор типа ВВС MICRO, ACORN ELECTRON;
"FONT 2" — набор типа AMSTRAD CPC 464.
Эта команда устанавливает
символьный набор для всех видов печати во всех окнах. Новые символьные наборы
размещаются в ОЗУ и соответственно могут быть замещены при необходимости.
Каждый символ определяется 8 байтами (аналогично символам псевдографики
пользователя). Новые наборы определяют символы от CHR$
32 до CHR$ 127. Набор типа ВВС располагается с адреса
45000. Для определения символа с кодом А$ надо изменить 8 байт. Первый из них
расположен по адресу (45000 или 48000)+8*(CODE A$-32).
КОМАНДЫ CHR$, VDU И DOWN.
М-В имеет также расширенный стандартный набор символов. В
него включено несколько новых значений:
CHR$ 1-4 — эквивалент "MODE N" (установка режима текущего окна);
СНR$ 7 — инверсия символа,
находящегося под курсором;
CHR$ 24-31 —устанавливает окно,
используемое для вывода: CHR$ 24 — окно 0, CHR$ 25 — окно 1 и т.д.
Введена также новая команда
"VDU число" — эквивалент "PRINT CHR$..."
Например: VDU 2 — установка стандартного символьного набора; VDU 65,66 — печать
символов "АВ". Строки символов могут быть выведены на экран по
вертикали сверху •низ. Команда "DOWN Y,X,A$"
выводит строку А$, начиная с Точки с координатами (X,Y).
Если окна не хватает, то оно стирается и новый символ выводится вверх окна.
КОМАНДЫ SPRINT и PRINTER
Команда
"SPRINT X,Y,A,B,A$" позволяет выводить на экран символы любого
размера. Она выводит строку А$, начиная с точ-ки с координатами (X,Y), увеличивая строку символов в А^В раз.
Команда
"PRINTER N" выводит содержимое экрана на периферийное
устройство, например принтер. Команда заканчивается числовым выражением. Если
результат его равен 0, то вывод происходит на экран. Если не 0, то при печати
каждого символа вызывается подпрограмма в машинных кодах, адрес которой содержится
в ячейках 59934, 59935. Код символа располагается в аккумуляторе. Возврат в
основную программу — по команде ассемблера RET.
ВНИМАНИЕ! Надо помнить,
что при работе в М-В нельзя набирать команды: CLEAR#, OPEN#
2, CLOSE# во избежание сброса системы.
ГРАФИКА КОМАНДЫ CHANGE И SWAP
М-В обладает командами для
работы с областью атрибутов:
"CHANGE
маска, данные" — позволяет изменять отдельные биты каждого байта
атрибутов, не затрагивая другие части. Маска записывается в двоичной форме,
если ее бит равен единице, то соответствующий бит атрибутов инвертируется.
Затем данные логически складываются с байтом атрибутов.
"SWAP НОВЫЙ АТРИБУТ, СТАРЫЙ АТРИБУТ" — позволяет обменивать
байты атрибутов. При выполнении этой команды область атрибутов
просматривается, если встречается "старый" байт, то он заменяется на
"новый".
• КОМАНДА FADE
Команда
"FADE БАЙТ" производит некоторые интересные эффекты.
Если в области атрибутов
встречается байт, равный данному байту, то он не изменяется. В противном случае
байт декрементируется.
Для примера наберите следующую программу:
10 FOR А=0 TO
703
20 POKE 22528+A. PEEK A
30 NEXT A
40 FADE 0
Три первых строки заполняют
область атрибутов произвольными значениями. Четвертая вызывает команду FADE .
• КОМАНДА INVERT
"INVERT" — инвертирование
экрана: тон становится фоном, а фон — тоном.
• КОМАНДА DEFG Специальная
команда DEFG "БУКВА", число,....число
Определяет графические символы пользователя. Буква — от
"А" до "U". 8 байт в двоичной форме
определяют форму символа. Первое число — верхний ряд, последнее — нижний.
• КОМАНДЫ GET и PUT
М-В представляет возможность
сохранения какой-либо части экрана в ОЗУ, а также возврат обратно с различных
позиций и в различных масштабах. "GET 0, адрес
хранения, X,Y,D,W" — для записи части экрана
размером D*W знакомест в буфере ОЗУ. (X,Y)
— позиция верхнего левого угла сохраняемого блока.
PUT и GET используют единую систему координат с командами ATTR и SCREEN$. Эти координаты
абсолютны, т.е. не зависят от положения окна на экране (как например для PRINT AT). GET размещает экранную информацию в ОЗУ, а следом
за ней располагаются байты атрибутов. Для резервирования специальной области
для хранения экрана используется команда CLEAR.
Вычисление объема буфера может быть произведено по формуле:
9*W*D.
"PUT F,
АДPEC,Y,X,D,W" — воссоздание экрана. X,Y,D,W —
аналогично "GET ". F изменяет способ
восстановления информации на экране:
F=0 —
экран замещается данными из буфера;
F=1 —
наложение буфера на экран;
F=2 —
исключающее "или" буфера и экрана;
F=4 —
аналогично F=0, но атрибуты не изменяются;
F=5 —
аналогично F=l, но атрибуты не изменяются;
F=6 —
аналогично Р=2, но атрибуты не изменяются.
• КОМАНДА SPUT
"SPUT
АДРЕС, X,Y,B,C,W,D" — модификация команды "PUT ", позволяющая увеличивать изображение,
выводимое из буфера (В,С — увеличение по X,Y
соответственно).
Примечание: глубина блока D выражается в точках, т.е. для "SPUT " глубина в
8 раз больше, чем для "PUT ".
"SPUT " не меняет
атрибутов.
УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ
• ПРОЦЕДУРЫ
М-В позволяет использовать
процедуры, т.е. вызвать подпрограммы по их имени — будто бы новая
команда. Имя процедуры может сопровождаться несколькими выражениями — параметрами
процедуры. Значения этих выражений будут присвоены соответствующим переменным
при запуске процедуры.
Недостаток программы М-В — это то, что не могут быть использованы
локальные переменные. Используя процедуры, можно свести программу к нескольким
подзадачам. Каждой задаче соответствует своя процедура. Отладка каждой из них
может проводиться отдельно. На завершающем этапе процедуры объединяются в
единую программу. Выбрав осмысленные имена этим процедурам, очень легко
проследить за выполнением программы.
Начало процедуры отмечается
символом "", за которым следует имя процедуры. Определение процедуры
должно быть первым утверждением в строке. Если эта процедура имеет параметры,
за именем следует символ подчеркивания "_" и параметры, отделенные
друг от друга запятыми. Заканчивается она выражением
"ENDPROC имя процедуры". После выполнения этой команды процесс
выполнения основной программы возобновляется.
Вызов процедуры:
"Имя
параметр, параметр,...".
М-В накладывает одно ограничение:
имена не могут быть одинаковыми в процедуре и в программе, так как они не
являются локальными.
Пример процедуры:
90 DISPLAY A. А$
91 PAPER A :
INK 9
92 MODE 4 :
STIPPLE 6
93 PRINT A$
94 ENDPROC DISPLAY
Этот простой фрагмент,
начинающийся со строки 90, определяет процедуру с именем
DISPLAY и параметрами — числовой переменной А и строковой — А$.
Устанавливается желаемый цвет, выбирается размер букв и А$ выводится на экран.
Пример вызова процедуры:
DISPLAY 2, "MEGABASIC".
Процедуры могут быть вызваны только из программы и не
используются в режиме непосредственного исполнения.
• ЦИКЛЫ ТИПА REPEAT-UNTIL
Также вы можете создать цикл типа "REPEAT-UNTIL". "REPEAT" начинает цикл, "UNTIL N" заканчивает. Цикл продолжается
только при М!=О, иначе — выход из цикла. Глубина вложения циклов REPEAT-UNTIL
— до 10.
• СТЕК ПРОЦЕДУР И ЦИКЛОВ REPEAT-UNTIL
Эти циклы и процедуры используют
специальный стек для хранения номера строки возврата и номера утверждения в
строке, т.е. адреса возврата. При входе в процедуру или выполнении команды REPEAT адрес возврата заносится в стек, что позволяет
вернуться в головную программу из процедуры или в начало цикла при
необходимости. При выходе из процедуры и при завершении цикла этот адрес
удаляется из стека. Если стек пуст, но встречается еще один возврат из
процедуры или цикла, на экран выдается сообщение об ошибке:
"PROC STACK UNDERFLOW". Объем стека — 10 значений, т.е. любая
попытка занести туда 11-й адрес приведет к появлению сообщения об ошибке "PROC STACK OVERFLOW.
• КОМАНДЫ POP, PUSH И PCLEAR
Для работы со стеком предназначены
команды: "POP" — удаление значения из стека; "PUSH номер утверждения, номер строки возврата" —
занесение в стек; "PCLEAR" — очистка стека. В
случае использования процедур и циклов REPEAT-UNTIL в начале программы должна
производиться очистка стека. •КОМАНДА BRANCH
"BRANCH
номер строки" — команда, заставляющая компьютер выполнять подпрограмму по
указанному адресу по окончании каждой строки программы. Конец подпрограммы
обозначается командой ENDPROC .
Если номер строки равен 0, то
обращения к подпрограмме не Происходит.
• КОМАНДА MTASK
М-В позволяет осуществлять
простейший двухзадачный режим. Команда "MTASK " позволяет выполнять
одновременно два параллельных процесса. Для распределения в начале программы
записываем два раза "MTASK номер строки". Эти два Номера определяют
две точки входа в параллельные процессы.Соответствующий процесс запрещается,
если один из номеров равен 0. В этом режиме необходимо сопровождать каждую команду
обращения к INTERFACE 1 двойным двоеточием в конце: