Войти
ФлеймФорумЖелезо

Блеск и нищета 8/16-битных консолей и ПК (37 стр)

Страницы: 136 37 38 3946 Следующая »
#540
(Правка: 10:38) 10:38, 4 мар. 2019

Переключение банков видеопамяти в Famicom/NES/Денди на примере игры Contra Force

Как я писал в статье про графическую архитектуру Famicom/NES/Денди возможности видеочипа консоли были ограничены сразу с нескольких сторон. Всё изображение обязательно состояло из четырёхцветных тайлов 8x8 пикселей и было всего два банка по 256 уникальных таких тайлов которые могли одновременно быть выведены на экран (при этом бОльшая часть изображения состояла из повторяющихся тайлов). Для игр первого поколения подобных Lode Runner или Bomberman двух этих банков видеоданных хватало на всю игру. Но с усложнением игр 512 уникальных тайлов на кадр резко перестало хватать и были изобретены мапперы переключающие банки на лету чтобы значительно увеличить разнообразие выводимого изображения.
Сегодня мы рассмотрим как переключались эти банки тайлов в первом уровне игры Contra Force чтобы понять как все эти технические ограничения с одной стороны обходились, а с другой влияли и в некоторых случаях даже формировали геймплей игр.
Те кто не играл в эту игру или забыл её первый уровень могут посмотреть его целиком одной картинкой по ссылке. Если браузер сожмёт картинку в один экран — просто увеличьте. Картинка очень большая.

Стартует игра где то в складской зоне порта:

Изображение

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

Изображение

Квадратный блок слева — это банк тайлов квадратно–гнездовой сетки плиток фона, а квадрат справа — банк тайлов для подвижных спрайтов. Тайлы имеют размер 8x8 пикселей и эмулятором отображаются в сетке квадратов со стороной в 16 тайлов — каждый банк содержит их по 256 штук. В игре используется маппер MMC3 который разбивает первый банк на 2 равных зоны которые я тут обозначил как (A) и (B) и позволяет их переключать независимо. Второй же банк побит на 4 равных зоны с независимым переключением, я буду их обозначать цифрами 1–4 за исключением одного момента о котором скажу чуть позже.

Тайлы изображены в однотонной нейтральной палитре, но на экран они выводятся будучи раскрашенными в одну из восьми палитр (их видно снизу). Палитры имеют по 4 цвета первый из которых всегда чёрный (на деле — прозрачный, но если и спрайт и фон над пикселем экрана прозрачны, то он закрасится черным цветом), поэтому одновременно на экране может присутствовать не более 25 разных цветов (8*3+1).

Рассмотрим сперва банк плиток фона. В зоне (A) лежит набор тайлов которые будут неизменны на протяжении всего уровня — это облака, волнистая поверхность воды, стены, некоторые бетонные блоки и т.п. Зона (B) будет переключаться по мере прохождения уровня и сейчас в ней содержится изображения кораблей на фоне моря, всяких портовых конструкций на горизонте и тому подобное. Их видно на скриншоте выше. Но несмотря на то, что эта зона будет переключаться на другие банки памяти во всех них будут неизменными первая полоска с тайлами повсеместно встречающихся ящиков и нижняя полоска пикселей бетонных стен.

Теперь посмотрим на банк тайлов подвижных спрайтов. Первые два заняты под две вещи — изображения ног в разных фазах движения и корпусов трупов — все они едины и для врагов и для игроков, поэтому во всех вариантах переключения банков неизменно присутствуют здесь в зоне обозначенной мной как (1) (хотя она не совпадает с физическим банком (1), напоминаю что банки одинаковы по размерам — весь банк поделен на четыре четверти). Далее в зоне (2) находятся изображения выше пояса персонажей которые выбраны для игры. В игру можно играть вдвоём выбирая аватаров из четырёх возможных персонажей. Для каждой комбинации из одновременно присутствующих на экране двух героев делается переключение двух первых зон банка тайлов спрайтов. Даже если играет один игрок (как на скриншотах) вторым героем незримо присутствующим в тайлах выбирается второй по счёту персонаж — Smith.

