Page 1 of 2

ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 01 Nov 2008, 22:14
by Screw
пока домой с работы ехал, прикидывал скорость вывода спрайтов в АТМ2+ режиме. Получается довольно оптимистично. Может кто оспорит/поддержит ?

Общая идея такая:
рассмотрим типичный иннер-луп в спектрумовской игре, вывод спрайта с маской:

ld a,(de): and (hl): inc l: or (hl): inc hl: ld (de), a: inc e

inc hl для того чтобы требовать выравнивание спрайта только на границу двойки, и не требовать обязательного размещения спрайта внутри 256-байтных границ

быстрее этого можно только через стек, прикинем его тоже:

pop bc: ld a, (de): and c: or b: ld (de), a: inc e

во втором случае надо либо запрещать прерывания, либо восстанавливать испорченный адресом перехода спрайт

расходы по тактам:
48 тактов на байт (8 точек) в первом случае
36 тактов на байт (8 точек) во втором

Переход по вертикали, между линиями спрайта, не учитываем, просто отметим что он не бесплатный, и внесёт не менее 10-30% доп. расходов. Так же, для спектрума не возможно выводить менее одного байта, поэтому можно считать, что все спрайты на самом деле шире на 7 точек. Опять же, никто и никогда не делает вывод спрайта "с дырками", поэтому мерять надо вывод всех точек спрайта целиком. Далее, в 48к нету 2-х экранов, поэтому требуется ещё две, очень тяжелые операции: обнулить бек-буффер, и перебросить его в экран. В 48к нет доп. памяти, поэтому спрайты приходится скроллировать вручную, если нужен вывод с точностью более чем в знакоместо. В 128 есть доп. память (в которой можно хранить уже отскролленные спрайты) и есть второй экран. Но из-за того, что они оба включаются в верхней банке, приходится чем-то жертвовать.

Пример: черный ворон. Он не использует 2-х экранов и работает с бек-буффером как обычный спек.

Итого: получаем расходы в самом лучшем случае 36 тактов на 8 точек, плюс лишние точки по горизонтали. В 7-ми случаях из 8 лишних точек будет 8, и в 1ом случае из 8 лишних точек не будет вообще. Для простоты положим, что лишних точек всегда 7

Теперь прикинем вывод спрайта 3х3 знакоместа (24 на 24 точки):
Это 24линии на (24+7) точек. Получаем 744 точки. Или 93 байта. Вывод байта 36 тактов. Итого на спрайт 3348 тактов. А на самом деле ещё и чуть медленее (вспомним про переход по вертикали).

Теперь прикинем вывод графики на АТМ2+:
Основной вывод можно осуществлять с помощью ld (ix+??), reg8
Это 23 такта на 2 точки
Доп. расходы на редкое (порядка 12-16раз на спрайт) изменение ix навскидку приравняем к расходам в спеке на переход к след. линии экрана при отрисовке спрайта. Так же важно, что "дырки" в спрайте рисовать не нужно вообще. Это даёт некислую экономию, которую прикинуть сложно (зависит от спрайта), но думаю не менее 25%. Её не учитываем.

Вернёмся к нашему спрайту 24х24 точки:
доп. точек слева-справа не надо, т.к. 2 точки сразу 1 байт
((24*24)/2)*23
получается 6624 такта

т.е. вывод ВСЕГО ВДВОЕ (50%) тормознее чем на спеке (при том что экран больше в 5.5 раз!!!!) А если учесть экономию на дырках, и то что изменение IX дешевле чем скачки по линиям при выводе ZX-спрайта (просто за счёт того что гораааааздо реже) то реальная скорость вывода будет где-то 70-90% от спектрумовской. И самое главное, из-за менеджера страниц АТМ2+ можно использовать два экрана, т.е. бек буфер, его очистка и перекидывание не нужны!!! А это не менее 2ух прерываний!!! Или почти половина времени, которое ZX игра тратит на кадр (средний FPS в буржуйских играх чуть более 12). При том что буржуйские игры редко более чем 2/3 экрана обновляет, а в АТМ2+ мы таких ограничений не накладываем.

И что в сухом остатке ?
АТМ2+ графика будет примерно эквивалентна по скорости спектрумовской. Навскидку, если выводить без классической переброски бекбуфера вообще (например см. технику вывода в Blade Warrior), то можно сделать фреймовую игру, для 3-5 не очень больших спрайтов, очень жёстко следя за развёрткой. Если спрайтов будет больше, придётся делать честную промежуточную отрисовку. Для количества <=10...15 спрайтов 24х24 ATM2+ будет быстрее (за счёт отсутствия очистки/переноса бекбуфера), потом они сравняются и ATM начнёт отставать. И ведь я считал вывод по технологиям из ЧВ, а это самый быстрый вывод на спеке! Если же вспомнить про классические 48-ые игры (которых подавляющее большинство) - тем надо ещё и ротировать спрайт. Что делает его вывод _ГОРАЗДО_ ДОРОЖЕ АТМовского... А если вспомнить что не нужно делать перекидывание бекбуфера то появляется очень-очень много освободившихся тысяч тактов.

