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

User Tag List

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 11 по 20 из 49

Тема: Вывод тайлового бэкграунда

  1. #11
    Activist
    Регистрация
    17.01.2005
    Адрес
    Belarus, Minsk
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    moroz1999, если строку буфера (FRAMEBUFFERLINE) задать в 32 байта, то можно будет INC HL заменить на INC L, что даст -2 такта на каждую строку спрайта. 192 строки х 16 спрайтов в строке х 2 такта = -6144.
    Последний раз редактировалось Aprisobal; 06.04.2008 в 15:10.
    ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
    ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO

  2. #12
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,255
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    35 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ldi имеет неуправляемый фактор инкремента.

    dup 4
    ldi
    ldi
    dec de
    ldd
    ldd
    inc de
    inc d
    edup

    E=4*(16+16+6+16+16+6+4)=4*80=320ticks

    dup 4
    pop de
    ld (hl),e
    inc l
    ld (hl),d
    inc h
    pop de
    ld (hl),d
    dec l
    ld (hl),e
    inc h
    edup

    E=4*(10+7+4+7+4+10+7+4+7+4)=4*64=256ticks

    на 25% быстрее всетки...

  3. #13
    Member Аватар для crushers[4ePT]
    Регистрация
    06.04.2006
    Адрес
    Латвия, Рига
    Сообщений
    35
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    ldi имеет неуправляемый фактор инкремента.

    dup 4
    ldi
    ldi
    dec de ;регистр hl будет бегать по кругу?
    ldd
    ldd
    inc de
    inc d
    edup

    E=4*(16+16+6+16+16+6+4)=4*80=320ticks

    dup 4
    pop de
    ld (hl),e
    inc l
    ld (hl),d
    inc h
    pop de
    ld (hl),d
    dec l
    ld (hl),e
    inc h
    edup

    E=4*(10+7+4+7+4+10+7+4+7+4)=4*64=256ticks

    на 25% быстрее всетки...
    я имел ввиду так:
    bc=размер спрайта
    и в начале jr для "впрыгивания" в цикл в зависимости от d, после вызов знакоместа целиком и ещё раз "впрыгивание" в цикл для дорисовки остатка!
    ld a,e
    dup 8
    ldi: ldi: ret po
    ld e,a: inc d
    edup
    add a,#20: ld e,a: ret nc
    ld a,d: sub 8: ld d,a: ret

    Добавлено через 4 минуты
    Хотя согласен немного медленнее но зато некритично к прерыванию.
    Последний раз редактировалось crushers[4ePT]; 06.04.2008 в 00:44. Причина: Добавлено сообщение
    beLIVE!////

  4. #14
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,255
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    35 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от crushers[4ePT
    ;127557]dec de ;регистр hl будет бегать по кругу?
    Да. А что, как-то иначе надо?

    Цитата Сообщение от crushers[4ePT
    ;127557]я имел ввиду так:
    А затраты на вызов?
    Вариант, приведенный в равные с вышеуказанным условия:

    call outing ;17

    outing:
    ld a,e ;4
    dup 8
    ldi: ldi
    ld e,a: inc d
    edup ;8*(16+16+4+4)=8*40=320
    add a,#20: ld e,a: ret nc ;7+4+5/10 = 16/21
    ld a,d: sub 8: ld d,a: ret ;4+7+4+10 = 25

    E=17+4+320+16/21+25=382/377

    не айс

  5. #15
    Member Аватар для crushers[4ePT]
    Регистрация
    06.04.2006
    Адрес
    Латвия, Рига
    Сообщений
    35
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    dup 4
    ldi ;hl+1
    ldi ;hl+1
    dec de ;регистр hl будет бегать по кругу?
    ldd ;hl-1
    ldd ;hl-1
    inc de
    inc d
    edup

    E=4*(16+16+6+16+16+6+4)=4*80=320ticks

    dup 4
    pop de ;"hl"+2
    ld (hl),e
    inc l
    ld (hl),d
    inc h
    pop de ;"hl"+2
    ld (hl),d
    dec l
    ld (hl),e
    inc h
    edup


    Я про то что будет тогда рисоватся не тайл размером 2б(ширина) а первые два байта.
    ещё незабудь добавить цикл/проверку на "скопирован весь таил" в подсчёты скорости.
    beLIVE!////

  6. #16
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,255
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    35 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от crushers[4ePT
    ;127562]Я про то что будет тогда рисоватся не тайл размером 2б(ширина) а первые два байта.
    а ну тогда еще больше тактов надо чтоб вернуть de на место (4 на каждую строчку).

    Цитата Сообщение от crushers[4ePT
    ;127562]ещё незабудь добавить цикл/проверку на "скопирован весь таил" в подсчёты скорости.
    ну я изначально в равные условия загнал примеры, посему твой ускорился соотвецно.

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

  8. #17
    Member Аватар для crushers[4ePT]
    Регистрация
    06.04.2006
    Адрес
    Латвия, Рига
    Сообщений
    35
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    понравилось решение в какой-то буржуйной аркаде (я их на данный момент перековыриваю кучками - unreal debuger незаменимая вещь )

    ldi: ldi: ldi: inc d ;abc -графика в буфере
    ldd: ldd: ldd: inc d ;fed -графика в буфере

    а на экране соответственно abc, def только цикл djnz
    поставили вместо простой ret po. всё прикрасно рисуется в одном экране (48к режим). правда спрайт надо "корявым" делать
    beLIVE!////

  9. #18
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,255
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    35 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от crushers[4ePT
    ;127564]ldi: ldi: ldi: inc d ;abc -графика в буфере
    ldd: ldd: ldd: inc d ;fed -графика в буфере
    дык та же фигня что и у меня с источником плюс вывод перекошенный на 1 байт

  10. #19
    Guru Аватар для moroz1999
    Регистрация
    17.01.2005
    Адрес
    Tallinn
    Сообщений
    2,517
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    86
    Поблагодарили
    39 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от crushers[4ePT] Посмотреть сообщение
    интересно а почему все примеры "зациклены" на использовании стёка?
    у меня есть еще одна причина, по которой я быстро отказался от ldi - банально не хватило одной пары свободных регистров.

    Добавлено через 3 минуты
    Цитата Сообщение от Aprisobal Посмотреть сообщение
    moroz1999, о! Если строку буфера (FRAMEBUFFERLINE) задать в 32 байта
    спасибо, но от этого я, наверное, отказаться пока не смогу - у меня framebufferline сделан шириной в 40 байт. Это даёт такой небольшой плюс, что не нужно обрезать спрайты по горизонтали на границе экрана (правда по ширине спрайт ограничивается при этом 16 знакоместами).

    Добавлено через 9 минут
    отдельное спасибо за идею вывода змейкой - как-то мне это в голову не приходило, посмотрю как бы её применить.
    с выводом графики напрямую на экран появляется еще один небольшой минус, о котором забыл сказать - спрайты придётся каждый раз копировать из верхней памяти.
    можно реализовать кэширование на лету, конечно, но на этот счет надо еще подумать.

    Добавлено через 11 минут
    Цитата Сообщение от Vitamin Посмотреть сообщение
    Ну а вот копирование из буфера на экран почему не учитываешь? В 35000 на экран влезешь?
    еще как учитываю! 35000 - это и есть разница между совокупными затратами на down_hl и копированием из буфера (65000).
    Последний раз редактировалось moroz1999; 06.04.2008 в 13:47. Причина: Добавлено сообщение

  11. #20
    Member Аватар для crushers[4ePT]
    Регистрация
    06.04.2006
    Адрес
    Латвия, Рига
    Сообщений
    35
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    moroz можешь показать процедуру копирования? весь экран хочешь обновлять?
    beLIVE!////

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

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

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

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

Похожие темы

  1. вывод символа 4*8
    от Dexus в разделе Программирование
    Ответов: 15
    Последнее: 14.04.2011, 14:14
  2. Вывод на HD мониторы
    от jimled в разделе Изображение
    Ответов: 1
    Последнее: 28.01.2008, 15:09
  3. Вывод в порт на С в MicroBlaze
    от black_ninja в разделе Разный софт
    Ответов: 2
    Последнее: 25.01.2008, 09:38
  4. Вывод изображения
    от Shnurkov в разделе Изображение
    Ответов: 5
    Последнее: 10.02.2007, 15:07
  5. вывод буковочек шириной точечек
    от fk0 в разделе Программирование
    Ответов: 15
    Последнее: 10.01.2006, 23:26

Ваши права

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