EGA и быстрая видеокарта это взаимоисключающие параграфы.
EGA и быстрая видеокарта это взаимоисключающие параграфы.
V6Z80P - Back for Good
В ходе написания примера работы с видеокартой уточняются названия команд и т.п. Также оказалось удобнее по одному адресу записывать номер команды, а по другому - параметр. Потом FPGA сможет записывать оба байта одним словом в буфер FIFO.
Скоро доработаю пример от явных ошибок. Надо будет оценить скорость формирования одного экрана на реальном примере.
Последний раз редактировалось zx-kit; 28.06.2013 в 17:09.
"L-256"
Отписался от топика. Во избежание.
Добавил ссылку на книгу в первый пост - кому-нибудь пригодится.
Обновил команды для связи с видеокартой. Добавил ссылку в первый пост.
Дописал пример скроллинга сразу для экрана 320х240 точек 256 цветов. Добавил ссылку на пример в первый пост. Теперь надо подсчитать скорость выполнения одного обновления экрана с учетом процедуры скроллинга. Кто умеет быстро считать такты в программах ?
"L-256"
V6Z80P - Back for Good
То есть копию карты загружать в видеокарту в виде таблицы с номерами спрайтов ?
Вроде тогда будет все хорошо, но игры будут однообразными с плавным, но ОДНОВРЕМЕННЫМ движением ВСЕГО экрана.
А программно у нас будет свобода выбора что, куда и с какой скоростью двигать или не двигать !
Мы можем написать для каждого участка свой алгоритм и шаг движения фона.
Вывел формулу для ориентировочного подсчета времени выполнения примера:
T=(NX+1)*(NY*115+300)+700,
где T - общее кол-во тактов Z80 на отрисовку фона,
NX - число спрайтов по-горизонтали
NY - число спрайтов по-вертикали.
Для режима 256х192 и спрайтов 16х16 T=17*(12*115+300)+700=29260 тактов
Для режима 320х240 и спрайтов 16х16 T=21*(15*115+300)+700=43225 тактов
В одном кадре 312*224=69888 тактов Z80.
Много это или мало? Программа отображения фона написана универсальной с произвольными размерами спрайтов. Ее можно оптимизировать по скорости, особенно для режима 256x192 точек. Кроме этого, мало в каких играх используется скроллинг всего экрана - есть еще и статичные участки.
Еще один аргумент в пользу однослойного строения экрана. Если делать второй слой для подвижных мелких объектов, то для их движения нужно будет сохранять координаты и размеры их местоположения на экране и каждый раз стирать их на старом месте. Только потом изображать на новом. А это требует дополнительного времени. Если же мы каждый кадр фон отрисовываем заново - он автоматически стирает эти мелкие объекты на старом месте. Останется только после отрисовки фона изобразить их поверх фона на новом месте.
Последний раз редактировалось zx-kit; 29.06.2013 в 16:44.
"L-256"
Да.
2 байта на тайл (спрайт).
Неверно.
Никто ведь не заставляет программера юзать именно встроенную функцию построения тайловой карты !
Если чел хочет, что-либо иное, пожайлуйста, пусть составляет фон из обычных спрайтов КАК ему угодно (используя ваш же асм пример, как заготовку). Но это будет (не)много медленее, чем юзать встроенную ф-цию.
Т.е. мы хотим предоставить _быстрый_ типовой вариант построения тайловой карты, дальше уже сам кодер пусть решает, использовать его или нет.
---------- Post added at 15:59 ---------- Previous post was at 15:47 ----------
Вот я и подумам про необходимость "быстрой команды ПЛИС"...
---------- Post added at 16:04 ---------- Previous post was at 15:59 ----------
Это личное мнение.
Думаю, что нужно рассчитывать именно на скролл всего экрана,
ведь блитер будет позволять по скорости...
Последний раз редактировалось Valen; 29.06.2013 в 17:07.
V6Z80P - Back for Good
Если процедуру вывода столбика спрайтов развернуть из цикла в последовательность прямым указанием координат Y, то формула изменится:
Cтарая формула:
T=(NX+1)*(NY*115+300)+700,
где T - общее кол-во тактов Z80 на отрисовку фона,
NX - число спрайтов по-горизонтали
NY - число спрайтов по-вертикали.
Для режима 256х192 и спрайтов 16х16 T=17*(12*115+300)+700=29260 тактов
Для режима 320х240 и спрайтов 16х16 T=21*(15*115+300)+700=43225 тактов
В одном кадре 312*224=69888 тактов Z80.
Формула с первым ускорением:
T=(NX+1)*(NY*87+300)+700,
Для режима 256х192 и спрайтов 16х16 T=17*(12*87+300)+700=23548 тактов
Для режима 320х240 и спрайтов 16х16 T=21*(15*87+300)+700=34405 тактов
Следующим шагом может быть автоинкремент координат по X или Y по размерам спрайта.
При автоинкременте по Y формула будет такой:
T=(NX+1)*(NY*49+338)+700
Для режима 256х192 и спрайтов 16х16 T=17*(12*49+338)+700=16442 тактов
Для режима 320х240 и спрайтов 16х16 T=21*(15*49+338)+700=23233 тактов
Последний раз редактировалось zx-kit; 29.06.2013 в 18:06.
"L-256"
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)