Системные программы для ZX Spectrum 1993 г.

Пакет процедур SUPERCODE - введение. Операционная оболочка SUPERCODE. Меню выбора подпрограмм. Работа с отдельными подпрограммами. Загрузка и запуск процедур в бэйсике.


Первая версия программы Supercode выпущена английской
фирмой CP-Software еще в 1983 году. Она представляет собой
набор небольших подпрограмм в машинных кодах, которые можно
легко «доставать» из пакета, смотреть, что они из себя представля-
ют, и понравившиеся вставлять в программы, написанные на
Бейсике (и не только на Бейсике). Таким образом, пакет Supercode
призван облегчить жизнь двум категориям программистов: тем, кто
хочет писать эффективные программы с использованием машин-
ных кодов, практически не выходя за рамки Бейсика, и тем, кто с
той же целью желает отказаться от Бейсика и начинает осваивать
программирование в кодах. Если для первых этот пакет предостав-
ляет строительный материал, «кубики», из которых будет «собра-
на» программа, то для вторых это скорее материал для изучения и
подражания.

Что же добавляют к стандартному Бейсику подпрограммы, вхо-
дящие в пакет Supercode?

Во-первых, это, конечно, новые функции работы с экраном: все-
возможные скроллинги (по пикселям, по знакоместам, в окнах,
знакоместах и т. д.), преобразования атрибутов, выделение допол-
нительных экранных буферов, позволяющих сохранять и быстро
выводить на экран изображения, и пр.

Во-вторых, дополнительные возможности рисования: заливка зам-
кнутых фигур, построение звезд, колец, прочерчивание линий на
бордюре.

Supercode расширяет звуковые возможности обычного
ZX Spectrum 48, добавляя к тривиальному ВЕЕР несколько новых
эффектов: трель, глиссандо, имитатор сирены. Кроме того, появля-
ется возможность воспроизводить на компьютере введенную с маг-
нитофона фонограмму (человеческий голос, музыку).

Supercode предоставляет и средства для удобного и быстрого
редактирования бейсик-программ: перенумерация и удаление строк,
уничтожение комментариев, вывод информации о распределении
памяти и используемых переменных.

Любители защищать от просмотра и копирования бейсик-про-
граммы найдут в Supercode подпрограммы и для этого достаточно
бесполезного занятия.

В пакете есть и подпрограммы, позволяющие обрабатывать
ошибки, возникающие при выполнении бейсик-программ, а также
средства, помогающие создавать бейсик-программы с меньшей
длиной и большим быстродействием.

Таким образом, использование подпрограмм из пакета
Supercode позволит не только значительно повысить эффектив-
ность программ на Бейсике, но и упростить сам процесс програм-
мирования. Кроме того, Supercode поможет тем, кто начинает
программировать на ассемблере, лучше освоить этот язык. Под-
программы пакета написаны достаточно «прозрачно», и после
дизассемблирования легко можно разобраться в их работе.

Следует заметить, что то, что мы не очень точно назвали подпрог-
раммой, может представлять собой: процедуру в машинных кодах (в
большинстве случаев), таблицу кодов (скажем, знакогенератор),
сочетание процедуры и таблицы параметров (звуковые эффекты)
или просто текстовую инструкцию, подсказывающую, как исполь-
зовать некоторые тонкости бейсик-интерпретатора. В дальнейшем
для простоты мы будем пользоваться термином «подпрограмма», а
также термином «процедура».

В России и странах ближнего зарубежья гуляет более десятка
различных модификаций Supercode, большинство из которых яв-
ляются вариантами трех фирменных версий пакета. Эти фирмен-
ные версии отличаются друг от друга количеством подпрограмм: от
100 до 152. Кроме того, существует несколько версий Supercode,
адаптированных к дисковой системе TR-DOS. Они сделаны про-
граммистами разной квалификации, поэтому часть функций в
имеющейся у вас дисковой версии Supercode может не работать (в
частности, может отсутствовать возможность записи на диск отдель-
ных подпрограмм средствами самой программы Supercode).

Мы будем рассматривать вторую версию программы —
Supercode И, состоящую из 120 процедур. Она отличается от по-
следней фирменной версии — Supercode III (152 процедуры) —
только отсутствием дополнительных подпрограмм для работы с
микродрайвом, что для отечественного пользователя неактуально.

Для удобства работы с таким большим количеством подпрог-
рамм в Supercode введена обслуживающая программа-оболочка.
Она позволяет быстро найти нужную подпрограмму, проверить ее
действие, получить рекомендации по ее применению, записать ее
на ленту (или диск) и пр.

