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

Пакет процедур SUPERCODE - расширение редактора Бейсик-программ. Операции с памятью. Программы обслуживающие Interface 1.


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

Процедура является упрощенным вариантом подпрограммы 60.

Параметр

Адрес настройки

Номер начальной строки

23728/29

Номер конечной строки

23670/71

Эта подпрограмма позволяет заменять в тексте бейсик-про-
граммы одни символы на другие (в том числе операторы,
функции и вообще любые коды ZX Spectrum).

Параметр

Адрес настройки

Код исходного символа

63903

Код заменяющего символа

63905

Процедура производит перенумерацию строк бейсик-про-
граммы с заданной строки и с указанным шагом. При пере-
нумерации пересчитываются значения параметров операто-
ров GO ТО, GO SUB, RESTORE, LIST, LLIST, SAVE...LINE. Если
аргумент указывает на несуществующую строку, подставля-
ется номер следующей за ней строки. Подпрограмма не обра-
батывает значения переходов, заданные вычисляемыми вы-
ражениями (переменными и выражениями).

Параметр

Адрес настройки

Начальная строка

59582/83

Шаг

59580

Устанавливает курсор на первую строку, содержащую задан-
ный фрагмент бейсик-строки (любую последовательность
символов, операторов, переменных, знаков и т. д.).

Параметр

Адрес настройки

Адрес размещения фрагмента для поиска

63499/500

Число символов в последовательности

63502

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

Параметр

Адрес настройки

Начальная строка

64714/15

Шаг

64711/12

Параметр

Адрес настройки

Длина последовательности

63648

Адрес размещения последовательности для поиска

63652/53

Адрес размещения последовательности для замены

63713/14

Процедура вызывает на редактирование строку, на которую
указывает программный курсор. Курсор редактора при этом
устанавливается на конец этой строки.

Процедура вставляет в бейсик-программу строку, начинаю-
щуюся оператором REM и предназначенную для размещения
кодов ассемблерной подпрограммы. Номер строки вводится
на запрос LINE NO:, а на запрос LENGTH: — количество отводи-
мых байтов (до 9999).

Процедура создает в бейсик-программе строку с номером 1,
помещает в нее оператор DATA и следом за ним через запятую
заносит значения из памяти.

Параметр

Адрес настройки

Начальный адрес блока данных

63209/10

Количество значений

63206/07

Подпрограммы 94 и 95 изменяют начертания символов в
строках, записанных в символьных бейсик-переменных.

Подпрограммы 96 и 97 изменяют буквы (на заглавные или
строчные) в именах переменных бейсик-программы. Значе-
ния строковых переменных не изменяются.

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

Эта подпрограмма автоматически вызывается перед выводом
любого сообщения Бейсика (в том числе и при вызове строки
для редактирования). Использование этой подпрограммы
имеет смысл при работе с каналом # 1.

Подпрограмма выводит на экран:

• числовые переменные;

• символьные переменные;

• числовые массивы;

• строковые массивы;

• управляющие переменные циклов FOR...NEXT.

Подпрограмма выводит на экран число строк и число опера-
торов в бейсик-программе.

Подпрограмма возвращает адрес первого символа строки, на
которую указывает программный курсор.

Подпрограмма выводит на экран количество свободной памя-
ти в байтах, доступной для бейсик-интерпретатора.

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

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

Отключается трассировка оператором RANDOMIZE USR 56814.

Процедура сокращает длину программы за счет удаления
комментариев — всех операторов REM и частей строк, распо-
ложенных за ними. При использовании подпрограммы следу-
ет учитывать, что вызовы дисковой системы TR-DOS из Бей-
сика также содержат оператор REM.

Процедура сводит к минимуму число строк в программе,
объединяя их в длинные строки. Этим достигается сокраще-
ние длины бейсик-программы и ускорение ее выполнения.
Процедура сама следит за корректностью переходов в бейсик-
программе.

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

Удаляет из бейсик-программы все цветовые контрольные ко-
ды. Программа, естественно, становится короче и делается
«прозрачной» — доступной для просмотра по команде LIST.

Эта подпрограмма предоставляет еще один способ уменьше-
ния длины бейсик-программы. Она заменяет числа в про-
грамме на функции VAL "строка" (например, число 3 — на
функцию VAL "3"), а число 0 — на NOT PI. Заметим, что,
сжимая программу, такие замены понижают скорость ее вы-
полнения.

Для защиты от просмотра листинга бейсик-программы можно
записать в ячейки 23606/07 произвольные числа, то есть
изменить адрес начала знакогенератора, после чего бейсик-
интерпретатор вместо цифр и букв будет выводить на экран
мешанину. Для того чтобы при выполнении вашей програм-
мы на экран выводился нормальный текст, перед каждым
PRINT необходимо выполнить операторы РОКЕ 23606,0: РОКЕ
23607,60, а после PRINT опять переключить знакогенератор.

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

LET Х=РЕЕК 23635+256*РЕЕК 23636: РОКЕ Х,0; РОКЕ Х+1,0

Чтобы сделать нулевой любую другую строку, надо с по-
мощью процедуры 88 определить адрес ее размещения в
памяти X, а затем выполнить:

РОКЕ Х-4, 0: РОКЕ Х-3, 0

Не следует только ссылаться на нулевые строки в операторах
GO ТО, GOSUB или RESTORE.

Приведено несколько способов защиты программ от просмот-
ра и модификации:

1. Запишите в первой строке 1 REM и выполните
РОКЕ (РЕЕК 23635+256+РЕЕК 23636), 100. Это приведет к тому, что
первая строка программы получит недопустимый номер. В
этом случае вы сможете запустить программу (RUN), но не
сможете просмотреть ее листинг (UST), пока не запишете нули
по тем же адресам.

