Gigascreen — различия между версиями
Tsl (обсуждение | вклад) |
Tsl (обсуждение | вклад) |
||
Строка 22: | Строка 22: | ||
По альтернативному алгоритму расчета цветов для гигаскрина предполагаются следующие предпосылки: | По альтернативному алгоритму расчета цветов для гигаскрина предполагаются следующие предпосылки: | ||
− | + | * "вклад" каждой из половинок экрана оценивается в 50%, | |
− | + | * соответствующая компонента цвета каждой из половинок равна 66% максимальной интенсивности видео для не-брайта и 100% для брайта. | |
Итоговая формула следующая: | Итоговая формула следующая: | ||
C = C0/3*2 + C0*I0/3 + C1/3*2 + C1*I1/3, где | C = C0/3*2 + C0*I0/3 + C1/3*2 + C1*I1/3, где |
Версия 02:13, 12 января 2012
Gigascreen (также Doublescreen) — программный видеорежим для ZX Spectrum, а также доработка, реализующая его аппаратно. С середины 1990-х годов часто используется в демо и играх.
Видеорежим реализуется путём переключения двух экранных областей или областей атрибутов с началом каждого телевизионного кадра. За счёт инертности зрения цвета в разных экранных областях будут суммироваться. Например, чередование жёлтого цвета в первом изображении и белого во втором, "на глаз" будет выглядеть как мерцающий ярко-жёлтый цвет, являющийся результатом суперпозиции двух цветовых компонент. Это позволяет получить из стандартной 15-цветной палитры 83 цвета и использовать до четырёх цветов в знакоместе:
icol:array[0..82,0..2]of byte{r,g,b}=( (b0,b1,b2),(b0,b2,b1),(b1,b0,b2),(b1,b2,b0),(b2,b0,b1),(b2,b1,b0), (b0,b1,b3),(b0,b3,b1),(b1,b0,b3),(b1,b3,b0),(b3,b0,b1),(b3,b1,b0),{B} (b0,b2,b3),(b0,b3,b2),(b2,b0,b3),(b2,b3,b0),(b3,b0,b2),(b3,b2,b0),{B} (b0,b2,b4),(b0,b4,b2),(b2,b0,b4),(b2,b4,b0),(b4,b0,b2),(b4,b2,b0),{BB} (b1,b2,b3),(b1,b3,b2),(b2,b1,b3),(b2,b3,b1),(b3,b1,b2),(b3,b2,b1),{B} {014,124,234,034,134 нет} (b0,b0,b1),(b0,b1,b0),(b1,b0,b0),(b0,b1,b1),(b1,b0,b1),(b1,b1,b0), (b0,b0,b2),(b0,b2,b0),(b2,b0,b0),(b0,b2,b2),(b2,b0,b2),(b2,b2,b0), (b0,b0,b3),(b0,b3,b0),(b3,b0,b0),(b0,b3,b3),(b3,b0,b3),(b3,b3,b0),{B} (b0,b0,b4),(b0,b4,b0),(b4,b0,b0),(b0,b4,b4),(b4,b0,b4),(b4,b4,b0),{BB} (b1,b1,b2),(b1,b2,b1),(b2,b1,b1),(b1,b2,b2),(b2,b1,b2),(b2,b2,b1), (b1,b1,b3),(b1,b3,b1),(b3,b1,b1),(b1,b3,b3),(b3,b1,b3),(b3,b3,b1),{B} (b2,b2,b3),(b2,b3,b2),(b3,b2,b2),(b2,b3,b3),(b3,b2,b3),(b3,b3,b2),{B} (b2,b2,b4),(b2,b4,b2),(b4,b2,b2),(b2,b4,b4),(b4,b2,b4),(b4,b4,b2),{BB} {14,34 нет} (b0,b0,b0),(b1,b1,b1),(b2,b2,b2),(b3,b3,b3),(b4,b4,b4));
По альтернативному алгоритму расчета цветов для гигаскрина предполагаются следующие предпосылки:
- "вклад" каждой из половинок экрана оценивается в 50%,
- соответствующая компонента цвета каждой из половинок равна 66% максимальной интенсивности видео для не-брайта и 100% для брайта.
Итоговая формула следующая: C = C0/3*2 + C0*I0/3 + C1/3*2 + C1*I1/3, где C - соответствующий цвет (R, G, B), принимающий значения 0 или 1, I - брайт, тоже 0 или 1. Таким образом, мы получаем 102 возможных цвета в режиме гигаскрин.
Для ZX Spectrum 48K использование полноэкранного Gigasreen возможно за счёт обновления атрибутной части экранной области памяти. На ZX Spectrum 128K, в котором есть две экранных области, переключаемый программно изменением одного бита, достаточно раз в прерывание переключать активный экран.
Пониженное мерцание достигается переключением экранов каждую строчку, со сменой фазы каждый кадр, но при регулярной штриховке при этом получается неприятное визуальное расслоение. Компромисс — переключение экранов приблизительно каждые 2 строчки, с фазой, плавно меняющейся от кадра к кадру. При этом изображение "течёт".