Т.е. АТМ графика будет БЫСТРЕЕ, чем графика фирменных игрушек, использовавших бек-буффер (таких большинство среди качественных, думаю не меньше 80-90%)

Теперь слушаю возражения =)

P.S.: всё вышесказанное по поводу АТМ2+ графики не применимо к Pegtagon SL, Profi и прочим "клонам" (даже к ATM1), т.к. там нет менеджера страниц, и ситуация эквивалентна обычному 128кб спеку (Только что памяти больше). Всего два варианта: либо бек-буфер, либо куча копирований из окна c000-ffff вниз. А у PentagonSL ещё и тормоза при доступе к видео памяти. Очевидно, что там графика будет прилично МЕДЛЕННЕЕ спектрумовской, даже по сравнению с фирменными игрушками. Стало быть размышления о кросс-написании игр сразу под несколько 16ц архитектур в данной теме мне неинтересны, и просьба от них воздержаться.

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 01 Nov 2008, 23:15
by Black_Cat
Screw wrote:А у PentagonSL ещё и тормоза при доступе к видео памяти. Очевидно, что там графика будет прилично МЕДЛЕННЕЕ спектрумовской, даже по сравнению с фирменными игрушками.

С чего это вдруг? Пенты тем и отличались от многих прочих, что имели прозрачный безвейтовый доступ к памяти и были вместе с KAYями самыми быстрыми клонами.
Screw wrote:P.S.: всё вышесказанное по поводу АТМ графики не применимо к Pegtagon SL, Profi и прочим "клонам", т.к. там нет менеджера страниц, и ситуация эквивалентна обычному 128кб спеку

имхо бессмысленно сравнивать Спек с АТМ-2. С таким же успехом его можно сравнивать с омигой или РС. Это совершенно разные компы, а то, что в АТМ-2 есть режим 128, вовсе не значит что он от этого стал клоном Спектрума, он стал АТМом умеющим работать как Спектрум-128 и не более. Притом только как 128, а не как Пентагон-..., или KAY-..., или Scorpion-..., или Profi-... Вот с тормозным оригинальным 128 и можно проводить сравннение smile вот только в режиме 128 никакого преимущества не будет, т.к. лишней памяти нет lol

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 01 Nov 2008, 23:24
by Screw
Black_Cat wrote:А у PentagonSL ещё и тормоза при доступе к видео памяти. Очевидно, что там графика будет прилично МЕДЛЕННЕЕ спектрумовской, даже по сравнению с фирменными игрушками. С чего это вдруг? Пенты тем и отличались от многих прочих, что имели прозрачный безвейтовый доступ к памяти и были вместе с KAYями самыми быстрыми клонами.


АТМ тоже безвейтовый. Так, к слову. Но не пентагонSL. Там режим 16ц реализован "на шару", и вейты только в нём.

Black_Cat wrote:имхо бессмысленно сравнивать Спек с АТМ-2.


Пойми, я сравниваю не для того, чтобы показать у кого "длинее", а только чтобы примерно прикинуть теоретическую производительность графики в играх. Чтобы решить, стоит ли писать игры с динамической графикой, и примерное количество объектов, по сравнению с классическими 48к играм, графику которых мы прекрасно знаем.

Black_Cat wrote:С таким же успехом его можно сравнивать с омигой или РС


Такое сравнение вообще некорректно, т.к. мощности CPU и хардвари для обработки графики находятся на несопоставимом с Z-80 уровне. В случае ATM2 процессор у нас тот же, и "перемолоть" больше данных, чем перемалывает тот же пентагон не получится. Турба несуществанна, прирост в полезных инструкциях порядка 10% (overall 28%). C учётом изначально более короткого кадра (68тыс.т. у АТМ против 72тыс.т у пентагона) то на то и выходит.

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 01 Nov 2008, 23:31
by CHRV
Screw wrote:Пойми, я сравниваю не для того, чтобы показать у кого "длинее".

У БК нет других критериев качества

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 01 Nov 2008, 23:46
by Black_Cat
Screw wrote:я сравниваю не для того, чтобы показать у кого "длинее", а только чтобы примерно прикинуть теоретическую производительность графики в играх.

smile т.е. меряешь в попугаях? интересно сколько в попугаях последний GeForce выдаёт? smile
Screw wrote:Чтобы решить, стоит ли писать игры с динамической графикой

для этого собсно Спектрум ни к чему - эт сугубо АТМовские фишки и проги..
Screw wrote:Там режим 16ц реализован "на шару", и вейты только в нём.

