■ SOFTCLOCK
Программа SOFTCLOCK предназначена для индикации теку-
щего времени в правом верхнем углу экрана с возможностью одно-
временной работы на компьютере (например в BASIC-E). После
загрузки программы и появления сообщения:
ООК, 0:1
Выполните команду Р1; в середине экрана появится надпись:
POCKEJ (ожидание)
а затем, через некоторое время:
ZADEJ С AS > 09.46.00 <
Наберите время по указанному образцу и нажмите "El". В вер-
хнем правом углу экрана появится мигающая шкала цифровых ча-
сов.
■ PLATA V.3
1. Введение
Программа позволяет практически полностью автоматизиро-
вать проектирование рисунка проводников печатных плат (ПП) как
односторонних, так и двусторонних. Максимальные размеры проек-
тируемых плат 16,5 х 16,5 см.
1.1. Работа программы
Программа состоит из 2 основных взаимозаменяемых блоков.
Первый блок, обозначенный Версия-1, обладает всеми возмож-
ностями программы, приведенной в каталоге под номерами 1-15.
Второй блок - Версия-2 не содержит подпрограмм ^ля корректи-
ровки рисунка проводников с помощью курсора. Основным достоин-
ством этого блока является высокое быстродействие.
В случае, когда изменения незначительны, рекомендуется ис-
пользовать Версию-1, поскольку это не требует применения мер по
защите данных на кассете. Перечень подпрограмм и способы приме-
нения:
1. Библиотека элементов (БЭ);
2. Перечень элементов (ПЭ);
3. Таблица соединений (ТС);
4. Расположение элементов (РЭ);
5. Проверка соединений (ПС);
6. Сортировка соединений по длине;
7. Трассировка;
8. Вывод на экран рисунка проводников;
9. Запись;
10. Загрузка;
11. Вывод таблицы соединений;
12. Вывод на печать рисунка платы;
% 13. Вывод негатива ПП;
14. Выход в Бейсик.
Рисунок проводников на экране изображается на фоне точек,
образующих растр с шагом N (-0/0,125 мм). Шаг 1/20 является базо-
вым для системы, поэтому все размеры элементов, а также их распо-
ложение должны быть кратны ему.
При создании новых баз данных работу следует начинать с ини-
циализации, это вызовет удаление старых баз и занесение в счетчик
номера 1.
При работе с отдельными подпрограммами на вопрос, появляю-
щийся в последней строке, следует отвечать "нет" или вводить данные
в очередности, объявленной программой.
Возврат в систему возможен только через СО ТО О, иначе ранее
введенные данные окажутся уничтоженными.
1.1.1. Библиотека элементов
С помощью этой подпрограммы создается библиотека элемен-
тов, которые будут использованы в проектируемой плате. Пользова-
тель может создать свою собственную библиотеку элементов,
которую можно добавлять к имеющейся.
Библиотека элементов содержит информацию о конструкции
каждого элемента, т.е. его размеры и расположение выводов. Эти
данные кодируются следующими параметрами элементов:
HG - расстояние до следующего ряда контактных площадок
(КП) выводов;
PN - количество КП;
DZ - расстояние между КП;
XX - расстояние между выводом и краем корпуса;
YY - расстояние между выводом и другим краем корпуса;
XL - длина корпуса;
YL - ширина корпуса.
Следует помнить, что размеры должны быть кратны шагу 1/20.
Ниже приведен пример кодировки измерений, а размер элемен-
тов с расположением выводов, отличающимся от рядорого, следует
кодировать по расположению их КП в соответствии с программой 4.
Ниже приведена таблица кодировки размеров наиболее часто
используемых элементов.
Характеристика элементов, приведенных в таблице:
1. Микросхема 16-выв.
2. Микросхема 14-выв.
3. Микросхема 40-выв.
4. Один ряд разъема
5. Одиночная КП
6. Микросхема 18-выв.
7. Микросхема 12-выв.
8. Микросхема 24-выв.
9. Микросхема 8-выв.
10. Резистор с расстоянием между выводами 8 1/20 8
0.125=10 мм
Внимание!
В качестве первой позиции данного перечня всегда следует да-
вать параметры, связанные с КП (отверстием).
Любая позиция данного перечня может быть автоматически
вызвана подпрограммой "8м при вводе дополнительных КП (отвер-
стий). Перечень может содержать до 20 разных позиций.
1.1.2. Перечень элементов
Перечень элементов содержит позиционные обозначения эле-
ментов в соответствии с принципиальной схемой, например: U21, R3
и т.д. и их номера ИЗ БЭ, характеризующие их размеры и располо-
жения выводов.
Вводимые обозначения должны содержать не более 100 пози-
ций.
ПЭ автоматически дополняется координатами X и Y данного
элемента во время работы подпрограммы "4" и подпрограммы "8м при
вводе новых КП (отверстий).
1.1.3. Таблица соединений
ТС содержит наименование элемента и номер соединяемого вы-
вода, а также наименование и номер вывода элемента, с которого
осуществляется соединение.
ТС может содержать до 500 позиций.
При необходимости содержание любой строки можно изменить
с помощью процедуры "POP". После ее вызова следует ввести номер
изменяемой строки, а затем полное ее содержание.
В ТС могут быть внесены дополнительные сведения с помощью
процедуры "S". Эта подпрограмма позволяет также автоматически
создать новую ТС, содержащую сведения о невыполненных соедине-
ниях для ее использования при проектировании второй стороны пла-
ты.
1.1.4. Размещение элементов
Эта подпрограмма позволяет разместить элементы на поверхно-
сти платы. Операцию размещения можно произвести путем задания
координат.
После перемещения курсора в нужное место или определения
координат следует ввести данные относительно поворота (от 0 до 3).
Доступ к манипуляции элементом достигается нажатием клавиш 6
или 7 в зависимости от принятого направления считывания элемен-
тов. В последнем случае на экране появляется очередное обозначение
элемента, и его данные.
Одновременно изображение выбранного элемента начинает
пульсировать.
Масштаб платы выбирается клавишей "Z" и вводом 1 или 2.2-
масштаб увеличения, можно применять при размерах платы не более
127 х 1/20 на 64 х 1/20. Если размеры платы больше, то следует
пользоваться масштабом уменьшения 1.
При попытке размещения элемента за пределами поля програм-
ма выйдет в интерпретатор.
При размещении элементов приняты следующие команды:
С - вызов курсора;
5-8 - перемещение медленно (с SHIFT - быстро);
Е - заканчивает локализацию элемента, после которого следует
ввести параметр поворота;
W - размещение элемента в соответствии с координатами;
В - возврат в меню.
После первоначального расположения элементов следует вы-
полнить подпрограмму "5" и вернуться в подпрограмму "4" для вы-
черчивания прямых соединении. Корректировка должна быть
направлена на получение нескрещивающихся линий минимальной
длины.
1.1.5. Проверка соединений
Целью является анализ ТС и определение равнопотенциальных
цепей. Программа может автоматически скорректировать таблицу
соединений. После выполнения программы следует вернуться к под-
программе "4м с вычерчиванием соединений.
Следует повторить анализ расположения элементов и его кор-
ректировку. В случае коррекции следует повторить подпрограмму
"7". Эти операции следует повторить многократно, обязательно за-
канчивая подпрограммой "7".
1.1.6. Сортировка данный соединений по длине
После выполнения подпрограммы "S" порядок соединений в таб-
лице обычно меняется. Программа работает в автоматическом режи-
ме и создает таблицу соединений, в которой соединения расположены
по нарастанию длины.
Эта подпрограмма позволяет также сортировать соединения по
нарастанию значений X и Y. Сортировка по этим параметрам особен-
но полезна при проектировании двусторонних плат.
В этом случае нужно:
- после выполнения "5м произвести сортировку по длине;
- повторить сортировку по Y. В итоге получится чертеж ПП, у
которой большинство проводников расположено по оси X.
Для выполнения второй стороны:
- с помощью программы "3м получить таблицу невыполненных
соединений;
- повторить "5";
- отсортировать по длине;
- отсортировать по оси X.
Вторая сторона платы будет содержать соединения преимуще-
ственно по оси Y.
1.1.7. Трассировка
Режим работы - автоматический. В конечном итоге мы получим
чертеж рисунка ПП, который можно увидеть в подпрограмме^. При
работе на экране высвечиваются соединения, которые не удается
выполнить.
После вызова подпрограммы нужно выбрать режим:
N - трассировка заново;
А - повторный анализ ТС и поиск другой точки, связанной с
данной, к которой требуется провести соединение;
R - позволяет выполнить невыполненные ранее соединения. Ее
следует вызывать после выполнения ручной корректировки
рисунка в подпрограмме "8".
Во время работы всех режимов ТС автоматически обновляется
по мере поступления информации о новых соединениях. Программу
следует многократно повторять попеременно с подпрограммой "8".
1.1.8. Ручная коррекция.
С - вызов мигающего курсора;
5-8 - перемещение курсора (CAPS - ускорение);
W - вызов подпрограммы рисования;
Т - нарисовать контур платы;
Н - нарисовать много символов для рисования платы;
Р - окончание коррекции;
В - возврат в меню;
Переход (7)
- трассировка режим R.
Внимание!!!
Вся программа работает только с маленькими (строчными)
буквами.
■ LASER BASIC
1. Режим интерпретации
LASER BASIC (LB) - средство расширения стандартного бейси-
ка (В ROM ZX) и обеспечивает разработку программ с применением
графики, мультипликации, движения сложных графических объек-
тов. Для этого LB имеет более 100 дополнительных программ.
LB не создает независимой программы (интерпретатор должен
быть в памяти ZX SPECTRUM в качестве резидента). Для создания
независимой программы существует компилятор LB, который значи-
тельно увеличивает скорость выполнения операций и не требует
присутствия интерпретатора.
1.1. Работа с микродрайвом
LB может быть автоматически переписан на картридж микро-
драйва, если воспользоваться одной из опций меню загрузчика.
После загрузки LB отмотайте ленту и выберите опцию S. При
этом будет необходимо останавливать и запускать ленту по указа-
нию.
Загрузить LB с микродрайва можно по команде:
LOAD *"M";1;"LASER"
Однако при работе с микродрайвом есть одна проблема. Если
происходит ошибка, например "FILE NOT FOUND", то управление
передается не LB, а стандартному бейсику. Вы об этом узнаете по
тому, что перестанут исполняться команды из расширенного набора.
Чтобы передать управление в LB надо нажать N и ENTER. Если это
не помогает, то наберите команду:
RANDOMIZE USR 58830 и ENTER.
В крайнем случае пользуйтесь RANDOMIZE USR 58820.
Терминология
Спрайт - это управляемый графический объект. Лазер-бейсик
позволяет задать до 255 спрайтов, каждый имеет размеры, определя-
емые пользователем. Размеры спрайтов зависят от объема свободной
памяти.
Прилагается программа генератор спрайтов. После создания
спрайтов вы можете записать их на ленту или в картридж в одном из
двух режимов.
1) Спрайты могут использоваться только с генератором спрайтов
(ГС).
2) Спрайты могут использоваться только с лазер-бейсиком.
Два набора готовых спрайтов (в режиме 2) имеются в приложе-
нии - это SPRITE 2А и SPRITE 2В.
1.2. Окна
Окно экрана - это часть экрана, заданная четырьмя переменны-
ми:
COL - от 0 до 31; ROW - от 0 до 23;
LEN - от 1 до 32; HGT - от 1 до 24;
COL и ROW указывают на номер столбца и номер строки отно-
сительно левого верхнего угла экрана.
Например:
ROW=5: .COL=6: .HGT=4:
LEN=3: .INVV
Окно спрайтов - это часть спрайта, заданная переменными:
SPN, SCL, SRW, HGT, LEN.
SPN - указывает на N спрайта.
SCL и SRW - определяет столбец и строку в спрайте.
HGT и LEN - размер окна в спрайте.
Если заданное таким образом окно выходит за пределы спрайта,
то команда не проходит, хотя сообщение об ошибке не выдается.
Область спрайта - это область памяти, в которой хранятся все
заданные спрайты. Ее верхняя граница - 56575, нижняя граница -
плавающая. Узнать ее можно:
PRINT РЕЕК(62464)+256*РЕЕК(62465) или
LETX=PEEK (62464) :PRINT X
RAMTOP
Область спрайта распространяется вниз и не должна пересекать
границу RAMTOP, которая определяется:
PRINT РЕЕК(23730) +256*РЕЕК(23731) или
LETX=PEEK(23730) :PRINT X
При каждом задании спрайта расходуется: 9*HGT*LEN+5 бай-
тов. Обычно не стоит волноваться о выходе за пределы RAMTOP,
кроме тех случаев, когда спрайты создаются во время работы про-
граммы через .ISPR или .SPRT. Проверку можно выполнить приве-
денными выше вычислениями.
Мы рекомендуем сначала создавать спрайты в генераторе спрай-
тов, а затем загружать в отведенную для них область одним из следу-
ющих способов:
CLEAR (N-1)
LOAD'TN" CODE (N)
POKE62464, N
где "N" - адрес начала области спрайтов, a "FN" - имя файла,
данное файлу спрайтов при выгрузке его из ГС. Стартовый адрес
области спрайтов - это низший байт из файла спрайтов, он также
задан ГС.
Пиксели
Элементарный блок графики размером в один стандартный сим-
вол содержит 8*8 точек или пикселей, каждый из которых представ-
лен битом в памяти.
Пиксель - это точка. Если он включен, он имеет цвет INK, а если
выключен - PAPER.
Атрибуты
Атрибуты цвета INK или PAPER блока, а также параметры
BRIGHT и FLASH управляются специальными байтами и называют-
ся атрибутами.
1.3. Операции
1.3.1. Операции с экраном
Есть операции, которые выполняются с частью экрана. Область
экрана при этом называется окном. Эти операции включают в себя:
скроллинг, инверсию, построение симметричных изображений и т.п.
Все команды этой группы имеют.на конце букву V: .SRIV,
.INVV, .MIRV
При этом, если окно выходит за пределы экрана, оно автомати-
чески подгоняется под экран.
1.3.2. Операции между экраном и спрайтом
Размеры спрайта используются в качестве размеров окна; COL
и ROW используются для задания координат верхнего угла окна.
Таким образом, эти функции выполняются с переменными SPN,
COL, ROW.
Команды этой группы начинаются с "РТ" или "GT".
Например:
.GTBL, .RTXR, .PTND и т.п.
1.3.3. Операции со спрайтами
Они аналогичны операциям с окнами. Используемая перемен-
ная - SPN. Команды имеют окончание "М".
1.3.4. Операции между окном экрана и окном спрайта
Как и ранее .ROW, .COL, .HGT, .LEN определяют окно экрана,
но в этом случае .CSL и .SRW используются для определения поло-
жения окна в спрайте. Измеряются .SRW и .SCL в символах.
.SCL - слева, .SRW - вверху. Если .SRW+.HGT больше, чем
высота спрайта или .SCL+.LEN больше, чем его ширина или .LEN-
.COL больше 32 или .HGT+.ROW больше 24, то команда не исполня-
ется. Команды этой группы начинаются с "PW" или с "GW".
1.3.5. Операции между спрайтом и окном экрана
Номера спрайтов хранятся в SP1 (для первого спрайта) и в SP2
(для второго спрайта с окном). Размеры окна - это размеры спрайта
без окна, а положение окна в спрайте (SP2) задается .SCL и .SCW.
Если спрайт SP1 пересекает границу спрайта SP2, то команда не
выполняется. Команды этой группы начинаются с "РМ" или с "GM".
1.3.6. Операции спрайт-спрайт
Это команды, по которым спрайт трансформируется и результат
заносится во второй спрайт. В этой группе только две команды:
.SPNMh.DSPM
Пустой спрайт: он не содержит данных для экрана. Его можно
использовать, например, для хранения подпрограммы в машинных
кодах, массива; он может быть использован для процедуры определе-
ния столкновения спрайтов.
1.4. Редактирование и запуск программ
Редактор ZX расширен настолько, что дополнительные команды
LB проходят проверку на синтаксис при вводе программы. Все коман-
ды LB начинаются с точки, за которой идут четыре символа, изобра-
женные заглавными буквами. Присваивания такие, как .COL или
.ROW не должны содержать пробелов между и именем перемен-
ной. Дополнительные функции записываются через "?" с последую-
щими тремя символами.
Например:
COL, ROW и т.п. Они могут использоваться только для передачи
значения переменной и не могут использоваться как часть выраже-
ний или с оператором PRINT.
Например:
LET X-?COL X:LET Y=?KBF D:LET 2>=?GET (правильно)
LET X=?COL*3+Y:PRINT ?COL (неправильно)
Если LB работает с интерфейсом 1, то ошибки микродрайва
приводят к передаче управления в системный бейсик. После этого
редактор уже не понимает команды из расширенного набора LB. Для
возврата в LB сотрите (DELETE) строку, которую вы пытались ввести
и наберите # с последующим нажатием ENTER.
Для запуска программы - RUN. Можно RUN N. Можно приме-
нять для этой цели и GO ТО, GOSUB, CONTINUE.
1.5. Начало работы с программой
Сначала загрузите LB. Остановите ленту по указанию. Про-
грамма готова к работе после появления на экране меню. Теперь
загрузите файл "SPRITE 2А". Он загружается набором опции "3м в
меню и нажатием "PLAY" на магнитофоне. После загрузки спрайтов
вы можете работать с LB (опция 1). Вы сможете пользоваться своими
собственными спрайтами, выполненными в программе "SPRITE
GENERATOR".
Все ключевые слова стандартного бейсика вводятся как обычно.
Наберите:
10 REM THIS IS YOUR LASER PROGRAM
20 .COL=l
30 .ROW=l
40 .HGT=20
50 .LEN=30
60 JNW
RUN (или GOTO 10)
1.6. Сервисные команды
.RNUM, .REMK, .TRON, .TROF, .RNUM служит для перенуме-
рации строк: RNUM 102, 100, 5 строки до 102 не изменяются, строке
102 присвоится номер 100, а последующие строки пронумеруются с
шагом 5. Шагом по умолчанию =10. Новый номер строки по умолча-
нию принимается равным старому первый номер по умолчанию при-
нимается равным 0.
.REMK применяется для удаления всех строк REM с целью эко-
номии памяти.
.TRON, .TROF - это отладочные операторы для пошагового вы-
полнения программы. После встречи оператора .TRON итерпретатор
останавливается на каждой строке программы, печатает ее и ждет
нажатия клавиши. После .TROF этот режим отключается.
1.7. Переменные
1.7.1. Графические переменные
Способ, котором параметры передаются графическим процеду-
рам, предназначен для повышения скорости расчетов. Каждая ко-
манда с графика может использовать набор графических переменных
(из десяти). Всего допускается до 16 наборов. Из них можно делать
индивидуальную выборку по форме: .SET=<EXP>, где <ЕХР> может
быть выражением из бейсика от 0 до 15.
Эти 10 переменных:
ROW |
- вертикальная координата (0-23) |
|
верхний рад имеет ROW=0 |
COL |
- горизонтальная координата (0-31) |
|
левый столбец имеет C0L=0 |
HGT |
- высота текущего окна (1-24) |
LEN ■ |
- длина текущего окна (1 -32) |
SRW |
- вертикальная координата внутри спрайта |
|
(O-(HGT-l)) |
SCL |
- горизонтальная координата внутри спрайта |
|
(O-(LEN-l)) |
NPX ■ |
- выражает направление и величину вертикального |
скроллинга. Положительное значение - вверх,
отрицательное - вниз. Единица измерения пиксель
(не символ). Диапазон -128-+127.
SPN - номер спрайта (1-255). Применяется для тех команд,
которые работают с одним спрайтом.
SP1 - для операций между спрайтом и окном другого
спрайта.
Здесь содержится номер первого спрайта.
SP2 - для тех же операций. Содержит номер спрайта,
имеющего окно.
Пример:
10 .SET=0:.SPN=4:.ROW=0:.COL=s-4
20 BORDER IrBRIGHT 1:INK 6:PAPER l:CLS:.ATOF
30 FOR I=-4 TO 32
40 .PTXR:.COL=I+l :.PTXR
50 PAUSE 40
60 NEXT I
70 STOP
10 - Выбирается графический набор 0. Спрайт N4.
20 - Устанавливаются атрибуты экрана, он очищается, флаг
атрибутов отключается.
30 - Организуется цикл для движения спрайтов N4 по
горизонтали от координаты -4 до +32.
40 - Удаляется старый спрайт, помещается новый.
50 - Пауза для плавности движения.
Можно расширить эту программу для движения двух спрайтов в
противоположных направлениях. Второй спрайт будем получать зер-
кальным отображением первого. Здесь надо использовать два набора
переменных. |
20 |
DEF FNA#(X, Y) :.SET-X:.SPN-4:.ROW-Y |
30 |
.RETN |
40 |
INK 6:PAPER 0:BORDER 0:BRIGHT l:CLS:.ATOF |
50 |
.PROC FNA#(0, 0):.PR()C FNA#(1,1> |
|
.COL=32uSET=X:.COL=-4 |
60 |
FOR 1=1 TO 32 |
70 |
.SET=l:.MIRM:.PTXR:.COL=28-I:.PTXR:.MIRM |
80 |
PAUSE 2 |
90 |
NEXT I |
100 |
GOTO 40 |
20 и 30 задают процедуру, которая устанавливает переменные
для соответствующих наборов. При первом проходе SET=0 и
ROW=0. При втором проходе SET=1 и ROWel. Это значит,
что оба набора идентичны, за исключением ROW.
40 - Дважды расчитывается процедура А#.
50 - Устанавливает столбцы.
60 - Начало цикла.
70 - Перемещает спрайт слева направо, используя при этом
переменные из набора 0; строит зеркальное отображение спрайт
7 ТА и перемещает его слева направо.
1.7.2. Изменение значений переменной
Кроме необходимости назначения графических переменных
приходится менять их текущие значения. Для этого имеются 11 фун-
кций: ?COL ?ROW ?LEN ?HGT ?SP1 ?PSP ?NPX ?SCL ?SRW ?SET.
Этими функциями текущим значениям переменных присваива-
ются значения синклеровских системных переменных.
Например:
LET X=?COL: LETROW=?ROW: LET SET-7SET
Все эти функции не могут быть частью выражений или парамет-
рами оператора.
1.8. Процедуры обработки спрайтов
.SPRT - нужен для задания новых спрайтов. Область спрайтов
поднимается на величину: 9*HGT*LEN+5 байт. Если номер этого
спрайта был ранее задан, то сначала стирается старый спрайт (при
этом нижняя граница неизменна, а верхняя понижается), а затем
размещается новый.
Если спрайт задается впервые, то данные в него должны быть
внесены оператором.
Например:
.GTBL
Параметры команды |
Назначение |
.SPN .LEN .HGT |
номер помещенного спрайта (1-255) длина спрайта в символах (1-255) высота спрайта в символах (1-255) |
Поскольку эта команда расширяет область спрайтов вверх, она
имеет ограниченную применимость. Чаще пользуются командой
.ISPR, Неаккуратное использование может привести к порче про-
граммы.
.ISPR - то же самое, что и .PRT, но здесь область спрайтов
развивается вниз. Если спрайт с данным номером уже есть, то появ-
ляется сообщение об ошибке. Если при использовании этой команды
начало области спрайтов опустится ниже RAMTOP, то программа
может испортиться.
.WSPR - служит для стирания существующего спрайта. Верхняя
граница области понижается. Обычно для этого применяют .DSPR.
.DSPR - аналогична предыдущей. При стирании спрайтов ниж-
няя граница области повышается.
1.9. Скроллинг.
1.9.1. Горизонтальный скроллинг экрана.
Горизонтальный скроллинг экрана выполняется на 1, 4 или 8
пикселей влево или вправо с возвратом или без него.
Команды:
.WL1V - скроллинг влево на 1 пиксель с возвратом
.WR1V - скроллинг вправо на 1 пиксель с возвратом
.SL1V - скроллинг влево на 1 пиксель без возврата
.SRI V - скроллинг вправо на 1 пиксель без возврата
.WL4V, .WR4V, .SL4V, .SR4V - то же на 4 пикселя
.WL8V, .WR8V, .SL8V, .SR8V - то же на 8 пикселей
Описанные выше команды работают с экраном, выполняя скрол-
линг окна, размеры которого - .LEN и .HGT, а координаты - .COL и
.ROW. Скроллинг на произвольное количество пикселей выполняет-
ся последовательной подачей рада описанных команд.
1.9.2. Вертикальный скроллинг экрана
Работа этих команд похожа на работу горизонтального скрол-
линга, но в добавление к параметрам окна добавляется переменная
.NPX, которая задает размер и направление скроллинга в пикселях.
.NPX=-1 - на один пиксель вниз
.NPX=1 - на один пиксель вверх
Команды:
.WCRV - вертикальный скроллинг с возвратом
.SCRV - вертикальный скроллинг без возврата
Вертикальный скроллинг пикселей или атрибутов экрана или
спрайтов требует пространства в буфере. Необходимое пространство
определяют перемножением NPX и LEN. Его объем не должен пре-
вышать 256 байт, поскольку в качестве временного хранилища ис-
пользуется память буфера принтера.
Скроллинг атрибутов экрана похож на скроллинг пикселей, но
выполняется на ширину символов и всегда с возвратом.
Команды:
.ATLV - скроллинг атрибутов влево
.ATRV - скроллинг атрибутов вправо
.ATVV - скроллинг атрибутов вверх
.ATDV - скроллинг атрибутов вниз
Параметры:
.COL (0-31) .ROW (0-23)
.НОТ (1-32) .LEN (1-24)
1.9.3. Горизонтальный скроллинг спрайтов
Горизонтальный скроллинг спрайтов выполняется на 1, 4, 8
пикселей влево, вправо, с возвратом и без. Если спрайт в памяти
отсутствует, то генерируется сообщение об ошибке.
Команды:
WL1M - скроллинг влево на 1 пиксель с возвратом
.WR1М - скроллинг вправо на 1 пиксель с возвратом
.SLIM - скроллинг влево на 1 пиксель без возврата
.SR1М - скроллинг вправо на 1 пиксель без возврата
.WL4M, .WR4M, .SL4M, .SR4M - то же на 4 пикселя
.WL8M, .WR8M, .SL8M, .SR8M - то же на 8 пикселей
Параметр .SPN - номер спрайта.
1.9,4 Вертикальный скроллинг спрайта:
.WCRM - вертикальный скроллинг с возвратом
.SCRM - вертикальный скроллинг без возврата
Параметры:
.SPN - номер спрайта.
.NPX - направление и количество пикселей скроллинга
Й28...+127)
1.9.5. Скроллинг атрибутов спрайта:
4 команды для скроллинга в четырех напрвлениях на 2 символа
j
с возвратом:
/ATLM - влево
.ATRM - вправо SPN - номер спрайта
.ATUM - вверх
.ATDM - вниз
Параметры .SPN - номер спрайта.
1.10. Операторы.
1.10.1. Операторы GET и PUT, группа 1
PUT - помещают спрайт на экран или на другой спрайт.
GET - наоборот, берут данные с экрана или спрайта и помещают
их в спрайт.
Есть 3 группы операторов GET и PUT:
Первая группа более быстродействующая, выполняет операции
между целым спрайтом и предварительно заданным окном. Всем
этим командам предшествуют "GT" и "РТ". Эта первая группа не
имеет специальных команд для перемещения пиксельных данных и
атрибутики, а вместо этого имеет переключатель атрибутов (см.
.ATIN, .ATOF) для перемещения пикселей без атрибутов или с ними.
.GTBL - поместить блок из окна экрана в спрайт
.GTOR - наложить (OR операция) блок окна экрана на спрайт
.GTXR - наложить (XOR операция) блок окна экрана на спрайт
.GTND - наложить (AND операция) блок окна экрана на спрайт
.PTBL - поместить спрайт в окно экрана
.PTOR - наложить (OR операция) спрайт на окно экрана
.PTXR - наложить (XOR операция) спрайт на окно экрана
.PTND - наложить (AND операция) спрайт на окно экрана
Параметры:
.COL -номер левой колонки требуемой позиции экрана (0-31)
.ROW -номер верхнего рада (0-23)
.SPN -номер спрайта
Пример:
.SPN=39: .ROW=l: .COL=l: .PTBL
Поместите спрайт номер 39 на экран в позицию 1.1. Наберите
.ATOF (отключение переноса атрибутики).
Далее:
.ROW=S: .PTBL, спрайт номер 39 появится на экране в другой
позиции, но без атрибутов.
Наберите .ATOF: .РТВС и спрайт появится с атрибутами. Опе-
ратор GET берет данные из окна в заданной позиции, размеры кото-
рого равны размеру спрайта и помещает их в спрайт.
1.10.2. Операторы GET и PUT, группа 2
------
Эти команды выполняют операции между окнами экрана и ок-
ном спрайтов.
.ATON и .ATOF имеют тоже значение, как и ранее.
Здесь нужны 4 новых параметра для задания столбца и строки,
определяющих положение окна в спрайте, а также высоты и длины
этого окна. Этим командам предшедствует "GW" или "PW".
.GWbL - перенос блока с экрана в окно спрайта
.GWOR - наложение по принципу OR
.GWXR - наложение по принципу XOR
.GWND - наложение по принципу AND
.PWBL - перенос блока из окна спрайта на экран
.PWOR - наложение по принципу OR
.PWXR - наложение по принципу XOR
.PWND - наложение по принципу AND
.GWAT - перенос атрибутов блока с экрана в окно спрайта
.PWAT - перенос атрибутов блока из окна спрайта на экран
Параметры:
.COL - номер столбца позиции на экране (0-31)
.ROW - номер строки позиции на экране (0-23)
.SCL - координата левой границы окна спрайта 0 - длина
спрайта - 1
.SRW - коорината верхней строки окна спрайта 0 - до высоты
спрайта - 1
.HGT - высота окна (1-24)
.LEN - длина окна (1-32)
.SPN - номер спрайта (1-225)
1.10.3. Операторы GET и PUT, группа 3.
Группа содержит команды для операций между спрайтом и ок -
ном в другом спрайте.
Эти команды начинаются с "РМ" или "GM".
.GMBL - перенос спрайта в окно другого спрайта.
.GMOR - наложение OR
.GMXR - наложение XOR
.GMND - наложение AND
.PMBL - перенос окна спрайта в другой спрайт
.PMOR - наложение OR
.PMXR - наложение XOR
.PMND - наложение AND
.GMAT - перенос атрибутики спрайта в окно другого спрайта
.РМАТ - перевод атрибутики окна спрайта в другой спрайт
Параметры:
.SPR1 - номер первого спрайта (1-255)
.SPR2 - номер второго спрайта (1-255)
.SCL - координата левой границы окна спрайта (1 - длина
спрайта)
.SPW - координата верхней строки окна спрайта (1 - высота
спрайта)
1Л0.4. Оператор .MOVE
Используется для эффекта мультипликационного перемещения
спрайтов операция выполняется только по XOR или .XOR., поэтому,
прежде чем перемещать спрайт по экрану, его надо сначала туда
поместить через PTXR.
Параметры:
.COL - номер столбца спрайта, подлежащего перемещению
(0-31)
.ROW -- номер его строки (0-23)
.HGT - величина перемещения по вертикали ((-24)-(+24))
.LEN - длина перемещения по горизонтали ((-32)-(+32))
.SP1 - номер спрайта подлежащего перемещению (1-225)
.SP2 - его номер после перемещения (...225)
По команде MOVE берется через PUT спрайт SP1 с позиции
экрана, заданной ROW и COL и перемещается спрайт SP2 в позицию
COL+LEN, HGT+R.
1.10.5. Операторы .ATON и .ATOF
Эти две команды определяют, надо ли переносить атрибуты
спрайтов при выполнении команд PUT и GET.
.ATON - включение переноса атрибутов.
.ATOF - выключение переноса атрибутов.
1Л0.6. Изменение изображения
.INVV - инвертирование окна экрана. Инвертирование - вклю-
чение/выключение пикселей. Цвета INK и PAPER меняются цвета-
ми. Параметры для окна: .COL, .ROW, .HGT, .LEN.
.INVM - такая же операция, но над спрайтом, номер которого
задан SPN. Параметры: .SPN.
.MIRV - содержание окна, зеркально отображенного относи-
тельно вертикальной оси, проходящей через его центр.
.MIRM - содержание спрайта, номер которого задан SPN, зер-
кально отображается относительно оси, проходящей через его центр.
.MARV - зеркальное отображение атрибутов окна относительно
вертикальной оси. Параметры: .COL, .ROW, .HGT, .LEN.
.MARM - тоже самое для спрайта. Параметры: .SPN.
.SPNM - поворот спрайта SP2 на 90 градусов по часовой стрелке.
После поворота присваивается помер SP1.
Примечание: если первый спрайт имел размер 3*8, то второй
- 8*3. Спрайт SP1 должен быть предварительно очищен командой
.CLSM.
.DSPM - увеличение размеров спрайта SP1. После увеличения
присваивается номер SP1. SP1 должен иметь точно вдвое большие
размеры по сравнению с SP2.
Прочие команды:
.SETV - установка постоянных атрибутов INK и PAPER в задан-
ном окне.
.SRTM-тоже, но для спрайта, заданного в SP2. Параметры: SPN
.CLSV - очистка заданного окна экрана (атрибуты не задейство-
ваны)
.CLSM - то же, но для спрайта. Параметры: SPN
.ADJM - эта команда служит для настройки переменных: COL,
ROW, HGT, SCL, SRW, SPN, таким образом, чтобы отдельный спрайт
мог быть взят командами PUT или GET второй группы. Значения
ROW, HGT, LEN, SCL, SRW, могут меняться при испблнении коман-
ды. До исполнения SCL и SRW должны быть равны 0.
Параметры:
.SPN - номер спрайта,который надо взять
.COL - номер столбца
.ROW - номер строки
.SCL - установить в 0 до исполнения команды
.SRW - то же
.ADJV - то же, но не для спрайта, а для окна
Параметры:
.COL, .ROW, .HGT, .LEJN.
1.10.7. Присваивание
Их всего 11. Эти команды присваивают графическим перемен-
ным значение выражений ее бейсика. Использовать команды режима
"Е" нельзя.
.COL= .ROW= .HGT= .LEN=
.SP1= .SP2= .SPN= ,SRW=
.SCL= .NPX= .SET=
1.10.8. Дополнительные функции
Их всего 16:
?COL ?ROW ?NGT ?LEN
?SPN ?SP1 ?SP2 ?SET
?SCL ?SRW ?NPX ?KBF
?SCV ?SCM ?TST ?PEK
Их форма: LET VAR=?FUN, где VAR - переменная бейсика,
?FUN - одна из 16-ти функций.
Эти функции не должны быть частью выражений бейсика.
?COL - выдает значение переменной COL. и т.п.
?KBF - эта функция предназначена для определения нажатия
клавиши. Она проверяет заданную клавишу и выдает ненулевой ре-
зультат при нажатии.
Переменные ROW и COL служат для задания полуряда и столб-
ца на клавиатуре.
Ряд |
Клавиши |
1 |
от |
CS |
доУ |
2 |
от |
А |
floG |
3 |
от |
Q |
доТ |
4 |
от |
I |
floS |
5 |
от |
О |
floG |
6 |
от |
Р |
до Y |
7 |
от |
ENTER |
доН |
8 |
от |
SPACE |
до В |
Примечание: Пользователи "SPECTRUM*" должны иметь в
виду, что при расчете COL и ROW дополнительные клавиши не учи-
тываются.
Отсчет COL ведется по рядам снаружи внутрь.
?SCV - по этой команде элементрный блок экрана (8x8), поло-
жение которого задано переменными COL и ROW, проверяется на
предмет включения пикселей. Если есть включение пикселя, то вы-
дается результат, отличный от 0, в противном случае 0.
Эта функция применяется часто, например, для определения
момента столкновения спрайтов. Для этого проверяется состояние
пикселей элементарного блока (8x8), находящегося впереди движу-
щегося спрайта.
?SCM - по этой команде проверяются пиксели спрайта, номер
которого содержится в SPN. Если есть включенные пиксели, выдается
ненулевой результат и наоборот.
?TST - отыскивается спрайт, номер которого хранится в SPN.
Если его нет, то выдается сообщение об ошибке. Если он найден,
выдается его адрес, а переменные HGT и LEN принимают значения,
равные его размерам.
Спрайты хранятся в памяти в следующем формате:
Байт 1 - номер спрайта
Байт 2 - младший байт адреса следующего спрайта
Байт 3 - старший байт адреса следующего спрайта
Байт 4 - длина спрайта
Байт 5 - высота спрайта
8 * HGT * LEN - данные о состоянии пикселей
HGT * LEN - атрибуты
Итого: 9 * HGT * LEN + 5 байтов
?РЕК - это 16-ти битная версия оператора РЕЕК. В отличие от
прочих функций она имеет при себе выражение в скобках, в котором
содержится адрес.
Пример:
LET X - ?РЕК ( 64264 ) эквивалентно
LET X - РЕЕК ( 64264 ) + 256 * РЕЕК ( 64265 )
1.10.9. Дополнительные команды
POKE X, Y - это 16-ти битная версия РОКЕ из бейсика ZX. Она
помещает младший байт числа Y в X, а старший байт Y в X + 1.
Диапазон X (0....65534), Y (0....65535).
1.11. Процедуры
Одной из сильных сторон языков PASCAL, BASIC ВВС, позво-
ляющих выполнять структурное программирование, является воз-
можность использования процедур.
Часто какая-то последовательность инструкций используется во
многих частях программы. Для этого многие языки программирова-
ния используют подпрограммы. Например, АССЕМБЛЕР использу-
ет для этого инструкцию CALL, BASIC - GO SUB.
Часто бывает надо передать переменную в программу так, чтобы
не были нарушены значения переменных из других частей програм-
мы. Для этого нужны локальные переменные. В стандартном бейсике
это понятие отсутствует.
1.11.1. Локальные и глобальные переменные
При задании процедуры, ее описание содержит список парамет-
ров, которые могут быть строками, числами, но не массивами.
Пример:
10 DEF FN А$# (X, Y, Z, А$, В$)
Надо помнить, что ключевое слово DEF FN набирается не по
буквам. Здесь параметры X, Y, Z, А$, В$ - локальные переменные,
т.е.значения полученные ими внутри процедуры повлияют на их
значения в других частях программы. Все другие переменные, зад ей
ствованные в процедуре, будут глобальными.
1.11.2. Вызов процедур
Для выполнения приведенной выше процедуры используется
оператор: PROC FN А$# (3, 2, К, "HELLO", В$>.
Здесь: FN - ключевое слово на клавиатуре. Тогда локальные
переменные примут значения: Х~3; Y=2; 2>=К; AS^'HELLO"; B$^B$.
Процедура должна всегда заканчиваться командой .RETN (ана-
лог RETURN), после чего управление передается оператору, следу-
ющему за вызовом процедуры»
Исполнение команд идет тем быстрее, чем ближе к началу про-
граммы расположено их определение.
Разрешается применять до 52-х процедур (26 букв латинского
алфавита + 26 букв со знаком $). Чтобы отличать процедуры от
функций пользователя, после процедуры должен стоять знак #.
Пример:
DEF FN А$#=0:
DEF FN С$#=0... и т.д.
1.11.3. Вложенные процедуры
Определение процедуры может включать в себя вызов другой
процедуры, но при этом помните, что значения локальных перемен-
ных для внутреннего вызова распространяются и на первый (внеш-
ний) вызов.
Пример:
Процедура для печати на экране слова "HELLO":
10 DFN FN А$# ()
20 PRINT "HELLO"
30 .RETN
Скобки пустые, поскольку никакие параметры не нужны.
Вызывается эта процедура командой .PROG FN А$# ().
Для задания координат вывода надписи (X, У) процедура выгля-
дит так:
10DEF FN А$# (X, Y)
20 PRINT AT X,Y; "HELLO"
30 .RETN
Чтобы напечетать 'GOOD" в координатах Х~5, Y—8, вызов будет
иметь вид:
.PROC FN А$ (5, 8, GOOD).
Включение процедур в LB затрагивает систему защиты собст-
венного стека ZX, поэтому возврат из подпрограмм RETURN после
GOSUB и .RETN после PROC должны выполняться в правильном
порядке. В противном случае программа может выйти из строя.
1.12. Техника программирования
Следующие разделы даюг начинающим некоторые полезные
советы по технике программирования на языке LB.
1.12.1 Движение спрайтов
Существуют много способов организации перемещения спрай-
тов по экрану. Проблема заключается в выборе наиболее удобного.
Способы отличаются скоростью, простотой, плавностью перемеще-
ний и необходимым объемом памяти. Начнем с самых простых, а
затем перейдем к более изысканным.
Скроллтнг экрана под управлением клавиатуры.
Скроллинг экрана под управлением от клавиатуры использует-
ся, когда спрайт движется по окну экрана, не содержащему других
спрайтов или данных.
Выполним скроллинг окна на 1 пиксель, используя функцию
?KBF.
10 INK G: PAPER 0: BRIGHT 1: BORDER 0: CLS
20 .COb=14 : .ROW-IO : .SPN=2 : .PTBL
30 .SET=5 : .COL=5 : ,ROW=4
40 .SET=6 : .COL=3 : .ROW=5
50 .SET=7 : .СОШ): ,ROW=10: .LEN=32 : ,HGT=2
60 .SET=5 : LET KB=?KBF : IF KB=0 THEN .SET-7 : WL1V
70 .SET=6 : LET KB=?KBF : IF KB=0 THEN .SET-7 : WL1V
80 GOTO 60
Использование PUT
2-ой простой метод состоит в помещении спрайта на экран опе-
ратором ROW, меняя при этом значения ROW и COL. Спрайт, ис-
пользуемый для этого метода, должен иметь вокруг себя бордюр
шириной в один символ.
Возьмем спрайт #30 размером 3*3.
Сначала очистим данные в спрайте: .SPN-30 : .CLSM
Теперь поместим в его центр спрайт номер SP1 (разм. 1*1)
.SP1=50: ,SP2=30 : .SCL=1 : .GMBL
Программа для его перемещения с помощью курсорных клавиш
(нажатие их проверяется с помощью ?KBF):
10 .ATOF : INK 5 : BRIGHT 1 : PAPER : BORDER 0 : CLS
20 .SET=1 : .ROW=4 : ,COL=5
30 .SET=2 : .ROW=5 : .COLr=5
40 .SET=3 : .ROW=5 : .COL=4
50 .SET=4 : ,ROW=5 : ,COL=3
60 .SET=7 : .ROW=10 : .COL=13: .SPN=30
70 .LET X=13 : LET Y=10
80 .SET=1 : LET KB=?KBF : IF KB0 THEN LET X=X-1
90 ,SET=2 : LET KB=?KBF : IF КB0 THEN LET Y=Y-1
100 ,SET=3 : LET KB=?KBF : IF КB0 THEN LET X=X+1
110 .SET=1 : LET KB=?KBF : IF КB0 THEN LET Y=Y+1
120 IF X>30 THEN LET X=30
130 IF X<-1 THEN LET X=22
140 IF Y>22 THEN LET Y=22
150 IF Y<-1 THEN LET Y=-l
160 .SET=7 : .COL=X : .ROW=Y : .PTBL
170 GOTO 80
Большим недостатком этого метода является то, что данные,
имеющиеся на экране, будут стираться в результате прохождения
спрайта по ним. Для устранения этого недостатка применяют логи-
ческие операции. В LB их три: "OR", "XOR", "AND".
"OR" - логическая операция "ИЛИ"
"XOR" - логическая операция "Исключающая ИЛИ"
"AND" - логическая операция "И"
Если два спрайта накладываются по принципу OR, то в резуль-
тате будут включены те пиксели, которые были включены в одном из
этих спрайтов или в обоих вместе.
По принципу AND результат будет содержать включенными
только те пиксели, которые были включены в первом и во втором
спрайтах одновременно.
По принципу XOR - включены те, которые были включены в
одном из двух, но те, которые были включены в обоих вместе будут
включены.
Использовать OR или XOR при движении спрайта можно через
оператор .PTOR или .PTXR. Так через .PTOR данные экрана накла-
дываются после перемещения спрайта в новую позицию, что исклю-
чает стирание. Через .PTXR спрайт снимается с экрана и снова
помещается рядом, что также дает движение спрайта без стирания
основного изображения.
1 о 12.2. Использование команды .MOVE
После задания значения COLh ROW задается их приращение на
каждом шаге HGT и LEN .Каждое исполнение команды .MOVE при-
водит к увеличению COL и ROW.
10 INK 0 : PAPER 6 : BRIGHT 1 : BORDER 7 : CLS : .ATOF
20 FOR N=1 TO 100
30 LET X-INT(RND*32) : LET Y=INT(RND*22)
40 PRINT AT X, Y;"*"
50 NEXT N
60 LEN DR-1 : .HGT=DR : LET DC=1 : XEN=DC
70 .SP1=50 : .SP2=50 : LET R=10 : .ROW=R : LET 013 :
.COL-C :.SPN=50: .PTXR
80 .MOVE
90 LET 07CQL: LET R=?ROW
100 IF C=29 OR C=0 THEN LET DC=DC-1 : .LEN=DC :BEEP 0.0,5
110 IF R=19 OR R=0 THEN LET DR=DR-1: .HGT=DR :BEEP 0.0,5
120 GOTO 80
Помещение спрайта на экран с повышенной точностью.
В LB нет команд для установки спрайтов на экран с точностью
до пикселя, для перемещения спрайтов по экрану с более высокой
разрешающей способностью. Для тех, кому необходимо перемещать
спрайты по экрану с более высокой точностью можно рекомендовать
ниже описанную методику.
Если надо переместить спрайт слева направо с шагом 2 пикселя,
а скроллинг экрана при этом делать нельзя, то нужно сначала с
помощью программы ГС создать 4 спрайта, каждый из которых сдви-
нут относительно предыдущего вправо на 2 пикселя. Если их прону-
меровать от одного до четырех, то программа будет выглядеть так:
10 FOR С=0 ТО 31
20 .COL=C : .SPN=1: .PTBL: .SPN=2: .PTBL
30 .SPN=3 : .PTBL: .SPN=4: .PTBL
40 NEXT С
1.12.3. Определение столкновений спрайтов
Для этого служат команды ?SCV и ?SCM.
?SCV служит для проверки позиции символа на экране.
Если в позиции, заданной COL и ROL, нет ничего - выдается 0,
в противном случае - число. Иногда пользуются более мощной, но
более медленной командой ?SCM. Она проверяет спрайт, номер кото-
рого находится в SPN и выдает 0, если там нет включенных пикселей,
или какое-нибудь число в противном случае.
Эта команда обычно используется для выполнения следующих
функций:
- проверки столкновения символов;
- определения, что находится в заданном квадрате;
- отыскания заданного объекта на экране.
Проверка на "столкновение" наиболее часто проводится для оп-
ределения наложения движущегося спрайта на какойлибо графиче-
ский символ, находящийся на экране.
В основе лежит следующий метод:
Примем часть экрана в том месте, где предполагается размеще-
ние спрайта, за квази-спрайт. Далее вызывают процедуру .PTND для
спрайта и квази-спрайта, а затем проверяют ?SCM. Если значение не
0, то столкновение (коллизия) не произошло. Но здесь есть недоста-
ток в том, что если новый байт перекрывает старый, то старый спрайт
будет удален до того, как начнется вышеописанная процедура, и
соответственно, до помещения нового спрайта на экран. Наилучшее
решение - работать через XOR, т.е. через .PTXR. Необходимо взять
содержимое окна, наложить по XOR его на содержимое старого
спрайта в памяти (чтобы удалить все данные из спрайта), затем
сделать проверку на коллизию с немедленным перемещением спрай-
та на экран.
Если коллизия произошла, часто бывает полезным узнать, с чем
же спрайт столкнулся. Для начала предположим, что окно экрана,
которое мы обследуем, содержит известный набор символов и ника-
ких прочих данных там нет. Метод состоит в том, чтобы загрузить
квазиспрайт с рабочим объектом и затем сравнить его со спрайтами
из набора.
Для этого нужно только наложить проверяемый спрайт на ква-
зи-спрайт по XOR, затем сделать ?SCM. Если в результате 0, то они
идентичны, если нет - то сделать XOR для другого спрайта и т.д.
И, наконец, рассмотрим случай, когда исследуемый объект со-
держит кроме одного из возможных спрайтов еще целый ряд данных.
В этом случае проверяемые объекты сначала накладываются по AND
для удаления всех данных, затем XOR, затем ?SCM.
1.12.4. Скроллинг пейзажа.
Эта операция настолько часто встречается в видеоиграх, что ее
необходимо рассмотреть отдельно.
Первое правило - это двигать спрайт настолько, насколько это
необходимо. Например, если имеется горный пейзаж, а горы занима-
ют в нем три верхних ряда, то надо эти три ряда двигать. Самый
простой и эффективный способ плавного перемещения - это пожерт-
вовать одним столбцом экрана для организации обмена со спрайтом,
подлежащем скроллингу. Предположим, необходимо двигать спрайт
шириной 4 или 5 экранов, который расположен в строках с 8 по 10
(3 строки). Пусть скроллинг идет на пиксель, а горизонтальное пере-
мещение атрибутов отсутствует. Практически все равно, каким стол-
бцом экрана мы пожертвуем - самым правым (31) или самым левым
(0). Давайте используем столбец 0. Для этого необходимо задать окно
в левом столбце шириной в один символ и высотой в три символа,
задав при нем одинаковые INK и PAPER, т.е. пиксели в нем видны не
будут. Это делается командой .SETV. Далее помещают столбец
спрайта на активную часть экрана командой .PWBL. Если скроллинг
идет вправо, то в это вспомогательное окно помещается 32-ой столбец
спрайта, после чего выполняется скроллинг на один пиксель 8 раз и в
дополнительный столбец помещается 33-ий столбец спрайта и т.д.
Если скроллинг производится влево, то вспомогательное окно
организуется в правом краю экрана.
1.12.5. Перезадание наборов символов графики пользователя
j 21 символ IDG (графики пользователя), имеющиеся в стандар-
тном бейсике, здесь недопустимы. Существует системная перемен-
ная CHARS, указывающая на адрес памяти, который на 256 байтов
меньше, чем начало набора символов в RUM (от 32-го символа ASCII
до 128-го). Пользователь может заслать новое значение в CHARS,
чтобы эта переменная указывала на другую область памяти, где будет
размещен новый набор символов. Очевидным местом для хранения
набора является область спрайтов.
1.12.6. Наборы переменных
Применение 16-ти наборов переменных значительно повышает
скорость програмных вычислений. Если, например, необходимо пе-
ремещать 4 окна на экране, можно задать параметры для каждого
окна в виде набора переменных.
Например:
.SET-1: .MGT=5: .LEN=5: .R0w=0: .COL=0
.SET=2: .HGT=4: .LEN=6: .R0w=0: .COL=5
,SET=3: .HGT=6: .LEN=4: .R0w=0: .COL=12
,SET=4: .HGT=7: .LEB=3: .R0w=0: .COL=18
Теперь для того, чтобы выполнить скроллинг для каждого окна,
достаточно задать:
.SET=1: .WR1V: .SET=2: .WL2V: .SET=3:.WL8V
.SET=4: .WR1V
1.13. Загрузка и запись программ в LASER BASIC
Программы могут быть загружены и выгружены как подачей
прямой команды, так и из программы.
1.13.1. Загрузка и запись прямой командой
Для записи не автостдрующей программы напрямую:
- для ленты: SAVE "FILENAME";
- для микродрайва: SAVE *"М"; N; "FILENAME".
Можно помещать несколько SAVE и LOAD в одну инструкцию:
SAVE "FILENAME"; LOAD "FILENAME" CODE.
Если дальше Вы захотите подать прямую команду стандартного
бейсика, то действуйте обычным порядком, а если команда из расши-
ренного интерпретатора, то между ней и LOAD или SAVE должно
стоять RANDOMISE USR 58841:
SAVE *"M";N;"FILENAME":LOAD *"M";N;"FILENAME"
CQDE:RANDOMISE USR 58841:REMK:.RNUM
или
SAVE*"M";N;"FILENAME";LOAD *"M";"N";"FILENAME" CODE
с последующей подачей .REMK".RNUM
! .13.2. Загрузка автостартующей программы прямой командой.
SAVE "FILENAME" LINE N
SAVE *"M";N;"FILENAME" LINE N
Записанная таким образом программа должна выполнять одну
из нижеописанных команд до того, как встретится какая-либо коман-
да из расширенного интерпретатора:
RUN, GOTO, GOSUB - для ленты
RANDOMISE USR 58841 - с последующим RUN, GOTO
или GOSUB для микродрайва
1.13.3. Запись программы из программы.
Программы, записанные из программы, могут быть загружены
тоже только из программы. Программы, записанные прямой коман-
дой, загружаются также прямой командой.
Внимание:
Прежде,чем пользоваться одной из приведенных выше схем за-
грузки-выгрузки, надо загрузить и запустить программу LASER
BASIC. Она должна быть резидентной.
■ ПРОГРАММА LASER BASIC COMPILER
Разработка фирмы "OASIS SOFTWARE"
Компилятор LB предназначен для создания автономной про-
граммы, независимой от интерпретатора LB.
Компилятор может выполнять обработку программ, написан-
ных на стандартном бейсике, но реального выигрыша во времени
работы откомпилированных программ не предоставляет (в 2 раза или
менее). Компилированный код занимает меньший объем памяти, чем
исходная программа, но при запуске он должен сопровождаться па-
кетом рабочих процедур. Любая программа, созданная в расширен-
ном интерпритаторе LB, поместится в компиляторе.
2.1. Расположение файлов на ленте
A. СОМР CODE LOAD" "CODE
LOADER LOAD" "
R1 CODE LOAD "RT CODE"CODE
B. DEMO LOAD" "
2.2. Компиляция
При компиляции программы в памяти должны размещаться
только текст исходной программы и компилятор. Следовательно, по-
сле ввода программы с помощью LB и ее запуска, программу следует
записать на ленту, сбросить компьютер и загрузить в него только
свою программу без интерпретатора.
Программа, записанная на языке LB, не может редактироваться
средствами 2-х SPECTRUM. Перед загрузкой выполнить: CLEAR
59799. Загружается компилятор: LOAD" "CODE или LOAD
"COMPCODE"CODE.
Исходная программа может загружаться как до, так и после
компилятора.
При компиляции экран отображает случайную информацию.
После компиляции экран чистится, появляется сообщение "OK", а
также номер последней откомпилированной строки.
2.3. Структура откомпилированной программы
Скомпилированный код вытирает исходный текст. Тем не менее
компьютер воспринимает его как обычную ВАБЮпрограмму. Проце-
дуры записи на ленту и загрузки в память откомпилированного кода
ничем не отличаются от соответствующих операций для обычных
В ASIC-программ. Откомпилированный текст изменению не подле-
жит. Нельзя также выполнять MERGE. Если надо скомпилировать
программу сначала, то надо создать один исходный модуль
(MERGE), а затем уже его откомпилировать. После команды LIST на
экране появится несколько строк текста, первые устанавливаются
компьютером независимо от содержания исходной программы: 1-я
строка (не выполняется) - О PRINT 0 - содержит недоступную для
пользователя информацию для пакета рабочих процедур; 2-я строка
всегда - 1 RANDOMISE USR 59800 - это вызов откомпилированной
программы. Если в исходной программе имеются функции, опреде-
ляемые пользователем, то их список (подряд) помещается в 3-ей
строке с N 0. Это не относится к назначениям процедур LB, которые
компилируются отдельно.
Если в исходной программе есть операторы DATA, то все они
собираются в один DATA и помещаются в строку N 4, которая также
нумеруется 0. Несмотря на такое объединение, оператор RESTORE в
откомпилированной программе будет выполняться правильно.
2.4. Выполнение откомпилированной программы
Для этого ее надо снабдить дополнительно пакетом рабочих
процедур. RAMTOP следует установить в 59799 (не забывайте об
этом при загрузке откомпилированных модулей). Пакет рабочих
процедур загружается командой:...? Если эта программа имеет файл
SPRITES, его следует загрузить точно также, как и в программе,
выполненной на языке LB. Загрузка откомпилированной программы
выполняется как и для обычной BASIC-программы. Инициация вы-
полнения программы: RANDOMISE USR 59800 или GOTO 1;
Примечание: нажатие BREAK не прерывает выполнения про-
граммы, кроме режимов загрузки и выгрузки.
2.5. Компоновка автономной программы
Программу, написанную на LB, надо соответственно настроить,
чтобы для работы достаточно было набрать LOAD**.
Для этого программу надо скомпоновать и снабдить загрузчи-
ком. Он входит в набор, имеющийся на ленте, вот его текст:
10 CLEAR 59799
20 LET SPST=
30 LOAD *RT CODE*
40 LOAD *SORITEST*CODE SPST
50 LET T=INT (SPST/256) POKE 62464, SPST-256*T:POKE 62464,1
60 POKE 62466,255:POKE 62467,220
70 LOAD"
Здесь:
10 - выделение пространства для пакета рабочих процедур
20 - установка начала области размещения файла SPRITES
30 - загрузка пакета рабочих процедур
40 - загрузка файла спрайтов
50 - внесение в программу адреса начала области размещения
спрайтов
60 - внесение в программу адреса конца области размещения
спрайтов
70 - внесение конца начала области размещения знакогенерато-
ра спрайтов
80 - загрузка текстов скомпилированной программы
Примечание: ' если спрайты в программе не используются,
строки 20-70 можно убрать. Остается ввести требуемое значение
SPST и подготовить набор файлов на чистой ленте. Помните, что
делая SAVE для загрузчика и откомпилированной программы, надо
указать строку автостарта.
2.6. Ограничения для ZX BASIC
В компиляторе имеются следующие ограничения:
1. Не допускается использовать вычисляемые выражения в опе-
раторах GOTO, GOSUB, RUN, RESTORE, т.к. при компиляции все
будет установлено в 0, как и для всех строковых переменных.
2. В DIM допустимы вычисляемые границы, но такие, которые в
процессе компиляции будут установлены в 0. Нельзя объявлять пе-
ременные вида DIM A(N+12) - здесь значение выражения в скобках
после компиляции равно 12 и в ходе выполнения программы перевы-
числяться не будет.
3. Ограничения на число переопределений массива компилятор
не накладывает. Учтите, что первое определение выполняется в ходе
компиляции и оно не переносится в откомпилированную программу.
Если в программе есть переход к началу программы в точку, распо-
ложенную выше первого DIM, то при втором проходе этого же куска
программы объявление массива может оказаться недействительным.
Эту сложность можно обойти, поместив все описания массивов в
самом начале программы, до той точки,где встречаются ветвления.
4. Недопустимые операторы: CLEAR, MERGE, CONTIUE,
LIST, LLIST.
5. RUN не сбрасывает переменные.
6. Командой CONTIUE нельзя запускать сбившуюся программу
с оператором STOP.
7. Команды OPEN, CLOSE работают только с потоками S, Р.
Подкачка и сброс файлов в режиме работы с микродрайвом не под-
держивается.
8. Допустимы команды LOAD, SAVE, VERIFY. Если загружает-
ся В ASIC-программа, рабочие процедуры рассматривают ее как от-
компилированную программу на LB и пытаются выполнить ее,
передав управление на первый оператор.
2.7. Использование компилятора с микродрайвом
Компилятор и пакет рабочих процедур можно использовать с
микродрайвом. Исключение состовляет: в процессе выполнения от-
компилированной программы обмен файлами с микродрайвом не
поддерживается. Все примеры, приведенные здесь, переносятся на
микродрайв, если изменить команды ввода-вывода файлов.
2.8. Сообщения об ошибках
1. ILLEGAL STATMENT FANND - недопустимые операторы.
2. PROCEDURE ALEFINTION NESTING ERROR - два описа-
ния процедуры без промежуточного .RETN. В описаниях процедур
вложенность не допускается.
3. PROGRAM NOT COMPLITED - сообщения пакета рабочих
процедур - при старте программы ее начало не было идентифициро-
т *шо как начало откомпилированной программы.
Следует использовать цифровые коды, сопровождающие сооб-
щения об ошибках в ZX-BASIC.
2.9. Карта памяти
Компилятор и пакет управляющих процедур загружается начи-
ная с адреса 59800. Пакет рабочих процедур занимает всю верхнюю
часть памяти. Конец компилятора - по адресу 62586, т.е. его длина
3057 байтов. Следовательно, перед загрузкой этих модулей надо вы-
полнить:
CLEAR 59799
Откомпилированная программа размещается в памяти следую-
щим образом:
[—[ПРОГРАММА ]—!— [ПЕРЕМЕННЫЕ ]—!—[ СПРАЙТЫ ]—>
PROG VARS ELINE
>—!—[ СТЕК микропроцессора ]—!— [RTCODE ]— ]
56575 59800 65535
2.10. Рекомендации по программированию в кодах
Между областью спрайтов и пакетом рабочих процедур имеется
область памяти более ЗК. Обычно для стека процедурам требуется
менее 256 байтов. Поэтому здесь можно размещать процедуры в
машинных кодах, установив соответствующее значение в операторе
стека на конец спрайтов.
Кроме того, можно в принципе освободить под процедуры поль-
зователя всю область, начиная с ELINE вплоть до 59800.