![]() |
|
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №9 (14.12.2001) Просмотров: 5125
Автор: RageVorteX / #c5. Рубрика: Этюды. Номер: №9 (14.12.2001). Печать спрайта с маскойВ этой заметке я хотел бы осветить вопрос попиксельной печати спрайта 2х2 знакоместа с маской через стек. Ниже приведен текст моего варианта процедуры. Не исключено, что процедуру можно оптимизировать и ускорить.Формат спрайта должен быть следующим: байт маски, байт спрайта и т.д. ;На входе: ;A-номер спрайта ;B-Y координата в пикселях ;C-X координата в пикселях ORG 40000
SPRITE DI @
LD (S10+1),SP @
EX AF,AF' !
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 #
S11 LD (S1+1),A #
LD (S2+1),A #
EX AF,AF' $
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 BC,S_ADR $
ADD HL,BC $
LD SP,HL $
EX DE,HL %
LD A,16 %
S3 EX AF,AF' %
LD A,H ^
CP #58 ^
JR NC,S4 ^
POP DE &
LD B,0 &
LD C,255 &
S1 LD A,0 &
OR A &
JR Z,S5 &
SRA E &
RR C &
SRA D &
RR B &
DEC A &
JR S1+2 &
S5 LD A,(HL) *
AND E *
OR D *
LD (HL),A *
INC L *
LD A,(HL) *
AND C *
OR B *
LD (HL),A *
POP DE &
LD B,0 &
LD C,255 &
S2 LD A,0 &
OR A &
JR Z,S52 &
SCF &
RR E &
RR C &
SRL D &
RR B &
DEC A &
JR S2+2 &
S52 LD A,(HL) *
AND E *
OR D *
LD (HL),A *
INC L *
LD A,(HL) *
AND C *
OR B *
LD (HL),A *
DEC L
DEC L
INC H <
LD A,H <
AND 7 <
JR NZ,S4 <
LD A,L <
ADD A,32 <
LD L,A <
JR C,S4 <
LD A,H <
SUB 8 <
LD H,A <
S4 EX AF,AF' [
DEC A [
JR NZ,S3 [
S10 LD SP,0 /
EI /
RET
S_ADR INCBIN "SPRITE" +@ - Запрещаем прерывания и сохраняем значение стека. ! - Определяем адрес в экранной области для вывода спрайта. # - Вычисляем смещение спрайта. $ - Вычисляем адрес спрайта. % - Начало цикла вывода спрайта. ^ - Проверка на выход за пределы экрана. & - Подготовка данных (ротация) выводимых на экран. * - Вывод спрайта на экран. < - Процедура перехода на одну пиксельную линию экрана ниже. [ - Продолжаем или заканчиваем цикл вывода спрайта. / - Восстанавливаем значение стека, включаем прерывания. + - Подгружаем свой спрайт-файл. От редакции: Предыдущий наш конкурс по процедуре прямоугольника выиграл Павел Стахов/Studio Stall. За что ему высылается бесплатный 9-й номер. Теперь же, нам хотелось бы объявить новый конкурс по сегодняшней процедуре. Входные параметры должны быть такими же, ну а процедура самой короткой. Ссылки по теме:Вывода спрайта размером 2 на 2 знакоместа [№10]Еще один метод вывода спрайта размером 2 на 2 знакоместа. [№11] |