User Tag List

Показано с 1 по 10 из 50

Тема: Быстрый вывод картинки 88*88

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #40

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Наверное, не стоит делать компрессию спрайтов, лучше масштабирование.
    А стирать область экрана тоже асмовской процедурой.

    Вот процедура для увеличения спрайта в 2 раза, без атрибутов:

    Код:
    		; тестовая программа
    		ORG	60000
    		LD	HL,SPRITE
    		LD	D,0
    		LD	E,0
    		CALL	ZOOM
    		RET
    
    
    ; подпрограмма масштабирования в 2 раза и вывода спрайта
    ; входные параметры: HL=адрес спрайта, DE=координаты знакоместа для вывода на экране (D-вертик., E-гориз.)
    
    ZOOM		LD	A,(HL)				; HL = адрес нахождения в спрайте
    		AND	A
    		RET	Z				; выход, если пустой спрайт
    
    		LD	B,A
    ZOOML1		PUSH	BC				; B = количество знакомест в спрайте
    		PUSH	DE				; DE = координаты знакоместа для вывода
    
    		INC	HL
    		LD	A,(HL)
    		RLCA
    		ADD	A,D
    		LD	B,A
    		INC	HL
    		LD	A,(HL)
    		RLCA
    		ADD	A,E
    		LD	C,A				; BC = реальные координаты левого верхнего знакоместа на экране
    
    		INC	HL
    		EX	DE,HL				; DE = адрес нахождения в спрайте, HL = свободно
    
                    LD      A,B				; расчет адреса первого байта знакоместа в HL для 1-4 байтов изображения
                    LD      H,A
                    RRCA
                    RRCA
                    RRCA
                    AND	A,224
    		ADD	A,C
                    LD	L,A
                    LD	A,H
                    AND	24
                    OR	64
                    LD	H,A				; HL = адрес вывода знакоместа на экране, DE = адрес изображения в спрайте
    
    		PUSH	BC
    
    		CALL	ZBYTES				; выводим масштабированный первый байт
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    		POP	BC
    
    		INC	B				; второе знакоместо ниже для 5-8 байтов изображения
    
                    LD      A,B				; расчет адреса первого байта знакоместа в HL для 5-8 байтов изображения
                    LD      H,A
                    RRCA
                    RRCA
                    RRCA
                    AND	A,224
    		ADD	A,C
                    LD	L,A
                    LD	A,H
                    AND	24
                    OR	64
                    LD	H,A				; HL = адрес вывода знакоместа на экране, DE = адрес изображения в спрайте
    
    		INC	DE				; следующий байт изображения в спрайте
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		INC	DE				; следующий байт изображения в спрайте
    		INC	H				; следующая строка в знакоместе
    		CALL	ZBYTES				; выводим масштабированный байт
    
    
    		EX	DE,HL				; HL = адрес нахождения в спрайте, DE = свободно
    
    		POP	DE				; DE = координаты знакоместа для вывода
    		POP	BC				; B = цикл по количеству знакомест в спрайте
    		DJNZ	ZOOML1
    
    		RET
    
    
    		; масштабирование байта изображения
    		; DE = адрес в спрайте, HL = адрес первого байта знакоместа на экране
    ZBYTES		LD	A,(DE)
    		LD	B,A				; B = байт изображения
    		XOR	A
    		LD	C,A				; в регистры C и A будем кидать масштабированные по горизонтали биты по четыре
    
    ZOOM7           RL      B				; загоняем во флаг CY 7-й бит байта изображения
    		JP	NC,ZOOM6			; если CY=0, переходим на следующий
    		OR	%11000000			; устанавливаем %11 для бита
    
    ZOOM6		RL	B
    		JP	NC,ZOOM5
    		OR	%00110000
    
    ZOOM5		RL	B
    		JP	NC,ZOOM4
    		OR	%00001100
    
    ZOOM4		RL	B
    		JP	NC,ZOOM3
    		OR	%00000011
    
    ZOOM3		LD	C,A
    		XOR	A
    		RL	B
    		JP	NC,ZOOM2
    		OR	%11000000
    
    ZOOM2		RL	B
    		JP	NC,ZOOM1
    		OR	%00110000
    
    ZOOM1		RL	B
    		JP	NC,ZOOM0
    		OR	%00001100
    
    ZOOM0		RL	B
    		JP	NC,ZOOM8
    		OR	%00000011
    
    		; выводим на экран содержимое регистров C и A змейкой в 2 байта по 2 строки
    ZOOM8		LD	(HL),C
    		INC	HL
    		LD	(HL),A
    		INC	H
    		LD	(HL),A
    		DEC	HL
    		LD	(HL),C
    
    		RET
    
    
    SPRITE							; тестовый спрайт
    DEFB 16
    DEFB 0,0, 255,0,0,24,24,0,0,255
    DEFB 1,0, 192,48,192,48,192,48,192,48
    DEFB 1,1, 12,3,12,3,12,3,12,3
    DEFB 1,2, 0,0,0,0,128,192,64,192
    DEFB 2,0, 254,159,129,224,254,31,24,248
    DEFB 2,1, 7,230,254,223,193,240,255,15
    DEFB 2,2, 192,64,64,192,192,64,64,192
    DEFB 3,0, 255,159,128,224,255,31,24,248
    DEFB 3,1, 6,254,255,195,192,254,63,6
    DEFB 3,2, 64,64,192,192,64,64,192,192
    DEFB 4,0, 255,143,128,224,255,31,24,248
    DEFB 4,1, 230,255,207,192,248,255,6,6
    DEFB 4,2, 64,192,192,64,64,192,192,64
    DEFB 5,0, 255,131,128,224,255,24,24,248
    DEFB 5,1, 255,255,192,192,255,31,6,6
    DEFB 5,2, 192,192,64,64,192,192,64,64
    Последний раз редактировалось Andrew771; 31.03.2011 в 11:43.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Быстрый проигрыватель AY-музыки (980-1300t)
    от TmK в разделе Программирование
    Ответов: 45
    Последнее: 20.08.2016, 14:31
  2. Вывод картинки на экран
    от Alex Clap в разделе Для начинающих
    Ответов: 17
    Последнее: 22.08.2010, 15:46
  3. Нужен быстрый поиск аналога отечественной логики
    от CodeMaster в разделе Для начинающих
    Ответов: 11
    Последнее: 21.07.2010, 17:58
  4. Куплю проц Z84C0006PEC или более быстрый.
    от Evgeny Muchkin в разделе Барахолка (архив)
    Ответов: 6
    Последнее: 19.09.2006, 11:24

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •