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

User Tag List

Страница 12 из 51 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя
Показано с 111 по 120 из 501

Тема: Тема для всяких глупых вопросов

  1. #111

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dimidus Посмотреть сообщение
    Вопрос по скроллингу фона.
    Вы как обычно любите делать, сначала вывести на экран, а потом скроллить, или выводить и скроллить "на лету"?
    Теоретически, на лету должно быть быстрее, потому что не нужно два раза ходить по одному и тому же месту (сначала вывод, потом скролл).
    у тебя фон из тайлов? или фон просто фон?

    если выбирать из вариантов скроллить на лету или перерисовывать тайлы
    то вариант - проскроллить и дорисовать - быстрее
    С уважением,
    Jerri / Red Triangle.

  2. #112

    Регистрация
    12.12.2015
    Адрес
    г. Москва
    Сообщений
    65
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    у тебя фон из тайлов? или фон просто фон?

    если выбирать из вариантов скроллить на лету или перерисовывать тайлы
    то вариант - проскроллить и дорисовать - быстрее
    Фон просто фон. Проскроллить и дорисовать, это значит прочитать графику там где она хранится, проскроллить в регистрах и положить на экран?

    Ещё вопрос к тебе. В одной из тем ты пишешь про табличный скроллинг. Но я, честно говоря, так и не смог понять как он устроен.
    https://zx-pk.ru/threads/22125-kak-b...l=1#post642038

    Можешь поподробнее объяснить?

  3. #113

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dimidus Посмотреть сообщение
    Фон просто фон. Проскроллить и дорисовать, это значит прочитать графику там где она хранится, проскроллить в регистрах и положить на экран?

    Ещё вопрос к тебе. В одной из тем ты пишешь про табличный скроллинг. Но я, честно говоря, так и не смог понять как он устроен.
    https://zx-pk.ru/threads/22125-kak-b...l=1#post642038

    Можешь поподробнее объяснить?
    Нет.
    Без внятного ТЗ я тебе не помогу.
    Что именно ты скроллиш и с какой целью.
    С уважением,
    Jerri / Red Triangle.

  4. #114

    Регистрация
    12.12.2015
    Адрес
    г. Москва
    Сообщений
    65
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Нет.
    Без внятного ТЗ я тебе не помогу.
    Что именно ты скроллиш и с какой целью.
    Есть картинка шириной 400 пикселей и высотой 112 строк, это фон. Фон должен выводиться на всю ширину экрана начиная с 32-й (если считать с нуля) строки экрана и скроллиться влево-вправо на любое количество пикселей.
    Фон занимает 5600 байт.
    У меня 8 процедур вывода. Каждая выводит с определённым смещением (от 0 до 7). Получается не очень шустро: 67, 113, 188, 192, 192, 194, 187, 112 килотактов (Кт) соответственно. Скроллю "на лету" т.е., беру байт из места хранения фона, сдвигаю в регистре, кладу на экран. И так всю строку. Там где нужно использовать сдвиг тетрады, делаю второй проход уже по экрану.

    Так вот хотел узнать про табличный скроллинг, может с ним быстрее будет?

  5. #115

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dimidus Посмотреть сообщение
    Есть картинка шириной 400 пикселей и высотой 112 строк, это фон. Фон должен выводиться на всю ширину экрана начиная с 32-й (если считать с нуля) строки экрана и скроллиться влево-вправо на любое количество пикселей.
    Фон занимает 5600 байт.
    У меня 8 процедур вывода. Каждая выводит с определённым смещением (от 0 до 7). Получается не очень шустро: 67, 113, 188, 192, 192, 194, 187, 112 килотактов (Кт) соответственно. Скроллю "на лету" т.е., беру байт из места хранения фона, сдвигаю в регистре, кладу на экран. И так всю строку. Там где нужно использовать сдвиг тетрады, делаю второй проход уже по экрану.

    Так вот хотел узнать про табличный скроллинг, может с ним быстрее будет?
    там в ветке ниже было посчитано что гдето 42 байта на байт.
    200к быстрее не сделаешь
    хочешь быстро - делаешь 8 копий фона со скроллом

    qsave.zip примерно так.

    и потом быстро быстро кидаешь их на экран

    если в анриле посмотришь код
    то увидишь как делать это быстро
    С уважением,
    Jerri / Red Triangle.

  6. #116

    Регистрация
    19.11.2012
    Адрес
    г. Луганск
    Сообщений
    698
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    55 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А кто-нибудь работал с SpectNet IDE или знает о ней? Стоит ли заводить новую тему, есть ли подобные аналоги?

  7. #117

    Регистрация
    12.12.2015
    Адрес
    г. Москва
    Сообщений
    65
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    там в ветке ниже было посчитано что гдето 42 байта на байт.
    200к быстрее не сделаешь
    хочешь быстро - делаешь 8 копий фона со скроллом

    qsave.zip примерно так.

    и потом быстро быстро кидаешь их на экран

    если в анриле посмотришь код
    то увидишь как делать это быстро
    Спасибо, посмотрел, да шустро получается. У меня, к сожалению, места под скролл-копии нет. Есть огрызок 7-й страницы для хранения фона. Ладно, буду посмотреть как это в итоге будет выглядеть в игре. В крайнем случае, сделаю фон интерлейсом через строку.

  8. #118

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dimidus Посмотреть сообщение
    У меня 8 процедур вывода. Каждая выводит с определённым смещением (от 0 до 7).
    А скроллишь байт как?
    И что именно за фон - динамически меняющийся, или собран из маленьких спрайтов?
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  9. #119

    Регистрация
    12.12.2015
    Адрес
    г. Москва
    Сообщений
    65
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    А скроллишь байт как?
    И что именно за фон - динамически меняющийся, или собран из маленьких спрайтов?
    Фон просто последовательность байтов, 112 строк, длиной по 50 байт.

    Код:
    ;--------------------------------------------------------------------
    ;
    ; Подпрограмма вывода фона
    ; Префикс для меток: bg
    ; В этой версии будем выводить и скроллить одновременно
    ;
    ;--------------------------------------------------------------------
    ;
    
                ;include vars.asm        ; Общие переменные (для локальной компиляции)
    
    
    bg
                ld a,(vars_bgofs_r) ; Берём смещение фона (в пикселях) из игровой переменной
                ld b,a              ; Сохраняем
                and %00000111       ; Определяем на сколько скроллить
                add a,a             ; Умножаем на 4 чтобы сделать табличный переход
                add a,a
                ld (bg_ag),a        ; Готовим переход на нужную подрограмму вывода
                ld a,b              ; Восстанавливаем
    
                srl a               ; Делим новое смещение на 8
                srl a               ; Получаем смещение в знакоместах
                srl a
    
                ld ix,#0040         ; Адрес экранной таблицы. Выводим на 32-ю строку экрана.
    bg_ast      equ $-1             ; Старший байт таблицы будет подставлен сюда извне.
    
                jr $                ; Переходим к нужному варианту вывода
    bg_ag       equ $-1
                jp bg0
                nop
                jp bg1
                nop
                jp bg2
                nop
                jp bg3
                nop
                jp bg4
                nop
                jp bg5
                nop
                jp bg6
                nop
                jp bg7
                nop
    
    ;-----------------------------------------------------------------------------------------
    ; Подпрограммы вывода фона
    ; Вх:   a - смещение от начала графики в знакоместах
    ;       ix - адрес строки экранной таблицы с которой начинать вывод фона
    ;-----------------------------------------------------------------------------------------
    ; Вывод фона без смещения
    bg0
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
                ld bc,#d90          ; 112 * 31
    
    bg0_loop    ld e,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
        dup 31
                ldi
        edup
                ld a,(hl)
                ld (de),a
                ret po              ; Если bc==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,19             ; Следующая строка фона
                add a,l
                ld l,a
                jr nc,bg0_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jr bg0_loop
    
    ; Вывод со сдвигом на 1 пиксель влево
    bg1
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
                ld bc,32            ; Начинаем вывод с конца строки
                add hl,bc
    
                ld c,112            ; 112 строк
    
    bg1_loop    ld a,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
                add a,31            ; Выводим с конца строки справа налево
                ld e,a
    
                ld a,(hl)           ; Берём скрытый байт графики и пыжим его в CY
                dec hl
                rla
    
        dup 31
                ld a,(hl)
                rla
                ld (de),a
                dec e
                dec hl
        edup
                ld a,(hl)
                rla
                ld (de),a
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,82             ; Конец следующей строки фона
                add a,l
                ld l,a
                jp nc,bg1_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg1_loop
    
    ; Вывод со сдвигом на 2 пикселя влево
    bg2
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
                ld bc,32            ; Начинаем вывод с конца строки
                add hl,bc
    
                ld c,112            ; 112 строк
    
    bg2_loop    ld a,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
                add a,31            ; Выводим с конца строки справа налево
                ld e,a
    
                ld a,(hl)
                rla
                rl b
                rla
                rr b
                dec hl
    
        dup 31
                ld a,(hl)
                rla
                rl b
                rla
                rr b
                ld (de),a
                dec e
                dec hl
        edup
                ld a,(hl)
                rla
                rl b
                rla
                rr b
                ld (de),a
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,82             ; Конец следующей строки фона
                add a,l
                ld l,a
                jp nc,bg2_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg2_loop
    
    ; Вывод со сдвигом на 3 пикселя влево
    ; Вывод строки со сдвигом на пиксель вправо, потом в обратную сторону двигаем
    ; строку на экране влево на 4 пихаря
    bg3
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
    
                ld c,112            ; 112 строк
    
    bg3_loop    ld e,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
    
                ; Выводим строку со сдвигом на пиксель вправо
        dup 31
                ld a,(hl)
                rra
                ld (de),a
                inc e
                inc hl
        edup
                ld a,(hl)
                rra
                ld (de),a
    
                inc hl              ; Читаем крайний справа для выдвигания влево
                ld a,(hl)
                rra
                ex de,hl
        dup 31
                rld
                dec l
        edup
                rld
                ex de,hl
    
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,18             ; Начало следующей строки фона
                add a,l
                ld l,a
                jp nc,bg3_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg3_loop
    
    ; Вывод со сдвигом на 4 пикселя влево
    bg4
                ld d,bggfx_ah       ; Вычисляем начало графики
                ld e,a
                ld c,112            ; 112 строк
    
    bg4_loop    ld l,(ix)           ; Определяем адрес экрана
                ld h,(ix+1)
    
                ex af,af'
                ld a,(de)
                ex af,af'
                inc de
        dup 31
                ld a,(de)
                ld (hl),a
                ex af,af'
                rrd
                ex af,af'
                inc l
                inc de
        edup
                ld a,(de)
                ld (hl),a
                ex af,af'
                rrd
                ex af,af'
    
                dec c               ; Если c==0, то выходим
                ret z
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,18             ; Следующая строка фона
                add a,e
                ld e,a
                jp nc,bg4_loop      ; Если не было переполнения, то уходим на круг
                inc d               ; Иначе прибавляем старший байт и тоже на круг
                jp bg4_loop
    
    ; Вывод со сдвигом на 5 пикселей влево
    ; Читаем, сдвигаем влево на пиксель, потом вправо на 4
    bg5
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
                ld bc,32            ; Начинаем вывод с конца строки
                add hl,bc
    
                ld c,112            ; 112 строк
    
    bg5_loop    ld a,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
                add a,31            ; Выводим с конца строки справа налево
                ld e,a
    
                ; Делаем сначала сдвиг влево на пихарь с выводом
        dup 31
                ld a,(hl)
                rla
                ld (de),a
                dec e
                dec hl
        edup
                ld a,(hl)           ; Вывели первый байт строки
                rla
                ld (de),a
    
                dec hl              ; Читаем предыдущий слева
                ld a,(hl)
                rla
                ex de,hl
        dup 31
                rrd
                inc l
        edup
                rrd
                ex de,hl
    
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,82             ; Конец следующей строки фона
                add a,l
                ld l,a
                jp nc,bg5_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg5_loop
    
    ; Вывод со сдвигом на 7 пикселей влево
    ; Смещаемся на байт влево, сдвигаем строку вправо на 1 пихарь
    bg6
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
    
                ld c,112            ; 112 строк
    
    bg6_loop    ld e,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
    
                ld a,(hl)
                rra
                rr b
                rra
                rl b
                inc hl
    
        dup 31
                ld a,(hl)
                rra
                rr b
                rra
                rl b
                ld (de),a
                inc e
                inc hl
        edup
                ld a,(hl)
                rra
                rr b
                rra
                rl b
                ld (de),a
    
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,18             ; На начало следующей строки фона
                add a,l
                ld l,a
                jp nc,bg6_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg6_loop
    
    ; Вывод со сдвигом на 6 пикселей влево
    ; Смещаемся на байт влево, сдвигаем строку вправо на 1 пихарь
    bg7
                ld h,bggfx_ah       ; Вычисляем начало графики
                ld l,a
    
                ld c,112            ; 112 строк
    
    bg7_loop    ld e,(ix)           ; Определяем адрес экрана
                ld d,(ix+1)
    
                ld a,(hl)           ; Берём скрытый байт графики и пыжим его в CY
                inc hl
                rra
    
        dup 31
                ld a,(hl)
                rra
                ld (de),a
                inc e
                inc hl
        edup
                ld a,(hl)
                rra
                ld (de),a
    
                dec c
                ret z               ; Если c==0, то выходим
    
                inc ix              ; Следующая экранная строка
                inc ix
                ld a,18             ; На начало следующей строки фона
                add a,l
                ld l,a
                jp nc,bg7_loop      ; Если не было переполнения, то уходим на круг
                inc h               ; Иначе прибавляем старший байт и тоже на круг
                jp bg7_loop

  10. #120

    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,830
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    247
    Поблагодарили
    106 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PATHNK Посмотреть сообщение
    А кто-нибудь работал с SpectNet IDE или знает о ней? Стоит ли заводить новую тему, есть ли подобные аналоги?
    Не, не надо тему. Аналоги - vscode + z80code от mborik + dezog в связке с одним из эмуляторов. Будет даже лучше, там по-моему и юнит-тесты есть и работает на любой платформе, а не только на виндовс. Ну и некст поддержан, если он нужен.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Virtual TR-DOS

Страница 12 из 51 ПерваяПервая ... 8910111213141516 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 42
    Последнее: 05.05.2021, 17:01
  2. Общая тема для моих вопросов (ассемблер и zx spectrum)
    от moronizzz в разделе Для начинающих
    Ответов: 17
    Последнее: 23.08.2016, 18:13
  3. тема для мобильного....
    от rasmer в разделе Музыка
    Ответов: 0
    Последнее: 18.01.2008, 20:25

Метки этой темы

Ваши права

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