ZX Power #04
09 января 2000

Ликбез - ВОССТАНОВЛЕНИЕ ИГР#3. Заключительная статья.

<b>Ликбез</b> - ВОССТАНОВЛЕНИЕ ИГР#3. Заключительная статья.
ВОССТАНОВЛЕНИЕ ПРОГРАММ 

             часть 3

(С) 1996-99, Александр Десятниченко 
__________________________________________ 

   Восстанавливая  игры, регулярно натыка- 
ешся  на исходники, в которых очень трудно
найти  стартовый  адрес, - программа плохо
читаемая, разбросанная кусками по всей па-
мяти,  вперемешку  с табличками, графикой,
текстами и пр. Сейчас я опишу метод, с по-
мощью  которого  можно  практически всегда
отыскать начало программы.
   Для  этого нужно запустить STS и загру-
зить в него полностью всю игру, - от 16384
до  65535. При необходимости, придется де-
компрессировать  все  блоки и поставить на
свое  место  ту  часть  программы, которая
должна  размещаться  в  адресах с 23296 по
25000, не забудьте только перед этим пере-
нести  резидент самого монитора на свобод-
ное  место  в экранной области, примерно в
район  20000.  Другими  словами, вы должны
разместить  игру  так, чтобы она была пол-
ностью  готова к обычному запуску процеду-
рой  восстановления регистров. Теперь най-
дите  саму эту процедуру, она всегда нахо-
дится   в  экране  и  начинается  так:  LD
SP,(16384).  Aдрес может быть и другим, но
он тоже обязательно будет в пределах экра-
на,  после этой строки идут многочисленные
POP,  затем определение IM 1/IM 2 и, нако-
нец, RET.
   Пример такой процедуры я приводил в на-
чале  этой  статьи. Установите программный
счетчик на эту начальную строку и, нажимая
SHIFT+Z,  в пошаговом режиме выполните эту
процедуру.  Что  это дает? Сначала "вспом-
нится"  стек,  затем из него начнут извле-
каться значения регистров на момент взлома
игры  и вы сможете пронаблюдать эти значе-
ния.  Затем внимательно посмотрите за кур-
сором и определите, какой режим прерывания
был  установлен  на момент взлома и, нако-
нец-то, самое главное, - по команде RET вы
вывалитесь  в сам код игры, - как раз в то
место,  в  котором  она  была  остановлена
кнопкой мультифейса! Что вам еще надо?
   Двигаясь  от этого места вверх по прог-
рамме, вы по-любому найдете ее начало, тем
более что теперь знаете, например, заноси-
лось  ли что-нибудь в IY, где по умолчанию
обычно  23610,  устанавливался  ли  IM 2 и
т.п.  Посмотрите снова на адрес, где у вас
сейчас  установился  стек и проверьте, нет
ли там каких-нибудь интересных адресов...
   Теперь еще пару слов об играх с подгру-
жаемыми  уровнями.  Так,  если вы пытались
пройти  до  конца STRIDER, то, конечно же, 
зависли на последнем (пятом) уровне. Более
того, - даже скачанный с Internet'а исход-
ник  имеет тот же глюк. При восстановлении
же оказалось, что один из трех блоков это-
го уровня был выгружен нужной длины, но...
не  с  того  адреса! Возможно, ошибка была
допущена даже самой фирмой-производителем,
по  крайней  мере, рабочей версии игры мне
не попадалось. Загрузив этот блок в игру и
выгрузив  его,  как  положено, удалось все
поставить  на  свои  места  и, наконец-то,
предоставить  пользователю  полную  версию
игры,  включая картинку и музыку для 128К,
взятые  с интернетовского исходника.
   Кстати, работоспособность уровней можно
попробовать  проверить  сразу.  Для  этого
"подсовываете" игре вместо первого уровня,
скажем,  третий  или  пятый. В большинстве
случаев  номер  пройдет,  если  же нет, то
придется разобраться с внутренними систем-
ными  переменными самой игры и сделать не-
обходимые  изменения,  чтобы убедить игру,
что она имеет то, что надо. Просмотрев та-
ким  образом  всю  программу, можно теперь
собрать  ее  "в кучу", обессмертить, напи-
сать  intro и т.п. Кстати, кому интересно,
почитайте  note  к  SHADOW DANCER, там MAX 
IWAMOTO  приводит целую эпопею о работе по 
востановлению запоротых уровней к этой иг-
рушке.
   А еще бывают игры, написанные на языках
высокого  уровня, которые, как не странно,
тоже  кто-то  сбросил  мэджиком. Например,
хорошо  известная вам адвентюра TELLYWISE, 

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

почти  полностью сделанная на бейсике. Та- 
кие  игры придется декомпрессировать, заг-
рузить  в STS и выгрузить бейсик под видом
кодов. Затем переименовать расширение фай-
ла,  загрузить  этот  файл,  как  бейсик в
обычном режиме и, найдя строку для автоза-
пуска,  снова  выгрузить,  как  нормальную
бейсиковскую программу.
   Вам,  конечно  же, известны и многочис-
ленные  игры  от  SHOW  BROTHERS (ATLANTIS 
SOFTWARE). Это, например, HEARTBROKEN, SU- 
PERKID  1&2, IRON SOLDIER, SEA HAWK, CAVE-
MANIA,  DOWN  TOWN, KOSMOS и т.д. Они тоже 
делались  не на ассемблере, а то ли на ка-
ком-то языке высокого уровня с последующей
компиляцией, то ли с помощью какой-то обо-
лочки  для создания игр. Причем, игры, на-
писанные  таким образом, обращаются к сис-
темным переменным и, если там будет не то,
что  было  при  написании  этих игр, то во
время  игры  появляются разного рода глюки
типа  застревания на ровном месте, зависа-
ния пуль в воздухе и прочее.
   Как  восстановить такие игры? Для этого
нужно  найти  невосстановленную  игру этих
товарищей,  например,  SEA HAWK и взять из 
нее  кусок  23552,  203.  Затем этот кусок
повставлять    во   все   подобные   игры,
укомпрессировав  его вместе со всей игрой,
либо  сделав  LDIR на это место. К сожале-
нию, многие такие игры уже утеряны.
   Пользователь, увидев глюки, думает, что
игра испорчена и стирает ее. Когда-то дав-
но у меня была игра INTERALIA 1990-го года 
от SHOW BROTHERS, а теперь я ее ищу, чтобы 
восстановить и не могу нигде найти.
   Часто    причиной   неработоспособности
программы  на разных типах компьютеров мо-
жет стать и сам компьютер. Так, многие иг-
ры  фирмы  HEWSON (ELIMINATOR, EXOLON, CY- 
BERNOID,  BATTLE VALEY и т.п.) для опреде- 
ления объема памяти обрашаются к ПЗУ, имея
ввиду, что для 48К и 128К ПЗУ используются
разные,  но,  проверяя содержание какой-то
одной  ячейки  ПЗУ;  такая проверка выдаст
ошибочный результат, если сама ПЗУ прошита
нестандартно.  Вот  пример  из игры BATTLE 
VALLEY:

           45269  LD A,(14446) 
           45272  CP #FF
           45274  JR NZ,45281 
           45276  LD A,#01
           45278  LD (61297),A
           45281  ...

   Как видите, проверяется ячейка 14446, и 
если  у вас нестандартное ПЗУ, то игра бу-
дет  идти  только  в  режиме 128К. В таком
случае  следует внести исправление в текст
программы так, чтобы проверялось не ПЗУ, а
какая-либо ячейка из системных переменных,
например,  23388.  В  этой ячейке, как из-
вестно, #00 при 48К и #10, если у вас 128К
(если вы, разумеется, не изменяли это зна-
чение переключением страниц памяти из бей-
сика  или,  скажем, размещением там распа-
ковщика).
   Примерно  та  же  причина мешает в 128К
играть  музыке  для АY в программах ACTION 
FIGHTER  и  LITTLE PUFF. Интересный эффект 
наблюдается  на  "Ленинградах" при запуске
игры SERGEANT SEYMOUR ROBOTCOP - появляет- 
ся  игровое  меню,  выполненное  запоротым
шрифтом. Затерев пару "левых" OUT'ов в са-
мом  начале  программы, можно заставить ее
прилично работать на любой машине.
   Чaстенько  приходится  сталкиваться и с