smile там не вейты smile там - полная остановка процессора на экране smile

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 02 Nov 2008, 22:11
by lvd
Screw wrote:Турба несуществанна, прирост в полезных инструкциях порядка 10% (overall 28%).

Несущественна в ОТМах, а в некоторых пентагонах она на некторых полезных инструкциях даёт прирост в 2 раза! =)

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 03 Nov 2008, 14:15
by Screw
lvd wrote:Несущественна в ОТМах, а в некоторых пентагонах она на некторых полезных инструкциях даёт прирост в 2 раза! =)


PentagonSL: Даже если абсолютно все инструкции ускорить чётко вдвое - это наверное только-только покроет остановки проца на видео-памяти, но не более.

Остальные пентагоны: да, турбированный комп отрисует графику через стек и без бек буфера БЫСТРЕЕ. Бек буфер, даже с турбой, всё так же остаётся проблемой.

P.S.: Посмотрел я зинапс, там действительно нет бек буфера. Благодаря очень существенным ограничениям:
1) спрайты никогда не выводятся ближе друг к другу, чем на одно знакоместо (а значит и маска им не нужна)
UPD: посмотрел другие уровни - всё таки выводятся, правда редко и очень ненадолго! Непонятно зачем аффтар сделал забивание чёрными атрибутами мусора, Разве что пересечение спрайтов - специальная, редко выполняющаяся фича. Пример: DarkFusion. Плавность и цветность графики не уступает Zynaps, но аццких чёрных атрибутов по мусору нет!!! И морганий спрайтов тоже нет!

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

Более продвинутый вариант подобной техники есть в игре Blade Warrior (я уже упоминал о ней в первом посте). Там есть задний фон, на который накладывается спрайт. В бек-буфере лежит чистый задний фон. Вывод спрайта происходит так: берём байт из бек буфера, накладываем на него спрайт, выводим байт сразу в экран. Всё! от переброски и очистки бек буфера избавились. Но получили два неприятных артефакта:
1) если спрайт двигать слишком быстро, от него будут оставаться следы. Лечится выводом большего числа байт по горизонтали, чтобы перерисовывать дельту движения.
2) спрайты, так же как и в Zynaps должны не попадать в одно знакоместо (геймплей игры на это и рассчитан)

Моя игра (M.O.A.C.) использует технику из Blade Warrior. С вышеперечисленными артефактами можно ознакомиться в ней.

Игры типа Dizzy даже такую технику не используют, из-за того, что персонаж маленький и один, его можно сразу рисовать в экран, а в начале кадра эту область забирать из бекбуфера. Успеем. И то, в оригинальных иногда мерцает.

Повторюсь: меня интересует быстрая попиксельная динамическая графика с пересечениями спрайтов.
Примеры: Knight Lore, Fairlight, Silk Worm, Scooby&Scrapy Doo, ЧВ, Robocop1, Robocop2, Earthlight, Nebulus, HATE, Potsworth & Co, Satan, TMNT (кстати черепашки - показательный пример, когда совки добавили туда проигрывание оригинальной музыки, отключенное авторами, FPS упал в разы до неиграбельного уровня! Авторы не успели, а совки не осилили!)

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 05 Nov 2008, 15:05
by lvd
Screw wrote:1) спрайты никогда не выводятся ближе друг к другу, чем на одно знакоместо (а значит и маска им не нужна)

Выводятся. Друг на друга они ксорятся.
Screw wrote:Непонятно зачем аффтар сделал забивание чёрными атрибутами мусора,

ЧТОБ ЕГО НЕ СТИРАТЬ!
Screw wrote:Повторюсь: меня интересует быстрая попиксельная динамическая графика с пересечениями спрайтов.

Я рад за тебя. А меня интересует графика типа как в savage. БЫСТРАЯ и ЦВЕТНАЯ, со спрайтами не 24х24.
Но, видимо, тебя интересует твоя графика больше чем меня. Потому предлагаю доказать теорию ДЕЛОМ. =)

UPD: если всё ещё есть желание померяться пиписьками, то надо условия выработать. Например, выводится эн спрайтов, размерами 3х3, фон неподвижный, размер игровой области столько на столько. А то в размышлениях слишком много высосанного из пальца.

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 05 Nov 2008, 17:47
by robat_e
lvd wrote:А меня интересует графика типа как в savage. БЫСТРАЯ и ЦВЕТНАЯ, со спрайтами не 24х24.

И меня!

Re: ATM Games, размышления вслух (графика ATM vs Sinclair, скорость отрисовки спрайтов)

PostPosted: 06 Nov 2008, 03:33
by krb
Screw wrote:Моя игра (M.O.A.C.)

чоза моац? чот немагу найти такую игру