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

User Tag List

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 31 по 40 из 62

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

  1. #31
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,057
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    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.

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

  3. #32
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Barmaley_m, круто)
    Делай, пожалуйста, демы)

  4. #33
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Barmaley_m, не работает. вся строка на 3 не сдвигается.

  5. #34
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня как-то так получилось:
    58 тактов / байт

    Код:
    	LD HL,#401F
    	DUP 32 			; SCROLL 3
    	LD C,(HL)
    	RL C
    	EX AF,AF'
    	RL C
    	EX AF,AF'
    	RLA
    	RL C
    	RRA
    	LD (HL),C 	
    	DEC L
    	EDUP
    Стековый вариант 57,5 тактов на байт

    Если использовать прямую адресацию LD HL,(nn) / LD (nn),HL — получим 56 тактов на байт.

    Код:
    	LD (STACK+1),SP
    	LD HL,#401E
    	DUP 16 			; SCROLL 3
    	LD SP,HL
    	DEC L
    	DEC L
    	POP DE
    	RL D
    	EX AF,AF'
    	RL D
    	EX AF,AF'
    	RLA
    	RL D
    	RRA
    	RL E
    	EX AF,AF'
    	RL E
    	EX AF,AF'
    	RLA
    	RL E
    	RRA
    	PUSH DE	
    	EDUP
    STACK:
    	LD SP,#0000
    Если пишем стеком LD HL,(nn) / PUSH HL немного быстрее будет — 53,5 такта на байт.

    Код:
    ADR=#401E
    	LD (STACK+1),SP
    	LD SP,#4020
    
    	DUP 16 			; SCROLL 3
    	LD HL,(ADR)
    	RL H
    	EX AF,AF'
    	RL H
    	EX AF,AF'
    	RLA
    	RL H
    	RRA
    	RL L
    	EX AF,AF'
    	RL L
    	EX AF,AF'
    	RLA
    	RL L
    	RRA
    	PUSH HL
    
    ADR=ADR-2	
    	EDUP
    
    STACK
    	LD SP,#0000
    Вариант без EX AF,AF', по скорости одинаково.
    Код:
    ADR=#401E
    	LD (STACK+1),SP
    	LD SP,#4020
    
    	DUP 16 			; SCROLL 3
    	LD HL,(ADR)
    	RL H
    	RLA
    	RL H
    	RLA
    	RL H
    	RRA
    	RRA
    	RL L
    	RLA
    	RL L
    	RLA
    	RL L
    	RRA
    	RRA
    	PUSH HL
    
    ADR=ADR-2	
    	EDUP
    
    STACK
    	LD SP,#0000
    Последний раз редактировалось drbars; 11.04.2015 в 13:18.

  6. #35
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Если на 3 надо первым проходом rld вторым rr обратно. Хотя все это не актуальные извраты имхо.
    Этот пример тут был уже, тоже нерабочий.

  7. #36
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,560
    Спасибо Благодарностей отдано 
    1,223
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Этот пример тут был уже, тоже нерабочий.
    Разве может Alone дать нерабочий пример)

    Бармалей написал пример скроллинга на 2, а не на 3.

  8. #37
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Разве может Alone дать нерабочий пример)
    Бармалей написал пример скроллинга на 2, а не на 3.
    У меня он чё-та не заработал. Как им строку сдвинуть в 32 байта на 3 точки влево?

    Там ошибка, вот правильно:
    37 тактов байт.

    Код:
    	DUP 32 			; SCROLL 3
    	RLD
    	RR (HL)
    	DEC L
    	EDUP
    Последний раз редактировалось drbars; 11.04.2015 в 13:48.

  9. #38
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,057
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    У меня он чё-та не заработал.
    Не понял, что не заработало, где ошибки?
    Цитата Сообщение от drbars Посмотреть сообщение
    Как им строку сдвинуть в 32 байта на 3 точки влево?
    Тема о сдвиге на 2 точки. Мой код свигает на 2.

    То, что 32 не делится на 12, означает, что надо двигать две группы по 12 и потом еще одну группу из 8 байт. Получить на базе моего кода сдвиг укороченной группы из 8 байт - задача несложная. Ее я оставил в качестве домашнего задания тем, кому это интересно.

    Ну и вообще уже не раз было сказано, что, даже если сдвигать всю информацию чисто на регистрах, 8 тактов на сдвиг одного байта на один бит - это слишком много. Фреймового скролла на 2 пиксела на полный экран не получится. Почитайте все тему разработки Sea Dragon. Там было рассмотрено много разных вариантов, в итоге от "честного" скролла отказались в пользу тайловой графики.
    Последний раз редактировалось Barmaley_m; 11.04.2015 в 22:47.

  10. #39
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    То есть это правильно, а у алона ошибка? Мда...
    Сам проверь.. DEL L после RR надо и всё.

    Цитата Сообщение от alone Посмотреть сообщение
    RLD: DEC L
    +
    RR (HL):INC L
    =
    41 такт на байт.


    ---------- Post added at 11:49 ---------- Previous post was at 11:45 ----------

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Не понял, что не заработало, где ошибки?
    Вроде как читать стеком POP xx и записывать PUSH xx подходит для сдвига вправо RR x. Для сдвига влево читать с конца нужно, POP не годится, т.к. увеличивает SP на 2.

  11. #40
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    krt17, видимо значит мой вариант c RLD не рабочий...
    Последний раз редактировалось drbars; 12.04.2015 в 08:21.

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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