Это самая реальная из идей по новоделу ZX без клешинга, что обсуждаются тут в последние месяцы. Потому, что это реализуется просто и практически без вторжений в базовую схему клона ZX. Да и гораздо полезнее для игр, чем вводить 8 битов на цвет одной точки.
Речь идёт о том, чтобы иметь два одновременно отображаемых экрана. Старый экран становится плоскостью заднего плана, а добавленный второй экран становится плоскостью по которой двигаются спрайты, причём без клешинга, хотя цвета на графику в обоих плоскостях задаются на квадрат 8*8.
Второй параллельный экран вводится с той же самой организацией графики и цвета как и оригинальный. Но в этом втором экране имеется ещё один слой, работающий только на запись. Это слой маски. Биты в маске определяют из какой плоскости выводить соответствующую экранную точку. Если бит в 0, то на экран выводится точка из плоскости заднего плана. А если 1, то из плоскости переднего плана. Благодаря этому исчезает клешинг, т.к в одном квадратике 8*8 можно иметь уже не 2 цвета, а 4.
Причём экран маски даже не требуется включать в адресное пространство. Используется идея А.Волкова по автозаписи в другую плоскость из специального регистра маски при выполнении записи в экранное ОЗУ графики.
Тогда для того, чтобы вывести один байт спрайта, сначала в регистр маски записывается маска, которая содержит единицы в битах соответствующих телу спрайта. А затем сама графика записывается в экранный буфер графики ZX-Spectrum, и при этом, маска автоматически переписывается из регистра в плоскость маски по нужному адресу.
Т.о требуется переключать две экранные страницы в окне размером 8 кб с адреса 4000. Делая доступным в этом окне, то плоскость заднего плана, то плоскость переднего плана. А архитектура расширяется всего на 2 порта на вывод - порт маски и однобитовый порт переключения 2-х плоскостей экрана.
Кстати, если есть фон, то маски для спрайтов в игре уже есть, только их обслуживать приходится программно, т.е читать содержимое экрана и накладывать на него спрайт, что гораздо медленнее, чем просто кинуть маску в регистр маски. Т.о введение аппаратной маски перекладывает задачу маскирования при выводе спрайтов на аппаратуру, что упрощает программирование и ускоряет.
Кроме того, можно использовать маску не как средство раскраски спрайтов без клешинга, а как средство выбрать биты, в которых нужны два других цвета. Тогда спрайт выводится на обе плоскости, что позволяет на цветном фоне без графики двигать 3-х цветный спрайт.
Интересно, что коммутация режимов не нужна, - чтобы получить полный оригинал ZX по экрану, достаточно обнулить регистр цвета, что и делается по сбросу.
Если задача только борьбы с клешингом, то эту же идею можно существенно упростить. Вводим только плоскость маски и второй буфер атрибутов цвета. Тогда работать с этой плоскостью надо только в случае когда возникает клешинг, при этом только цвета спрайта берутся из второй плоскости, а графика остаётся той же.
Это легко сделать, но не особо нужно. Таких игр для Spectrum-48К нет. Для борьбы с мерцанием программисты успевают выводить на экран во время гашения. Если поднять скорость Z80, то успеют тем более.
Вряд-ли это необходимо, а при переделке ZX-игр, чтобы избавить их от клешинга, даже вредно.
Не требуется, т.к при нужде можно поиметь 4 цвета точек на знакоместо, а при переделке ZX-игр, чтобы избавить их от клешинга, даже вредно. Речь же именно об игровом компьютере, а возможностей цвета ZX хватало. Мешал только клешинг.
Зачем усложнять? Проблему быстрого сдвига экрана решает удвоение клока Z80, что намного разумнее, чем вводить кучу сумматоров и усложнять себе программирование. Даже без всяких наворотов получится много деталей, зачем же ещё усложнять ради одной игры леталки-стрелялки, которая скорее всего и не появится.
Главное, чтобы он остался простым и 100% совместимым.





Ответить с цитированием