nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Jul 2019 13:20



Reply to topic  [ 9 posts ] 
Спрайты 
Author Message
Senior

Joined: 05 Oct 2009 20:44
Posts: 136
Location: 212.164.105.5
Reply with quote
Всем здрасьте. Может кто случаем разбирался в работе видеорежимов Спринтера? я тут кое-чего пишу и наткнулся на одну непонятку.
В мануале от Ивана сказано, что при включении видео страницы от 50h до 5fh, бит 3 указывает на работу с прозрачным цветом (FFh).
Бит 2 для временного вывода спрайта (нет дублирования в озу). Так вот, проблема именно с этим режимом.
Я включил страницу 50h в 3е окно. Вывел фоновую картинку. Включаю страницу 5Ch (т.е. биты 2 и 3 установлены). Далее начинаю вывод серии фаз анимации персонажа через аксель (ld l,l).
И вот тут получается так, что вывожу первый кадр, потом второй. Но при выводе второго кадря первый не затёрт, он виден и получается "мусор". Т.е. получается как задвоение.
Третий кадр - два прошлый кадра тоже на своих местах и так далее все кадры. Как написано в доке, бит 2 для временного вывода. т.е. я предположил, что копировать область
под выводимым спрайтом не требуется. Об этом так же в доке сказано. Но по факту - видимо требуется. или я что-то не так понял или не так делаю?
RGMOD = 0 (т.е. переключение экранов не трогаю вообще).
Может кто подсказать что и как?


02 Mar 2015 09:42
Profile
Senior

Joined: 05 Oct 2009 20:44
Posts: 136
Location: 212.164.105.5
Reply with quote
Ну и что? столько времени прошло, все смотрят и никто ничего не запостил. Shaos, ну ты-то наверняка что-то знаешь? кто-то же есть ещё кто может знать особенности работы видеоконтроллера Спринтера?
объясняю суть проблемы: все мы знаем flicplay, утилита для просмотра флик анимации. как происходит вывод на экран там:
Code:
; да собственно тут мелкий кусочек
      call   KADR_PROG        ; тут разбор фреймов флик файла и сразу выброс на экран, когда данные кадра закончены
      ei               ;делаем синхру
      halt               ; и вот тут картинка сразу появляется.
      di   
      ld   bc, 0054h
      rst   10h
      call   CopySCR_1to2   ;перенос содержимого 0го экрана в 1й
      ld   bc, 0154h
      rst   10h

при этом, вывод осуществляется всегда в 0й экран (адреса 0го экрана), хотя судя по порту rgmod (c9h) активен именно 1й. обновления самого экрана осуществляется по стандартной sync() вида ei:halt иначе никак. хоть закидайся в экран данные, они не покажутся без этой конструкции. данный метод прекрасно работает тогда, когда нужно обновлять весь экран (точнее, всю картинку, каких бы она размеров не была). а вот на динамичных сценах, типа как в соседней теме про си, там пример с шариками, там возникают разные косяки. например, если использовать алгоритм из плеера, что шарики отрисовываются со шлейфом (следом) т.е. требуется сохранять область под шариками, рисовать шарики, делать синх, потом восстанавливать область. если делать это столько раз, сколько у нас на экране объектов (шариков), то это получается сильно накладно. дешевле делать save/restore всего экрана. в документации сказано, что есть два управляющих бита в номере видеостраницы - бит 2 и бит 3. бит 3 отвечает за прозрачный цвет (ff). с ним проблем нет. а вот как работать со 2м бытом, это вопрос "на мильён".
если оставлять всю логику не изменой, но в странице видеопамяти воткнуть 2й бит, то шарики не появляются вообще! есть фоновая картинка и всё. если сделать вывод шариков сразу в 1й экран, то шарики есть, но при выводе они постоянно моргают. если отбросить вариант логики плеера и не делать копии на 1 экран, а всё выводить на 0й, то работа 2го бита в видеостранице не влияет ни на что. шарики есть и след за ними тоже на месте. просмотрел в дебагере как работают такие демки как fish. там нет использования прозрачности, на экран вывод без акселя, экран всегда 0й. т.е. пример плохой. в 3d_stars там есть переключение экранов, но я что-то не понял, как там оно работает. когда я делаю подобное, то получаю сплошное моргание.


30 Mar 2015 21:45
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
Я в такие тонкости не вдавался - никогда не проверял все доступные режимы - всегда использовал только базовый минимум, которого было достаточно для моих программулек...

_________________
:eugeek: https://twitter.com/Shaos1973


30 Mar 2015 22:00
Profile WWW
Senior

Joined: 05 Oct 2009 20:44
Posts: 136
Location: 212.164.105.5
Reply with quote
Shaos wrote:
Я в такие тонкости не вдавался - никогда не проверял все доступные режимы - всегда использовал только базовый минимум, которого было достаточно для моих программулек...

я согласен с тем, что когда делаешь какие-то системные программки или игры в которых большая часть спрайтов фиксированного размера, всего вроде даже хватает. вот можно глянуть на тот же thunder in the deep. там даже прозрачность не используется. фоновой картинки нет. фон вообще там чёрный. все спрайты карты и сам ГГ одних размеров. тут даже аксель, в целом, не требуется. но когда хочешь сделать какую-то "демку" или игру в которой около десятка подвижных объектов, да ещё и поверх какого-то фона (карты), то всего того, что используется в TITD уже мало. нужна и прозрачность и работа с областями под объектами и прочее.


30 Mar 2015 22:47
Profile
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 420
Reply with quote
Sayman wrote:
Shaos wrote:
Я в такие тонкости не вдавался - никогда не проверял все доступные режимы - всегда использовал только базовый минимум, которого было достаточно для моих программулек...

я согласен с тем, что когда делаешь какие-то системные программки или игры в которых большая часть спрайтов фиксированного размера, всего вроде даже хватает. вот можно глянуть на тот же thunder in the deep. там даже прозрачность не используется. фоновой картинки нет. фон вообще там чёрный. все спрайты карты и сам ГГ одних размеров. тут даже аксель, в целом, не требуется. но когда хочешь сделать какую-то "демку" или игру в которой около десятка подвижных объектов, да ещё и поверх какого-то фона (карты), то всего того, что используется в TITD уже мало. нужна и прозрачность и работа с областями под объектами и прочее.


Понравится тебе или нет, но у тебя только один путь - познакомиться с AHDL и разобраться в сорцах Спринтера, если уж ты так "подсел" на него. Никто другой тебе не поможет - Спринтер был не настолько распространен, чтобы у него были толпы поклонников (владельцев), отсюда и исходи. Насколько я помню, для Thunder-а Иван писал свою плис-конфу, с гориз. скроллингом экрана и всех железных фитч этой игрушки нет в стандартной (и доступной) плис-конфе. А в наше время (когда существовала еще питерская тим), по каждой мелочи приходилось "тыкаться" к Ивану, потому как в доках было описано далеко не все, а самому разобраться в работе Спринтера - гиблое дело (что я имею ввиду, я раньше писал).

_________________
Vasil Ivanov
vasil-i@yandex.ru


03 Apr 2015 23:00
Profile
Senior

Joined: 05 Oct 2009 20:44
Posts: 136
Location: 212.164.105.5
Reply with quote
Quote:
с гориз. скроллингом экрана и всех железных фитч этой игрушки нет в стандартной (и доступной) плис-конфе.

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


07 Jul 2015 21:03
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
Подкидывай - можно прямо текстом в форум - для истории так сказать...

_________________
:eugeek: https://twitter.com/Shaos1973


07 Jul 2015 22:26
Profile WWW
Senior

Joined: 05 Oct 2009 20:44
Posts: 136
Location: 212.164.105.5
Reply with quote
Shaos wrote:
Подкидывай - можно прямо текстом в форум - для истории так сказать...

ну тогда вот:
Quote:
В официальной документации есть информация о том, что при работе с графическим
экраном есть несколько методов для вывода графики:
- обычный;
- прозрачный цвет;
- временный;
Режим включается через указание номера страницы в порт окна процессора. Известно,
что для графического экрана у нас доступно 16 страниц с номерами 50h - 5fh.
При этом по факту программист не участвует в переключении этих страниц. Нужно
знать только одно, что в номере страницы биты 2 и 3 отвечают за режим вывода.
3..2 = 0 = 50h обычный метод вывода. Все данные попадают на экран без исключения.
bit3 = 1 = 58h режим прозрачного цвета. Цвет с номером FFh не выводится на экран.
bit2 = 1 = 54h временный вывод на экран. Самый мутный режим и тут нужно немного
пояснить как работает экран у Спринтера.

Для работы с графикой на Спринтере установлена отдельная память - vram,
т.е. видео-озу. По факту это sram, быстрая память. Экран устроен так, что при
обычном методе или с приминением прозрачности все данные записываются и в vram
и в ram (озу). Суть метода 3 в том, что когда он активен данные пишутся
только в vram. Например, мы включили граф.режим, обычный метод и вывели фоновую
картинку на весь экран. Потом включили бит3+бит2 и вывели какой-то спрайт.
Координаты вывода мы запомнили. Потом нам нужно сдвинуть спрайт на сколько-то
пикселей в сторону. Мы берём ранее сохранённые координаты, включаем обычный
режим и делаем чтение и запись в те же координаты. Что получается в результате?
Фоновая картинка была записана и в ram и в vram. Потом по методу 3+прозрачность
мы вывели спрайт. Его данные попали только в vram, а в ram сохранена фоновая
картинка. Когда мы снова включили обычный режим и сделали чтение, мы прочитали
данные из ram, а потом записали их в vram и повторно в ram. Таким образом мы
восстановили область под спрайтом. После этого можно рисовать спрайт в новых
координатах. Замысел данного метода в том, что нам не требуется процедура
и лишний буфер для сохранения фона (данные под спрайтом). Однако процедура
которая будет восстанавливать этот фон, всё же нужна. При использовании
акселератора это работает достаточно быстро. Биты 2 и 3 можно использовать как
раздельно, так и совместно.
Ближайшим примером работы всех этих режимов является демка balls.


так же прикрепляю архив с шариками и их исходниками. подробности в balls.txt.


Attachments:
balls.zip [134.4 KiB]
Downloaded 70 times
08 Jul 2015 00:38
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
Премного благодарен

_________________
:eugeek: https://twitter.com/Shaos1973


08 Jul 2015 16:54
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 9 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.