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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Аппаратный горизонтальный скролл в Радио 86РК

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

    По умолчанию Аппаратный горизонтальный скролл в Радио 86РК

    Аппаратный горизонтальный скролл в Радио 86РК
    АХТУНХ
    Текст ниже скорей всего памятка самому себе
    Лучше и надежней использовать скролл с использованием перемещаемого "конца строки"
    чем то что ниже


    или как сделать горизонтальный скролл
    на любом компьютере с изменяемым начальным адресом старта экрана с точностью до байта (хотя не обязательно)
    и линейным строением экрана


    я много говорил про аппаратный скролл у РК
    который у него из коробки НО

    Если вертикальный скролл очевидно как реализовать
    то с горизонтальным нужно уже немножко подумать (мну думал минуты 2...)
    (не имею малейшего понятия как его делал vinxru)

    НИКАКОГО ГОТОВОГО КОДА В ПЕРВОМ ПОСТЕ НЕТ!


    Суть алгоритма такова (см интуитивно понятный картинко ниже)
    Может для кого то это и очевидно
    но не для меня
    да и готового софта со скроллом я не вижу...

    Для наглядности возьмем размер экрана 3х2 знакоместа
    Вся карта в виде столбцов 1,2,3,4,5,6,7... (на картинках не указаны!!!)
    Комментарии написаны для каждой строки (номер строки на картинке не указан!!!)




    Комментарии к изображению

    1. Исходное положение на экране столбцы 1,2,3

    2. Сдвигаем видео память на +1 в результате чего на экране столбцы 2,3 в последнем столбце появляется фиг знает что
    3. Дорисовываем последний столбец
    по смещению -1 от текущего начала видео памяти
    для того чтобы в будущем вернуть видео память в исходное положение (ну не можем же мы ее сдвигать бесконечно)
    отрисовываем одно знакоместо из изображения, которое появится намного позже
    которое будет находиться текущее_положение + количество_видео_памяти
    в нашем случае 1 + 6
    рисуем одно знакоместо из 7-го столбца 1-й строки
    дальше по смещению + ширина_экрана (выделенное под это количество видео памяти, а не настройки вг75) от текущего положения рисуем знакоместо из 4-го столбца
    прибавляя ширину_экрана переходим к следующей строке дорисовываем 4-й столбец

    4. см пункт 2. (на экране столбцы 3,4,*)
    5. см пункт 3. (только по смещение -1 рисуем знакоместо из 8-го столба 1-й строки)
    6. см пункт 2. (на экране столбцы 4,5,*)
    7. см пункт 3. (только по смещение -1 рисуем знакоместо из 9-го столба 1-й строки)
    8. см пункт 2. (на экране столбцы 5,6,*)
    9. см пункт 3. (только по смещение -1 рисуем знакоместо из 7-го столба 2-й строки)
    10. см пункт 2. (на экране столбцы 6,7,*)
    11. см пункт 3. (только по смещение -1 рисуем знакоместо из 8-го столба 2-й строки)

    12. и теперь самое интересно
    мы возвращаем начальный адрес видео памяти в исходное положение
    а у нас там уже почти готово новое изображение и всего лишь одно последнее знакоместо неправильное
    (на экране столбцы 7,8 и большая часть 9)
    13. дорисовываем последнее знакоместо
    и можно переходить к пункту 2
    [свернуть]


    Что в конечном итоге это нам дает

    нам не нужно перерисовывать все 3К чтобы сдвинуть все изображение

    достаточно перерисовать один столбец + еще 1 байт итого каких то 40 байт

    но за скорость нужно платить
    требуется дополнительное место, куда будет перемещаться окно
    в итоге под видео память придется отдать еще столько же - 1

    этот вариант для быстрого фреймового обновления
    с не большим количеством спрайтов на экране

    тк тут сразу после перерисовки экрана
    начинается гонка с лучом (а в нашем случае с DMA)
    нужно немедленно обновлять сдвигать спрайты (при том даже те которые статичные на экране!!!)
    пока их необновленное положение не успело попасть в буфер вг75
    иначе будут мигать спрайты (в данном случае дрыгаться и рваться)

    из оптимизаций
    если спрайт движется со скоростью экрана в ту же сторону
    то его можно не перерисовывать



    для не фреймовых скроллов
    где спрайтов много и они большие
    уже придется выделить памяти в 4 раза больше чем экранная область!!!!
    подход тот же
    но отрисовывать придется теперь по 2 столбца + 2 байта
    и менять каждый раз буфер
    так же теперь ширина экрана должна быть кратная 2-м

    вот начало работы алгоритма

    Комментарии

    1. Исходное положение

    В отличие от предыдущего тут используется 2-й экранный буфер
    который при старте уже должен быть заполнен изображением проскролленым на одно знакоместо!!!
    ...хотя проще будет нарисовать смещение тем же кодом и держать при старте просто 2 одинаковых экрана (правая картинка)...

    2. выбираем 2-й экранный буфер
    3. в первом буфере дорисовываем все изменения (включая спрайты и прочую белиберду)
    4. выбираем 1-й экранный буфер
    итд
    [свернуть]


    в итоге мы получаем такую же быструю двигалку экрана


    из минусов
    в 4 раза больше видеопамяти!!!!
    спрайты теперь нужно рисовать в 2 разных буфера
    и хранить информацию для восстановления фона или прочие подобные вещи
    в количестве 2 раза большем!!!!

    изображение теперь идет с задержкой
    но нам на это пофиг ибо везде так и мы это не замечаем даже...


    так же можно реализовать скролл в обе стороны
    но для этого нужно за раннее заполнить вторую часть видео памяти тем, что будет выведено на экран при движении назад

    с таким же успехом усложнив код можно делать скролл с разным шагом

    ...в принципе можно запилить скролл во всех 4-х направлениях...
    но памяти это займет... (размер видео памяти * 2 * 2 * количество буферов)

    ...разве что сделать маленькое окошко слева сверху как у zx81 )))))



    при всем этом можно пользоваться средствами экономии видео памяти (конец строки стоп ПДП)
    и скорей всего даже нужно (правда тогда придется больше перерисовывать изображение)

    с атрибутами же придется сложнее
    самый оптимальный вариант режим видимых атрибутов
    тогда больших проблем не возникнет

    или вариант атрибут на каждый байт видео памяти (при режиме невидимых атрибутов)
    каждый второй байт заполнить "штриховкой"
    а изменять только сами атрибуты при перерисовке (каждый второй байт)
    в итоге получим большие цветные чанки со скроллом...


    В атаче в архиве непожатиые изображения
    на которые и рекомендуется смотреть
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	scrl_0002 3x=.png 
Просмотров:	996 
Размер:	9.0 Кб 
ID:	60464   Нажмите на изображение для увеличения. 

