ZX Forum
#04
19 ноября 1997 |
|
Технология спрайтов - часть 2: охота на спрайты (поиск и выдирание).
ОХОТА Давайте отправимся с Вами на охоту, а охота это такое... Только-то вот наша охота необыч- ная: мы с Вами будем охотиться на спрайты. Что нам для этого понадобится? Все очень просто. Покопайтесь в своих стареньких дисках и найдите 1-2 программы, которые перенесены Вами с кассе- ты, или Вы точно знаете, что они не защищены нашими умельцами. Определить "девственную" (разве что MAGIC'ом попорченую) прог- рамму просто - у нее скорее все- го не будет при загрузки прыгаю- щих строк с приветами или надпи- сей типа "CRACKET BY...". Дру- гие программы нам не подходят, т.к. они компрессированные, за- щищенные, и мы просто в них ни- чего не найдем. Теперь стоит вооружиться. Я, например, взял себе не совсем новую, но испытанную мной и рас- пространяемую Инфоркомом прог- рамму File dump editor. Это очень удобная программа, и с по- мощью ее мы легко сможем найти спрайты в программах. Если у Вас нет этой программы, то поищите на диске какую-либо другую, спо- собную просматривать и искать в программах спрайты. Для тех, у кого вообще нет никаких прог- рамм, я предлагаю свою. Вам сле- дует ассемблировать ее в область памяти, которая точно не будет затерта просматриваемым блоком (лучше всего в 3 треть экрана, т.к. она намеренно не использу- ется программой). Затем Вам сле- дует загрузить программный блок и запустить просмотрщик. После запуска программы у Вас появятся следующие клавиши: 1 - Переключение режимов - символ/спрайт. Q - Уменьшает адрес просмотра на 1 байт. A - Увеличивает адрес просмотра на 1. O - Уменьшает размер отобража- емого окна в длину на 1. P - Увеличивает размер отобра- жаемого окна на 1. SPACE - Выход в бейсик. Q+SHIFT - Уменьшает адрес про- смотра на 256. A+SHIFT - Увеличивает адрес просмотра на 256. Изначально адрес установлен на шрифт ПЗУ и включен режим просмотра символов. Вы сможете найти при помощи этой программы спрайты почти всех форматов. Размер программы очень мал. Так- же Вы можете усовершенствовать ее по своему усмотрению, увели- чивая количество клавиш. Прог- рамма написана для ассемблера TASM, но ее просто переделать для других ассемблеров. 140. ORG #61A8 ;Адрес ассемблирования. UNPHASE ;Аналог ENT, но для TASM'а. PHASE 20480 ;Эта команда ассемблирует все, что нахо- ;дится за ней, в адрес, который следует за ;ней, в нашем случае в 3 треть экрана, но ;код помещает в адрес ORG. EI ;Включаем прерывания. XOR A ;Делаем бордер черным. OUT (#FE),A INC A ;В переменной FLAG режим вывода спрайтов ;на экран - 1 печатаем символы, 0 - спрай- ;ты. LD (FLAG),A LD A,#20 ;В LEN заносим текущий размер окна в шири- ;ну. LD (LEN),A LD HL,#3D00 ;Теперь в переменной VRAM адрес памяти, ;начиная с которого будем печатать на эк- ;ран. LD (VRAM),HL CALL SETSP ;Рисуем на экране содержимое памяти. KEY XOR A ;В переменную нажатой клавиши заносим 0. LD (#5C08),A LD BC,#0000 ;Пауза до нажатия любой клавиши. CALL #1F3D LD A,(#5C08);Читаем содержимое переменной. CP #31 ;Если нажали "1"- происходит переключение ;режимов вывода спрайтов. JR Z,SETFLAG CP #71 ;Если нажали "q" (маленькое) - уменьшаем ;адрес просмотра на 1. JR Z,UP1 CP #61 ;Если нажали "a" (маленькое) - увеличиваем ;адрес просмотра на 1. JR Z,DOWN1 CP #51 ;Если нажали "Q" (большое) - уменьшаем ад- ;рес просмотра на #0100. JR Z,UP256 CP #41 ;Если нажали "A" (большое) - увеличиваем ;адрес просмотра на #0100. JR Z,DOWN256 CP #20 ;При нажатии на пробел происходит выход из ;программы. RET Z CP #6F ;Если нажали "o" (маленькое) - уменьшаем ;размер окна. JR Z,DECR CP #70 ;Если нажали "p" (маленькое) - увеличение ;размера окна. JR Z,INCR JR KEY ;Если жали другое переход на опрос клавиш. SETFLAG LD A,(FLAG) ;Инвертируем флаг. XOR #01 LD (FLAG),A JR KEY-3 UP1 LD HL,(VRAM) ;Следующие процедуры уменьшают/увеличивают ;адрес просмотра. DEC HL LD (VRAM),HL JR KEY-3 DOWN1 LD HL,(VRAM) INC HL JR UP1+4 UP256 LD HL,(VRAM) LD DE,#0100 AND A SBC HL,DE JR UP1+4 DOWN256 LD HL,(VRAM) LD DE,#0100 ADD HL,DE JR UP1+4 DECR LD A,(LEN) ;Следующие процедуры уменьшают/увеличивают ;размер окна. CP #01 JR Z,KEY DEC A LD (LEN),A JR KEY-3 INCR LD A,(LEN) CP #20 JR Z,KEY INC A LD (LEN),A JR KEY-3 SETSP CALL CLS ;Вызываем очистку окна. LD A,(FLAG) DEC A JR Z,CHR ;Если 1,печатаем символы, иначе - спрайты. LD HL,#4000 ;Адрес начала экрана. LD DE,(VRAM);Адрес в памяти. LD B,#80 ;Размер окна в высоту 128 ПИКСЕЛЕЙ (16*8). SPR1 PUSH HL LD A,(LEN) ;Заносим в C размер окна в длину. LD C,A ;Далее печатаем спрайт. SPR2 LD A,(DE) LD (HL),A INC DE INC HL DEC C JR NZ,SPR2 POP HL CALL DOWN DJNZ SPR1 RET DOWN INC H ;Переход на следующую пиксельную линию ;снизу. LD A,H AND #07 RET NZ LD A,L ADD A,#20 LD L,A RET C LD A,H SUB #08 LD H,A RET CHR LD HL,#4000 ;Адрес 1 трети экрана. LD DE,(VRAM);В DE заносим адрес в памяти. CALL CHRSET ;Заполняем первую треть. LD HL,#4800 ;Адрес второй трети. CALL CHRSET ;Заполняем ее. RET CHRSET LD B,#08 ;Эта процедура заполняет треть экрана сим- ;волами. CHR1 PUSH HL LD A,(LEN) LD C,A CHR2 PUSH BC PUSH HL LD B,#08 CHR3 LD A,(DE) LD (HL),A INC H INC DE DJNZ CHR3 POP HL POP BC INC HL DEC C JR NZ,CHR2 POP HL PUSH DE LD DE,#0020 ADD HL,DE POP DE DJNZ CHR1 RET CLS LD HL,#5800 ;Сначала окрашиваем весь экран цветом ;INK 0, PAPER 0. PUSH HL LD DE,#5801 LD BC,#02FF LD (HL),#00 LDIR POP HL ;Затем делаем видимой часть экрана, ко- ;торая попадает в окно. LD B,#10 CLS1 PUSH HL LD A,(LEN) LD C,A CLS2 LD (HL),#0F INC HL DEC C JR NZ,CLS2 POP HL LD DE,#20 ADD HL,DE DJNZ CLS1 RET FLAG NOP ;Переменная, которая хранит указатель фор- ;мата печати. VRAM DEFW #0000 ;Переменная, которая хранит адрес в памяти LEN NOP ;Переменная, которая хранит размер окна в ;длину. 2 Ну вот, оружие подобрано, и мы начинаем охоту. Что же мы должны найти? Спрайты. Увеличи- вая или уменьшая адрес просмотра и изменяя размеры окна, найдите в программе картинки, предвари- тельно переведя просмотрщик в режим просмотра спрайтов. Для просмотра я взял несколь- ко программ из своей коллек- ции: 3D BATMAN (OCEAN), ELEFANT- 1 (CODE MASTERS), JACK THE NIP- PER-2, KRAKOUT. Давайте посмот- рим, что же мне удалось в них найти. Первые три спрайта я на- шел в режиме поиска спрайтов, а спрайт из программы KRAKOUT был найден в символьном режиме прос- мотра. Собственно, на этом наша охо- та закончена и мы плавно перехо- дим к следующей главе, которая пояснит нам, что же мы нашли.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября