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

User Tag List

Страница 1 из 7 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 62

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

  1. #1
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

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

    А знает кто-нибудь быстрый способ поскроллить строчку на экране на 2 пиксела в одном цикле перебора байтов? Ну, вернее, есть ли способ быстрее, чем 2 раза подряд на 1 пиксел?

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    А знает кто-нибудь быстрый способ поскроллить строчку на экране на 2 пиксела в одном цикле перебора байтов? Ну, вернее, есть ли способ быстрее, чем 2 раза подряд на 1 пиксел?
    хмм
    ну можно так
    Код:
      xor a
      ex af,af
    dup 31
      ld a,(hl)
      ex af,af'
      rra
      rr (hl)
      rra
      rr (hl)
      inc l
    edup
      ex af,af'
      rra
      rr (hl)
      rra
      rr (hl)
    либо вариант с табличками но сильно сомневаюсь что будет быстрее
    С уважением,
    Jerri / Red Triangle.

  4. #3
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    либо вариант с табличками но сильно сомневаюсь что будет быстрее
    А что за вариант с табличками? У меня есть смутное подозрение, что скроллить придется не непрерывный кусок памяти, при этом границы "разрыва" не постоянны, так что вариант с dup-edup может либо не прокатить, либо обернуться геморроем с самомодифицирующимся кодом.

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

    По умолчанию

    Так определись, чего именно скролить... потом уже процедуру придумывай.

  6. #5
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    ну можно так
    Это точно работает?
    Я делал так:

    dup NN
    rl (hl)
    ex af,af'
    rl (hl)
    ex af,af'
    dec l
    edup
    Взносы в призовой фонд конкурса "Твоя игра 5" принимаются с помощью PaуPal, ЯндексДенег или перевода на карту Сбербанка (см. http://ti5.retropc.ru)

  7. #6
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    А что за вариант с табличками? У меня есть смутное подозрение, что скроллить придется не непрерывный кусок памяти, при этом границы "разрыва" не постоянны, так что вариант с dup-edup может либо не прокатить, либо обернуться геморроем с самомодифицирующимся кодом.

    с табличками это примерно так

    Код:
    ld bc,head_table
    
    dup nn
     ld a,(de)
     ldi
     ld l,a
     ld h,b
     ld h,(hl)
    edup
    по алгоритму
    данный скроллер позволяет скроллить на расстояние от 1 до 6 бит без изменения программы

    и соответственно таблицы занимают от (2+1)*256 до (64+1)*256

    как это работает:

    у нас есть так называемая head_table где прописаны адреса таблиц скролла откуда мы уже берем сдвинутые данные для следующего байта.

    генератор головной таблицы
    Код:
         ld hl,head_table
         ld de,roll_table
    ht0
         ld a,l
         and #03 ;размерность таблицы 2 бита (сдвиг на 2)
         add  a,d
         ld (hl),a
         inc l
         jr nz,ht0
    генератор таблиц скролла
    Код:
         ld hl,roll_table
         ld bc,#0400 ;размерность таблицы (2 бита *2 значения)
    rt0
         push bc
    rt1
         ld b,2          ; на сколько битов скролл 
         ld a,c
         ld (hl),l
    rt2
         rra
         rr (hl)     
         djnz rt2
         inc l
         jr nz,rt1
         inc h
         pop bc
         inc c
         djnz rt0
    С уважением,
    Jerri / Red Triangle.

  8. #7
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    dup NN
    rl (hl)
    ex af,af'
    rl (hl)
    ex af,af'
    dec l
    edup
    Надо больше спать по ночам, а не писать Идея использовать второй аккумулятор крутилась в голове, но как я мог не додуматься до такой простой реализации? Спасибо!

  9. #8
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Идея использовать второй аккумулятор крутилась в голове, но как я мог не додуматься до такой простой реализации?
    Можно и с одним аккумулятором:
    Код:
    dup NN
    rl (hl)
    rla
    rl (hl)
    rra
    dec l
    edup
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  10. Этот пользователь поблагодарил introspec за это полезное сообщение:

    dimidus (14.12.2020)

  11. #9
    Member
    Регистрация
    16.02.2011
    Адрес
    г. Новочеркасск
    Сообщений
    129
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сразу скажу - такты не считал.
    Но попробуй - может так быстрее будет ?

    pop hl
    rr h
    rr l
    ex af,af'
    rr h
    rr l
    ex af,af'
    push hl
    dec sp
    dec sp


    (или INC sp - смотрю куда крутить ну и RR или RL)
    Последний раз редактировалось Hacker Grey; 16.12.2013 в 15:38.

  12. #10
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Hacker Grey Посмотреть сообщение
    Сразу скажу - такты не считал.
    Но попробуй - может так быстрее будет ?
    Решение alone или моё - 42 такта на байт. У jerri чуть быстрее - 38 тактов на байт + таблица. Новое предложенное решение - 72 такта на 2 байта (36 тактов на байт), т.е. новый рекорд по скорости, причём без дополнительных затрат по памяти
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

Страница 1 из 7 12345 ... ПоследняяПоследняя

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

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

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

Ваши права

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