Сразу поясняю, что SCF значит "Spectrum Coder Friendly" (или просто Spec-friendly), а APA,
как известно - "All Point Addressable", в вольном переводе "каждая точка своим цветом"
Допустим, имеется "EGA"-видеорежим с линейной адресацией пикселов - то есть в байте два
пиксела, 4 бита на каждый (для режима 8 бит на пиксел рассуждения будут аналогичны). Также,
опять для простоты изложения, подразумевается, что экрани имеет тот же размер 256x192.
Как же можно "помирить" Spec-friendly и APA режимы, причем чтобы они не просто могли
сосуществовать, а еще и пользу друг из друга извлекли. Короче, пока идея такая:
Видеопамять хранит два графических экрана именно в "своем" формате - 4 бита на точку.
Плюс отдельно два комплекта спековских атрибутов и "вентильный" экран - те же 6 кб.
В "чистом" APA-mode все атрибуты имеют значение INK=111, PAPER=000, BRIGHT=1, а при
выборке значения пиксела для отображения на дисплее номер цвета получается по формуле:
color = ((pixel) and (ink)) or ((not pixel) and (paper)),
то есть в данном случае просто значение четырех бит пиксела. Разумеется, значения INK и
PAPER должны тоже расширяться до 4 бит (до 8 для VGA) по "спековским" правилам, то есть
INK расширяется битом BRIGHT, а PAPER - только если ненулевой, иначе нулем (для VGA
варианта 4 старших бита всегда 0). Ну и конечно, в "чистом" APA-mode "вентильный" экран
обнулен, хотя все равно учитывается при выборке пикселов (следовательно, переключать два
APA-экрана можно тем же битом "инверсия вентиля").
Если включен SCF-mode, то атрибуты и байты для "вентильного" экрана так и записываются
в видеопамять, а вот "графические" байты надо "промасштабировать" - то есть из одного
байта получить 4 - каждый исходный бит расширяется в 1111 или 0000 (ясно, что тут встает
вопрос о скорости видеопамяти). Взглянув выше на уже знакомую формулу, понятно, что
все будет отображаться по-прежнему правильно, в "спектрумовском" стиле.
Самое приятное, что оба режима прекрасно можно смешивать на одном экране - то есть делать
SCF-окно, APA-окно, плюс еще "вентильный" экран позволяет смешать произвольной формы
кусками два APA-экрана и/или APA-окна (то бишь иметь подобие APA-спрайтов). А в SCF-mode
можно будет использовать плавный скролл аппаратный (есс-но, желательно, чтобы при этом
учитывался и "сдвиг" атрибутов при расчете формулы) - для фона, прежде всего.
Понятно, что реализации APA-режимов могут быть совершенно разными - например, где-то
выгоднее не хранить значения атрибутов, а при их перезаписи напрямую менять значения
в блоке 8x8 пикселов (кто знает, какие там блиттеры-шмиттеры стоят). Да и скролл
аппаратный разный бывает - или действительно инфа пересылается, или просто сдвигается
"левый верхний угол" закольцованного во все стороны видеобуфера.
Структура памяти может быть не линейная, а битплановая - в этом случае все даже, наверное,
проще, хотя будут свои нюансы и/или ограничения (да и влом уже было это обдумывать, если
честно). Универсальных рецептов дать нельзя - я просто привел небольшой пример, чтобы
показать: никакого антагонизма не существует.
P.S. А про четвертушки я специально ничего не сказал... а то только их все и запомнили.
Но в принципе ничего не мешает добавить их и в последний предложенный вариант видеокарты.



). Да и скролл
Ответить с цитированием
Несложная переделка нужна не затем, чтобы старый