ZX-Ревю 1992 №1-2 1991 г.

Защита программ - Методы защиты от листинга или как сделать текст программы нечитаемым.


ГЛАВА 2. Методы защиты от листинга или как сделать текст программы

нечитаемым.

Данная глава посвящается изучению методов защиты от листинга, применяемых в большинстве фирменных программ, в частности в их загрузчиках, написанных на Бейсике, либо так или иначе использующих Бейсик. Кроме этого, рассмотрены некоторые методы, применяемые "взломщиками" компьютерных программ, т.н. крэккерами, в частности Билом Гилбертом (Bill Gilbert - если человек с таким именем действительно существует, а не использует псевдоним); PEGAZ SOFTWARE (т.н. корпорация по взлому, которая даже оставляет свой телефон); ROBY CRACKING SERVISE, использующем в своем арсенале достаточно примитивные приемы в отличие от того же Билла Гилберта и пр.

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

После длительной работы я могу сказать с уверенностью, что в компьютере ZX SPECTRUM нельзя создать полностью защищенных программ. Это налагает большую ответственность на человека, описывающего приемы взломщиков. Я ничего не скрывал в изложении данного материала, полагаясь на порядочность и внутреннюю культуру читателей.

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

2.1. Общие рекомендации.

Простейший прием сокрытия листинга состоит в том, чтобы сделать одинаковыми цвета символов (INK) и фона (PAPER).

В тех местах, где программа должна сделать вывод на экран в операторе PRINT вставляют в качестве временных правильные цвета. Например, подав вначале программы команды: 10 INK 7: PAPER 7

по мере необходимости используем нормальный цвет: 20 PRINT INK 0; "ZX SPECTRUM"

Другой прием состоит в искажении набора символов путем задания "фальшивого" значения системной переменной CHARS. Для примера наберем с клавиатуры. POKE 23606,8: PRINT "ZX SPECTRUM": POKE 23606,0.

Небольшое отступление:

Краткое описание системной переменной CHARS.

Как известно, системная переменная CHARS ответственна за место расположения шрифта в ПК "SPECTRUM". В своем обычном содержании она указывает на адрес шрифта, зашитого в ПЗУ, а точнее - на тот адрес, который находится на 256 байтов ниже. Это легко проверить:

PRINT PEEK 23606 PRINT PEEK 23607

Точный адрес можно узнать, подав с клавиатуры команду: PRINT PEEK 23606 + 256*PRINT PEEK 23607+256

Вы получите 15616. При этом по адресу 23606 находится 0, а по адресу 23607 - число

60.

Среди практических использований этой системной переменной следует отметить возможность создания своих шрифтов в т.ч. русского и других национальных, а также переключение шрифтов с одного на другой. Подробно эта технология разобрана в разработке "Большие возможности Вашего "СПЕКТРУМа", выпущенной ИНФОРКОМом в 1989 г.

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

Кроме того, такая надпись, имитирующая механический счетчик, использована во время демонстрации в программе FIST III (режим DEMONSTRATION, который появляется после загрузки, если не нажимать никакие клавиши).

Подобный имитатор механического счетчика можно создать и Вам, если использовать возможности системной переменной CHARS.

Наберете предложенную ниже программу и запустите ее: 10 FOR I=80 ТО 0 STEP -1 20 POKE 23606, I: PAUSE 10 30 PRINT AT 11,15;"0" 40 NEXT I

Подобный очень любопытный эффект наблюдается потому, что за каждый цикл операторов FOR-NEXT процедурой, ответственной за печать, распечатываются 8 байтов предполагаемого знака 0 (в данном случае). Но с каждым проходом системная переменная все ближе подходит к своему истинному значению, а за счет того, что шаблоны цифр в ПЗУ расположены рядом, создается впечатление, что цифры следуют одна за другой по возрастанию или убыванию.

Схематически этот процесс можно представить так:

I X X |

I_X_|_

I X |

I XXXXX |

I | Область,которую

| I мы видим на

I XXXX | экране (8X8)

I X X |

I X | I

I_X_|_

I X |

I XXXX |

Рис.1

X X_|_

X |

X |

XXXXX |

I Область,которую I мы видим на XXXX | экране (8X8) X X |

_X_|_I

X |

X |

XXXX |

Рис.2