2. Введите РОКЕ 23636,150. Теперь при попытке вывода лис-
тинга на экране появится полная абракадабра. Возврат к
нормальному листингу: РОКЕ 23636,92.

Обратите внимание на то, что процедура «портит» запись
оператора DEF FN, и вам придется восстанавливать его
вручную.

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

4. При записи бейсик-программы задайте автостарт на стро-
ку X (SAVE "NAME" LINE X), а в строке X наберите следующие
операторы:

X LET ERR=256+PEEK 23614+РЕЕК 23613: POKE ERR.O:POKE ERR+1,0

Попытка остановить работу программы или любая ошибка
при ее выполнении приведут к сбросу машины.

5. Выполнение оператора РОКЕ 23659,0 приведет к зависанию
машины при попытке вывода любого сообщения бейсик-ин-
терпретатора (например, при попытке выхода из программы
по Break).

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

Для защиты бейсик-программы от копирования можно вы-
полнить следующие операции:

• запишите бейсик-программу, как кодовый файл, исполь-
зуя оператор SAVE...CODE, предварительно определив дли-
ну бейсик-программы;

• сформируйте загрузочный модуль, включающий в себя
кодовую подпрограмму 117 и строку ее запуска из про-
граммы на Бейсике. Так как эта часть является наиболее
уязвимой при взломе, постарайтесь защитить ее от про-
смотра;

• запишите созданный загрузчик на другую ленту, а следом
за ним — заголовок любой другой бейсик-программы и
далее — кодовый файл основной программы без заголов-
ка.

Этот метод защиты основан на том, что загрузчик игнорирует
заголовок программы, а при копировании возникает ошибка
из-за несоответствия заголовка записанной далее про-
грамме*.

Перед запуском процедуры требуемые значения заносятся по
адресам, указанным в таблице:

Параметр

Адрес

Начало области

63798/99

Размер области

63796

Байт-заполнитель

63801

Подпрограмма выводит на экран содержимое ячеек памяти в
десятичной, шестнадцатеричной и символьной форме. Одно-
временно на экране отображается содержимое 22 ячеек. По-
сле нажатия любой клавиши (кроме Space) на экран выводит-
ся содержимое следующих 22 ячеек. Нажатие Space (а также
N и Stop) приводит к выходу из подпрограммы.

Значение начального адреса для просмотра заносится в ячей-
ки 62866/67.

Подпрограмма предназначена для ввода данных в память в
шестнадцатеричном виде. Адрес начала области памяти, куда
будет производиться запись, заносится в ячейки 23563/64.
Ддя работы этой процедуры должна быть загружена в память
подпрограмма 63 HEX-DEC CONVERTER, адрес размещения кото-
рой заносится в ячейки 65360/61. После запуска подпрог-
раммы на экран выводится адрес ячейки памяти, куда вводит-
ся информация и приглашение для ввода Н:, на которое
следует ввести двухзначное шестнадцатеричное число. После
нажатия Enter на экран будет выведено значение в десяти-
чном виде и появится приглашение для ввода следующего
числа. Для выхода из подпрограммы следует нажать кла-
вишу Q.

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

Значения двухбайтового числа, расположенного в памяти по
адресу Addr, вычисляется по его младшему (L) и старшему (Н)
байтам по формуле X=L+256*H или с помощью бейсик-
оператора

LET Х=РЕЕК Addr+256*PEEK (Addr+1)

Для выделения из числа X младшего и старшего байтов можно
воспользоваться оператором RANDOMIZE X. После его выпол-
нения младший байт (L) числа X будет помещен в ячейку
23670, а старший (Н) — в ячейку 23671. Извлечь их оттуда
можно с помощью функции РЕЕК.

Подпрограмма быстро копирует блок памяти, являясь ассем-
блерным аналогом следующей строки:

FOR 1=0 ТО LENGTH: POKE (l+TARGET),PEEK(l+SOURCE): NEXT I

При этом скорость работы ассемблерной программы оказыва-
ется неизмеримо выше, чем у Бейсика.

Адреса настройки приведены в таблице, хотя в Supercode они
не указаны:

Параметр

Адрес

Адрес начала блока

58684/85

Адрес перемещения

58690/91

Длина в байтах

58687/88

Обнуляет все числовые переменные и массивы, присваивает
всем символьным переменным значение «пустой строки»,
строковые массивы с объявленной размерностью заполняет
пробелами (код 32).

Подпрограмма 62 очищает экран и на запрос D: предлагает
ввести десятичное число от О до 65535. Ввод числа заверша-
ется нажатием Enter, после чего на экран выводится шестнад-
цатеричный эквивалент числа и процедура повторяет запрос
D:. При вводе числа, выходящего за допустимые пределы,
выдается сообщение об ошибке 6 Number to big. Для выхода из
процедуры введите Q.

Выполняется действие, аналогичное нажатию кнопки
«сброс»: выполняется оператор NEW, RAMTOP устанавлива-
ется на первоначальное значение, обнуляется память, заново
устанавливаются системные переменные, UDG и стек.

Так как Interface 1 в нашей стране практически не используется,
не будем приводить описания процедур, работающих с этим уст-
ройством.

109 FAST LOAD MDRVE_

110 SURE SAVE MDRVE_

111 MORVE DIAGNOSIS_

112 ADAPT PROGRAM_

113 SURE CLOSE#_

118 ATTR RESET_

Подпрограмма 63 работает аналогично. При этом на запрос
Н: необходимо ввести четырехразрядное шестнадцатеричное
число. Для выхода из процедуры введите Q.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Программирование - Где писать программы.
Inferno - Вступление от редактора.
Спектрум - FUCK FOREVER
Музобоз - Описание двух конкурсных работ : Axis of Evil, Faces-I.
Реклама - Реклама и объявления ...

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