Black Crow #01
01 июня 1998

Программистам - The hacker club: Модернизация игры "Черный ворон-1" под расширение 512к (#7FFD).

<b>Программистам</b> - The hacker club: Модернизация игры
    МОДЕРНИЗАЦИЯ ИГРЫ "ЧЕРНЫЙ ВОРОН-1"    
       ПОД РАСШИРЕНИЕ 512К (#7FFD)        
                                          
(C) 1998 MAX                    
------------------------------------------
             О сколько нам открытий чудных
             Готовит Славик Медноногов... 
                          почти по-Пушкину
                                          
    Итак, как и следовало ожидать, "Черный
Ворон"   оказался   бестселлером  на  оте-
чественном  рынке программного обеспечения
для платформы Спектрума. Хит сезона состо-
ялся.  Не  буду кривить душой, если скажу,
что это лучшее, что было до сих пор сдела-
но на нашей платформе в жанре стратегий.  
    Но в процессе игры начинаешь понемногу
беситься из-за мелких недостатков, недоде-
лок  и  глючков.  Каждый,  кто  доходил до
третьего уровня и будучи немедленно убитый
неприятелем,  был  вынужден  перезагружать
всю  программу,  чтобы повторить или изме-
нить  тактику и стратегию ведения боя. При
двух  дисководах еще куда ни шло, но с од-
ним  просто  вешалка... Вдоволь натрениро-
вавшись  менять диски, плюнул на копирайты
и  прочие условности, начал ковырять прог-
рамму  изнутри. Каково было мое удивление,
когда  я увидел полностью свободный доступ
к  алгоритмам.  Проскочила  мысль: неужели
все  так  просто  или автор решил, что три
царапины  на  диске два вполне достаточно?
Как  я  ошибался!  Без  труда найдя нужные
места в программе, сделал коррекцию, затем
запустил  и... через 5-10 секунд все умер-
ло...  Шикарная защита, ничего не скажешь.
Просто круто, и все тут.                  
     Но  не для того я пишу все это, чтобы
поведать  вам,  как  там и что. Вовсе нет.
Цель  этой  статейки - ознакомление с моей
доработкой  игры,  дабы  игоки не рвали на
себе  ничего  ниоткуда,  а  имея  дополни-
тельную   память   по  СТАНДАРТНОМУ  порту
#7FFD, могли спокойно наслаждаться прелес-
тями  ведения  боевых  действий в реальном
времени. Короче, если у тебя нет ОЗУ свыше
128К  по  вышеуказанному порту, дальше мо-
жешь не читать.                           
                                          
         КРИТИЧЕСКОЕ ОТСТУПЛЕНИЕ.         
                                          
     Господа программисты! До каких пор вы
будете писать программы с расчетом на 128К
памяти? Двенадцать лет прошло с того момен
та, как этот стандарт был изобретен и семь
лет,  как доведен до логического продолже-
ния  в виде 512К. А вам хоть кол на голове
тиши,  все  нипочем. Достали эти отмазки в
хелпах, типа сорри, братцы, памяти не хва-
тает  для того, для этого... Сейчас только
ленивые, бедные и жадные не делают расшире
ние ОЗУ. Так на кого равняемся, ребятки?..
                                          
      Закончим со вступлением и перейдем к
самому интересному, а именно к ассемблеру.
Хочу сразу разочаровать любителей на халя-
ву  что-то  поиметь:  здесь нет технологий
для  снятий защиты. Данная доработка будет
работать  ТОЛЬКО  на оригинальной версии и
никакие  пиратские глюкодромы здесь не ка-
тят! Также не получится припахать инфиниты
без  детального  и ПОЛНОГО изучения метода
защиты.  Так  что  покупайте исключительно
оригинал!  Такие  таланты, как Медноногов,
ОБЯЗАТЕЛЬНО должны оплачиваться.          
   Итак,  с разрешения автора делаем копию
первого  диска с трека 2 по трек 128 вклю-
чительно.  Можно  не морочить голову и по-
экспериментировать  с  оригиналом.  Но для
этого  следует  иметь устойчиво работающую
систему  и  программу  "Catalogue  Master"
(смотри  ZX-Format  #5).  Этой  программой
сделай  дубликат  нулевой  дорожки  на 160
трек на тот случай, если процесс доработки
тебя  не устроит и ты захочешь все восста-
новить. Затем ТОЛЬКО нулевой трек формати-
руй по стандарту iS-DOS, после чего загру-
зи  "ALASM", или что там у тебя, и набирай
нижеследующее:                            
                                          
;28.02.98 Сея штучка нужна для того, чтобы наш ше- девр записать на диск номер один. ORG #6000 LD HL,#6200 LD DE,#0000 LD ВС,#0106 CALL 15635 RET А теперь поехали! SM EQL #4000 ORG #6200 DI
LD A,0
Здесь можно немного отсебятины позволить с началом игры, если установить системную #79D8 - номер level`а. Указываю ее по мно- гочисленным просьбам игрателей. Сработает она, если в стартовом меню выбрать "Новая игра" за неважно кого. Если невмоготу ста- ло воевать, короче, застрял где-то, тогда можешь "переступить" этот уровень (или просмотреть их все). JR LEVEL Как положено хаккерам, делаем подпись. DEFM "Cracked Ьу МАХ. " DEFM "Version for Spectrum 128" DEFM "/256/512 (port #7FFD)." LEVEL LD (#79D8+SM),A LD A,7 CALL PAGE Проверим наличие расширения по #7FFD. LD HL,#С000 LD DE,#5707 LD A,(HL) ЕХ AF,AF`
LD (HL),Е
LD A,D CALL PAGE
LD (HL),D
LD A,Е CALL PAGE LD A,(HL) СР Е ЕХ AF,AF` LD (HL),A ЕХ AF,AF`
JR NZ,LNPROT
Ты счастливый обладатель доп. страниц. В сервисном меню заменим слово
"Закончить" на "Повторить". Другое не поместится. LD HL,MOD LD DE,#FD0B LD ВС,MOD1-MOD LDIR LD HL,MOD1
LD DE,#FD5Ч
LD С,9 PLSH HL LDIR РОР HL LD DE,#FC5C LD С,6 LD A,С LDIR
CALL PAGE
Здесь подставляем процедурку переброса всей игры на дополнительные страницы. По- чему всей? Нет желания трахаться с разбор- ками что как и где меняется в процессе иг- ры, поэтому сохраним со всеми потрохами.
LD HL,СОХРАН LD DE,#FABE LD ВС,MOD-СОХРАН LDIR LD A,#55 CALL PAGE LD HL,PAGE_55 LD DE,#С000 LD ВС,1000 LDIR А здесь замолчу, что делаю. Кто шибко умный, сам поймет. LNPROT XOR A CALL PAGE LD HL,LLE0CF LD DE,#E0CF LD ВС,END-BEG LDIR LD HL,POKED LD (#6Е9F+SM),HL LD A,#18 LD (#Е160),A LD A,#С9 LD (#D639),A LD HL,#0000 LD (#6D31+SM),HL LD L,#3Е
LD (#7715+SM),HL
LD A,#18 LD (#40D0+SM),A Перерасчет КС. Не скажу, как их считать надо, т.к. две недели их все выискивал. Да и не только в этом дело. Нет желания авто- ру свинью подсовывать - раз, нет желания давать возможность идиотам делать инфиниты - два, есть желание дождаться "Черный Во- рон-2" - три. Хватит аргументов? Так что привожу готовые контрольные коды. Ес- тественно, если чего изменишь без меня, то нифига работать не будет. LD HL,#FЧAF LD (HL),#AA LD HL,#7650+SM LD (HL),#81 LD HL,#400С+SM LD (HL),#5A LD HL,#4045+SM LD (HL),#41 LD HL,#4043+SM LD (HL),#06 LD HL,#4002+SM LD (HL),#D7 LD A,#04 CALL PAGE LD HL,#FFOO LD (HL),#96 LD A,#07 CALL PAGE LD HL,#FFFE LD (HL),#DD LD HL,#DB00 LD (HL),#С4
LD HL,#FE00
PLSH HL LD A,#06 PAGE LD ВС,#7FFD OR #18 OLT (С),A NOP RET Далее идут прибамбасы для туда-сюда пе- ребросок страниц и всякое такое. Цвет бор- дера меняется для контроля работы програм- мы. Все особенности листинга справедливы для ассемблера "ALASM". ; For page 6 СОХРАН DISP #FABE LD SP,#403Е
LD HL,#A11С
PLSH HL
LD HL,#4331
PLSH HL LD HL,СОХР1 LD DE,#4100 LD ВС,255 PLSH DE LDIR LD A,4 OLT (#FE),A RET СОХР1 DISP #4100 LD A,#52 CALL #4337
CALL DRC0 CALL #432A
CALL DR80 LD A,#50 CALL #4337 CALL DRC0
CALL #432D
CALL DR80 LD A,#51 CALL #4337 CALL DRC0
LD A,3
CALL #4337 CALL DR80 LD A,#53 CALL #4337 CALL DRC0
CALL #4326
CALL DR80 LD A,#54 CALL #4337 CALL DRC0
CALL #4331
CALL DR80 LD A,#56 CALL #4337 CALL DRC0
CALL #4335
CALL DR80 LD A,#57 CALL #4337 CALL DRC0
LD A,#52
CALL #4337 CALL DR80
LD A,#55
CALL #4337 LD HL,#7651 LD DE,#DB00 LD ВС,2479 LDIR LD Н,#40 LD С,80 LDIR LD HL,#4100 LD DE,#4101 LD ВС,255 LD (HL),#40 LD A,Е OLT (#FE),A
JP #4368
DR80 LD HL,#С000 LD DE,#8000 DR801 LD ВС,#4000 LDIR RET DRC0 LD HL,#8000 LD DE,#С000 JR DR801 ENT
MOD DI LD HL,DRIVE PLSH HL
LD A,#55
JP #4337 MOD1 DEFB #1В,#3Е,#32,#42,#3Е,#40 DEFB #38,#42,#4A Автор не избежал недочета многих програ- меров нашей "мышиной" эпохи. Имеется ввиду сетапное подключение/отключение кемпстон мышки. При загрузке отложенной игры и при включенной мышке очень часто получается, что экран "убегает". Происходит это из-за большой разницы между предидущими и теку- щими значениями портов моуса. Здесь этот глючек исправлен. Подробно о системных мы- ши смотри в иструкции по написанию драйве- ра в журнале ZX-Format.
BEG LLE0CF DISP #E0CF DI
LD HL,#70A0
LD (#77СЕ),HL
LD A,(#79В2)
OR A
JR Z,LE0CF1
LD HL,#77D0 LD ВС,#FBDF IN A,(С) LD (HL),A INC HL LD В,#FF IN A,(С) LD (HL),A LE0CF1 ЕХ AF,AF` RET С CALL #бAбD CALL #40Е8 CALL #6С89 RET POKED PLSH HL LD HL,#7A6B ЕХ (SP),HL LD A,(#79D7) OR A LD A,(#79D8) JR Z,POKED1 СР #08 JR POKED2 POKED1 СР 13 POKED2 RET NZ LD (#7A6E),A RET ENT END А это сам драйвер переброса страниц, ко- торый я перебрасываю с доп. страницы на таблицу вектора прерываний, запускаю, а затем ликвидирую. Больше некуда приткнуть.
PAGE_55 DISP #С000 DRIVE DI LD SP,#0000
LD В,#10
AY1 PLSH ВС LD A,В DEC A LD ВС,#FFFD OLT (С),A LD В,#BF СР 7 LD A,0 JR NZ,AY2 CPL AY2 OLT (С),A РОР ВС DJNZ AY1
LD HL,#79В1
LD ВС,#0404 AYЗ LD A,(HL) PLSH AF INC HL DJNZ AYЗ ЕХХ
LD HL,#DB00
LD DE,#7651
LD ВС,2479
LDIR LD D,#40
LD С,80
LDIR ЕХХ LD В,С AYЧ DEC HL РОР AF LD (HL),A DJNZ AYЧ LD SP,#403Е
LD HL,#A11С
PLSH HL LD HL,DRIVE1 LD DE,#4100 LD ВС,255 PLSH DE LDIR LD A,4 OLT (#FE),A RET DRIVE1 DISP #4100 LD A,#50 CALL #4337 CALL DR_80
CALL #432A
CALL DR_С0 LD A,#51 CALL #4337 CALL DR_80
CALL #432D
CALL DR_С0 LD A,#53 CALL #4337 CALL DR_80
LD A,3
CALL #4337 CALL DR_С0 LD A,#54 CALL #4337 CALL DR_80
CALL #4326
CALL DR_С0 LD A,#56 CALL #4337 CALL DR_80
CALL #4331
CALL DR_С0
CALL #FA8С
LD A,#57 CALL #4337 CALL DR_80
CALL #4335
CALL DR_С0 LD A,#52 CALL #4337
CALL DR_80 CALL #4331
LD HL,#4100 LD DE,#4101 LD ВС,255 LD (HL),#40 LD A,Е OLT (#FE),A
XOR A
LD (#79D8),A
JP #4368
DR_80 LD HL,#С000 LD DE,#8000 DR_801 LD ВС,#4000 LDIR RET DR_С0 LD HL,#8000 LD DE,#С000 JR DR_801 ENT DEFS 100
ORG #6000
Подведем итоги дня: на 128`кило- байтных машинах все остается без измене- ний, а на расширении 256/512К в сервисном меню вместо
"Закончить игру" появится "Повторить игру". После подтверждения действия все вернется в исходное положе- ние, т.е. на стартовое меню из четырех пунктов. Установки мышки и музыки при этом сохраняются. Можно заново начать, можно отложенное состояние перегрузить, без ре- сета вернуться в бейсик. А главное, нет надобности перезагрузки с диска один! Да, и еще. Обладатели фуфельных дисководов, иногородние и просто не внимательные могут заклеить второй диск воизбежание его порчи каким-нибудь неизвестным мне вирусом в программе или случайным глюком системы. После завершения работы над доработкой мне начали поступать сигналы, что при дисковых операциях игра виснет. Причина тривиальна: хотелось автору как лучше, а получилось как всегда. Автор дискового интерфейса (Медноногов?) решил сделать полутурболоа- дер, поэтому не делал позиционирование при каждом сбое в чтении сектора. Представьте, что из пяти секторов на треке как минимум три читается со второго/третьего раза. Что произойдет, если не делать вышесказанное? Правильно, мотор дисковода остановится, т.к. его раскручивает только команда пози- ционирования. Все хорошо, что хорошо кончается. За- канчивается и мой пасквиль на тему инород- ного вмешательства в геймуху. Осталось подключить полученую доработку. Вставляй копию диска один и запусти процедурку за- писи на диск из ассемблера командой RLN. Затем перейди в STS, если загружен, и ко- мандой SS+L считай системный сектор с ори- гинала диска один. Для неграмотных: в окне чтения сектора в STS укажите трек 0, сек- тор 8, длина 1, адрес #8000. Затем по ад- ресу #8006 набери нижеследующее: LD HL,#6200 LD DE,#0001 LD В,#01 CALL #60В3 JP #6200 Это и есть подзагрузка нашей доработ- ки. По адресу #82СС замени CALL #FE00 на JP #5D2В. А теперь вставь копию диска 1 и командой SS+S во все том-же STS сделай отгрузку модернизированного сектора. Пара- метры записи сектора аналогичны загрузоч- ным. Теперь можешь залепить все щели на дисках и запускать "Черного Ворона". Я прошел всю игру на такой доработке и поэтому даю стопроцентную гарантию рабо- тоспособности программы. Если же приклю- чится где-то облом, ищите проблемы и себя. Владельцы компьютеров с расширением не по порту #7FFD за подобными модификациями об- ращайтесь непосредственно к автору прог- раммы Славке Цветметкопыткину. Напоследок воизбежание недоразумений опишу оригиналы дисков с игрой. По крайней мере в Донецке продают именно такие и у меня есть все основания полагать, что это везде так. Итак, оба диска должны быть им- портного происхождения, иметь фирменные наклейки от Медноногова. Диск один на нак- лейке содержит имя автора, фирмы и клавиши запуска. Есть зеркальные изображения ката- пульты. Диск два имеет серийный номер (у меня 11742), изображение рогатого кунга с мечем и щитом, а также надпись "не заклеи- вай" со стрелкой, указывающей на прорезь защиты записи. Также на диске два должна быть физическая защита от копирования в виде трех царапин в районе 2/10 треков с верхней стороны. Если все перечисленное имеется, можете спать спокойно: автор ваши деньги получил и имеет стимул работать да- лее на наше с вами удовольствие.



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

Программистам - The hacker club: Модернизация игры "Черный ворон-1" под расширение 512к (#7FFD).

Программистам - iS-DOS 512k.

Программистам - Заначка.

Очумелые ручки - Открытые технологии: замена К565РУ5 на К555РУ7.

Очумелые ручки - Переделай Profi-512 под Pentagon-512.

Белый попугай - Юмор. "ПОДНЕБЕСbЕ".

Всякая всячина - Разрушители пратформы.

Всякая всячина - Почтовый ящик.

Всякая всячина - Реклама.

Всякая всячина - От автора.

Всякая всячина - Чёрная ворона.

Игровой автомат - Total recall.

Презентация - Ассемблер ALASM v3.9

Презентация - Картотека файлов.

Презентация - Компрессор экранов.

Презентация - User soft.


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

Похожие статьи:
От автора - Последний день лета...
HOT GAMES - Лучшая десятка от Magic Soft.
Замечания по ходу чтения статьи "Red Clones" - Некоторые комментарии по её поводу.

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