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

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 37

Тема: Вывод на экран со сдвигом в 4px

  1. #1
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Благодарностей: 192
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вывод на экран со сдвигом в 4px

    Сейчас сделано так: в (hl) - текущее знакоместо на экране, в bc pop'аем данные для этого знакоместе(что были бы в нём без сдвига), в (de) - данные следующего по горизонтали знакоместа, скролл идёт влево.
    По идее нужно 16битное значение [C или B] : (de) сдвинуть влево на 4 бита и загрузить в (hl).
    Мой вариант разочаровывает производительностью =(
    Код:
    ld a,(de) ;правый байт
    inc de    ;для следующей итерации
    ld (hl),c ;левый байт
    rra
    rra
    rra
    rra
    rld
    Можно ли сделать это быстрее?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В Silk Worm тупо копировали весь спрайт в буфер, сдвигали его там по RLD и потом уже выводили на экран.

  4. #3
    Veteran Аватар для drbars
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,531
    Благодарностей: 656
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я тоже в буфере двигаю. Задача оптимизируется по скорости, когда чётко поставлена.

    Процедура сдвигает 2 байта по адресу SPR_MOVE_BUF на полубайт вправо.

    Код:
    	LD (SCRL_ST+1),SP
    	LD SP,SPR_MOVE_BUF
    	LD HL,ONEBYTE
    	POP BC
    	LD (ST_4+1),SP
    	XOR A
    	LD (HL),C
    	RRD
    	LD C,(HL)
    	LD (HL),B
    	RRD
    	LD B,(HL)
    	PUSH BC
    ST_4	LD SP,0
    
    ; тут цикл кол-ва строк можно замутить
    
    	LD SP,(SCRL_ST+1)
    	RET
    Последний раз редактировалось drbars; 27.01.2013 в 19:17.
    ZX Spectrum +2 / DataGear / DivIDE 2k14
    ZX Evolution rev.C
    ZX Spectrum NEXT

  5. #4
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Благодарностей: 192
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне тайл вывести в одно знакоместо шириной надо. А если делать это через буфер, добавятся минимум запись/чтение, что будет наверное только хуже.
    К слову на два пикселя сделано вот так:
    Код:
        ld a,(de)
        inc de
        rla
        rl c
        rla
        rl c
        ld (hl),c
    Можно ли тут что улучшить? Арифметикой, например, или табличкой(кило-другое готов пожертвовать)? Я с такими извратами мало знаком =\
    Попалась хорошая страничка про сдвиги http://www.chilliant.com/z80shift.html, но там делается через ADD HL, HL. А это мало того что тормознее, так мне ещё и в другую сторону надо.
    Последний раз редактировалось NovaStorm; 27.01.2013 в 19:42.

  6. #5
    Veteran Аватар для drbars
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,531
    Благодарностей: 656
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    RRD/RLD сам по себе довольно тормозной, я им в исключительных случаях пользуюсь.
    ZX Spectrum +2 / DataGear / DivIDE 2k14
    ZX Evolution rev.C
    ZX Spectrum NEXT

  7. #6
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,426
    Благодарностей: 643
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Арифметикой, например, или табличкой
    А весь набор спрайтов не продублировать (сдвинутый на нужную величину) ?
    Быстрее уже некуда...

  8. #7
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    POP BC
    LD (ST_4+1),SP
    XOR A
    LD (HL),C
    RRD
    LD C,(HL)
    LD (HL),B
    RRD
    LD B,(HL)
    PUSH BC
    ST_4 LD SP,0
    А что мешает делать RLD: DEC L или RRD:INC L?

    ---------- Post added at 11:33 ---------- Previous post was at 11:31 ----------

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Мне тайл вывести в одно знакоместо шириной надо.
    Лучше используй более крупные тайлы.

  9. Эти 2 пользователя(ей) поблагодарили alone за это полезное сообщение:
    drbars (08.03.2013), GriV (05.02.2013)

  10. #8
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Благодарностей: 192
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    А весь набор спрайтов не продублировать
    За килобайт загрызу =Е
    У меня 6Кб под тайлы, а вместе с кодом их вывода они должны влезть в страничку.

    ---------- Post added at 14:08 ---------- Previous post was at 14:04 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    Лучше используй более крупные тайлы.
    Мне именно в одно знакоместо шириной выводить надо. Случай специфический уж больно.
    Потому за сдвиги и взялся, что при не слишком катастрофичных затратах память тайлов экономится в разы.
    Это на спрайтах придётся отрываться, храня сдвинутые.
    Последний раз редактировалось NovaStorm; 29.01.2013 в 13:10.

  11. #9
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А если вывести строчку тайлов в буфер, а потом оттуда сдвинуть на экран?

  12. #10
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Благодарностей: 192
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >в буфер
    Дык туда сначала записать надо будет, а потом прочитать. А у меня сразу куда надо пишется. Выгоды не будет.
    Впрочем сейчас у меня всё равно другие проблемы нарисовались из-за которых всё прахом идёт.
    Спрайт из банки во второй экран вывести можно только перебросив сначала вниз?

Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Вывод ВСЕХ картинок на экран :)
    от Nomy Graphics в разделе Для начинающих
    Ответов: 33
    Последнее: 12.04.2011, 17:25
  2. zx-777 черный экран
    от omaxlab в разделе Unsorted
    Ответов: 20
    Последнее: 13.10.2010, 18:21
  3. Вывод картинки на экран
    от Alex Clap в разделе Для начинающих
    Ответов: 17
    Последнее: 22.08.2010, 13:46
  4. Экран...
    от Sonic в разделе Unsorted
    Ответов: 9
    Последнее: 26.12.2006, 16:15
  5. ZX 128 - второй экран
    от icebear в разделе Unsorted
    Ответов: 8
    Последнее: 06.03.2006, 18:21

Ваши права

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