Идём дальше — третья зона спрайтов — самая интересная. Сейчас она заполнена мусором, но именно она будет переключаться в ходе прогресса по уровню и по сути на ней и сконцентрируется наше внимание в дальнейшем.

Четвёртая зона — неизменяемая и преимущественно содержит вещи которые всегда могут появится в кадре — изображения взрывов, разнообразных пуль и снарядов, саквояжей–призов, а так же ноги одной из фаз врагов.
Вернёмся к игре и сделаем несколько шагов навстречу поджидающим нас опасностям:

Изображение

Еще до того как на экране появятся враги третья зона банка спрайтов переключится на банк, который я назвал "массовка":

Изображение

Я обвёл тут третью зону пурпурным цветом и в дальнейшем буду так же делать, т.к. меняться будет только она.

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

Бежим дальше и забежав в большой пустой ангар замечаем, что зона (B) банка плиток фона сменилась на следующее:

Изображение

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

Изображение

Здесь вообще разработчики совершили очень крутой трюк, который я даже не припомню в других играх именно в таком виде. Заметьте как я отделил пурпурным зоны выше и ниже погрузчика, а так же то, что на уровне самого погрузчика отсутствуют какие либо тайлы стен. Это великолепный пример использования техники HBlank–отсечения, погрузчик не является подвижным спрайтом — он слишком велик для этого. Он является огромным куском фона с независимым скроллингом по горизонтали и движок игры скроллит его таким образом, что создаётся иллюзия движения его как огромного объекта. Если бы на его уровне присутствовали бы еще плитки фона они бы двигались вместе с ним как одно целое и это разрушило бы иллюзию.


#541
(Правка: 14:09) 10:38, 4 мар. 2019

Идём дальше и замечаем как зона (3) спрайтов меняется на что–то новенькое:

Изображение

В этом банке присутствуют изображения двух врагов — боевика с УЗИ и боевика с гранатомётом. Теперь в кадре могут присутствовать только два этих врага одновременно.

Кроме того в этот же момент зона (B) банка тайлов фона (нижняя половина) начинает циклически меняться на два варианта которые я называл для себя "технозона":

Изображение

(технозона кадр 1)
Изображение

(технозона кадр 2)

Постоянная смена двух вариантов банка создаст иллюзию движения транспортёрных лент и всяческих механизмов, присутствующих в следующих двести метрах игрового поля:

Изображение

А вот гранатомётчики будут встречаться нам очень недолго и зона (3) спрайтов быстро сменится на новый вариант:

Изображение

Его я назвал "человек с ружьём", ибо это единственный тип врага который нам будет встречаться еще очень долго. Однако помимо него здесь присутствуют новые типы подвижных объектов — падающие и едущие по транспортёрной ленте ящики, висящие в воздухе платформы, а так же бочки, которые в одном месте попытаются нас задавить.

Изображение

Далее идёт длинная полоса испытаний в середине которой, как раз после пытающихся нас задавить бочек произойдёт переключение плиток фона (B) на новый вариант с вентиляторами:

Изображение

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

Изображение

Зато тайлы врагов переключатся на "массовку" с которой уровень начинался и здесь нам уже встретятся не только боевики с пистолетами и гранатами, но и обещанный огнемётчик:

Изображение

Вот только стрелять он будет почему то не огнём, а снарядами базуки, хотя огнемётчики стреляющие огнём в дальнейшем в игре встретятся.

Преодолев остаток уровня мы добегаем до босса:

Изображение

На изображения разных фаз его движения не хватит всей зоны (3) и она будет переключаться много раз в четыре разных варианта исполнения:
Изображение
Первый босс бежит
Изображение
Первый босс прыгает
Изображение
Первый босс делает перекат
Изображение
Первый босс умирает

