(c) Промзелев Е., г.Тольятти
Я немного программирую на Ас-
семблере. Никак не могу решиться
набрать большую программу.
Сейчас я вам приведу несколь-
ко POKES, которые я нашел с по-
мощью моей программы в машинном
коде, названной "Hacker Man'96".
Она приведена после POKES. Эти
POKES проверены мной.
STORM LORD 32564,255 - жизни
COLISEUM 55431,255 - жизни
WELL'S FARGO 51709,255 - жизни у
обоих
FROST BYTES 27484,255 - жизни.
POKE вставить в 6 строке.
Вы писали, что не надо при-
сылать POKES, которые уже были
опубликованы. Те POKES, которые
я вам привел, я нашел с помо-
щью моей программы. Например, в
FROST BYTES у вас вообще другие
POKES, наверное, у вас там бес-
конечные не только жизни, но и
патроны и время. Но POKE для
FROST BYTES, которое я привел, у
вас не напечатано.
140.
Программа HACKER MAN'96
(HACMAN96)
ORG 65000
LD L,3
PUSH HL
LD A,2
CALL 5633
LD A,22
RST 16
LD A,8
RST 16
LD A,0
RST 16
JR PRINT1
RETURN POP HL
LD BC,41367
LD DE,24000
LOOP LD A,(DE)
CP 62
JR NC,LOOP1
JR CIKL
LOOP2 INC DE
LD A,(DE)
CP L
JR NC,LOOP3
LOOP4 DEC DE
LD A,(DE)
CIKL DEC BC
INC DE
LD A,B
OR C
JR NZ,LOOP
RET
LOOP1 CP 63
JR NC,CIKL
JR LOOP2
LOOP3 INC HL
CP L
DEC HL
JR C,PRINT
JR LOOP4
PRINT PUSH BC
PUSH HL
PUSH DE
PUSH DE
POP BC
CALL 11563
CALL 11747
LD A,32
RST 16
POP DE
POP HL
POP BC
JR LOOP4
RETURNS JR RETURN
PRINT1 LD A,72
RST 16
LD A,97
RST 16
LD A,99
RST 16
LD A,107
RST 16
LD A,101
RST 16
LD A,114
RST 16
LD A,32
RST 16
LD A,77
RST 16
LD A,97
RST 16
LD A,110
RST 16
LD A,32
RST 16
LD A,57
RST 16
LD A,54
RST 16
LD A,32
RST 16
LD A,32
RST 16
LD A,74
RST 16
LD A,65
140.
RST 16
LD A,67
RST 16
LD A,75
RST 16
LD A,32
RST 16
LD A,78
RST 16
LD A,79
RST 16
LD A,82
RST 16
LD A,77
RST 16
LD A,65
RST 18
LD A,78
RST 16
LD A,13
RST 16
LD A,244
RST 16
LD A,76
RST 16
LD A,73
RST 16
LD A,70
RST 16
LD A,69
RST 16
LD A,32
RST 16
LD A,48
POP HL
ADD A,L
PUSH HL
CP 58
JR NC,LPS
RST 16
LPS LD A,13
RST 16
JR RETURNS
2
Эту программу можно загружать
в любые адреса, она перемещае-
мая. Ее длина 193 байта, поэто-
му, как мне кажется, ее лучше
грузить в буфер принтера по ад-
ресу 23296. Если буфер занят, то
можно и в экранную область, но
только по адресу 16384, т.к.
программа выводит найденные ад-
реса в середине экрана. В одном
из этих адресов с вероятностью
80% записывается количество жиз-
ней или снарядов (это зависит от
того, что вы установите в регис-
тре L в начале программы).
Пример, как пользоваться этой
программой:
1. Загрузите игру.
2. Запустите ее и запомните ко-
личество жизней.
3. Сбросьте игру и загрузите ее
загрузчик.
4. В загрузчике после всех LOAD
поставьте STOP.
5. Запустите загрузчик и грузите
далее.
6. После того, как загрузчик ос-
тановится, загрузите програм-
му HACMAN96.
7. В адрес загрузки +1 поместите
с помощью POKE число жизней в
игре.
8. Запустите HACMAN по адресу
загрузки.
9. HACMAN выдаст:
HACKER MAN 96 JACK NORMAN (это я)
POKE LIFE X
ADDR ADDR ADDR ADDR...
10. Запишите на бумагу все адре-
са (их будет немного). Затем
вставляйте эти адреса по од-
ному как POKES. Один из них,
скорее всего, тот, который
вам нужен. Подобная кодам
бейсик-программа ищет все
возможные POKES за 40 минут,
а HACMAN - за секунду!
Прим. ред.: И снова следует затронуть
тему оптимизации программ. Во-первых, в
данной программе видны такие очевидные ве-
щи, как LD A,0, которое нужно заменить на
XOR A или SUB A - результат будет тот же,
зато занимает на 1 байт меньше и быстрее
выполняется. Дальше следует напомнить на-
шему читателю о процедуре вывода на экран
целой строки. Про нее, кстати, было напи-
сано в нашей книге по машинным кодам. Ее
адрес - #203C. Перед вызовом необходимо в
регистр DE поместить адрес выводимой стро-
ки, а в BC - ее длину. Также здесь следует
заменить последовательность команд вида
JR C,L1
JR L2
L1
...............
на одну команду, в данном случае JR NC,L2.
И наконец, наш читатель, очевидно, не знал
о том факте, что после выполнения команды
CP устанавливается флаг Z, если сравнивае-
мые числа равны, и сбрасывается, если не
равны.
Уважаемый Евгений! Мы не ставим целью
тебя обидеть, мы просто хотим подсказать
тебе твои ошибки, чтобы ты и другие не де-
лали их в будущем. А в общем, программа
очень полезна для тех случаев, когда прог-
рамма занимает всю память и загрузить мо-
нитор не представляется возможным. Особен-
но это актуально для владельцев 48K машин.
Немного о том, как эта программа работает.
Она ищет по адресам 24000 - 65367 команду
LD A,n, где n - число, задаваемое в регис-
тре L в начале программы. Как вы догада-
лись, это число соответствует количеству
жизней в программе. Найдя такую команду,
программа выводит адрес, по которому нахо-
дится n. Кстати, в этой программе можно
сделать еще одну доработку - искать надо
до конца памяти, то есть до адреса 65535.
Для этого команду LD BC,41367 после метки
RETURN надо заменить на LD BC,41536.
* * *