Операционная оболочка Supercode — это программа на Бейси-
ке, которая после загрузки подгружает в память кодовую часть —
собственно пакет процедур. После вывода заставки программа
пытается идентифицировать «железо» компьютера и выдает сооб-
щение об объеме памяти и устройстве, с которого произошла
загрузка. При этом, загрузив Supercode с диска на ZX .Spectrum с
оперативной памятью 128 килобайт, вы с удивлением обнаружите,
что программа, по простоте душевной, считает, что на машине
всего 48 килобайт, а загрузка прошла с магнитной ленты. Дело в
том, что пакет Supercode написан в то время, когда модели
ZX Spectrum 128 и интерфейса Beta-Disk еще не существовало и
рассчитан он на возможности ZX Spectrum 48 и работу с магнито-
фоном и микродрайвом.

После нажатия на любую клавишу Supercode с радостным улю-
люканьем выходит в начальное меню (рис. 46).

Всю верхнюю часть экрана в начальном меню занимают общие
сведения о Supercode (количество процедур в пакете, их размеще-
ние в памяти и т. д.). В нижней строке расположены команды
меню. Команда вызывается нажатием клавиши, соответствующей
ее первой букве.

Демонстрация работы подпрограмм. После
окончания демонстрации программа вернется в
начальное меню. Вернуться в начальное меню можно и не
дожидаясь конца просмотра, нажав клавиши CS/Space (Break).
По понятной причине вы увидите далеко не все возможности
Supercode (в частности, некоторые подпрограммы предназначе-
ны для модификации текста бейсик-программы и не производят

никаких визуальных или звуковых эффектов). Однако, пред-
ставленного вполне достаточно, чтобы оценить, какие перспек-
тивы откроются перед тем, кто научится правильно пользоваться
пакетом.

Вывод на принтер графической копии экрана
(аналогично команде Бейсика COPY). В данном
случае распечатывается само начальное меню. Программа поль-
зуется встроенным драйвером ZX-Printer (либо драйвером, под-
ключенным вместо него).

Выход в Бейсик без стирания Supercode, что
позволяет просматривать текст демонстрацион-
ной программы, писать коротенькие тестовые программки для
изучения работы отдельных процедур. Кроме того, используя
операторы Бейсика, можно записать на ленту сразу группу
подпрограмм (операционная оболочка Supercode позволяет за-
писывать подпрограммы только по отдельности). Возвратиться в
оболочку можно двумя способами:

• оператором GO ТО 0, при этом восстанавливаются все воз-
можности программы, включая обработку ошибок и обра-
ботку прерываний по нажатию клавиши Break.

♦ оператором GO ТО 10, работоспособность программы вос-
станавливается, но обработка ошибок отключается.

Внимание! Попытка запуска программы оператором RUN разру-
шает ее, очищая область данных.

Нажатие любой другой клавиши (ANY OTHER KEY) начального
меню, например, Enter, выведет на экран краткую инструкцию по
использованию микродрайва. Нажмите Enter еще раз и вы перей-
дете в меню выбора подпрограмм Index (рис. 47).

При входе в меню выбора подпрограмм на экране появится
первая страница списка процедур, входящих в пакет (INDEX PAGE 1).
Для каждой процедуры приведен ее номер (NO:), название и адрес
размещения в памяти (ADRESS).

В двух нижних строках экрана расположено меню режима Index.
Позиции этого меню активизируются нажатием клавиши, соответ-
ствующей первой букве названия команды.

Вызов описания подпрограммы. Осуществляется
нажатием цифровых клавиш, соответствующих
номеру подпрограммы. Например, для перехода к подпрограмме
42 надо нажать клавиши 4, 2 и Enter. Набор первой цифры
приведет к тому, что вместо меню на экране появится приглаше-
ние к дальнейшему вводу номера: Enter Routine No:.

Демонстрация возможностей Supercode.

Вывод на принтер графической копии текущего
экрана (см. команду Prntr начального меню).

Вывод на экран инструкции по перемещению
подпрограмм Supercode.

Большинство подпрограмм пакета полностью перемещаемы, то
есть могут работать в любом месте оперативной памяти
ZX Spectrum. Для успешной работы с перемещенными процедура-
ми надо только пересчитать адреса их запуска и настройки.

Часть подпрограмм жестко привязана к конкретным адресам, о
чем указывается в их описаниях (NON-RELOCATIBLE). Перед переме-
щением эти подпрограммы необходимо модифицировать.

Переход в меню Index из любого другого режима
программы.

Переход к требуемой странице. Список подпрог-
рамм пакета размещается на 7 экранных стра-
ницах (по 20 подпрограмм на странице). Переход осуществляет-
ся вводом номера на запрос Enter Index Page No:.

Вывод следующей страницы списка подпрог-
рамм (эта команда выполняется и при нажатии
любой другой клавиши, назначение которой не определено в
меню).

Вывод инструкции по переносу пакета Supercode
на микродрайв.

Выход из Supercode в Бейсик. Команда выполня-
ет те же действия, что и одноименная команда
начального меню.

После ввода в меню Index номера подпрограммы (команда
Number) эта подпрограмма становится текущей и на экран выводит-
ся ее описание (рис. 48).

В верхней части экрана расположены название текущей под-
программы и ее номер, обведенный в кружок. Остальная инфор-
мация может варьироваться. В большинстве случаев на экран
выводятся: адрес размещения подпрограммы в памяти, ее размер,
способ записи на ленту и микродрайв, краткое описание работы.
Дополнительно может сообщаться о возможности перемещения
подпрограммы, об использовании подпрограмм ПЗУ и Interface 1.
Для подпрограмм, требующих передачи параметров, указаны адре-
са ячеек, в которые необходимо записать требуемые значения.

В нижней части экрана расположено меню работы с текущей
подпрограммой. Команды Prntr и Quit выполняют те же действия,
что и раньше. Есть в этом меню и новая команда:

Демонстрация работы подпрограммы. Просмотр
можно повторить, нажав клавишу A (Again).

Отметим, что команда Example выполняется далеко не для всех
подпрограмм. Для изучения подпрограмм, которые не имеют соб-
ственного демонстратора, можно попытаться написать небольшой

пример с их использованием. В этом случае действовать лучше
всего так:

1. Изучить информацию о подпрограмме.

2. Выйти из Supercode, выполнив команду Quit (клавиша Q).

3. Выполнить оператор Бейсика NEW.

4. Набрать и выполнить тестовую программу.

Подобная последовательность действий избавит от необходимо-
сти еще раз загружать кодовый блок Supercode. Разумеется, если
вы захотите после этого продолжить работу с пакетом Supercode,
вам придется перезагрузить его.

Нажатие любой другой клавиши (кроме Е, Р и Q) выведет на
экран вторую страницу меню работы с текущей подпрограммой.
Команды Save, Locate, Index, Demo и Quit выполняют те же функ-
ции, что и одноименные команды в меню выбора подпрограмм (см.
стр. 148). Новые команды:

Возвращение к первой странице меню работы с
подпрограммой.

Вызов описания требуемой подпрограммы. На
запрос ROUTINE NO введите номер подпрограммы
и она станет текущей.

Вызов описания следующей подпрограммы.

Запись текущей подпрограммы на ленту*. На

экране появляется информация о стартовом ад-
ресе (Start address) и длине файла (length), в который будет запи-
сана процедура. Фиолетовым цветом указывается имя файла.
Если оно вас устраивает, нажмите Enter, если нет — введите
другое имя и нажмите Enter. Подпрограмма будет записана. Как
уже упоминалось, можно записать на магнитный носитель и
группу подпрограмм. Для этого надо определить, в каких адресах
располагаются интересующие вас подпрограммы, выйти в Бей-
сик по команде Quit и выполнить оператор SAVE с соответствую-
щими параметрами.

Прежде чем перейти к описанию подпрограмм пакета Supercode,
дадим некоторые советы по их применению в программах на
Бейсике.

Пользоваться процедурами пакета достаточно просто. Первым
делом надо сохранить их на магнитном носителе командой Тара.
Если планируется использовать несколько процедур, размещенных
не подряд, придется переместить их в памяти так, чтобы они
составили единый блок (см. Locate, стр. 148). Для загрузки в
память полученного кодового блока в бейсик-программу вставляет-
ся оператор LOAD...CODE. Необходимо только проследить, чтобы
верхняя граница бейсик-программы (RAMTOP, устанавливается
оператором CLEAR, см. [2]) находилась ниже адреса, с которого
размещены процедуры.

Для запуска подпрограммы в кодах, расположенной по адресу N,
в Spectrum-Бейсике предусмотрена специальная функция USR N.
После выполнения подпрограммы функция USR N возвращает чис-
ло, находящееся в регистровой паре ВС. Так как USR — функция,
то она может использоваться только в составе оператора, который
и указывает, куда будет передаваться возвращенное значение.

