User Tag List

Показано с 1 по 10 из 69

Тема: BattleCity демо-недоделка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Biland Посмотреть сообщение
    Если буфер экрана (или его части), хранить последовательно, то работа с ним упирается в код,
    примерно, такой (шириной для двух знакомест)
    Если хранить буфер экрана линейно
    то оптимальный вариант строения буфера таков

    FEDC BA98 7654 3210
    ***X XXXX YYYY YYYY

    преимущества
    переход влево dec h 4t
    переход вправо inc h 4t
    переход вверх dec l 4t
    переход вниз inc l 4t

    буфер хоть и занимает собой 8К
    но в 64 байтной щелке вполне можно хранить спрайты и таблицы
    так же таблицы можно хранить и "вертикально"
    то есть в L закидываем номер таблицы
    а в H число пропускаемое через таблицу

    из недостатков
    если читать буфер стеком
    то выводить нужно столбцами
    что сечется с лучом заметней

    если рисовать стеком а читать просто линейно
    то проблем уже нет

    - - - Добавлено - - -

    Цитата Сообщение от Reobne Посмотреть сообщение
    но бросать такой буфер в экранную область будет неудобно.
    кто сказал?
    Последний раз редактировалось NEO SPECTRUMAN; 25.05.2019 в 20:46.

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

  3. #2

    Регистрация
    06.05.2019
    Адрес
    г. Подольск
    Сообщений
    108
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    18
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    преимущества
    переход влево dec h 4t
    переход вправо inc h 4t
    переход вверх dec l 4t
    переход вниз inc l 4t
    Да, хороший вариант. Надо только после смещения вправо, возврат по Х организовать и сместиться по Y, для разный ширины спрайта. Пока оптимально по тикам, что-то не соображу как.


    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    но бросать такой буфер в экранную область будет неудобно.
    Бросать можно и через

    Код:
    POP HL
    LD (#4000),HL
    POP HL
    LD (#4002),HL
    , где адреса заранее рассчитаны. Получается чуть более 80тыс. тактов на весь экран. Теоретически, если нужен весь экран, то эту процедуру можно кинуть в нулевую страницу и подключить по cpu0. Хотя этой возможности подключать в cpu0 (ram0) лет 20 уже, предполагаю, что всё равно это специфично.

    Ещё бы в такой буфер быстро кидать

    Код:
    D SP,экран
    LD HL,NN ;два байта графики, здесь будет подставляться спрайт
    PUSH HL
    LD HL,NN
    PUSH HL
    , то весь экран в 67тыс. тактов укладывается и не используется дополнительный буфер. Можно и без cpu0 обходиться.
    unreal

  4. #3

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Biland Посмотреть сообщение
    Надо только после смещения вправо, возврат по Х организовать
    можно и нужно по возможности двигаться змейкой

    inc h inc h inc h inc h inc l
    dec h dec h dec h dec h inc l
    inc h inc h inc h inc h inc l
    dec h dec h dec h dec h inc l

    или
    inc l inc l inc l inc h
    dec l dec l dec l inc h
    inc l inc l inc l inc h
    dec l dec l dec l inc h

    - - - Добавлено - - -

    Цитата Сообщение от Biland Посмотреть сообщение
    D SP,экран LD HL,NN ;два байта графики, здесь будет подставляться спрайт PUSH HL LD HL,NN PUSH HL
    в условиях демосцены или жесткого извращения и если мы пишем под 128
    и если мы не боимся медленной памяти и пишим под пентагон и ложим на фирменные машины
    а может мы просто захотели рисовать мультиколор
    опять же
    мы можем организовать чуть более удобно и такой буфер для 128 строк

    ld hl,nn push hl занимает 4 байта на 2 байта экранной области

    тоесть делаем так
    включаем теневой экран навсегда
    в итоге у нас появляется место по $4000-7FFF под маневры

    далее раскидываем развернутую процедуру в виде
    Код:
    org $4000
    l1 ld sp,C0xx	;3
    dup 16
    ld hl,nnnn	;3
    push hl		;1
    edup
    jp l2		;3
    
    org $4100
    l2 ld sp,C1xx
    dup 16
    ld hl,nnnn
    push hl
    edup
    jp l3
    
    ...
    
    org $BF00
    l128 ld sp,xxxx
    dup 16
    ld hl,nnnn
    push hl
    edup
    jp end
    можно 127 строк
    и выровнять более удобно
    чтоб nnnn приходилось на кратный адрес $хх00

    и в принципе если хотим ЕЩЕ БЫСТРЕЕ
    то можем убрать ld sp,xxxx
    а поставить Jp по образу и подобию строения спековского экрана
    ТОГДА мы выиграем 1К тактов
    но не сможем рисовать линейно сверху в низ
    чтоб не сектись с лучом
    тогда 128 строк улетят в экран за 44298 тактов

    при этом у нас остается свободное переключаемое окно С000-FFFF
    графику можно хранить между каждой строкой
    по 186 байт на строку свободно
    таблицу вектора прерываний нужно будет ложить в каждой банке (кроме тех что всегда по адресам 4000-BFFF)
    так же как и обработчик
    (как вариант можно пожертвовать пару строк и положить вектор и обработчик в более надежном месте)

    на время рисования в буфере
    видео память отключаем из адресного пространства проца вообще

    так же в странице с видеопамятью у нас еще свободно 9К памяти

    так же чтоб жестко не извращатся переключением страниц кодом находящимся в переключаемой странице (гемор же)
    можно переместить некоторые процедуры
    переключалки страниц рамы
    переменные
    в те 186 байтные щелки что есть в 32К процедуре перекидывания буфера в видеопамять

    в итоге перемещение по вертикали
    у нас остается достаточно быстрое inc h dec h

    но по горизонтали
    уже нужно извращаться
    так у нас чередуются 2 байта данных и 2 байта кода


    - - - Добавлено - - -

    Цитата Сообщение от Biland Посмотреть сообщение
    Бросать можно и через

    Код:
    POP HL
    LD (#4000),HL
    POP HL
    LD (#4002),HL
    , где адреса заранее рассчитаны. Получается чуть более 80тыс. тактов на весь экран. Теоретически, если нужен весь экран, то эту процедуру можно кинуть в нулевую страницу и подключить по cpu0. Хотя этой возможности подключать в cpu0 (ram0) лет 20 уже, предполагаю, что всё равно это специфично.
    по адресам 4B00-BFFF вполне найдется 29К памяти
    чтоб поместить 24К процедуру
    и без cpu0 которого ниукогонет...

    но опять же это или в условиях 128К
    или при большом извращении
    Последний раз редактировалось NEO SPECTRUMAN; 26.05.2019 в 17:58.

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

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

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

Похожие темы

  1. Демо Запилятор
    от nyuk в разделе Демо
    Ответов: 954
    Последнее: 21.09.2019, 09:41
  2. Идеи демо
    от GM BIT в разделе Демо
    Ответов: 711
    Последнее: 24.03.2019, 19:24
  3. Демо на бейсике
    от Viktor2312 в разделе Программирование
    Ответов: 134
    Последнее: 09.07.2014, 01:34
  4. Интерактивность демо
    от goblinish в разделе Демо
    Ответов: 74
    Последнее: 28.08.2012, 07:13
  5. Вспомнить демо.
    от Enigmatic в разделе Демо
    Ответов: 1
    Последнее: 11.03.2012, 23:34

Ваши права

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