┌──────────────────────────────┐
│ ─────── СИСТЕМА ──────── │
└──────────────────────────────┘
Продолжая тему недокументиро-
ванных команд процессора, подня-
тую в одном из прошлых номеров
нашего журнала, сегодня мы пуб-
ликуем ответ Cтанислава Ефимова
на письмо Сим Олега, в котором
продолжается обсуждение этой те-
мы. Редакция журнала готова выс-
лушать и другие мнения на этот
счет.
Станислав В.Ефимов
(Fanatic Stas)
E-Mail 2:5020/525.29@FIDOnetg
КТО КОГО "УБИЛ НАПОВАЛ" ИЛИ
УЧИТЕСЬ ЧИТАТЬ НАЗВАНИЯ, А ТАКЖЕ
ПОСЛЕСЛОВИЯ!
В начале мая редакция
"Спектрофона" получила письмо
читателя, часть которого сталa
откликом на опубликованную в
"S"N11 статью в разделе "Систе-
ма". Я с интересом прочитал это
письмо. Отдельные позиции этого
письма вызвали у меня некоторое
(если не сказать больше) недоу-
мение, и кое-что захотелось про-
комментировать. Хочется наде-
яться, что читателям "Спектрофо-
на" будет интересно...
Начну с P.P.S Олега:
Sim O.R: "P.P.S: Если Вам будет
интересно, я хотел бы продол-
жить тему недокументированных
команд и подготовил материал,
предлагаемый ниже. Если неинте-
ресно - не смотрите."
FS: "Ничего подобного - интерес-
но!"
Олег (О):
1995 Sim O.R. and SERGE,
Volgograd.
Поводом для подготовки это-
го материала стало практически
одновременное появление статьи
Fanatic Stas'a в журнале 'Спек-
трофон' и информационной прог-
раммы Волгоградского программис-
та SERGE под названием 'Top
Secret'.
Обе они посвящены недокументиро-
ванным командам Z-80. Первая -
полна зияющих пробелов, вторая -
очень интересная, но содержит
ряд неточностей. Складывается
интересная ситуация, когда мно-
жество людей знает про эти ко-
манды, активно их испольэует, но
не спешит делиться секретами.
Это вполне понятно: применение
недокументированных команд наи-
более эффективно в кодирующих
программах (оставляют 'темный
уголок' для защиты?). Но все же
настало время немного рассеять
туман. Я ставил своей целью сис-
тематизировать разрозненные све-
дения по этому вопросу и ни в
коем случае не претендую на лав-
ры первооткрывателя.
FS: По поводу 'зияющих
пробелов': внимательно прочтите
послесловие к тому материалу...
А вообще: лучше немного не дого-
ворить, если не твердо уверен,
конечно, чем давать 'сырой' ма-
териал, который может ввести в
заблуждение или вообще завести в
другую сторону (это я про
статью, посвященную TRDOS, в од-
ном из первых номеров "S"). С
'темным уголком' не соглашусь:
все что я видел из программных
(впрочем, как и основанных на
регистрах ВГ93 - в смысле, дис-
ковых) защит на сегодняшний мо-
мент, позволяет мне сделать вы-
вод, что знать недокументирован-
ные команды вообще необяза-
тельно! Эти команды не способны
сильно затруднить доступ к защи-
щенному коду, важно лишь знать
КУДА 'копать' и КАК. ЛЮБАЯ защи-
та имеет слабую сторону, там и
надо копать (а не бить в лоб).
Вообще, степень надежности защи-
ты в целом определяется степенью
защиты самого слабого ее звена
(я кого-то процитировал, а кого
- не помню). Это очень важно
знать программистам, которые
ставят подобные защиты, хотя на
"Спектруме" такую защиту, види-
мо, поставить не удасться. Можно
лишь максимально затруднить путь
взломщику... Что и сделано в
свежайшем релизе Step'а -
Звездном Hаследии... Я не буду
продолжать эту тему, поскольку
уважаю Авторов Программ и не хо-
чу плодить начинающих 'взломщи-
ков' (термин hacker я в данном
случае не употребляю, так как
все что творится сейчас на
Спектруме относится исключи-
тельно к теpмину Software
Piracy).
O: Начнем с того, что не будем
рассматривать набившие всем ос-
комину операции над половинками
индексных регистров. Они давно и
прочно стали достоянием широкой
общественности. С командой SLI,
тоже, похоже, разобрались и за-
полнили восемь нахально пустую-
щих клеточек в таблице префикса
CB. Поэтому есть смысл перейти
сразу к командам, описания кото-
рых пока еще не не опубликованы
нигде (кроме, частично, в прог-
рамме 'Top Secret').
ДУБЛИРОВАННЫЕ КОМАНДЫ.
Прежде всего, дублированные
команды - это такие хитрые ко-
манды, которые представляются не
одним, а двуме и более кодами
операции (КОП).
Команды эти общеизвестны и опи-
сания не требуют, достаточно
посмотреть в таблицу. Команда
NEG, например, может устанавли-
ваться восемью разными КОП, а
мониторы-отладчики 'понимают'
только один: ED44! Несмотря на
это все восемь делают одно и то
же, инвертируют аккумулятор. Об-
ратите внимание на парочку ко-
манд, которым не нашлось даже
подходящего мнемокода и действие
этих команд объяснено в снос-
ке...
FS: Здесь я прерву изложение
Олега и приведу мой аналог
большой таблицы, которую нарисо-
вал автор. Трудно включить ее в
этот текст, в ней много пустого
места, к тому же ширина строки в
32 символа сильно ограничила мою
фантазию...
Надеюсь, что мое чтение этой
таблицы - правильное, и возмож-
ные ошибки будут на 'совести'
автора. Я также 'выкинул' из нее
все команды, набившие оскомину,
типа EDB0 (LDIR) Итак, недоку-
ментированные команды (все зна-
чения - шестнадцатиричные). Сна-
чала ED, далее:
54,64,74,4c,5c,6c,7c - NEG;
55,65,75 - RETN;
5d,6d,7d - RETI;
66,4e,6e - IM 0;
76 - IM 1;
7e - IM 2;
70 - аналог {IN A,(C);OR A}
по результату OR выстав-
ляются флаги S, Z, P;
71 - аналог {LD A,0; OUT (C),A}
регистр A сохраняется.
Время выполнения двух последних
команд - 12 тактов.
ДВУХПРЕФИКСНЫЕ КОМАНДЫ.
Самая обширная группа ко-
манд. В общем виде команды из
этой группы представляются в ви-
де:
1 байт - префикс DD или FD
2 байт - префикс CB
3 байт - смещение
4 байт - код команды
Работают эти команды очень
интересно. Hапример, такая пос-
ледовательность байт: ddcb0100
будет иметь вид RLC B,(IX+1).
Сначала действие (RLC, в данном
случае) производится над ячей-
кой (IX+1), а затем результат
копируется в соответствующий ре-
гистр. Команды, работавшие
раньше с (HL) результат никуда
не перегружают.
Команды серии BIT только тести-
руют биты по адресу (IX+n) и
выставляют флаги в F. Поэтому
они дублируются по восемь раз,
т.к. независимо от регистра, над
которым раньше производилась ко-
манда, здесь подставляется
(IX+n). Особенно 'повезло' ко-
манде SLI. Мало того, что она
сама недокументированная, но еще
и может выполняться 'левым' спо-
собом.
Высказывание Fanatic Stas'а,
что приведенные команды можно
использовать с полезностью не
большей NOP, убило меня наповал.
Интересный получается NOP, если
он активно изменяет содержимое
памяти и регистров!
FS: Я могу еще раз повторить
фразу насчет 'полезности', одна-
ко, в контексте предыдущей
статьи. Hадеюсь, что не убью Вас
наповал, если скажу, что знать
дублированные команды мне сов-
сем необязательно. Зачем мне,
как программисту, знать что су-
ществует энное количество NEG
или IM2? Две команды, к которым
не нашлось мнемоники, я вообще
не знаю, куда 'приткнуть' в свои
программы, и, уверен, что немно-
гие смогут найти им пpименение.
А по поводу RLC и ко. могу ска-
зать, что эти команды мне хоро-
шо известны и не являются по су-
ти недокументированными.
Для того, чтобы их 'раскусить'
необходимо лишь сделать шаг от
LD IX,nn, т.е. от простейших ко-
мандах с префиксами (получается,
что LD IX тоже недокументирова-
но?).
О: Возьмите, к примеру, програм-
мы С. Ханциса 'Screen Manager',
'Super List' и т.д., и для обще-
го развития раскодируйте их.
Если у Вас это получится, то пе-
ред Вами предстанет живой при-
мер кодировщика, прекрасно вы-
полняющего свое предназначение,
используя как раз, так называе-
мый, 'NOP'.
FS: Я уже написал, что в преды-
дущей статье, как и, надеюсь, во
всех последующих, опираюсь на
программистов, а не на хакеров.
По моему убеждению, большинство
(читай - все) из тех, кто вообще
приложил руку к ассемблеру, пи-
шут подобные кодеры исключи-
тельно для себя, для собственно-
го самоутверждения, поскольку
серьезной мозговой атаки не один
из них (кодеров) не выдержит. Я
же уже давно 'на общественных
началах' не занимаюсь, как пос-
тановкой, так и снятием (каюсь -
не пинайте ногами) всевозможных
защит...
О: Впрочем, чего еще можно ожи-
дать от хаккера, не умеющего
толком переключать страницы в
режиме 128k.
FS: Hу наконец-то... 'Hаехал'...
И чем я Вас так обидел? Hемного
же Вы видели моих программ,
Олег, увы, раз Вы делаете такой
вывод!
Пару лет назад Спектрум купили?
По поводу переключения страниц в
двух (Stifflip, Deactivators)
программах я расскажу как-нибудь
попозже, если будут просьбы, но,
ей-богу, это весьма поучительная
история, связанная с проверкой
некоторых моих подозрений в
честности некоторых людей...
Скажу лишь, что спустя две неде-
ли после появления 'левых' прог-
рамм выпущены их 'правильные'
версии... Мне не повезло, что
"Спектрофону" Deactivators, как,
впрочем, и мне, так понравился.
Не выносите вердикт заочно, гос-
пода!
O: Интересная концепция, приме-
нение двухпрефиксных дает нам
две полные таблицы кодирования,
т.е. 510 КОП (почему 510, а не
512, я не понял... - FS), нигде
толком не описанных.
Вкупе с дублированными команда-
ми, командами, работающими с по-
ловинками регистров и командами
SLI, недокументированные команды
по численности приближаются к
основному набору команд!
Причем, вероятнее всего, это
не предел, вглядитесь в таблицу
ED, в ней еще столько 'белых пя-
тен', что вполне вероятно появ-
ление новых и новых команд. Кто
до конца знает старину Z80? В
настоящее время особый интерес
должны представлять недокументи-
рованные биты флагового ре-
гистра. Hасколько мне известно,
еще никто не предпринимал фунда-
ментальных исследований в этой
области. Факт только то, что не-
которые команды при некоторых
условиях изменяют эти флаги. Мо-
жет быть кто-нибудь выскажется
по этому поводу?
FS: Мне бы тоже хотелось, чтобы
кто-нибудь 'покопал' Z80, но
увы, Олег, Ваше письмо
единственное с материалом, кото-
рый вызывает интерес. Откликов,
правда, намного больше - это ра-
дует! Я уже затронул вопрос фла-
гов в предыдущей статье, хотя,
видимо, лишь немного.
Жаль, что Олег не привел ис-
точников своих знаний, посколько
его материал, я надеюсь, не пол-
ностью 'срисован' с программы
'Top Secret', которую я не ви-
дел. Хотелось бы знать источни-
ки, откуда появилась такая ин-
формация, также и в 'Top
Secret'. Уверен, что такие ис-
точники все же были, посколько
догадаться, сколько выполняются
ED70 и ED71, мне кажется, невоз-
можно. IM0 и IM1 также плохо
поддаются дифференцированию.
Похожая ситуация и в случае с
RETN, RETI, хотя здесь еще,
пpавда не без тpуда, мне
удасться их отличить...
"S": Приглашаем всех, интересую-
щихся данной проблемой, выска-
заться со страниц нашего журна-
ла. Надеемся, что общими услили-
ями мы докопаемся до истины.
ЖДЕМ ПИСЕМ!
* * *