опросом  клавиатуры,  когда после IN A,(C)
идет  проверка  не установки битов, а про-
верка  на конкретное значение типа CP #nn.
Естественно,  на  фирменой тачке проблем с
этим  не будет, а вот на наших изворотах в
аккумулятор может попасть все, что угодно,
так  как  вместе с необходимым битом может
установиться/сброситься и парочка "немнож-
ко  других". Естественно, игры в этом слу-
чае или как бы не реагируют на клавиатуру,
как  ABU SIMBEL PROFANATION, или же выпол- 
няют  действие  какое угодно, но только не
то, какое вам надо. Переделка такого опро-
са  клавиатуры  на  побитную проверку типа
BIT n, A решает все вопросы.
   А  теперь  позвольте  сделать  одну ма-
ленькую   рекомендацию,  она  касается  не
сколько  темы восстановления, сколько темы
модернизации игр. Не правда ли, иногда бы-
вает  досадно,  когда в хорошей и не самой
старой  игрушке  все надписи (в т.ч. и ос-
новное  меню)  выводятся обычным, ПЗУ-шным
шрифтом.  Приходит  на ум мысль о том, что
неужели  было так сложно использовать если
не  отдельный  font,  то хотя бы утолстить
тот, что в ПЗУ, ведь это так просто и пот-
ребует  только  два дополнительных байта в
подпрограмме  печати. Mежду второй и трет-
ьей строкой стандартного

                LD B,8 
                LD A,(HL)
                LD (DE),A
                INC HL

нужно  просто вставить RRA и OR(HL). Таким 
образом  за  одним разом с восстановлением
можно улучшить и дизайн, если игра, конеч-
но  же,  позволит сделать такую вставку, а
не  выводит надписи, например, посредством
RSТ #10.
   И  последний  момент.  Начиная с первых
номеров  и еще печатных изданий поднимался
вопрос  о так называемом порте #FF, благо-
даря  которому на большинстве машин не ра-
ботали   DUET,  SHORT  CIRCUIT, RENEGADE и 
т.п.,  а  ARCANOID  1  вообще сидел глухо, 
оживить  его  предлагалось  только методом
технической  доработки компьютера. Заинте-
ресовавшись, я полез в этот самый ARCANOID 
и нашел следующий момент: 

               LOOP DI 
               IN BC,#28FF
               IN A,(C)
               INC A
               JR Z,LOOP

   Заменив это дело на  фрагмент 

               LD BC,2580 
               LOOP DEC BC 
               LD A,B
               OR C
               JR NZ,LOOP

удалось не только запустить игру, но и ре- 
гулировать  скорость  полета мяча, изменяя
начальное значение в регистре ВС замедляю-
щего цикла.
   Много  было версий о том, зачем же было
надо  делать  в  Спектруме этот самый порт
#FF и какая от него польза. Основная масса
суждений  сводилась  к тому, что этот порт
был  нужен для того, чтобы лучше синхрони-
зировать передвижение обьектов на экране в
соответствии  с  ходом  луча  кинескопа. И
вот,  недавно,  отыскался  в том же inter-
net'е  любопытный документ о том, что порт 
#FF был предназначен для защиты производи-
теля самих компьютеров от пиратских подде-
лок.  Sinclair  Research направила в адрес 
крупных  фирм-производителей софта, в час-
ности  OCEAN  и IMAGINE, секретную просьбу 
использовать  порт #FF в своих программах,
а также всю необходимую информацию об этом
порте.  В 1996-м году, когда компьютер на-
чали  официально  изготавливать  и  другие
фирмы,  появились  проблемы со старым соф-
том,  где  использовался  порт  #FF. Фирмы
OCEAN   и  IMAGINE  принесли извинения (!) 
пользователям  новых машин и выпустили ре-
миксы  своих  старых  игр,  но уже без ис-
пользования  этого злополучного порта. Так
появились игры ARCANOID 128K, SHORT CIRCU- 
IT 128K и т.п. 
   На этой приятной ноте я, пожалуй, и за-
кончу  эту статью, надеюсь, вы нашли здесь
хоть  что-то интересное и полезное для се-
бя.  Если  это так, - значит, поставленная
задача  достигнута,  и я буду рад написать
для  вас еще много статей подобного стиля.
С благодарностью приму любые отзывы и кри-
тику на все то, чем я вас гружу на страни-
цах ZX-Power, пишите на адрес редакции. 
__________________________________________ 