В этой схеме горизонтально расположены байты шаблонов символов, хранящиеся в ПЗУ, и, в зависимости от того, на какой адрес указывает системная CHARS, в области, появляющейся на экране (на экране появляется одно знакоместо 8X8), мы видим опускающиеся вниз цифры, имитирующие движение механического счетчика, до тех пор,

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

* * *

Итак, системная переменная CHARS может быть использована для защиты от листинга в Бейсик программах. Если адресовать ее в те области памяти, где вообще ничего нет, например, POKE 23607,200 , то все символы будут выглядеть, как пробелы и на экране вообще ничего не будет. Вам же необходимо перед всяким оператором PRINT включать нормальный режим и выключать его после PRINT.

2.2. Универсальная система защиты - метод нулевых строк.

Почти во всех программах к ZX SPECTRUM присутствует нулевая строка. В большинстве программ она выполняет следующие функции:

1) Защита машинных кодов, размещенных после оператора REM от редактирования.

2) Защита от листинга той части Бейсика, который размещен в нулевых строках.

3) Защита от редактирования надписей, оставляемых фирмами и взломщиками.

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

POKE 23755,0

POKE 23756,0

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

Предлагаемая Вашему вниманию универсальная система защиты включает в себя "зануление" всех строк программы (разумеется, этот метод действенен только для программ, где отсутствуют команды условных и безусловных переходов - GO TO, GO SUB и наибольшую эффективность приобретает для небольших программ, управляющих загрузкой). Это становится возможным, т.к. программа выполняет все команды последовательно, а номера строк использует только для команд-переходов. Преимуществ же у этого метода довольно много: при удачном сочетании его с методом защиты от листинга, использующим управляющие коды (подробно описан в следующей статье), это позволяет сделать текст Вашей программы полностью нечитаемым.

Действительно, абсолютное "зануление" не дает возможности указать оператором LIST на какой-либо конкретный шаг в программе. При подаче же команды LIST 0, первая же строка программы с помощью использованных там управляющих кодов сделает одинаковым цвет INK и PAPER, либо закроет текст программы от чтения другим способом.

Мною разработано два метода "зануления". Первый выполняется вручную, с непосредственным Вашим участием. Второй - делает все автоматически, используя специально созданную для этих целей программу. Предпочтительно, на мой взгляд, использовать первый метод, поскольку это позволяет Вам лучше узнать структуру Бейсика и быстрее освоить принципы работы компьютера. Но, тем не менее, в этой статье мною будут рассмотрены оба подхода.

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

MM NN <текст строки> ENTER, где:

MM - номер строки, описан двумя числами;

NN - длина строки, описана тоже двумя числами.

В интерпретаторе Бейсика под номер строки отводятся два знака, причем первым идет старший байт номера, а вторым - младший. (Для тех, кто интересуется, почему соблюдается именно такая последовательность, рекомендую прочитать подробную информацию об этом в трехтомнике "ИНФОРКОМа" Первые шаги в машинных кодах).

Текст строки совпадает с Вашим исходным текстом, за исключением того, что числа представлены в несколько ином виде. (Более подробно об этой и иных системах представления чисел читайте в том же трехтомнике в т. 1 на с. 56). Завершает строку условный код оператора ENTER - 13(тринадцать).

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

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

9997 FOR I=23755 TO 65000

9998 PRINT I; TAB 7; PEEK I; TAB 11; CHR$(PEEK I)

9999 NEXT I

Теперь запустим эту программу командой GO TO 9997, после чего на экране будет печататься дампинг Вашей программы (предлагаемые мною строки должны быть набраны после того, как в памяти уже находится Ваша программа) в следующем формате:

- номер ячейки памяти;

- десятичное значение числа, содержащегося там;

- символ, соответствующий данному числу.

В колонке символов, соответствующих содержимому ячеек, Вы увидите приблизительный листинг своей программы. Вашей задачей является обнаружить окончание данной строки Бейсика. Свидетельством этого служит код ENTER - 13. Причем, если десятичное значение 13 распечатается на экране, то символ CHR$ 13 является непечатным для ZX SPECTRUM и компьютер осуществит переход на следующую строку. Обнаружив, таким образом, номер ячейки, в которой содержится код 13, свидетельствующий об окончании строки Бейсика, Вы записываете номера следующих за ним ячеек памяти, чтобы потом заслать в них 0 командой POKE.

Следует отметить, что Вам необходимо строго следить за тем, чтобы не превратить в 0 номера строк, осуществляющих "дампинг ячеек памяти". После того, как Вы завершите "зануление", Вам необходимо уничтожить строки 9997...9999.

Необходимо подчеркнуть одну маленькую деталь, помогающую облегчить работу с программой распечатки содержимого ячеек. Если эта программа по какой либо причине остановилась с сообщением об ошибке типа INVALID COLOR; NUMBER ТОО BIG и т.д., то Вам достаточно набрать с клавиатуры NEXT I и "дампинг" продолжится.

Второй метод заключается в использовании программы для "зануления". Тот процесс, который Вы делали вручную, т.е. анализ строки и "зануление" ее номера, эта программа делает самостоятельно:

9990 REM (C) программист Михайленко Вадим Минск, МРТИ, гр 010207 Беларусь, 1991

9991 FOR i=23758 TO 65000

9992 IF PEEK i=13 THEN IF PEEK (i+1)=39 AND PEEK (i+2)=6 THEN STOP

9993 IF PEEK i=13 THEN POKE(i+1),0: POKE (i+2),0: LET i=i+4

9994 NEXT i

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

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

Строка 9992 осуществляет контроль таким образом, чтобы не допустить превращения в 0 (ноль) номеров строк зануляющей программы. (Они находятся по номеру 9990, поэтому наличие этой строки - обязательно). После завершения работы программа останавливается оператором STOP.

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

POKE 23755,0

POKE 23756,0

Теперь Ваша программа защищена: ни одну из ее строк невозможно вызвать для редактирования.

2.3. Использование управляющих кодов.

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

Но для начала я постараюсь ввести читателя в курс дела, более подробно ознакомить

его с накопленным опытом использования управляющих символов.

* * *

ИНФОРКОМ рекомендует Вам также обратиться к разделу "Маленькие хитрости" в "ZX-РЕВЮ-91", где на с. 116 и 140-142 достаточно подробно разбирался вопрос использования управляющих кодов в операторе PRINT.

2.3.1. Введение

Не полностью изучив возможности своих персональных компьютеров, многие пользователи бывают шокированы, когда остановив загрузку, чтобы посмотреть содержание фирменной программы, вместо первой строки Бейсика они видят сплошную строку (без номера) с какой-либо надписью, например:

CRACKED BY BILL GILBERT () год

Здесь может присутствовать также название программы или надписи иного рода (BILL GILBERT взят для примера - разумеется, другие "хэккеры" тоже используют управляющие коды). Текст же самой программы увидеть не удается.

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

Кроме этого, специально для печати сообщений существует код, позволяющий пропускать сразу 16 символов в строке, т.е. он один как бы заменяет 16 символов типа "пробел".

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

К таким приемам в работе с файлами прибегали многие взломщики фирменных программ (см. EXOLON, GAMEOVER и т.д.).

2.3.2. Самый первый шаг

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

Изучим конкретный пример. Мы хотим, чтобы после остановки программы и подачи команды LIST у нас сверху появлялась надпись (без номера, указывающего, что это строка Бейсик-программы и без каких-либо операторов):

GOOD LUCK TO YOU YOUNG CRACK,

что в переводе с английского означает: УДАЧИ ТЕБЕ ЮНЫЙ ВЗЛОМЩИК. Для этого наберем Бейсик-строку:

1 REM LLLLLLLLLLGOOD LUCK TO YOU YOUNG CRACK

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

1) Сначала сместим особым методом исходную надпись на шесть знакомест влево.

2) Зададим цвет INK исходной надписи.

3) Зададим цвет PAPER для исходной надписи.

Будем последовательно выполнять эти пункты:

1. Для того, чтобы сместить надпись на 6 знакомест влево, Вам необходимо заслать управляющие символы оператора "курсор влево" вместо 6 символов L. Для этого наберем с клавиатуры

FOR i=23760 ТО 23765: POKE i,8: NЕХТ i

Теперь, если Вы без ошибок набрали исходную строку с оператором REM и правильно дали команду с клавиатуры, то при подаче команды LIST Вы должны увидеть на экране надпись, содержащую 4 символа L и основную надпись, но уже без номера строки и без оператора REM.

Выполним второй пункт:

