Палитры

Для увеличения количества доступных цветов на экране ZX Spectrum Next поддерживает палитры цветов.

Идентификаторы цветов в Layer 2, Tilemap и Sprites всегда воспринимаются как индексы палитры. Значения цветов в ULA сопоставляются с палитрой как фиксированные индексы, или могут быть восприняты как частичные индексы палитры, если включен режим Enhanced ULA. Номера записей палитры для стандартного режима ULA: 0-7 для стандартных цветов чернил, 8-15 для ЯРКИХ цветов чернил, 16-23 для стандартных цветов бумаги и рамки, и 24-31 для ЯРКИХ цветов бумаги.

При включенном режиме Enhanced ULA, Маска цвета чернил Enhanced ULA ($42) определяет, как конкретный атрибут ULA разбивается на цвета ЧЕРНИЛ и БУМАГИ. Цвета ЧЕРНИЛ отображаются из индекса 0 в палитре, цвета БУМАГИ (и РАМКИ) отображаются из индекса 128, за исключением случая, когда включен режим “полных чернил” (маска чернил = 255), тогда цвет БУМАГИ и РАМКИ берется из Регистра резервного цвета прозрачности ($4A).

Конфигурация палитры может быть выполнена через регистры $40-$44 и $6B. Регистр управления Enhanced ULA ($43) определяет, какая палитра настраивается. Существуют две палитры для Layer 2, Sprites, Tilemap и ULA; какая из двух используется для каждого, выбирается с помощью младших битов Регистра управления Enhanced ULA ($43) и в Регистре управления Tilemap ($6B).

После выбора палитры, Регистр индекса палитры ($40) устанавливает номер записи палитры для настройки; затем вы можете отправить цвет для установки в Регистр значения палитры ($41) или Расширение палитры Enhanced ULA ($44), который затем автоматически увеличивается. $41 используется для отправки 8-битных цветов в формате RRRGGGBB; “отсутствующий” третий бит синего устанавливается в OR между двумя другими. $44 используется для отправки 9-битных цветов в двухбайтовых пакетах; первый отправленный байт должен быть RRRGGGBB, как и в случае с $41, а младший значащий бит второго байта заполняет третий бит синего. Для цвета Layer 2 старший бит во втором байте сигнализирует о “приоритетном” цвете, который заставляет конкретный пиксель Layer 2 отрисовываться поверх всего остального, переопределяя текущий порядок слоев.


Стандартная 256-цветная 8-битная индексированная палитра.


Поскольку Next имеет 3-битный цвет, а современные компьютеры - 8-битный, преобразование между ними всегда приводит к изобретению или отбрасыванию информации. Вот альтернативная 8-битная палитра, которая вычисляется путем линейного масштабирования 3-битных значений (0..7) до 8-битных (0..255) (res=src*255/7):

Альтернативные 8-битные значения rgb