Другие статьи номера:

Авторы - Авторы журнала и контакты редакции.

Вступление - Приветствия и вступительное слово.

Вступление - Описание возможностей оболочки.

Вступление - Содержание номера.

Игротека - GLADIATOR. Анализ интересной fightingовой игры.

Игротека - BARD-S TALE. Продолжение "штурма" классической РПГ.

Игротека - SUPAPLEX. Презентация харьковской boulder dash-еобразной игры.

Игротека - SNAKE Презентация написанной в Харькове недетерминированной игры.

Игротека - SNAKE-HELP1. Советы по игре Snake.

Игротека - SNAKE-HELP2. Принципы игры и история создания.

Игротека - СОЛДАТИКИ. Рассказ автора о созданной им стратегической игре.

Игротека - КОРАБЛИКИ. Информация о новом стратегическом проекте.

Игротека - BRAIN PRESSURE. Рассказ о новой логической игре.

Игротека - ПСЕВДОШАШКИ. Еще одна логическая игрушка.

Интервью - Интервью с создателями нашумевшей игры Зеркало, группой ART WORK.

Интервью - Интервью с DEMIURGE ASH.

Интервью - Интервью с MIDISOFT/EM.

Интервью - Интервью с ENERGY MINDS.

Интервью - X-PROmotion. Рассказ о поездке XPJ в Донецк.

Интервью - SSG-99. Рассказ о проходившей в Севастополе Party

Интервью - Интервью с группой из Феодосии - X-THEME.

Ликбез - ВОССТАНОВЛЕНИЕ ИГР#3. Заключительная статья.

Ликбез - алгоритмы быстрой 3D-графики №2. Дополнения и замечания.

Ликбез - CHEATS&POKES. Две последние части из цикла.

Комната смеха - ПРО СИСАДМИНОВ. Подборка анекдотов.

Комната смеха - КАК СДЕЛАТЬ ЖУРНАЛ. Советы "экспертов"

Комната смеха - ГАМЛЕТ#1. Первая часть новой версии бессмертной трагедии.

Комната смеха - БЕЛЫЙ ПИНГВИН. Антиновелла по одной известной игре.

Меломания - МЕЛОМАНИЯ#2. Второй выпуск музыкальной рубрики.

Меломания - ОБЗОР АЛЬБОМОВ. Обзор heavy-metal CD за 98/99 гг.

Меломания - VOODOO (рус.)Перевод альбома King Diamond-98.

Меломания - VOODOO (англ.)Оригинальный текст альбома.

Обозрение - НОВЬЕ?.. Рассуждения на тему свежего софта, список новых игр.

Обозрение - ОБЗОР свежих электронных журналов для ZX Spectrum.

Обозрение - ИГРЫ. Знакомство с новинками игрового ПО: Козел, Охота на кротов, Белый Орел, Leprikon, 12 Тайных Книг, King, C.H.I.F., Черный Ворон - новые миссии.

Вокруг света - Intel: скептики опять ошиблись?

Вокруг света - Новые машины Silicon Graphics: ПК или рабочие станции?

Вокруг света - Новинки с MacWorld Expo.

Разное - НАШЕ НИЩЕНСТВО. Очерк А.П.Чехова.

Разное - ROLE PLAYING GAMES. История ролевых игр.

Разное - ЧЕМПИОНАТ ЗМЕЙ. Новый конкурс.

Разное - И СНОВА AY. Статья о коррекции звучания муз. сопроцессора.

Разное - РЕКЛАМА.

Разное - КОНКУРС.

Рабочий стол - DIGITAL SOUND EDITOR. Презентация цифрового редактора звука.

Рабочий стол - NEOS. Рассказ о новой операционной системе для Спектрума.

Рабочий стол - INTERMINAL. Новая терминальная программа.

Теверна - первый выпуск рубрики, посвященной игровым программам: концепция игры "Таверна".

Почта - Переписка с читателями журнала.


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

Похожие статьи:
Железо - Интерфейс IDE.
Техпомощь - Dos Review 2: материал по формату дисковых операционных систем ПК "АГАТ", Радио-86РК, SP-DOS, БК-0011М.
News - I wish all the Spectrum people to make even more for the sake of our beloved platform!

В этот день...   26 января