Да уж, теме пять лет, а результата ноль. Изложу свое видение ситуации, у меня оно слегка иное.
Сперва конкретный ответ: на исходном Спектруме никогда не будет антиклешинга, это заложено аппаратно. Чтобы его убрать, нужен паяльник (изменения схемы).
Неа. Есть варианты даже со слабой динамикой типа РУ5-РУ7, самый очевидный - нарастить битность. То бишь память идет бутербродом, как делали в наших клонах 128-го,
только читается (видеоданные) одновременно, а не попеременно. Два байта - уже хорошо, если очень извратиться, можно хоть четыре слоя поставить.
Только практического смысла в этом мало, проще реально использовать статику с хорошим быстродействием. Там времянки до 20нс и ниже есть. Либо "бутер" из двух статик.
Таким макаром можно до 16млн цветов дойти, только смысл от них на нашем слабом Z80...
Насколько понял, предлагался кастрированный вариант антиклешинга. То есть он как бы остается, просто впечатывается спрайт по маске.
Соответственно, убирается клешинг на стыке спрайта и фона, но не на самом фоне/спрайте. Вариант, но лишь половинчатый.
Насчет реализации маски можно поступить куда проще, но я свое время, размышляя над улучшением графики Спектрума, хотел сделать иначе.
Тут пущусь в легкий флуд, но для понимания нюансов идеи необходимо описать мой вариант графического режима.
В изначальном варианте я подумывал сделать двухрядное чтение видеопамяти, что уже дает разом 2 байта на такт.
Попутно принимаем турбо-режим как стандарт для расширенной графики, причем разогнаны и проц, и память. Это уже вчетверо больший объем чтения, чем сейчас.
Стандартный Спектрум читает видео через такт, байт данных + байт атрибутов. На восемь точек получается 2 байта, или 2 бита на один пиксель.
Подходим к самому важному: можно отойти, наконец, от схемы "пиксели отдельно, атрибуты отдельно" и кодировать каждый пиксель своим набором бит.
Соответственно, стандартный комп может выдавать до 4х цветов на пиксель с минимальными переделками схемы, но цвета будут жестко заданы, это стандартные RGB+черный.
Именно такой видеорежим реализован, например, в БК-0010. Там же не просто от балды решили сделать только 4 цвета, да еще синий+зеленый+красный.
Все исходило из возможностей железа, тех самых двух бит на пиксель (развертка БК в целом совпадает со Спектрумовской, частоты чтения видеопамяти те же).
Если же мы наращиваем битность (2 ряда микрух) - уже имеем 4 бита на пиксел, 16 цветов. Турбо-вариант памяти - 8 бит, 256 цветов. Каждый пиксел 256 цветов, Карл.
Однако тут возникает другая проблема. Путем несложной математики получаем размер экрана 256х192=48 килобайт на экран (при 256/пиксел) либо 24 к (16/пиксел).
Для немощного Z80 это слишком накладно, извращения со страницами памяти тут помогут лишь частично. В БК ровно та же проблема: экран размером 32 килобайта,
потому что там разрешение 256х256 при 4х цветах на точку. Для слабых процов и, что тоже важно, 16-битной шины адреса это приговор.
Да, можно разбить даже экран в 48 кило по страницам. Выходит вполне удобно, по 16 кило, или треть экрана в страницу. Но усложняется работа с графикой на стыке третей.
Впрочем, для несложных графических построений такое решение бы вполне устроило. Для выплюнуть картинку и любоваться ею - вообще отличный вариант.
Теперь вернемся к маскам. Если кодировать каждый пиксел своим цветом, резко вырастет потребление памяти как экраном, так и спрайтами, в разы вырастет.
Но речь сейчас именно о реализации маски и, по возможности, быстрой реализации. Ну, быстрого вывода с маской. Тут можно сделать довольно просто.
Под маску выделяется отдельный цвет из возможного набора (16/256 в нашем случае, да хоть 16 млн, не суть важно). То есть, теряя один цвет, мы получаем маску.
Как это реализовать железно? Довольно просто, применяя логику XOR. Даже на рассыпухе получится не очень громоздко, буквально три-четыре корпуса.
При таком способе не нужно отдельно хранить маску, она уже содержится в спрайте, как некий аналог альфа-канала в текстурах "нормальных" компьютеров.
Главное же преимущество такого подхода - процедуре вывода не нужно париться с маской. Она просто кидает данные, а железо отсекает их по маске.
То есть мы просто выводим спрайт, как массив данных, путем пересылки. Байты маски игнорируются и не записываются в память.
Но все это лишь вольные хотелки на заданную тему. Реализовывать их некому. Даже если сделать рабочий экземпляр "чисто для себя", дальше эмуляторов он не пойдет.
А эмуляторы, извините за сравнение, это как резиновая женщина. Когда хочешь, сколько хочешь и что хочешь, но с живой так не получится.
Поэтому ответ на главный вопрос дан совершенно правильно:





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