Да, стало фастер . Попробую скрестить это с Медногоговым, поглядеть, насколько просадит фпс, и главное - насколько неровно будет играть.
Да, шаг перемещения, думаю, будем уменьшать. Но до этого - возможно выложу эту более быструю версию. Только вот погляжу, как оно будет с Медноноговым, или без.
Development update:
Сделал вариант по Медноногову и с моими ускорениями: тайлмап читается режимом квазидиска "как ОЗУ", тайлы - режимом "как стек" одновременно, что позволяет не переключать режим на каждый тайл, и даёт прибавку к скорости в 3 тайла на вьюпорт. Вывод музыки хромает как секс со старой бабушкой, глотая прерывания в многочисленных местах, где происходят переключения банков и переустановки стеков (прерывания там запрещены). Правда, весь передний план пока тоже выводится при запрещённых прерываниях, так что ближайшая задача - напустить Медноногова и на этот код. Поглядим, что можно выжать из этого. Если будет хотя бы сносно, выложу оба варианта на обозрение публики. Два варианта развития кода мне не потянуть, будем голосовать, или что-то в этом роде.
Зато эха снова оживает, и это приятно. ivagor проводит чудовищные эксперименты с ШИМом, которые можно производить "только при разрешении соответствующих органов" (с) Булгаков. Прикольно, если ему удастся запулить "Электричество" с лучшим качеством, и меньшим размером . Сейчас - 30 секунд саундтрека в 60 с хвостиком килобайт на частоте дискретизации 9КHz двухбитовой DAC.
PPC, а ты не думал о переносе задач, требующих запрета прерываний, в обработчик?
ivagor, думал, но это потребует солидных переделок там и сям. Сейчас пытаюсь оценить объём и количество требуемых повреждений .
На самом деле, мне ужасно хочется начать субтайловый (байтный) режим. Там тоже некисло надо рихтовать. Если тотальный Медноногов выльется в несколько недель работы напильником, отложу на потом. На обозрение, выложу 2 версии, по Медноногову - что смогу пока. Это всё - если за эти выходные успею с минимальными переделками.
В первый пост выложен новый альфа-релиз, версия 0.59am.
В релизе, как и обещал, две исполняемых версии кода.
Файл robotzDI.com - это фактически старый вариант программы, бегущий с запрещёнными прерываниями, но с незначительными изменениями в сторону ускорения рендеринга. Выложен для сравнения, и не используется по умолчанию.
Файл robotz.com - это практически переписанный вариант Роботов. Исполняется, в основном, с разрешёнными прерываниями по методе Медноногова (спасибо jerri за идею. Процедуру обработчика прерывания при рендеринге, предложенную в этой ветке выше, пришлось серьёзно модифицировать для учёта особенностей чисто Векторовской bank-switching архитектуры. Также пришлось поработать и над загружаемыми драйверами, обеспечив их прозрачность в смысле выбранного в данный момент режима доступа к квазидиску, контекста (вызов изнутри video-ISR или снаружи) и совместимости с версией, бегущей с разрешёнными прерываниями. Новые драйверы подойдут и к старым версиям кода, скажем, 0.58.
Задача полностью избавиться от запрещения прерываний в этой версии не ставилась так как это бы потребовало серьёзных изменений форматов данных и релокации этих данных в банках квазидиска. Прерывания запрещаются, в основном, из-за необходимости одновременного доступа к более, чем одному банку в режиме доступа как стек и как память соответственно из-за соответствующего размещения данных (тайлмапы, карты уровней, драйверы звука, звуковые дорожки и т.п.). Поэтому, будет наблюдаться некоторое "хромание" звуковой картины, но могу Вас заверить, это хромание на порядки слабее, чем пару недель назад, когда я просто влепил обработчики по Медноногову в имеющийся код бэйс. В общем-то объём оптимизаций для устранения хромоты проведён нешуточный (у кого есть IDA, может в этом легко убедиться).
Новую версию, кроме того, что она сообщает о себе как 0.59M вместо 0.59a, очень просто отличить, скажем, в эмуляторе Virtual Vector, который позволяет изменять тактовую частоту "на лету". В старой версии, при таком изменении, необходимо выйти в основное меню, и вернуться в игру для пересчёта коэффициентов задержки саунд-трека. В новой версии, изменение тактовой частоты на лету, не изменит темпа воспроизведения музыки и звуковых эффектов.
Обе версии в данном релизе бегут быстрее, чем предыдущая версия 0.58 (отчего - смотрите выше по ветке). Мне сдаётся, что версия по Медноногову бежит чуть быстрее, чем с запрещёнными прерываниями. По крайней мере, по вычислениям, она рендерит задний план на примерно 4000 тактов быстрее.
Как я и предполагал, 2 версии кода значительно различаются друг от друга, и поддерживать обе будет выше моих сил. Кого интересует, предлагаю высказывать своё мнение, какую поддерживать далее а также pros и cons с Вашей точки зрения. Своё мнение я не скажу, дабы опрос был нейтральным. Скажу только, что в версии с запрещёнными прерываниями, звуковая дорожка пока более стабильна, но эта стабильность зависит от количества спрайтов на экране. В версии по Медноногову, стабильность дорожки также пока зависит от количества спрайтов (так как доступ к ним требует переключения банков), но в теории, она более стабильна в будущем.
В общем, зацените, и высказывайте свои соображения.
Как мне показалось в версии с "разрешенными прерываниями" музыка играет в своем нормальном ритме местами "подтормаживая" и субъективно показалось что рендеринг идет немного быстрей и игра кажется как бы более живой. в версии DI музыка постоянно в каком то заторможеном состоянии (видимо из за стабильных пропусков прерывания) что придает ощущение тормознутости игры несмотря на более равномерный темп музыки. В общем я за новый вариант Думаю со временем его удасться еще допилить в лучшую сторону.
Здесь можно скачать актуальные версии Virtual Vector (VV)
В общем, после некоторых очень слабых колебаний, я решил поддерживать вариант с разрешёнными прерываниями.
Пока думал над тем, как сделать bank switching без запрещения прерываний, рихтовал версию 0.59M, выложенную в первом посте. Удалось и ускорить, и снизить звуковую хромоту. Во вложении-только исполняемый файл с рихтовками. Скопируйте его прямо в .fdd образ диска версии 0.59, и всё должно работать.
Robotz! Changelog
------------------
v. 0.60a 12.09.2015
------------------
Mini-upgrade, выкладывается только исполняемый файл robotz.com для замены предыдущей версии 0.59.
Изменено:
1. Принято решение поддерживать только вариант с разрешёнными прерываниями по методе Медноногова.
2. Ускорен рендеринг заднего плана и оверлеев
3. Уменьшено время нахождения в состоянии с запрещёнными прерываниями вне ISR, вызванное переключением банков.
На самом деле, уже найден алгоритм переключения, позволяющий полностью отказаться от запрещения прерываний при переключении банков. Но пока-как есть.
Убрано:
1. Текстовый драйвер для вывода сплошного текста 8xN пикселов в низком разрешении.
Вместо него во всех случаях используется драйвер, поддерживающий наложение масок на текст
Пофикшено:
1. Баг в текстовом драйвере 8xN пикселов с поддержкой масок.
При отключении масок и запрещении видеоплоскости 0x8000-0x9FFF, cплошной текст не выводился на экран.
Последний раз редактировалось PPC; 08.03.2016 в 13:43. Причина: Удалил вложение
Месяца с 3 назад обнаружил, что версия 0.60a из предыдущего поста может и будет крашиться рано или поздно при определённых условиях. Никто и не заметил . Пофиксил этот крэш, но выложить руки никак не доходили.
Robotz! Changelog
------------------
v. 0.61a 03.08.2016
------------------
Mini-upgrade, выкладывается только исполняемый файл robotz.com для замены в предыдущей версии 0.60
Добавлено:
1. Счётчик кадров в панели Instant Status
Пофикшено:
1. Редкий и гадкий крэш, связанный с переключением банков квазидиска во время отрисовки оверлеев
Последний раз редактировалось PPC; 02.01.2017 в 10:50. Причина: Удалил устаревшую версию
В первом посте выложена версия 0.62a c cубтайловым рендерером (разрешение в пол тайла) использующая алгоритм УШИ.
Клавиша <Shift> в игре - режим бега.
Код рендерера теперь выглядит как хорошая китайская головоломка.
Всех с Наступающим Новым Годом! :
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)