Палитра

Устройство палитры достаточно просто. Каждый момент при выводе точки, с одной из линий считывается 3 байта и выводится в 3 регистра с 3-мя ЦАП-ами на выходе. Таким образом, образуется 3 цвета Red, Greeb & Blue, которые определяют один из 16 млн. возможных цветов.

Какие именно три байта выводить определяется схемой видео-карты. Все три байта выводятся всегда из одной области – с концов линий – адресов #03E0..#03FF. Номер линии соответствуют номеру цвета для 256-ти графического цветного режима или номеру атрибута для текстового и спектрумовского режима. В указанных адресах умещается 8 палитр по 256 цветов, считая по 1kb на каждую палитру. Реально из этого килобайта используется только 768 байт. Каждый четвертый байт никуда не выводится и принципиально схемотехнически не может попасть на регистр ЦАП-а. Четыре из этих восьми палитр используются для графических режимов и оставшиеся четыре для текстовой палитры.

Про палитру в тексте следует сказать отдельно. Атрибут формально задает один цвет из палитры и, соответственно, четыре цвета из четырех палитр. из этих четырех цветов на каждую точку попадает только один. Выбор производится по двум битам – FLASH и биту из регистра сдвига в котором находятся восемь точек, считанные из знакогенератора. Таким образом, для каждого атрибута задается цвет бумаги, цвет символа, цвет мерцания бумаги и цвет мерцания символа. Если, например, цвет мерцания бумаги совпадает цветом бумаги, то мерцания на экране не наблюдается. Аналогично для цвета символа. Подобное решение позволяет любую кодировку цвета для каждого атрибута и разрешить проблему с различиями атрибутов в спектрумовском и IBM-ском вариантах. Просто в момент перехода с одного стандарта на другой в палитру загружаются необходимые данные.

С графической палитрой все просто. Байт точки попадает на адрес линии для конкретной палитры и соответствующий ей цвет попадает на ЦАП-ы. В 16-ти цветном режиме используются 16 младших цветов палитры.

#03E0..#03E2 – графическая палитра 0
#03E4..#03E6 – графическая палитра 1
#03E8..#03EA – графическая палитра 2
#03EC..#03EE – графическая палитра 3
#03F0..#03F2 – текстовая палитра 0 – цвет бумаги
#03F4..#03F6 – текстовая палитра 1 – цвет символа
#03F8..#03FA – текстовая палитра 2 – цвет мерцания бумаги
#03FC..#03FE – текстовая палитра 3 – цвет мерцания символа

Байты расположены в порядке Blue Green Red.