Важная информация

User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 49

Тема: Вывод тайлового бэкграунда

  1. #21
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    процедура очень классическая - через push-pop. 65000 - засчет того. что размер копируемого пространства не 32/24, а 32/20.
    Самой процедуры в чистом виде у меня нет, она генерится и занимает около восьми килобайт. Вот генератор, в комментах (справа, форум их визуально режет, надо курсором поскролить чтоб увидеть) есть перечень комманд, которые пишутся в память:
    Код:
    INITCOPYFRAME
    			LD	BC,COPYFRAME_GENERATED
    			
    			LD	DE,SP_STORAGE
    			LD	A,#ED						;LD (NN),
    			LD	(BC),A
    			INC	BC
    			LD	A,#73						;SP
    			LD	(BC),A
    			INC	BC
    			LD	A,E						;N
    			LD	(BC),A
    			INC	BC
    			LD	A,D						;N
    			LD	(BC),A
    			INC	BC
    			
    			LD	HL,#C000+SCREEN_WIDTH/2
    			LD	(COPYFRAME_HL),HL
    			LD	DE,FRAMEBUFFER+(FRAMEBUFFERLINE-SCREEN_WIDTH)/2
    			LD	(COPYFRAME_DE),DE
    			LD	A,SCREEN_HEIGHT
    COPYROW
    			PUSH	AF
    			LD	A,2
    COPYHALFROW
    			LD	HL,(COPYFRAME_HL)
    			LD	DE,(COPYFRAME_DE)
    			PUSH	AF
    			
    			LD	A,#31						;LD SP,
    			LD	(BC),A
    			INC	BC
    			LD	A,E						;N
    			LD	(BC),A
    			INC	BC
    			LD	A,D						;N
    			LD	(BC),A
    			INC	BC
    			LD	A,#E1						;POP HL
    			LD	(BC),A
    			INC	BC
    			LD	A,#C1						;POP BC
    			LD	(BC),A
    			INC	BC
    			LD	A,#D1						;POP DE
    			LD	(BC),A
    			INC	BC
    			LD	A,#F1						;POP AF
    			LD	(BC),A
    			INC	BC
    			LD	A,#D9						;EXX
    			LD	(BC),A
    			INC	BC
    			LD	A,#08						;EX AF,AF'
    			LD	(BC),A
    			INC	BC
    			LD	A,#E1						;POP HL
    			LD	(BC),A
    			INC	BC
    			LD	A,#C1						;POP BC
    			LD	(BC),A
    			INC	BC
    			LD	A,#D1						;POP DE
    			LD	(BC),A
    			INC	BC
    			LD	A,#F1						;POP AF
    			LD	(BC),A
    			INC	BC
    			
    			LD	A,#31						;LD SP,
    			LD	(BC),A
    			INC	BC
    			LD	A,L						;N
    			LD	(BC),A
    			INC	BC
    			LD	A,H						;N
    			LD	(BC),A
    			INC	BC
    			
    			
    			LD	A,#F5						;PUSH AF
    			LD	(BC),A
    			INC	BC
    			LD	A,#D5						;PUSH DE
    			LD	(BC),A
    			INC	BC
    			LD	A,#C5						;PUSH BC
    			LD	(BC),A
    			INC	BC
    			LD	A,#E5						;PUSH HL
    			LD	(BC),A
    			INC	BC
    			LD	A,#D9						;EXX
    			LD	(BC),A
    			INC	BC
    			LD	A,#08						;EX AF,AF'
    			LD	(BC),A
    			INC	BC
    			LD	A,#F5						;PUSH AF
    			LD	(BC),A
    			INC	BC
    			LD	A,#D5						;PUSH DE
    			LD	(BC),A
    			INC	BC
    			LD	A,#C5						;PUSH BC
    			LD	(BC),A
    			INC	BC
    			LD	A,#E5						;PUSH HL
    			LD	(BC),A
    			INC	BC
    
    			LD	HL,(COPYFRAME_HL)
    			LD	DE,SCREEN_WIDTH/2
    			ADD	HL,DE
    			LD	(COPYFRAME_HL),HL
    			
    			LD	DE,(COPYFRAME_DE)
    			LD	HL,SCREEN_WIDTH/2
    			ADD	HL,DE
    			LD	(COPYFRAME_DE),HL
    			
    			POP	AF
    			DEC	A
    			JP	NZ,COPYHALFROW
    			
    			LD	HL,(COPYFRAME_HL)
    			LD	DE,SCREEN_WIDTH
    			AND	A
    			SBC	HL,DE
    			CALL	DOWNHL
    			LD	(COPYFRAME_HL),HL
    			
    			LD	HL,(COPYFRAME_DE)
    			LD	DE,SCREEN_WIDTH
    			AND	A
    			SBC	HL,DE
    			LD	DE,FRAMEBUFFERLINE
    			ADD	HL,DE
    			LD	(COPYFRAME_DE),HL
    			
    			POP	AF
    			DEC	A
    			JP	NZ,COPYROW
    			
    			
    			LD	DE,SP_STORAGE
    			LD	A,#ED						;LD SP,
    			LD	(BC),A
    			INC	BC
    			LD	A,#7B						;(NN)
    			LD	(BC),A
    			INC	BC
    			LD	A,E						;N
    			LD	(BC),A
    			INC	BC
    			LD	A,D						;N
    			LD	(BC),A
    			INC	BC
    			
    			LD	A,#C9
    			LD	(BC),A
    			INC	BC		
    
    			
    			RET

  2. #22
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Перераспредели регистры. Буфер назначения храни в HL, тогда не надо будет приседать с пересылкой через промежуточные регистры. В два раза сократишь исходник

  3. #23
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Перераспредели регистры. Буфер назначения храни в HL, тогда не надо будет приседать с пересылкой через промежуточные регистры. В два раза сократишь исходник
    погоди, это ты касательно вывода тайлов или касательно переброски буфера стеком на экран?

  4. #24
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moroz1999 Посмотреть сообщение
    погоди, это ты касательно вывода тайлов или касательно переброски буфера стеком на экран?
    Касательно процедуры генерации. Кстати, кинь сюды сразу и процедуру переброски на экран

  5. #25
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от crushers[4ePT] Посмотреть сообщение
    весь экран хочешь обновлять?
    пока что так сделано просто для пробы. в идеале хотелось бы сделать отдельные процедуры познакоместного скролла во всех направлениях без повторного вывода всех тайлов, а бэкграунд просто кусками восстанавливать перед этим.
    теоретически это подбросит еще fps, а на практике до этого руки дойдут очень нескоро.

    опять же был бы признателен за любые примеры и материалы по познакоместному скроллингу экрана.

    Добавлено через 2 минуты
    Цитата Сообщение от Vitamin Посмотреть сообщение
    Касательно процедуры генерации. Кстати, кинь сюды сразу и процедуру переброски на экран
    да процедура генерации написана по принципу - один раз подождали и всё, не вижу особого практического смысла её оптимизировать дальше, потому что лучше потратить силы на более эффективные вещи.
    самой сгенеренной процедуры переброски буффера в виде исходников у меня уже нет, но вечером могу попытаться скинуть сюда типичный кусок сгенеренного кода из неё.

    Добавлено через 4 минуты
    вообще, если кому любопытно, то я могу выложить целиком исходники сюда, просто там особо нечего смотреть пока что, потому что очень и очень многое еще не сделано из базовых вещей.
    Последний раз редактировалось moroz1999; 07.04.2008 в 18:46. Причина: Добавлено сообщение

  6. #26
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moroz1999 Посмотреть сообщение
    самой сгенеренной процедуры переброски буффера в виде исходников у меня уже нет, но вечером могу попытаться скинуть сюда типичный кусок сгенеренного кода из неё.
    Чтоб не мучаться и не заниматься ассемблированием, задай ее прямо в виде исходников, юзая директиву подмена адреса компиляции- легко модифицировать и разбираться

  7. #27
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    огого, я кажется понял, о чем ты, но совершенно не представлял, что такие возможности вообще есть.

  8. #28
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от moroz1999 Посмотреть сообщение
    огого, я кажется понял, о чем ты, но совершенно не представлял, что такие возможности вообще есть.
    Дык DISP/ENT даже в самых древних компиляторах уже поддерживались

  9. #29
    Veteran Аватар для valeron
    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Стесняюсь спросить, а что такое "тайловая"? Погуглил - ссылок не густо, из обрывочных упоминаний понял что это "состоящая из кусочков". Ну это как из знакомест что ли?

  10. #30
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    Стесняюсь спросить, а что такое "тайловая"? Погуглил - ссылок не густо, из обрывочных упоминаний понял что это "состоящая из кусочков". Ну это как из знакомест что ли?
    я не рискну давать определение слову "тайл", но в этой теме говорится об отрисовке заднего фона из квадратных спрайтов равной ширины и высоты.
    принцип таков, что картинка заднего фона делится на повторяющиеся пронумерованные кусочки, и хранится именно в виде набора номеров этих кусочков, а сами куски хранятся отдельно.
    основной плюс этого подхода - огромная экономия памяти, основной минус - довольно терпимая потеря скорости.


    вот здесь, например, фон (земля) явно сделан по этому принципу:
    ftp://ftp.worldofspectrum.org/pub/si.../StarFarce.gif
    Да и вообще, технология, наверное, в каждой второй аркадной игре встречается.

    Если не ошибаюсь, то на первых приставках тайлы обычно занимали одно знакоместо и выводились аппаратными средствами, так что потери скорости там не было.

    Добавлено через 1 минуту
    Цитата Сообщение от Vitamin Посмотреть сообщение
    Дык DISP/ENT даже в самых древних компиляторах уже поддерживались
    да я всю жизнь асм на коленке учил , я и dup-то недавно только использовать начал, встретив где-то в текстах на zxdn, так что я совсем зелёный кодер пока

    Добавлено через 17 минут
    вот результат генерации, абсолютно классическая процедура - назначили sp, считали 16 байт. назначили sp - положили 16 байт.

    сейчас посидел слегка с калькулятором, и высчитал, что если задействовать еще IX и IY, то получится чуть-чуть быстрее.
    У меня получилось без них - 12,75 такта на байт
    С использованием IX и IY получится - 12,4 такта на байт (что даст почти 1500 тактов выигрыша в сумме в моём случае, при том же размере пересыльщика)

    Сейчас еще посмотрю в ZX-Review, там был какой-то заинтересовавший меня способ, на который по какой-то причине у меня чуть-чуть не хватало памяти.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	result.jpg 
Просмотров:	289 
Размер:	61.1 Кб 
ID:	7793  
    Последний раз редактировалось moroz1999; 07.04.2008 в 23:38. Причина: Добавлено сообщение

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

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

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

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

Похожие темы

  1. вывод символа 4*8
    от Dexus в разделе Программирование
    Ответов: 15
    Последнее: 14.04.2011, 14:14
  2. Вывод на HD мониторы
    от jimled в разделе Изображение
    Ответов: 1
    Последнее: 28.01.2008, 15:09
  3. Вывод в порт на С в MicroBlaze
    от black_ninja в разделе Разный софт
    Ответов: 2
    Последнее: 25.01.2008, 09:38
  4. Вывод изображения
    от Shnurkov в разделе Изображение
    Ответов: 5
    Последнее: 10.02.2007, 15:07
  5. вывод буковочек шириной точечек
    от fk0 в разделе Программирование
    Ответов: 15
    Последнее: 10.01.2006, 23:26

Ваши права

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