Обновить

Remoded: разбираем демо-эффекты (часть 1)

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели12K
Всего голосов 30: ↑30 и ↓0+39
Комментарии26

Комментарии 26

Только не plan, а plane. План это что-то другое.

В данном случае изображение лежит в 4 банках памяти для ускорения вывода данных в ЦАПы. И в режиме 13h в том числе. Просто железо само переключает банки на основе 2 младших битов адреса (chain-4).

спасибо, учту :)

Демка норм, понравилась, есть художественная составляющая.

А вот это:

А первое место выиграло демо от группы Otomata Labs, внимание: под Atari 2600 VCS. Саму эту демку можно посмотреть тут: https://www.pouet.net/prod.php?which=105918

вообще - нет. Впечатление, что "эффекты" придумывал AI с целью минимизации места. Даже если они уместили демку в 128 байт (я правильно понял?) - туфта безыдейная.

128 байт - это столько оперативки у Atari 2600. Сама демка 32кб. Ну а на счет впечатления... Тут, чтобы оценить, надо быть немножко фанатом 8-битных платформ, и хотя бы отдаленно представлять возможности платформы :)
На всякий случай, это вот такая штуковина 1977-го года:

А я - хто?! вот и оцениваю:

Atari 2600 - круть, демка - фуфло, 1-е место - куплено! :)

PS На 128 байтах этот джойстик могли запрограммировать только на вибрацию :)

А вы не могли бы показать демку под 2600, которая не является "туфтой безыдейной".

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

Еще одним важным преимуществом Mode X/Y является возможность быстрого копирования или заполнения видеопамяти - 4 пиксела за одну байтовую операцию.

Это будет рассмотрено в следующей статье, при разборе эффектов, где эта особенность используется. Так-то это приемущество не однозначное ) Для 8-битной ISA-шины и 8086-80286 - бесспорно преимущество. Для 386-го и 16-битной ISA, или VLB или PCI - уже не так однозначно, ведь 4 пикселя за одну операцию (32-битную) можно и в обычном VGA-режиме нарисовать. Но извлечь из этого пользу все равно можно.

на оригинальном vga 32-битная запись в режиме 13h будет значительно медленнее

не знаю, что такое "оригинальный VGA" в данному случае. Но вообще-то mode-x работает медленнее сам по себе. Не важно, 32-битная запись или нет. Если сравнивать одно и тоже при включеном обычном 13h режиме vs modex, то от 20% до 50% падение скорости записи (зависит от видеокарты). Поэтому и говорю, что не однозначно. Зависит от того - что мы делаем. Залить одним цветом прямоугольник? Ну, в mode-x это быстрее, так как мы же можем и в нем 32-битной записью пользоваться, и будет уже 16 пикселей за одну операцию. Правда одного цвета.
А вот если текстурированный полигон, то...

оригинальный vga - 8 битное решение от ibm. пользоваться 16 битными или 32битными операциями в планарном режиме нельзя на любой видеоплате... ок, понял что ты имел в виду сплошной цвет, так работает.

Я поэтому и написал "Для 8-битной ISA-шины и 8086-80286 - бесспорно преимущество.".

А на счет 16-32 битными "нельзя на любой видеоплате" - это не так. Еще как можно. Я бы не писал, если бы я сам так не делал. Вы возможно путаете с конкретно механизмом латчей, например копированием VRAM to VRAM по четыре пикселя за байтовую операцию чтения/записи. Это да, латчи 8-битные. Но просто записывать в видеопамять 16/32 битной операцией можно, результат будет такой же как от последовательной побайтовой записи.

По поводу защелок - я дописал в конце, если заливать одним цветом - то работает, если разными - все зальется самым старшим байтом из 4ех. А насчет шины - не совсем так - неважно какая шина, важно что оригинальный vga - 8битный даже для 32битных ps/2, не важно какая шина, если сам адаптер - 8битный.

ну, ктож ставил 8-битную VGA-карту на 386 или 486-й? Это было бы узким местом в системе.

задай этот вопрос компании IBM:) vga появился как встроенный на материнскую плату адаптер для компьютеров ps/2 (в том числе на процессоре 386), позже вышел как внешний адаптер под isa и mca. на 386\486 вообще мало смысла использовать x-mode, есть же vbe и другие плюшки. фишка x-mode что он работает на оригинальном vga и его древних клонах.

ну, статью вы конечно полностью читать не стали :)

Нет, mode-x на 386 и 486-м был смысл использовать. И использовался. В том числе в играх. На 386-м полноэкранный скроллинг с 60 FPS софтварным методом сделать нельзя, а с mode-x и аппаратным скролом можно. Уже не говоря о скроллинге при разрешении 320х480 (или 360х480) как в Пинболах. Даже 486DX2-100Mhz не вывозит full-rate перерисовку экрана в таком разрешении. Алсо, даже Doom юзал modex.

я конечно утрировал. но все же его использовали в первую очередь из-за совместимости. аппаратный скролл вполне себе возможен и в svga режимах, но там проблемы с совместимостью, особенно в поддержке низких разрешений. Doom использовал mode Y :) по вполне очевидным причинам:)

ну, обычно modex-ом называют любой VGA-планарный режим. Просто Абраш описал режим 320х240 и назвал его mode-x, а потом кто-то сделал 320х200 и сказал, что это mode-y. Но в последствии редко кто так конкретизирует. Там тогда для каждого разрешения, которых пару десятков наберется надо букву менять?

А по каким очевидным причинам в Doom он использовался?

А почему речь вообще про Doom пошла? Был ведь wolfenstein3D, тоже в mode Y. Причины - в 13H игра была бы заметно медленнее, двойная\тройная буферизация были бы невозможны. В Doom - причины те же. mode Y выбран вместо mode X также из-за скорости - меньше пикселей. Также в Doom это позволило сделать режим низкой детализации - ускорение не только из-за того, что движку нужно считать 160 лучей вместо 320, но и в том, что пиксели двойной ширины записываются одним обращением в видеопамять... А еще в пользу mode Y против mode X - пишут, что художники работали в Deluxe Paint в режиме 13H и было бы неудобно, если бы в самой игре пропорции пикселя были бы другие.

речь про Doom пошла, потому что вы сказали, что modex для 386/486 не актуален уже был. Ну а Doom собственно только на 486-м и работал более менее сносно. Хотя некоторые и на 386-м играли.

Еще раз: говоря "mode-x" я подразумеваю любой планарный режим VGA, а уж Y, там или Q, это вопрос как мне кажется вторичный.

Так вот. Как вы правильно подметили - аппаратный бэкбуфер, как и возможность понизить детализацию удвоив или учетверив пиксели также за счет аппаратной фичи, были необходимы и Wolf3d, и Doom. Чем собственно и опровергли свое раннее утверждение о малом смысле использования x-mode на 386/486.

я же сказал, что утрировал. так-то мой первый пост был как раз в защиту фичи x-mode :) я больше имел в виду не столько 386\486, сколько svga+vbe. ну и мне кажется это все-таки разные эпохи, и wolf и doom независимо от процессора оптимизировали под оригинальный vga, поэтому планарный режим - единственный вариант. В том же Heretic через год после Doom - решили сделать уже по-другому. Лучший подход был в Duke Nukem 3D - там можно было выбрать и 13H и modeX и VBE даже для 320х200, что иногда позволяло добиться хорошего прироста.
P.S. Ты так пишешь, как будто у нас тобой какой-то серьезный спор. Я просто хотел дополнить, что запись 4 байтов за раз - тоже важная фича x-mode. все что я писал - не спора ради, а для более полной информации.

Ну, а чем не серьёзный спор? :) Вон, товарищ хочет нас на железо уровня 90-х пересадить (всерьёз) https://habr.com/ru/articles/1027184/

8-битного z-буфера, говорит, хватит на всех!

Так может и modex снова станет актуальным? :)

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

  ок, понял что ты имел в виду сплошной цвет, так работает.

ну не обязательно сплошной. Если например в EAX будет значение 04030201h, и маска установлена в 01 (запись в нулевой план) и мы сделаем

mov A000:0, eax

то оно так и запишется, как если бы мы сделали
mov A000:0, 1 (пиксель 0)
mov A000:1, 2 (пиксель 4)
mov A000:2, 3 (пиксель 8)
mov A000:3, 4 (пиксель 12).

В статье в части blur как раз и описывается это, что буфер я копирую в видеопамять 32-битной операцией.

Я имел в виду копирование внутри видеопамяти, тогда из-за перезаписи защелок в них остается только старший байт

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации