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

User Tag List

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

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

  1. #1
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

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

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 704
    Mentioned
    1 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.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  4. Эти 3 пользователя(ей) поблагодарили jerri за это полезное сообщение:
    introspec (06.11.2013), Sergey (26.12.2015), Titus (06.11.2013)

  5. #3
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    По умолчанию

    Так определись, чего именно скролить... потом уже процедуру придумывай.
    ZX Spectrum +2 / DataGear / DivIDE 2k14
    ZX Evolution rev.C
    ZX Spectrum NEXT

  7. Эти 2 пользователя(ей) поблагодарили drbars за это полезное сообщение:
    alone (07.11.2013), Evgeny Muchkin (09.11.2015)

  8. #5
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    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)

  9. Эти 6 пользователя(ей) поблагодарили alone за это полезное сообщение:
    Alex Rider (07.11.2013), Evgeny Muchkin (09.11.2015), GM BIT (08.11.2013), introspec (07.11.2013), perestoronin (07.11.2013), Sergey (26.12.2015)

  10. #6
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 704
    Mentioned
    1 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.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  11. Эти 4 пользователя(ей) поблагодарили jerri за это полезное сообщение:
    Alex Rider (07.11.2013), introspec (07.11.2013), Sergey (26.12.2015), trefi (07.11.2013)

  12. #7
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    По умолчанию

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

  14. Эти 6 пользователя(ей) поблагодарили introspec за это полезное сообщение:
    Alex Rider (07.11.2013), alone (13.11.2013), drbars (23.12.2013), key-jee (07.11.2013), Sergey (26.12.2015), Titus (07.11.2013)

  15. #9
    Member
    Регистрация
    16.02.2011
    Адрес
    г. Новочеркасск
    Сообщений
    30
    Благодарностей: 11
    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 в 14:38.

  16. Эти 5 пользователя(ей) поблагодарили Hacker Grey за это полезное сообщение:
    Alex Rider (16.12.2013), Andrew771 (17.12.2013), Barmaley_m (16.12.2013), introspec (16.12.2013), Titus (16.12.2013)

  17. #10
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Благодарностей: 645
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  18. Этот пользователь поблагодарил introspec за это полезное сообщение:
    Alex Rider (16.12.2013)

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

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

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

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

Похожие темы

  1. Как быстро добраться до мыши?
    от TomCaT в разделе Для начинающих
    Ответов: 38
    Последнее: 02.03.2010, 11:00
  2. Ответов: 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

Ваши права

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