Gigascreen — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
 
(не показано 12 промежуточных версии 3 участников)
Строка 1: Строка 1:
''Gigascreen'' (или так же ''Doublescreen'') - это особый режим вывода изображения на телевизор/монитор, к которому подключен [[ZX Spectrum]], а также аппаратная доработка, делающая это автоматически.
+
'''Gigascreen''' — программный видеорежим для [[ZX Spectrum]], а также доработка, реализующая его аппаратно. С 1990-х годов используется в [[демо]]. Не следует путать с простым мерцанием двух экранов (2-color, Doublescreen), которое использовалось и раньше.
  
Вывод изображения на экран телевизора/монитора происходит с частотой 50 Гц. К началу развёртки привязан сигнала маскируемого прерывания.
+
Видеорежим реализуется путём переключения двух экранных областей с началом каждого телевизионного кадра и каждой телевизионной строки. За счёт инертности зрения цвета в разных экранных областях будут суммироваться. Например, чередование жёлтого цвета в первом изображении и белого во втором, "на глаз" будет выглядеть как мерцающий ярко-жёлтый цвет, являющийся результатом суперпозиции двух цветовых компонент. Это позволяет получить из [[256x192|стандартной]] 15-цветной палитры 102 цвета (83 цвета при равенстве яркий+чёрный = два неярких) и использовать до четырёх цветов в знакоместе.
Если связать каждое чётное прерывание с одним изображанием, и в кадре, на котором пришло это прерывание, выводить это изображение, а каждое нечётное прерывание с другим, то получится эффект ''Gigascreen''.
+
  
Суть его в следующем - инертность восприятия глазом изображения при чередовании, например, жёлтого в первом изображении и белого во втором, приведёт к тому, что "на глаз" будет заметно не чередование этих цветов, а ярко-жёлтый цвет, являющийся результатом суперпозиции двух цветовых компонент.
+
На [[ZX Spectrum 128K]], в котором есть две экранных области, переключаемый программно изменением одного бита, достаточно раз в строку (в экранной области) переключать активный экран.
  
Это позволяет использовать вместо палитры из 15 цветов (смотрите [[256x192]]) палитру из 83 цветов:
+
Пониженное мерцание достигается переключением экранов каждую строчку, со сменой фазы каждый кадр, но при регулярной штриховке при этом получается неприятное визуальное расслоение. (Компромисс — переключение экранов приблизительно каждые 2 строчки, с фазой, плавно меняющейся от кадра к кадру. При этом изображение "течёт".)
  
icol:array[0..82,0..2]of byte{r,g,b}=(
+
По-видимому, впервые мерцание двух экранов с чередованием строк использовалось в демо [[Crazy Love]] ([[FunTop]] 98). Было поддержано в редакторе DoubleScreen Editor (DBS).
(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));
+
  
Для [[ZX Spectrum]] 48K использование полноэкранного Gigasreen возможно за счёт обновления атрибутной части экранной области памяти. Для [[ZX Spectrum]] 128K, в котором есть второй экран, переключаемый программно, использование Gigascreen очень просто - достаточно установить оба изображения в первую и вторую экранную область памяти, и раз в прерывание переключать активный экран с первого на второй и наоборот.
+
Оригинальная железная доработка опубликована [[SchemeMan]]'ом в 1998 году. Включалась 4-м битом порта #[[eff7]]. Поддержана в газете [[IzhNews]].
  
Пониженное мерцание достигается переключением экранов каждую строчку (со сменой фазы каждый кадр), но при регулярной штриховке при этом получается неприятное расслоение. Компромисс - переключение экранов приблизительно каждые 2 строчки, с фазой, плавно меняющейся от кадра к кадру. При этом изображение "течёт".
+
Для расчета цветов гигаскрина берутся следующие предпосылки:
 +
* "вклад" каждой из половинок экрана оценивается в 50%,
 +
* соответствующая компонента цвета каждой из половинок равна 66% (число условное) максимальной интенсивности видео для не-брайта и 100% для брайта.
 +
Итоговая формула следующая:
  
Эффект Gigascreen часто используется в [[демо]] и играх.
+
C = (C0/3*2 + C0*I0/3 + C1/3*2 + C1*I1/3)/2, где
 +
 
 +
C0, C1 - соответствующий цвет (R, G, B) из экранки 0 и 1, принимающий значения 0 или 1,
 +
 
 +
I - брайт, 0 или 1.
 +
 
 +
C - результирующий цвет с интенсивностью в диапазоне 0-1, где 0 - нулевой уровень видео, 1 - максимальный.
 +
 
 +
== Пример ==
 +
{|
 +
|[[Изображение:Gigascreen_First.gif|thumb|256px|Первое изображение]]
 +
|[[Изображение:Gigascreen_Second.gif|thumb|256px|Второе изображение]]
 +
|[[Изображение:Gigascreen_Result.gif|thumb|256px|Условный результат]]
 +
|}
 +
 
 +
== См. также ==
 +
*[[Мультигигаскрин]]
  
 
[[Категория:Видеорежимы]]
 
[[Категория:Видеорежимы]]

Текущая версия на 14:06, 23 июля 2021

Gigascreen — программный видеорежим для ZX Spectrum, а также доработка, реализующая его аппаратно. С 1990-х годов используется в демо. Не следует путать с простым мерцанием двух экранов (2-color, Doublescreen), которое использовалось и раньше.

Видеорежим реализуется путём переключения двух экранных областей с началом каждого телевизионного кадра и каждой телевизионной строки. За счёт инертности зрения цвета в разных экранных областях будут суммироваться. Например, чередование жёлтого цвета в первом изображении и белого во втором, "на глаз" будет выглядеть как мерцающий ярко-жёлтый цвет, являющийся результатом суперпозиции двух цветовых компонент. Это позволяет получить из стандартной 15-цветной палитры 102 цвета (83 цвета при равенстве яркий+чёрный = два неярких) и использовать до четырёх цветов в знакоместе.

На ZX Spectrum 128K, в котором есть две экранных области, переключаемый программно изменением одного бита, достаточно раз в строку (в экранной области) переключать активный экран.

Пониженное мерцание достигается переключением экранов каждую строчку, со сменой фазы каждый кадр, но при регулярной штриховке при этом получается неприятное визуальное расслоение. (Компромисс — переключение экранов приблизительно каждые 2 строчки, с фазой, плавно меняющейся от кадра к кадру. При этом изображение "течёт".)

По-видимому, впервые мерцание двух экранов с чередованием строк использовалось в демо Crazy Love (FunTop 98). Было поддержано в редакторе DoubleScreen Editor (DBS).

Оригинальная железная доработка опубликована SchemeMan'ом в 1998 году. Включалась 4-м битом порта #eff7. Поддержана в газете IzhNews.

Для расчета цветов гигаскрина берутся следующие предпосылки:

  • "вклад" каждой из половинок экрана оценивается в 50%,
  • соответствующая компонента цвета каждой из половинок равна 66% (число условное) максимальной интенсивности видео для не-брайта и 100% для брайта.

Итоговая формула следующая:

C = (C0/3*2 + C0*I0/3 + C1/3*2 + C1*I1/3)/2, где

C0, C1 - соответствующий цвет (R, G, B) из экранки 0 и 1, принимающий значения 0 или 1,

I - брайт, 0 или 1.

C - результирующий цвет с интенсивностью в диапазоне 0-1, где 0 - нулевой уровень видео, 1 - максимальный.

Пример

Первое изображение
Второе изображение
Условный результат

См. также