User Tag List

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 37

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

  1. #11

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

    По умолчанию

    Ну, у тебя же и так 57 тактов на байт (если inc e).
    А будет 16 (pop bc:ld (hl),c/b:inc h) + 22 (rld:dec l) + 16 (pop bc:ld (hl),c/b:inc l) = 54. Сплошная выгода. Если не считать памяти.

  2. #12

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Одна идейка (просьба сильно не бить, мог напутать в показаниях):

    Код:
    ;алгоритм вывода со сдвигом через две таблицы
      *out++ = Hi2Lo[*in];
    
      dup W-2
      *out = Lo2Hi[*in++];
      *out++ |= Hi2Lo[*in];
      edup
    
      *out = Lo2Hi[*in];
    
    ;примерный код
    ;hl - in de- out
    ;b - 'Hi2Lo
    
      ld c,(hl)    ;Hi2Lo + *in   7
      ld a,(bc)    ;Hi2Lo[*in]    7
      ld (de),a    ;*out++        7
      inc e        ;              4
                   ;=25
    
      dup W-2
    
      inc b        ;Lo2Hi + *in   4
      inc l        ;in++          4
      ld a,(bc)    ;Lo2Hi[*in++]  7
      ld (de),a    ;              7
    
      dec b        ;              4
      ld c,(hl)    ;Hi2Lo + *in   7
      ld a,(bc)    ;Hi2Lo[*in]    7
      ex de,hl     ;              4
      or (hl)      ;*out |=       7
      ld (hl),a    ;              7
      inc l        ;out++         4
      ex de,hl     ;              4
    
      edup         ;=66 per cycle
    
      inc b        ;4
      ld a,(bc)    ;7
      ld (de),a    ;7
                   ;=18
    
    
      ; E=25+18+66*(W-2) на линию
    Затраты памяти- 512 байт на таблички.

  3. #13

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

    По умолчанию

    alone, Понял! Берём второй тайл уже сдвинутым. С памятью уже знаю как поступить, целиком дублировать не понадобится, анимированные тайлы сдвигать мне не надо. 4Кб в страничке ещё есть, может и хватит...

    ---------- Post added at 20:08 ---------- Previous post was at 19:32 ----------

    Vitamin,
    >на линию
    Но мне-то хочется в столбик =)

  4. #14

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Но мне-то хочется в столбик =)
    Ну модифицируй алгоритм- в чем-то даже проще будет. Суть одна и та же- две таблицы. Причем сдвиг может быть любым, не обязательно 4 пиксела.

  5. #15

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Спрайт из банки во второй экран вывести можно только перебросив сначала вниз?
    1) перебросить вниз;
    2) щелкать страницами на каждый байт/слово/сколько регистров хватит;
    3) хранить спрайт в 7-й банке.

  6. #16

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

    По умолчанию

    Vitamin, ну попробую понять, не можешь словами ещё описать? А то для меня асм почти write-only язык =(

    Alex Rider,
    Под вариант 3 памяти нетЪ.
    >2) щелкать страницами
    А может ли он быть быстрее переброса через стек?
    Может ли вообще существовать такой вариант в разумном исполнении? Потому что переброс стеком - 13 тактов на байт, а попробовал пощёлкать:
    ld bc,#7FFD
    pop de: ld a,bank: out (c),a: ld a,(hl):and d: or e:ld (hl),a:inc l: ld a,bank: out (c),a
    И лишних 19т/б. Может exx как-то можно задействовать?
    Последний раз редактировалось NovaStorm; 29.01.2013 в 21:23.

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

  8. #17

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Vitamin, ну попробую понять, не можешь словами ещё описать? А то для меня асм почти write-only язык =(
    Ну я на псевдо-языке вначале описал что делается. В столбик не советую- будут большие накладные расходы.

  9. #18

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    И лишних 19т/б. Может exx как-то можно задействовать?
    Тут надо считать такты жоско, я ща не в состоянии прикинуть. С exx подстава в том, что адрес второго экрана у тебя в hl, он же тоже переключится на альтернативный... Как вариант - прикинь такие расклады:
    -- bc тоже используется для переброски, а #7ffd в него заносится на каждой итерации (или используется альтернативный, например, а в de' хранятся исходная и целевая банки);
    -- адрес хранится в ix/iy. Тогда можешь тягать одновременно bc (см. преыдущий пункт), de, hl, bc', de', hl'. Но! Операции с индексными регистрами ну очень меленные
    -- как более мягкая альтернатива предыдущему пункту - для переброски используются bc, de, ix, iy, в альтернативных - 7ffd и банки.

    Пока больше ничего выдумать не могу. Мне тут не так давно надо было крутить спрайт и кидать его на экран - использование альтернативных и индексных регистров сильно ускорило алгоритм. Но там ну очень уж частный случай.

  10. #19

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    А будет 16 (pop bc:ld (hl),c/b:inc h) + 22 (rld:dec l) + 16 (pop bc:ld (hl),c/b:inc l) = 54.
    Даже rld:ldd вместо последних двух. Итого 50.

    ---------- Post added at 12:04 ---------- Previous post was at 12:02 ----------

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    alone, Понял! Берём второй тайл уже сдвинутым.
    Нет, все тайлы без копий.

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

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    >2) щелкать страницами
    А может ли он быть быстрее переброса через стек?
    Переброс в буфер сам по себе даёт ускорение. Не вижу смысла от него отказываться и усложнять задачу.

    Кстати, на 48К (один экран) спрайты всё равно надо накладывать в буфере. Так что и для 48К это тоже выгодно.

    Быструю и не сильно жручую по памяти переброску на экран можно сделать через pop: pop: pop: pop ... push: push: push: push.
    Последний раз редактировалось alone; 30.01.2013 в 14:59.

  11. #20

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

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Быструю и не сильно жручую по памяти переброску на экран можно сделать через pop: pop: pop: pop ... push: push: push: push.
    Это для одного спрайта, так как адреса фиксированные. Если делать pop hl:ld hl,(nn), то будет 13 тактов вместо 12,5 на байт, но и перемещать в буфер можно будет любой спрайт, а не один =)

    ---------- Post added at 14:40 ---------- Previous post was at 14:29 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    Ну, у тебя же и так 57 тактов на байт (если inc e).
    63 у меня =(
    С inc e подумаю.

    Выводим столбец. В нём есть 4 пикселя от левого и 4 от правого тайлов.
    В bc попаются данные левого тайла, из (de) берутся данные правого. В (hl) - экран. Вот полный код на две линии.
    Код:
        pop bc    ;10
        ld a,(de) ;7
        inc de    ;6
        ld (hl),c ;7
        rra
        rra
        rra
        rra       ;16
        rld       ;18
        inc h     ;4
    ;;
        ld a,(de)
        inc de
        ld (hl),b
        rra
        rra
        rra
        rra
        rld
        inc h
    Мозг в ступоре, пытаюсь осилить примеры.

    ---------- Post added at 14:43 ---------- Previous post was at 14:40 ----------

    Цитата Сообщение от alone Посмотреть сообщение
    Или rld:ld b,(hl):rld:ld c,(hl): push bc - будет 46.5
    Куда push? Oo
    Одно знакоместо надо же в ширину.

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

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

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

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

Похожие темы

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

Ваши права

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