2. Возможно, что защищая свою программу, Вы пожелаете изменить цвета PAPER и INK, но нам необходимо, чтобы в любых условиях Ваша надпись была видна.

Для этих целей необходимо задать цвета непосредственно для надписи. Делается это с помощью прямых команд, засылающих вместо символов L коды управления цветом:

POKE 23766,16 POKE 23767,0

В ячейку 23766 мы засылаем код управления цветом INK, а в ячейку 23767 непосредственно значение цвета. В данном случае символы будут иметь черный цвет INK.

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

3. Изменим цвет PAPER. Это производится точно таким же способом: POKE 23768,17

POKE 23769,7

В данном случае в ячейку с адресом 23768 мы занесли код управления цветом PAPER, а в ячейку 23769 непосредственно числовое значение цвета фона. Теперь надпись, появившаяся на экране после подачи команды LIST, будет содержать только то, что мы желали показать.

А если мы теперь подадим прямые команды INK 0: PAPER 0: BORDER 0: CLS

то после подачи команды LIST получим картину, аналогичную той, которую можно наблюдать после остановки многих фирменных программ.

Теперь давайте проанализируем, что же у нас получилось из бывшей изначально достаточно простой Бейсик-строки.

23755

?

0

в этих ячейках

23756

?

1

распол. ном. строки

23757

?

44

в этих ячейках

23758

?

0

распол. длина строки

23759

REM

234 здесь наход. код оператора REM

23760

8

здесь расположен упр.

23761

8

код символа КУРСОР

23762

8

ВЛЕВО

23763

8

23764

8

23765

8

23766

16

здесь находятся упр.

23767

0

коды управления цветом INK.

23768

17

здесь расположены

23769

7

упр. коды, ответственные за цвет PAPER

23770

здесь расположен наш исходный текст: GOOD

23797

LUCK TO YOU YOUNG CRACK

Следует предупредить читателя, что для того, чтобы выполнить все вышеизложенное необходимо, чтобы системная переменная PROG, расположенная по адресу 23635-23636 указывала начало Бейсик-строки с адреса 23755. Это будет всегда, если Вы не изменяли его (следует отметить, что это значение может изменяться само при подключении некоторой переферии, в частности интерфейсов внешних устройств, например ZX-INTERFACE-1).

Рассмотрим в качестве следующего примера еще один, достаточно часто используемый хэккерами прием. Например, для того, чтобы сделать дальнейший текст программы (расположенный после строки, которую мы оформили в предыдущем примере) нечитаемым, необходимо сделать так, чтобы компьютер после подачи команды LIST сам останавливал распечатку в необходимом Вам месте. Это можно сделать несколькими способами. В качестве примера рассмотрим один из них.

После того, как компьютер распечатает строку с приветствием для взломщиков, он

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

Для остановки распечатки в необходимом месте, нам понадобится зарезервировать еще 2 символа в том "полуфабрикате", который мы использовали в примере.

Следовательно, строка Бейсик-программы в первоначальном варианте будет иметь

вид:

1 REM L...L исходный текст LL

10 символов

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

Чтобы узнать адрес ячейки, в которой расположен последний символ основной надписи, нам необходимо к последнему значению адреса перед этой надписью (в данном случае 25769) прибавить количество символов, содержащихся в данной надписи. В надписи GOOD LUCK ТО YOU YOUNG CRACK содержится 28 символов (мы должны считать не только буквы, но и пробелы). Следовательно, теперь мы можем установить адрес ячейки, в которой находится код первой буквы L, первой из тех двух, которыми мы дополнили нашу надпись:

23769+28=23797

Адрес 23797 указывает на последний символ нашей надписи, следовательно, если Вы не делали между основной надписью и парой символов LL пробел. Ячейка, содержащая первое L должна иметь следующий номер:

23797+1=23798

Проверим это, подав команду PRINT CHR$(PEEK 23798).

На экране должен появиться символ L, а для того, чтобы убедиться что мы нашли адрес ячейки именно первого L, а не второго, подадим команду:

PRINT CHR$(PEEK 23799)

На экране должно тоже появиться L. Теперь нам нужно вместо первого символа L заслать код управления цветом INK:

POKE 23796,16

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

INK 76

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

INVALID COLOR

Таблица 1

0

1

2

3

4

5

6

7

8

9

0

TRUE VIDEO

INV VIDEO

PRINT запятая

EDIT