Название:	scrl_0001 3x=.png 
Просмотров:	785 
Размер:	10.9 Кб 
ID:	60463   Нажмите на изображение для увеличения. 

Название:	scrl_0003 3x=.png 
Просмотров:	876 
Размер:	9.0 Кб 
ID:	60466  
    Вложения Вложения
    Последний раз редактировалось NEO SPECTRUMAN; 20.07.2017 в 00:11.

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

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

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Цвета в 86РК нет насколько я помню.
    Для меня РК понятие широкое
    РК86, Апогей, Микроша, Партнер

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

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    вы простую и понятную каждому вещь описали так что в глазах рябит
    ну кому как
    мне с ходу не было понятно какой именно готовить кадр для возвращения видео памяти в исходное положение
    пока не нарисовал картинку.
    а глядя на нее все очевидно


    Цитата Сообщение от krt17 Посмотреть сообщение
    Опять же надо учитывать реалии, перерисовывать придется 4*row (1 заново, 1 копировать и 2 чистить) для бесконечного скролла.
    см картинко
    нужно перерисовывать только ОДИН столбец и рисовать всего 1 байт подготавливая кадр для возвращения видеопамяти в исходную позицию
    в 2 стороны скролл абсолютно бесконечен (если при старте заполнить вторую часть на случай если мы сразу захотим двигаться назад)



    Цитата Сообщение от krt17 Посмотреть сообщение
    Комбинация с вертикальным скроллом расход памяти конечно не увеличит, рисовать только придется не столбцы а строки. Расход памяти ровно на 2 экрана всегда.
    и как мы без перерисовки столбцов вообще получим горизонтальный скролл???
    тут нужно рисовать как столбцы так и строки

    и как можно уместить это в 2 экрана????

    нет ну если он всегда в одну сторону по диагонали то да
    память под новый кадр быстро освобождается

    а у нас движение во все 4 направления

    вот пример
    5 движений вправо
    3 вниз


    Желтый - первая строка видео памяти
    Зеленый - вторая строка видео памяти
    Красный - запись
    1-я цифра в квадрате номер строки, 2-я номер столбца
    и да на картинке не дорисованы еще некоторые записи при скролле вниз (в последних двух строках)
    или на ней вообще нарисована херня при скролее вниз (там несколько вариантов развития событий)


    после 5 скроллов вправо у нас готово следующее изображение для еще одного скролла вправо
    но никак не для скроллов вниз

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

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

    нужно или готовить их несколько или хз что (явно не 2)

    периодическую полную перерисовку всех 3К я не допускаю!!!!
    это уже не аппаратный скролл

    максимум должно быть обновление 4-5 строк\столбцов...
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	001.png 
Просмотров:	631 
Размер:	5.7 Кб 
ID:	60485  
    Последний раз редактировалось NEO SPECTRUMAN; 04.04.2017 в 15:45.

  5. #4
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    при том я теперь вообще не понимаю как сделать бесконечный скролл во все стороны
    если повторять эту последовательность то нужна бесконечная память с таким подходом
    Рано или поздно, когда мы подойдём к началу или концу буфера, нужно будет иметь копию в другом конце буфера, чтобы незаметно для игрока переключить адрес буфера. Так что время от времени придётся копировать весь экран.

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Так что время от времени придётся копировать весь экран.
    так этого я и хочу избежать
    это будет выглядеть как внезапное замирание\спотык

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

  7. #6
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    при том мы наткнемся на него снова и снова
    если будем каждый раз менять направление движения на противоположное
    Чтобы этого избежать, можно перемещаться в середину буфера.

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Чтобы этого избежать, можно перемещаться в середину буфера.
    ну тогда нам нужно будет еще больше памяти

    + проблему это не решает
    какой именно готовить кадр для перемещения?
    пока мы подрыгаемся по кругу
    построенный потеряет свою актуальность или превратится в кашу...

  9. #8
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    ну тогда нам нужно будет еще больше памяти
    3 экрана - не так много.

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Точнее, как заставить ПДП перепрыгивать невидимую часть буфера?
    всмысле как?
    перекидываемые данные линейны на все 100
    и с этим нам нужно бороться

    со скроллом по одной оси проблем нет...

    и тут кажется о чего там добавлять еще одну ось
    тьфу...
    а нет...

  11. #10
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,846
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    166 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    какой именно готовить кадр для перемещения?
    Актуальный, естесственно. После того, как мы переместимся в средину буфера, проблема на время исчезнет.

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ассемблер Радио-86РК
    от gdv2002 в разделе Радио-86РК
    Ответов: 337
    Последнее: 13.02.2024, 07:25
  2. Радио-86РК: По страницам журнала "Радио"
    от Viktor2312 в разделе Радио-86РК
    Ответов: 79
    Последнее: 13.02.2014, 08:34
  3. Радио-86РК: Ремонт
    от kokosbot в разделе Радио-86РК
    Ответов: 59
    Последнее: 19.04.2013, 22:48
  4. Радио-86РК: Литература
    от caro в разделе Радио-86РК
    Ответов: 6
    Последнее: 26.04.2011, 10:18
  5. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

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