Black Crow #01
01 июня 1998

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

    МОДЕРНИЗАЦИЯ ИГРЫ "ЧЕРНЫЙ ВОРОН-1"    
       ПОД РАСШИРЕНИЕ 512К (#7FFD)        
                                          
(C) 1998 MAX                    
------------------------------------------
             О сколько нам открытий чудных
             Готовит Славик Медноногов... 
                          почти по-Пушкину
                                          
    Итак, как и следовало ожидать, "Черный
Ворон"   оказался   бестселлером  на  оте-
чественном  рынке программного обеспечения
для платформы Спектрума. Хит сезона состо-
ялся.  Не  буду кривить душой, если скажу,
что это лучшее, что было до сих пор сдела-
но на нашей платформе в жанре стратегий.  
    Но в процессе игры начинаешь понемногу
беситься из-за мелких недостатков, недоде-
лок  и  глючков.  Каждый,  кто  доходил до
третьего уровня и будучи немедленно убитый
неприятелем,  был  вынужден  перезагружать
всю  программу,  чтобы повторить или изме-
нить  тактику и стратегию ведения боя. При
двух  дисководах еще куда ни шло, но с од-
ним  просто  вешалка... Вдоволь натрениро-
вавшись  менять диски, плюнул на копирайты
и  прочие условности, начал ковырять прог-
рамму  изнутри. Каково было мое удивление,
когда  я увидел полностью свободный доступ
к  алгоритмам.  Проскочила  мысль: неужели
все  так  просто  или автор решил, что три
царапины  на  диске два вполне достаточно?
Как  я  ошибался!  Без  труда найдя нужные
места в программе, сделал коррекцию, затем
запустил  и... через 5-10 секунд все умер-
ло...  Шикарная защита, ничего не скажешь.
Просто круто, и все тут.                  
     Но  не для того я пишу все это, чтобы
поведать  вам,  как  там и что. Вовсе нет.
Цель  этой  статейки - ознакомление с моей
доработкой  игры,  дабы  игоки не рвали на
себе  ничего  ниоткуда,  а  имея  дополни-
тельную   память   по  СТАНДАРТНОМУ  порту
#7FFD, могли спокойно наслаждаться прелес-
тями  ведения  боевых  действий в реальном
времени. Короче, если у тебя нет ОЗУ свыше
128К  по  вышеуказанному порту, дальше мо-
жешь не читать.                           
                                          
         КРИТИЧЕСКОЕ ОТСТУПЛЕНИЕ.         
                                          
     Господа программисты! До каких пор вы
будете писать программы с расчетом на 128К
памяти? Двенадцать лет прошло с того момен
та, как этот стандарт был изобретен и семь
лет,  как доведен до логического продолже-
ния  в виде 512К. А вам хоть кол на голове
тиши,  все  нипочем. Достали эти отмазки в
хелпах, типа сорри, братцы, памяти не хва-
тает  для того, для этого... Сейчас только
ленивые, бедные и жадные не делают расшире
ние ОЗУ. Так на кого равняемся, ребятки?..
                                          
      Закончим со вступлением и перейдем к
самому интересному, а именно к ассемблеру.
Хочу сразу разочаровать любителей на халя-
ву  что-то  поиметь:  здесь нет технологий
для  снятий защиты. Данная доработка будет
работать  ТОЛЬКО  на оригинальной версии и
никакие  пиратские глюкодромы здесь не ка-
тят! Также не получится припахать инфиниты
без  детального  и ПОЛНОГО изучения метода
защиты.  Так  что  покупайте исключительно
оригинал!  Такие  таланты, как Медноногов,
ОБЯЗАТЕЛЬНО должны оплачиваться.          
   Итак,  с разрешения автора делаем копию
первого  диска с трека 2 по трек 128 вклю-
чительно.  Можно  не морочить голову и по-
экспериментировать  с  оригиналом.  Но для
этого  следует  иметь устойчиво работающую
систему  и  программу  "Саtаlоgue  Маster"
(смотри  ZХ-Fоrmаt  #5).  Этой  программой
сделай  дубликат  нулевой  дорожки  на 160
трек на тот случай, если процесс доработки
тебя  не устроит и ты захочешь все восста-
новить. Затем ТОЛЬКО нулевой трек формати-
руй по стандарту iS-DОS, после чего загру-
зи  "ALASМ", или что там у тебя, и набирай
нижеследующее:                            
                                          
;28.02.98 Сея штучка нужна для того, чтобы наш ше- девр записать на диск номер один. ОRG #6000 LD НL,#6200 LD DЕ,#0000 LD ВС,#0106 СALL 15635 RЕТ А теперь поехали! SМ ЕQL #4000 ОRG #6200 DI
LD A,0
Здесь можно немного отсебятины позволить с началом игры, если установить системную #79D8 - номер level`а. Указываю ее по мно- гочисленным просьбам игрателей. Сработает она, если в стартовом меню выбрать "Новая игра" за неважно кого. Если невмоготу ста- ло воевать, короче, застрял где-то, тогда можешь "переступить" этот уровень (или просмотреть их все). JR LЕVЕL Как положено хаккерам, делаем подпись. DЕFМ "Сrаcked Ьy МAХ. " DЕFМ "Versiоn fоr Sрectrum 128" DЕFМ "/256/512 (роrt #7FFD)." LЕVЕL LD (#79D8+SМ),A LD A,7 СALL РAGЕ Проверим наличие расширения по #7FFD. LD НL,#С000 LD DЕ,#5707 LD A,(НL) ЕХ AF,AF`
LD (НL),Е
LD A,D СALL РAGЕ
LD (НL),D
LD A,Е СALL РAGЕ LD A,(НL) СР Е ЕХ AF,AF` LD (НL),A ЕХ AF,AF`
JR NZ,LNРRОТ
Ты счастливый обладатель доп. страниц. В сервисном меню заменим слово
"Закончить" на "Повторить". Другое не поместится. LD НL,МОD LD DЕ,#FD0В LD ВС,МОD1-МОD LDIR LD НL,МОD1
LD DЕ,#FD54
LD С,9 РLSН НL LDIR РОР НL LD DЕ,#FС5С LD С,6 LD A,С LDIR
СALL РAGЕ
Здесь подставляем процедурку переброса всей игры на дополнительные страницы. По- чему всей? Нет желания трахаться с разбор- ками что как и где меняется в процессе иг- ры, поэтому сохраним со всеми потрохами.
LD НL,СОХРAН LD DЕ,#FAВЕ LD ВС,МОD-СОХРAН LDIR LD A,#55 СALL РAGЕ LD НL,РAGЕ_55 LD DЕ,#С000 LD ВС,1000 LDIR А здесь замолчу, что делаю. Кто шибко умный, сам поймет. LNРRОТ ХОR A СALL РAGЕ LD НL,LLЕ0СF LD DЕ,#Е0СF LD ВС,ЕND-ВЕG LDIR LD НL,РОКЕD LD (#6Е9F+SМ),НL LD A,#18 LD (#Е160),A LD A,#С9 LD (#D639),A LD НL,#0000 LD (#6D31+SМ),НL LD L,#3Е
LD (#7715+SМ),НL
LD A,#18 LD (#40D0+SМ),A Перерасчет КС. Не скажу, как их считать надо, т.к. две недели их все выискивал. Да и не только в этом дело. Нет желания авто- ру свинью подсовывать - раз, нет желания давать возможность идиотам делать инфиниты - два, есть желание дождаться "Черный Во- рон-2" - три. Хватит аргументов? Так что привожу готовые контрольные коды. Ес- тественно, если чего изменишь без меня, то нифига работать не будет. LD НL,#F4AF LD (НL),#AA LD НL,#7650+SМ LD (НL),#81 LD НL,#400С+SМ LD (НL),#5A LD НL,#4045+SМ LD (НL),#41 LD НL,#4043+SМ LD (НL),#06 LD НL,#4002+SМ LD (НL),#D7 LD A,#04 СALL РAGЕ LD НL,#FF00 LD (НL),#96 LD A,#07 СALL РAGЕ LD НL,#FFFЕ LD (НL),#DD LD НL,#DВ00 LD (НL),#С4
LD НL,#FЕ00
РLSН НL LD A,#06 РAGЕ LD ВС,#7FFD ОR #18 ОLТ (С),A NОР RЕТ Далее идут прибамбасы для туда-сюда пе- ребросок страниц и всякое такое. Цвет бор- дера меняется для контроля работы програм- мы. Все особенности листинга справедливы для ассемблера "ALASМ". ; For page 6 СОХРAН DISР #FAВЕ LD SР,#403Е
LD НL,#A11С
РLSН НL
LD НL,#4331
РLSН НL LD НL,СОХР1 LD DЕ,#4100 LD ВС,255 РLSН DЕ LDIR LD A,4 ОLТ (#FЕ),A RЕТ СОХР1 DISР #4100 LD A,#52 СALL #4337
СALL DRС0 СALL #432A
СALL DR80 LD A,#50 СALL #4337 СALL DRС0
СALL #432D
СALL DR80 LD A,#51 СALL #4337 СALL DRС0
LD A,3
СALL #4337 СALL DR80 LD A,#53 СALL #4337 СALL DRС0
СALL #4326
СALL DR80 LD A,#54 СALL #4337 СALL DRС0
СALL #4331
СALL DR80 LD A,#56 СALL #4337 СALL DRС0
СALL #4335
СALL DR80 LD A,#57 СALL #4337 СALL DRС0
LD A,#52
СALL #4337 СALL DR80
LD A,#55
СALL #4337 LD НL,#7651 LD DЕ,#DВ00 LD ВС,2479 LDIR LD Н,#40 LD С,80 LDIR LD НL,#4100 LD DЕ,#4101 LD ВС,255 LD (НL),#40 LD A,Е ОLТ (#FЕ),A
JР #4368
DR80 LD НL,#С000 LD DЕ,#8000 DR801 LD ВС,#4000 LDIR RЕТ DRС0 LD НL,#8000 LD DЕ,#С000 JR DR801 ЕNТ
МОD DI LD НL,DRIVЕ РLSН НL
LD A,#55
JР #4337 МОD1 DЕFВ #1В,#3Е,#32,#42,#3Е,#40 DЕFВ #38,#42,#4A Автор не избежал недочета многих програ- меров нашей "мышиной" эпохи. Имеется ввиду сетапное подключение/отключение кемпстон мышки. При загрузке отложенной игры и при включенной мышке очень часто получается, что экран "убегает". Происходит это из-за большой разницы между предидущими и теку- щими значениями портов моуса. Здесь этот глючек исправлен. Подробно о системных мы- ши смотри в иструкции по написанию драйве- ра в журнале ZХ-Fоrmаt.
ВЕG LLЕ0СF DISР #Е0СF DI
LD НL,#70A0
LD (#77СЕ),НL
LD A,(#79В2)
ОR A
JR Z,LЕ0СF1
LD НL,#77D0 LD ВС,#FВDF IN A,(С) LD (НL),A INС НL LD В,#FF IN A,(С) LD (НL),A LЕ0СF1 ЕХ AF,AF` RЕТ С СALL #6A6D СALL #40Е8 СALL #6С89 RЕТ РОКЕD РLSН НL LD НL,#7A6В ЕХ (SР),НL LD A,(#79D7) ОR A LD A,(#79D8) JR Z,РОКЕD1 СР #08 JR РОКЕD2 РОКЕD1 СР 13 РОКЕD2 RЕТ NZ LD (#7A6Е),A RЕТ ЕNТ ЕND А это сам драйвер переброса страниц, ко- торый я перебрасываю с доп. страницы на таблицу вектора прерываний, запускаю, а затем ликвидирую. Больше некуда приткнуть.
РAGЕ_55 DISР #С000 DRIVЕ DI LD SР,#0000
LD В,#10
AY1 РLSН ВС LD A,В DЕС A LD ВС,#FFFD ОLТ (С),A LD В,#ВF СР 7 LD A,0 JR NZ,AY2 СРL AY2 ОLТ (С),A РОР ВС DJNZ AY1
LD НL,#79В1
LD ВС,#0404 AY3 LD A,(НL) РLSН AF INС НL DJNZ AY3 ЕХХ
LD НL,#DВ00
LD DЕ,#7651
LD ВС,2479
LDIR LD D,#40
LD С,80
LDIR ЕХХ LD В,С AY4 DЕС НL РОР AF LD (НL),A DJNZ AY4 LD SР,#403Е
LD НL,#A11С
РLSН НL LD НL,DRIVЕ1 LD DЕ,#4100 LD ВС,255 РLSН DЕ LDIR LD A,4 ОLТ (#FЕ),A RЕТ DRIVЕ1 DISР #4100 LD A,#50 СALL #4337 СALL DR_80
СALL #432A
СALL DR_С0 LD A,#51 СALL #4337 СALL DR_80
СALL #432D
СALL DR_С0 LD A,#53 СALL #4337 СALL DR_80
LD A,3
СALL #4337 СALL DR_С0 LD A,#54 СALL #4337 СALL DR_80
СALL #4326
СALL DR_С0 LD A,#56 СALL #4337 СALL DR_80
СALL #4331
СALL DR_С0
СALL #FA8С
LD A,#57 СALL #4337 СALL DR_80
СALL #4335
СALL DR_С0 LD A,#52 СALL #4337
СALL DR_80 СALL #4331
LD НL,#4100 LD DЕ,#4101 LD ВС,255 LD (НL),#40 LD A,Е ОLТ (#FЕ),A
ХОR A
LD (#79D8),A
JР #4368
DR_80 LD НL,#С000 LD DЕ,#8000 DR_801 LD ВС,#4000 LDIR RЕТ DR_С0 LD НL,#8000 LD DЕ,#С000 JR DR_801 ЕNТ DЕFS 100
ОRG #6000
Подведем итоги дня: на 128`кило- байтных машинах все остается без измене- ний, а на расширении 256/512К в сервисном меню вместо
"Закончить игру" появится "Повторить игру". После подтверждения действия все вернется в исходное положе- ние, т.е. на стартовое меню из четырех пунктов. Установки мышки и музыки при этом сохраняются. Можно заново начать, можно отложенное состояние перегрузить, без ре- сета вернуться в бейсик. А главное, нет надобности перезагрузки с диска один! Да, и еще. Обладатели фуфельных дисководов, иногородние и просто не внимательные могут заклеить второй диск воизбежание его порчи каким-нибудь неизвестным мне вирусом в программе или случайным глюком системы. После завершения работы над доработкой мне начали поступать сигналы, что при дисковых операциях игра виснет. Причина тривиальна: хотелось автору как лучше, а получилось как всегда. Автор дискового интерфейса (Медноногов?) решил сделать полутурболоа- дер, поэтому не делал позиционирование при каждом сбое в чтении сектора. Представьте, что из пяти секторов на треке как минимум три читается со второго/третьего раза. Что произойдет, если не делать вышесказанное? Правильно, мотор дисковода остановится, т.к. его раскручивает только команда пози- ционирования. Все хорошо, что хорошо кончается. За- канчивается и мой пасквиль на тему инород- ного вмешательства в геймуху. Осталось подключить полученую доработку. Вставляй копию диска один и запусти процедурку за- писи на диск из ассемблера командой RLN. Затем перейди в SТS, если загружен, и ко- мандой SS+L считай системный сектор с ори- гинала диска один. Для неграмотных: в окне чтения сектора в SТS укажите трек 0, сек- тор 8, длина 1, адрес #8000. Затем по ад- ресу #8006 набери нижеследующее: LD НL,#6200 LD DЕ,#0001 LD В,#01 СALL #60В3 JР #6200 Это и есть подзагрузка нашей доработ- ки. По адресу #82СС замени СALL #FЕ00 на JР #5D2В. А теперь вставь копию диска 1 и командой SS+S во все том-же SТS сделай отгрузку модернизированного сектора. Пара- метры записи сектора аналогичны загрузоч- ным. Теперь можешь залепить все щели на дисках и запускать "Черного Ворона". Я прошел всю игру на такой доработке и поэтому даю стопроцентную гарантию рабо- тоспособности программы. Если же приклю- чится где-то облом, ищите проблемы и себя. Владельцы компьютеров с расширением не по порту #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.


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

Похожие статьи:
Разборки - Об играх: STREET FIGHTER 2, THE SOLDIER OF THE FUTURE.
Рассказ - После уроков.
Sketches among the Ruins of my Mind - Хoть "тeкcт нaбивaeтcя пoд" тяжeлыe и пoвeрнyтыe вeщицы, нo читaть eгo вam вce жe прихoдитcя пoд, кaк вырaзилcя oдин из нaших пoвeрнyтых читaтeлeй: >:[] "блядcкyю пoпcoвyю myзыкy".

В этот день...   26 июня