![]() |
:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №9 (14.12.2001) Просмотров: 4899
Автор: 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] |