В случаях, когда подпрограмма не возвращает никаких чисел
(например, при генерации звуков или сдвиге изображения на
экране) наиболее распространенным способом запуска подпрог-
раммы в кодах является выполнение оператора RANDOMIZE USR N.
Например, для выполнения поворота символов знакогенератора
вокруг горизонтальной оси соответствующую подпрограмму можно
вызвать оператором RANDOMIZE USR 63143. Однако от использова-
ния RANDOMIZE следует отказаться, если в программе используется
генератор случайных чисел (как встроенный «бейсиковский», так
и «суперкодовский»).

Для запуска подпрограмм, которые возвращают результат своей
работы, удобно использовать оператор присваивания. Например,
для того, чтобы присвоить переменной А значение, возвращаемое
генератором случайных чисел (подпрограмма 55) следует выпол-
нить оператор LET A=USR 63777.

Для вывода результата выполнения подпрограммы непосред-
ственно на экран логично подставить функцию USR в оператор
PRINT. Например, при выполнении оператора PRINT USR 60972 на
экране будут печататься коды введенных с клавиатуры символов
(процедура 93), а при запуске процедуры оператором
PRINT CHR$ USR 60972 — сами символы.

Можно последовательно вызвать две и даже три подпрограммы
в кодах, выполнив лишь один бейсик-оператор. Например, для
смещения экранного изображения вместе с атрибутами влево,
можно воспользоваться следующим способом:

DRAW USR 65204,USR 64275. По сравнению с последовательным
запуском подпрограмм с помощью двух операторов RANDOMIZE,
приведенная строка занимает в памяти меньше места и работает
быстрее. Следует отметить, что использование операторов вывода
на экран для запуска подпрограмм в кодах имеет существенное
ограничение: подпрограммы должны возвращать значения, допу-
стимые для данного оператора.

Часть подпрограмм (например, подпрограммы работы с окнами)
требует предварительной передачи параметров. В этом случае в
описании процедур указываются допустимые значения парамет-
ров и адреса ячеек памяти, в которые следует записать параметры
при помощи оператора РОКЕ. Настройка процедур выполняется
перед первым их выполнением, кроме специально оговоренных
случаев, когда параметры подпрограмме надо передавать перед
каждым ее запуском.

Следует сказать об одной неприятной особенности подпрограмм
Supercode — об отсутствии проверки корректности задаваемых
параметров. Поэтому, перед запуском процедур, использующих
параметры, необходимо убедиться, что их значения имеют допусти-
мые пределы (например, границы задаваемого окна не выходят за
границы экрана), иначе результат может оказаться самым неожи-
данным.

Параметрами многих процедур являются двухбайтовые числа,
которые заносятся в две соседние ячейки памяти. Адреса этих ячеек
мы будем записывать через косую черту, например, адреса 23606
и 23607 —• как 23606/07.

Напомним, что для записи двухбайтового числа X в ячейки Addr
и Addr+1 надо выполнить бейсик-строку:

POKE Addr,X—256*INT(X/256):POKE Addr+1, INT(X/256)

Дополнительная информация о том, как обращаться с двухбайт-
ными числами, приведена в описании подпрограммы 101 2 BYTE
CONVERTER.

Напомним также, что значения атрибутов знакоместа, которые
заносятся в ячейку памяти, рассчитываются по формуле:

ATTR=< INK > +23х < PAPER> +26х < BRIGHT > +27х < FLASH >,

где <INK>, <PAPER>, <BRIGHT> и <FLASH> — числовые значения соот-
ветствующих атрибутов.

Использование подпрограмм Supercode рассмотрим на примере
процедуры номер 6 (см. стр. 154), выполняющей скроллинг экра-
на на одно знакоместо влево.

Запустим Supercode, войдем в меню Index и выберем подпрог-
рамму номер 6. На экране появится инструкция по применению
этой подпрограммы и меню. На второй странице меню выберем
пункт Таре и запишем подпрограмму на ленту (диск) под именем
"TEST". Теперь нажмем кнопку «сброс» и напишем небольшую
программку на Бейсике:

10 CLEAR 50000: REM: устанавливаем RAMTOP
20 LOAD "TEST"CODE: REM: загружаем процедуру
30 CIRCLE 120, 70, 70: REM: рисуем на экране окружность
40 РОКЕ 64291, 119: REM: задаем циклический скроллинг

50 RANDOMIZE USR 64275: REM: запускаем подпрограмму
60 GO TO 40: REM: "зацикливаем" выполнение подпрограммы

Если по адресу 64291 записывать не 119, а 54 (50 РОКЕ 64291,
54), то вместо циклического скроллинга экрана получим не-
циклический.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Массолит - Новелла по игре Five.
Анекдоты - Продолжение.
Тест - Тест "Может быть вы - новый белорус?"

В этот день...   17 февраля