![]() |
|
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №10 (30.01.2002) Просмотров: 6252
Автор: Павел Стахов / Studio Stall. Рубрика: Этюды. Номер: №10 (30.01.2002). Вывода спрайта размером 2 на 2 знакоместаПредлагаю доработанную мною процедуру вывода спрайта размером 2 на 2 знакоместа. С целью уменьшения размера (теперь 120 байт против 149 у RageVorteX/#c5), да и некоторого увеличения скорости работы был изменен алгоритм сдвига и вывода спрайта, поэтому формат спрайта теперь немного изменился: сначала идет слово (два байта - младший, затем старший) маски, потом слово спрайта, и так 16 раз. Формат немного неудобен т.к. придется писать свой конвертер, но результат того стоит! И еще. Если скорость процедуры не так важна, как ее обьем, то строки, помеченные звездочкой можно заменить на;... LD C,A CALL 8880 ;... таким образом процедура сократится еще на 21 байт и составит 99 байтов! Отмечу лишь, что процедура по адресу 8880 занимается расчетом координат на экране с точностью до пикселя, на входе у нее C=X, B=Y, на выходе будет HL=адрес на экране, A=смещение в пикселях относительно начала знакоместа. ;B=Y, C=X
;A=НОМЕР СПРАЙТА
SPRITE1 DI
LD (WSP1+1),SP
LD H,0
LD L,A
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,S_ADR
ADD HL,DE
LD A,B ;*
RRA ;*
SCF ;*
RRA ;*
RRA ;*
AND #5F ;*
LD D,A ;*
XOR C ;*
AND 7 ;*
XOR C ;*
RRCA ;*
RRCA ;*
RRCA ;*
LD E,A ;*
LD A,B ;*
XOR D ;*
AND 7 ;*
XOR D ;*
LD D,A ;*
LD A,C ;*
AND 7 ;*
NEG
ADD A,8
LD (LSB+2),A
LD SP,HL
LD A,16
S15 EX AF,AF’
LD A,D
CP #58
JR NC,WSP1
POP HL
POP IX
XOR A
LSB LD BC,#00FF
S_LP1 ADD HL,HL
SET 0,L
RL C
ADD IX,IX
RLA
DJNZ S_LP1
LD B,A
LD A,(DE)
AND C
OR B
LD (DE),A
INC E
LD A,(DE)
AND H
OR HX
LD (DE),A
INC E
LD A,(DE)
AND L
OR LX
LD (DE),A
DEC E
DEC E
INC D
LD A,D
AND 7
JR NZ,S14
LD A,E
ADD A,#20
LD E,A
JR C,S14
LD A,D
SUB 8
LD D,A
S14 EX AF,AF’
DEC A
JR NZ,S15
WSP1 LD SP,0
EI
RET
S_ADR ЗАГРУЖАЕМ СПРАЙТ...Ссылки по теме:Печать спрайта с маской [№9]Еще один метод вывода спрайта размером 2 на 2 знакоместа. [№11] |