Вот так игра Contra Force переключает банки видеопамяти в своём первом уровне и в этом ей помогает маппер MMC3B (вариант платы TL–ROM с 128Кб ПЗУ кода и 128Кб ПЗУ графических данных).
Все эти ограничения и переключения нередко диктовали сам геймплей игр — на экране одновременно не могло находится большое (под "большими" здесь понимаются числа начинающиеся с трёх) количество разных видов врагов, поэтому в многочисленных мордобоях они высыпали всегда "волнами". Выкручивались разработчики как могли, поэтому "респект им и уважуха" за наше счастливое детство.

#542
13:08, 4 мар. 2019

Tonal
> Драйвер на РС спикер под винду был раньше, любой звук ШИМом выводился, можно
> было даже мр3 слушать)
Такoй я поставил на i586 с HDD-256Mb, когда мне хард принесли его. Мальчишки прикалывались и папку Windows удалили. Просили Windows'98 поставить, но поместилась лишь Windows'95 и в качестве бонуса я поставил тот драйверок.
Хозяева удивились, когда их кейс заиграл музон… %-)

#543
(Правка: 5:04) 5:04, 5 мар. 2019

Кстати, забавно еще, подсказали сайт с фотками оголённых плат картриджей Famicom/NES: http://bootgod.dyndns.org:7777/
На нём можно наглядно убедится, что игры первой волны действительно представляли из себя просто две микросхемы ПЗУ напрямую разведенные дорожками на шины консоли.
Например японский картридж игры первого поколения - Pac-Man выглядел так:

Изображение
Изображение

Ни резистора ни конденсатора лишнего - всё что есть это микросхема ПЗУ в 16Кб с кодом/данными (PRG) разведенная на левую сторону контактов (адресное пространство ЦП) и ПЗУ в 8Кб с тайлами (CHR) разведенная на правую сторону контактов (адресное пространство видеочипа).

А вот картридж с Contra Force (или очень сильно на него похожий) уже требовал маппера и т.к. в японии не выходил, а выходил в Европе и США для NES, то еще содержал чип региональной защиты:

Изображение

ПЗУшки PRG и CHR обе по 128Кб, сверху чип маппера MMC3B через который пропускаются дорожки адресных линий и слева еще видно чип региональной (здесь - европейской, как я понял) защиты.
Плюс еще, как видно, потребовалось еще подпаивать немного рассыпухи для каких то подтяжек или типа того, я тут не спец.

#544
14:10, 5 мар. 2019

=A=L=X=
> Ни резистора ни конденсатора лишнего
лишнего конечно нет, но так-то там конденсаторы есть точно :)

#545
16:11, 5 мар. 2019

SuperInoy

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

#546
16:34, 5 мар. 2019

=A=L=X=
> Имеешь ввиду, что слой подложки в центре образует микроскопический конденсатор
> который там подрисован?
да, и не только там. Изображение это тоже не похоже на случайность и на контактную площадку под СМД не похоже и на площадку для тестирования тоже.

#547
(Правка: 17:45) 17:44, 5 мар. 2019

SuperInoy

Фига. Даже не думал, что настолько мимоходом проходящие мимо друг друга провода на общем фоне таких же могут на что-то влиять. Разве что большой слой в центре довольно таки велик, но ведь и расстояние между "обкладками" велико.

#548
(Правка: 18:49) 18:48, 5 мар. 2019

SuperInoy
> это тоже не похоже на случайность и на контактную площадку под СМД не похоже и
> на площадку для тестирования тоже.

Это банальная перемычка, видимо для выбора одной из нескольких зашитых в ПЗУ игр.

=A=L=X=
> Даже не думал, что настолько мимоходом проходящие мимо друг друга провода на
> общем фоне таких же могут на что-то влиять.

Они и не влияют, просто место предусмотрено, а элемент не установлен. То ли оптимизация, то ли не все партии требуют установки.

#549
(Правка: 19:27) 19:25, 5 мар. 2019

0iStalker
> Они и не влияют, просто место предусмотрено
влияют или нет нужно смотреть даташиты на микрухи. Реально можешь посчитать, вангую что там от 1 до 4пФ есть. Смысл может быть для сглаживания высокочастотных шумов от подобных номиналов.
=A=L=X=
> но ведь и расстояние между "обкладками" велико.
Да, расстояние между обкладками велико, потому вероятнее всего тут это всё же шелкографиярисунок показывающий место установки при других конфигурациях, непонятно правда нафига подводить его непосредственно к контактам в проводящем слое.(оно всё равно вносит свой вклад, но вероятно слишком мелкий)

#550
5:18, 6 мар. 2019

SuperInoy
> это тоже не похоже на случайность и на контактную площадку под СМД не похоже
Это таки смд пады. Эмбеддед конденсаторы разводятся на разных леерах, в этом случае площадки одна над другой:
Изображение
Эмбеддед резисторы - это миандры:
Изображение
А индуктивность на меди делается спиральками:
Изображение
А пады на картинке - обычные SMD. Наверняка просто одна разводка под немного разные микросхемы. Такое часто встречается.

#551
(Правка: 7:58) 7:56, 6 мар. 2019

MrShoor
> Это таки смд пады.

Это перемычки, в зависимости от разводки - подаётся сигнал либо на одну, либо на другую ножки микросхемы (может микросхемы разные, а может таки это позволяет выбрать ROM банки на микросхеме с разными играми, что вполне возможно в целях удешевления, если это не ППЗУ, а масочное ПЗУ)

Изображение
+ Показать

MrShoor
> Эмбеддед резисторы - это миандры:

И это не резисторы, такие штуки рисуют в СВЧ схемах, чтобы уровнять время прохождения сигнала по разным дорожкам.

MrShoor
> А индуктивность на меди делается спиральками:

А это вообще - антенна.

#552
8:24, 6 мар. 2019

0iStalker
> А это вообще - антенна.

Загуглил и выпал в осадок.
Это вот оно: http://www.tavinfo.org/Documents/articles/2009_ATOX_otvety/2009_A… otvety_1.html

С помощью электронной аппаратуры мы устанавливаем на устройства защиты специальные энерго-информационные программы, которые затем заставляют устройства собирать и концентрировать энерго-информационные потоки. Затем, с помощью установленных программ, устройства защиты трансформируют негативные энерго-информационные компоненты в позитивные (безопасные) и переизлучают навстречу приходящему излучению. Таким образом происходит погашение вредного воздействия излучений и создание вокруг человека пространственного защитного экрана и, следовательно, безопасного жизненного пространства.
...
Основу устройства защиты АТОКС составляет печатная плата с электронными элементами: резисторы, светодиоды, конденсатор, плоские катушки индуктивности, микросхема. Все элементы объединены в определенную электрическую схему: ...

#553
9:30, 6 мар. 2019

0iStalker
> И это не резисторы, такие штуки рисуют в СВЧ схемах, чтобы уровнять время
> прохождения сигнала по разным дорожкам.
То, о чем ты говоришь - называется дифпара, да, такие штуки есть. Но они именно выравнивают длину цепи, а на приведенном скриншоте одна трасса явно длиннее другой.
Данный скриншот "ниочем" конечно, потому что более удачного скриншота я найти сходу не смог, но выглядят такие сопротивления примерно так как на скриншоте.

> А это вообще - антенна.
Нет, это именно что индуктивность:
http://www.circuits.dk/calculator_planar_coil_inductor.htm
А антенна дизайнится так, чтобы индуктивности как раз не было:

+ Показать

#554
9:55, 6 мар. 2019

MrShoor
> акие сопротивления примерно так как на скриншоте.
>
>

Имеют сопротивление примерно 0 Ом, поэтому это не сопротивления.  А на скриншоте, очевидно, просто демонстрация возможностей редактора.

MrShoor
> А антенна дизайнится так, чтобы индуктивности как раз не было:


Там настолько мизерные значения, при огромной занимаемой площади, проще поставить SMD  индуктивность. Насчёт антенн,  - вот из билета метро

Изображение
Страницы: 136 37 38 3946 Следующая »
ФлеймФорумЖелезо