Курсор <--

Курсор -->

10

курсор вниз

курсор вверх

DELETE

ENTER

ЧИСЛО

режим GRAPH

Упр. INK

Упр. PAPER

Упр. FLASH

Упр. BRIGHT

20

Упр.

INVERSE

Упр. OVER

Упр. AT

Упр. TAB

Описание управляющих кодов Спектрума

Таблица 2

Код

Наименование

Назначение

8

BACK SPACE

Код, создаваемый программой ввода с клавиатуры при нажатии "CAPS SHIFT" и "5". Воспринимается большинством принтеров, т.к. это ASCII код перехода назад.

9

RIGHT SPACE

Код, генерируемый программой ввода с клавиатуры при нажатии "CAPS SHIFT" и "8". Код перемещения курсора вправо, но при его использовании позиция печати не меняется. ASCII код табулирования печати строки.

10

DAWN SPACE

Как и вышеперечисленное, но для "CAPS SHIFT" и "7". Это ASCII код заполнения строки.

11

UPSPACE

Как и вышеперечисленное, но для "CAPS SHIFT" и "7". Это ASCII код для смещения печатной позиции вверх.

12

DELETE

Как и вышеперечисленное, но для "CAPS SHIFT" и "7". Это ASCII код заполнения формата.

13

ENTER

Генерируется при нажатии клавиши "ENTER", выполняет возврат каретки и заканчивает печать строки при выводе на принтер. Это ASCII код перевода каретки. Предшествует номеру строки в программе.

14

Используется для чисел в 5-ти байтной форме. Это ASCII код "SHIFT OUT".

15

В стандартном БЕЙСИКе не используется. Это ASCII код "SHIFT IN". Может использоваться в расширениях БЕЙСИКа, например в БЕТА-БЕЙСИКе 3.0.

16

INK

CONTROL

Управляющий код INK. Используется перед кодом, содержащим численное значение "INK". Следует отметить, что в качестве кода численного значения цвета используется не ASCII код 2, а значение 2.Например, для изменения цвета печати на экране всех символов на красный, Вам нужно использовать процедуру RST 16 с 16 в регистре A и двойкой.

17

PAPER CONTROL

Управляющий код PAPER. Используется аналогично коду INK. Значения, следующие за ним, соответствуют стандартным значениям цветов "СПЕКТРУМА".

18

FLASH CONTROL

Как и вышеизложенное, но для FLASH. Код может быть соответственно только 0 или 1.

19

BRIGHT CONTROL

Аналогично вышеприведенному для "FLASH", только в данном случае используется для "BRIGHT".

20

INVERSE CONTROL

Как и вышеприведенное, но для "INVERSE".

21

OVER CONTROL

Как и вышеприведенное, но для "OVER".

22

AT

CONTROL

Код контроля "AT", который должен сопровождаться номером строки и столбца соответственно.

23

TAB

CONTROL

Как и вышеприведенное, но для "TAB". В данном случае код должен сопровождаться только значением столбца.

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

POKE 23756,0: POKE 23755,0

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

нулевой номер.

Команда же LIST 0 снова распечатает строку с исходным сообщением.

В примере 2 для того, чтобы скрыть дальнейший листинг, мы создали заведомо неправильный цвет, но можно поступить иначе, например, сделать после исходной надписи одинаковыми цвета INK и PAPER. Это обеспечит не меньшую надежность в сокрытии листинга. Подадим команды: POKE 23798,16 POKE 23799, 7

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

Это делается после смещения строки на 6 пикселей влево (см. пример 1 пункт 1) подачей команд: POKE 23766,16 POKE 23767,7 POKE 23768,17 POKE 23769,7

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

2.3.3. Управляющие коды ZX SPECTRUM.

Управляющие коды в ZX SPECTRUM используются так же, как и в других компьютерах для управления печатью на экране и на принтере. Ниже приведены таблицы 1 и 2.

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

(ПРОДОЛЖЕНИЕ СЛЕДУЕТ)




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Железо - Покупатели дают высокие оценки модемам фирмы Наyes за возможность быстрого сжатия.
VIRTUAL TR-DOS - Новый сайт в Internet'е.
Вечный думатель - Что значит "Ф"?
Лит. страничка - Тени прошлых лет.
Игротека - GLADIATOR. Анализ интересной fightingовой игры.

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