ZXNet эхоконференция «code.zx»


тема: Программка вывода спрайта



от: Yura Nazarenko
кому: All
дата: 15 Apr 2000

Здравствуй, All!

Решил кинуть для общего пользования программку вывода спрайтов.
Она вряд-ли подойдет для вывода спрайтов с изменяющимися
координатами, а для анимаций с фиксироваными размерами и
координатами - в самый раз! Вот и сам текст с подробными
ремарками.

=== cut ========================================================
ORG 24576
CALL ZAPTAB ;Заполнение адресов экрана
;Тестовая часть
LD IX,SPEED ;IX - адрес процедуры вывода
LD BC,#8020 ;BC - размеры по X и Y. X - текстовые, Y - по
пикселю
LD HL,#0000 ;HL - координаты по X и Y. X - текстовые, Y -
по пикселю
CALL ZAPVIV ;создание процедуры вывода
;вывод спрайта
LD HL,0 ;адрес спрайта
CALL SPEED ;вывод
RET ;выход
;создание процедуры вывода спрайта
ZAPVIV LD (IX),#F3 ;DI
INC IX
LD DE,STACK
LD (IX),#ED ;LD (STACK),SP
INC IX
LD (IX),#73
INC IX
LD (IX),E
INC IX
LD (IX),D
INC IX
LD (IX),#F9 ;LD SP,HL
INC IX
LD (SIZE),BC ;запомним размер и координаты
LD (KOOR),HL
LD A,(SIZE+1);в A рамер по Y
LD B,A ;в B заносим счетчик A
LD A,(KOOR+1);в A координата по Y
ZAPVIV1 PUSH BC,AF ;запоминаем счетчик и координату по Y
LD IY,TABLE ;в IY адрес таблицы
LD B,0 ;BC = A
LD C,A
ADD IY,BC ;вычисляем адрес таблицы
ADD IY,BC
LD H,(IY) ;берем нужный адрес из таблицы
LD L,(IY+1)
LD A,(KOOR) ;прибавляем смещение по X
SRL A
ADD A,L
LD L,A
LD A,(SIZE) ;в A размер по X
SRL A ;делим на 2
LD B,A ;в B зносим счетчик A
ZAPVIV2 LD (IX),#E1 ;POP HL
INC IX
LD (IX),#22 ;LD (SCR_ADR),HL
INC IX
LD (IX),L
INC IX
LD (IX),H
INC IX
INC HL
INC HL
DJNZ ZAPVIV2 ;заполняем до нужного размера по X
POP AF,BC ;востанавливем координату по Y и счетчик
INC A ;увеличиваем координату по Y
DJNZ ZAPVIV1 ;заполняем до нужного размера по Y
LD DE,STACK
LD (IX),#ED ;LD SP,(STACK)
INC IX
LD (IX),#7B
INC IX
LD (IX),E
INC IX
LD (IX),D
INC IX
LD (IX),#FB ;EI
INC IX
LD (IX),#C9 ;RET
RET ;выход
SIZE DS 2 ;буффер для размера
KOOR DS 2 ;буффер для координат
;заполнение адресов экрана
ZAPTAB LD IX,TABLE ;в IX куда заполнять
LD HL,#4000 ;первая треть
CALL ZAPADR
LD HL,#4800 ;вторая треть
CALL ZAPADR
LD HL,#5000 ;третья треть
ZAPADR LD C,8 ;в C количество строчек в трети
LD DE,32 ;в DE смещение до следующей строчки
ZAPADR1 PUSH HL ;запоминаем адрес экрана
LD B,8 ;в B сколько пикселей в строчке
ZAPADR2 LD (IX),H ;кладем адрес экрана в IX
LD (IX+1),L
INC H
INC IX
INC IX
DJNZ ZAPADR2 ;кончились пиксели?
POP HL ;да! востанавливаем адрес экрана
ADD HL,DE ;прибавляем смещение до следующей строчки
DEC C ;уменьшаем счетчик строчек
JR NZ,ZAPADR1;строчка последняя?
RET ;да! выход
STACK DS 2 ;буффер для стека при выводе спрайта
TABLE DS 384 ;буффер для таблицы адресов экрана
SPEED ;здеся будет процедура вывода
=== cut ========================================================

Сабж успевает вывести 2/3 экрана за одно прерывание. А может и
больше.

Всего хорошего тебе, All!

Yuri Nazarenko/Rezident/N-Discovery
e-mail : Yura_Nazarenko.sp0251@zxnet.spb.ru

от: Aleksey Malov
кому: Yura Nazarenko
дата: 28 Apr 2000
Приветствую тебя, Yura!

Sat 15 Apr 2000 в 21:29:00 Yura Nazarenko и All разговаривали
на тему Программка вывода спрайта.

YN> Сабж успевает вывести 2/3 экрана за одно прерывание. А может и
А смысл по 4 килобайта каждый кадр хранить? Ты максимум 24 кадра в 128
килобайтах поместить сможешь.
Советую посмотреть Antares'овскую дему Devition - там анимация на весь экран
в real-time'е распаковывается за 1 прерывание (хотя для нормальной скорости там
ее 25 раз в секунду выводят). Причем не в чанках выполнено, а в hi-resolution.
Как я и предполагал, там хранились не целые кадры, а разность между ними в
запакованном виде. Вся анимация в этой деме занимает в распакованном виде
более 1 Mb, а сама дема на диске - 200Kb. Так что учитесь крюнчить свои проги.

YN> больше.
Даа! И чего ради X-Trade'овцы распинались в RAGE насчет всякой там
оптимизации - все равно народ не прислушивается (или читать не умеет). Какой
смысл использовать IX в декрюнчере, коли можно без него обойтись - и быстрее и
меньше места занимать будет.


Желаю вам здоровья, счастья и творческих узбеков.
Aleksey Malov aka VIVID/Brainwave.




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

Похожие статьи:
Интервью - Jerri/Alien Factory: как появилась игра Walker.
nи Prоjеkt - Я занят этим проектом уже очень долгое время...
История - история образования Омской группы "Dialog".
ZXNet - О истории открытия SPbZXNet.
Почта - Привет, Wolfgang. ещё не забыл меня?

В этот день...   23 апреля