User Tag List

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

Тема: Как быстро скроллить память на 2 пиксела?

Комбинированный просмотр

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

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    pop hl
    rr h
    rr l
    ex af,af'
    rr h
    rr l
    ex af,af'
    ld (nn),hl

    же
    Это 33 такта на байт (кстати, перепутаны местами h и l).

    А почему не 32 такта на байт:
    Код:
    		POP	HL		10
    		POP	DE		10
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		EX	AF,AF'		4
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		EX	AF,AF'		4
    		LD	(nn),HL		16
    		LD	(nn),DE		20
    Или даже 31.6 такта на байт:
    Код:
    		POP	HL		10
    		POP	DE		10
    		POP	BC		10
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		RR	C		8
    		RR	B		8
    		EX	AF,AF'		4
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		RR	C		8
    		RR	B		8
    		EX	AF,AF'		4
    		LD	(nn),HL		16
    		LD	(nn),DE		20
    		LD	(nn),BC		20
    Теоретически, на практике не проверял.

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

  3. #2

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Или даже 31.6 такта на байт:
    Код:
    		POP	HL		10
    		POP	DE		10
    		POP	BC		10
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		RR	C		8
    		RR	B		8
    		EX	AF,AF'		4
    		RR	L		8
    		RR	H		8
    		RR	E		8
    		RR	D		8
    		RR	C		8
    		RR	B		8
    		EX	AF,AF'		4
    		LD	(nn),HL		16
    		LD	(nn),DE		20
    		LD	(nn),BC		20
    Можно еще задействовать альтернативные регистры (EXX). И тогда может оправдять себя переставление SP (LD SP,nn) и запись в память через PUSH.

    В пределе имеем (при неограниченном кол-ве регистров):
    2x RL r - 16 тактов на байт
    1x PUSH rp, 1xPOP rp на каждые 2 байта, 21/2=10.5 тактов на байт
    поэтому любой алгоритм такого типа не сможет сделать быстрее, чем 26,5 тактов на байт. Это без учета установок SP, без учета EXX.

    Но даже и с такой оптимистической скоростью, если скроллить одну треть экрана - то это будет более 54272 тактов. За один фрейм больше, чем 1/3 экрана, не проскроллишь.

    Поэтому я думаю, что в реальных играх и демах нужно использовать трюки, создавать иллюзию скролла, а не сам скролл. Типа как в Sea Dragon тайловая графика.

  4. #3

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Можно еще задействовать альтернативные регистры (EXX). И тогда может оправдять себя переставление SP (LD SP,nn) и запись в память через PUSH.
    Нет, не оправдает. Попробуй напиши и рассчитай, сколько получится тактов.

  5. #4

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Нет, не оправдает. Попробуй напиши и рассчитай, сколько получится тактов.
    Пишем (скролл влево):
    Код:
        LD SP,nn ;10
        POP HL ;10
        POP DE ;10
        POP BC ;10
        RL H ;8
        RL L ;8
        RL D ;8
        RL E ;8
        RL B ;8
        RL C ;8
        EXX ;4
        POP HL;10
        POP DE ;10
        POP BC ;10
        RL H ;8
        RL L ;8
        RL D ;8
        RL E ;8
        RL B ;8
        RL C ;8
        EXX ;4
        EX AF,AF' ;4
        RL H ;8
        RL L ;8
        RL D ;8
        RL E ;8
        RL B ;8
        RL C ;8
        EXX ;4
        RL H ;8
        RL L ;8
        RL D ;8
        RL E ;8
        RL B ;8
        RL C ;8
        EX AF,AF' ;4
        PUSH BC ;11
        PUSH DE ;11
        PUSH HL ;11
        EXX ;4
        PUSH BC ;11
        PUSH DE ;11
        PUSH HL ;11
    Этот фрагмент обрабатывает 12 байт. Растактовка:
    На POP - 6*10 = 60 тактов
    На PUSH - 6*11 = 66 тактов
    На LD SP - 10 тактов
    На EXX - 4*4 = 16 тактов
    На EX AF,AF' - 2*4 = 8 тактов
    На RL - 12*2*8 = 192 такта
    Всего 352 такта
    На каждый байт - 29 + 1/3 тактов в среднем.

    Хоть 4 команды EXX сжирают 16 тактов, а одна LD SP - 10 тактов - то кажется, что без EXX будет быстрее. Однако, если делать блоками по 6 байт без EXX - то будет:
    POP - 3*10 = 30
    PUSH - 3*11 = 33
    LD SP - 10
    EX AF,AF' - 8
    RL - 6*2*8 = 96
    Всего - 177
    На каждый байт - 29.5 тактов в среднем. Чуть больше.

    Причина в том, что при обработке блоками по 12 байт встречается в 2 раза меньше команд EX AF,AF' в среднем. То есть с EXX потеря 6 тактов на EXX, однако выигрыш 8 тактов на EX AF,AF'. В конечном счете выигрыш в 2 такта.
    Последний раз редактировалось Barmaley_m; 10.04.2015 в 16:30.

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

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

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

Похожие темы

  1. Как быстро добраться до мыши?
    от TomCaT в разделе Для начинающих
    Ответов: 38
    Последнее: 02.03.2010, 11:00
  2. Поиск идей: как быстро залить TAP/TZX в Speccy ???
    от ILoveSpeccy в разделе Несортированное железо
    Ответов: 23
    Последнее: 24.12.2007, 06:32
  3. Быстро вывести число 0-255 на экран
    от Aprisobal в разделе Программирование
    Ответов: 7
    Последнее: 26.01.2005, 08:05
  4. Быстро переместить 384b
    от Aprisobal в разделе Программирование
    Ответов: 6
    Последнее: 23.01.2005, 15:23

Ваши права

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