Обновить

Ротозумер: разбор классического демо-эффекта

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели10K
Всего голосов 42: ↑42 и ↓0+50
Комментарии25

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

а на процессорах не было не то что вентиляторов, но даже радиаторов

...

Это примерно как 486DX2 66 MHz.

нас не проведёшь :) радиатор был точно, хотя пропеллер более-менее опционально

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

Мой первый PC 486SX 66MHz был без радиатора и без сокета. На 386-х радиаторов тем более не было обычно (иногда их лепили, но скорее для понтов).

На моём 486dlc радиатора нет

На моём амд дх40 радиатор был, хотя и весьма смешной

А на чуть более мощных четвёрках. AMD уже даже была надпись "Heatsink required". А то и "Heatsink and fan required".

А мой первый был SX2-80 :-) Радиатор был точно, насчет кулера - не помню.

Учитывает ли это процессор? Пентиум да. 486-й и более ранние - нет.

Точнее так: Pentium - да, 486 - нет, 386 - не умел в кеш и предвыборку. :) Проблемы были только на 486.

386-й не имел встроенной кэш-памяти, но она могла быть установлена на материнке (вместе с контроллером Intel82385), тогда механизмы кэша работали. У меня есть живой 386DX, и у него есть кэш на материнке, и prefetching работает.

Да и вроде как 80286 и даже 8086 умели, по такой же схеме.

У 386 был "кэш инструкций" длиной 6 байт. Если вы модифицировали код в пределах 6 байт от pc, процессор этого не видел.

Cpuid тогда не было, и это был один из способов опреденения типа процессора

Что ж, как нам поворачивать текстуру? Когда я был маленький (и бегал в валенках, с кудрявой головой) и пытался программировать графон на Бейсике, то думал, что поворачивать (или как-то модифицировать) нужно координаты точки (пикселя), которую мы рисуем. И да, в других ситуациях так и есть. Но не в случае с растровыми эффектами. Здесь мы должны мыслить как шейдер. Точки мы рисуем подряд, проходя весь экран строку за строкой. А поворачиваем мы точку (координаты точки), которую собираемся прочитать из текстуры.

золото. Сам неоднократно натыкался :)

Буст от перестановки инструкций явно связан с тормозами видеопамяти. Напомню, у вас она работает на 33 мгц, т.е. запись стоит минимум 6 тактов

и какая разница в каком месте эти 6 тактов расходуются? Сумма-то от перестановки слагаемых не меняется :)

STOS работал медленее, чем MOV+ADD, потому что к этому времени разработчики процессоров перестали оптимизировать выполнение инструкций, которые редко использовались компиляторами. REP STOS исключение, потому что она использовалась в стандартных memset.

и потому что MOV и ADD стали гораздо быстрее :)

Если бы компиляторы пользовались инструкцией STOS, то она тоже стала бы быстрее

она и стала быстрее, но на Пентиуме, но это уже другая история...

читал и думал "а когда же таблички синусов" а они прям даже не сразу :)

здесь синус и косинус вычисляются только один раз на кадр. Ну, пусть еще один SIN, если Scale сделать подвижным.
Это для 486 вообще пустяк. Даже исходя из того факта, что ТурбоПаскаль неумеет использовать инструкции 386/387 и не знает про fsin/fcos.

Для порядку я проверил, откомпилировал с поддержкой эмуляции FPU, отключив поддержку сопроцессора. Это сказалось на fps в пределах +-1 кадр/сек :)

Так что городить огород с синусными таблицами в рамках этой статьи я посчитал излишним.

Спасибо большое за статью! Я не программист, но большая часть даже мне оказалась понятной) Прочитал с большим интересом и эти родные опечатки, а не ужасный нейрослоп - так милы глазу))

Спасибо, постараюсь делать опечаток побольше :)

Спасибо за статью! В целом хотелось бы побольше разборов конкретных эффектов. Потому что вот хочется как-то вкатиться, написать интро/демо. Т.е. понятно, вот у нас есть видеопамять, есть оперативная память, есть ассемблер, чтобы всем этим управлять, а дальше что?

А с разбором понятно, можно и самому попробовать

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

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

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

Благодарю за отзыв :)

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

Публикации