МОДЕРНИЗАЦИЯ ИГРЫ "ЧЕРНЫЙ ВОРОН-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 треков с
верхней стороны. Если все перечисленное
имеется, можете спать спокойно: автор ваши
деньги получил и имеет стимул работать да-
лее на наше с вами удовольствие.
Other articles: