А они есть в глазу! Но не только. Они есть в фотоапарата! Фотоапарат решил что желтый и синий цвета.
Снимок от фотоапарата.
Но нужно по порядку. 2004 год, 20 лет назад! Я читаю программирование видеоадаптеров.
«Контроллер атрибутов содержит двадцать один регистр. Доступ к ним осуществляется через один порт — 3C0h. Этот порт совмещает в себе функции индексного порта и порта данных, регулируемые внутренним триггером. Триггер переключается при каждой операции записи в порт и записываемые данные воспринимаются либо как индекс регистра, либо как данные для обмена с регистром.»
«11h регистр цвета рамки экрана (Screen Border Color Register — SBCR).»
НЕТ! Нет рамки а есть всю экрана! И начиная от S3 и заканчивая NVIDIA. Начиная 1 килобайт и заканчивая 16 гигабайт!
И можно мерцать! Получая белый либо черный цвета.
И вот тут я обнаружил цвет!
Цвет Фехнера
«Цветовой эффект Фехнера — это иллюзия цвета, наблюдаемая при взгляде на некоторые быстро меняющиеся или движущиеся черно-белые узоры. Их также называют цветами мерцания, вызванными узором (PIFC). Исследования показывают, что процесс сине-желтого оппонента объясняет все различные PIFC.
Эффект чаще всего демонстрируется с помощью устройства, известного как волчок Бенхама (также называемого диском Бенхама). Когда верхняя часть вращается, дуги бледного цвета видны в разных местах диска, образующего его верхнюю поверхность. Эффект также можно увидеть в стробоскопических источниках света, когда вспышки настроены на определённую критическую скорость. Вращающиеся лопасти вентилятора, особенно алюминиевые, также могут продемонстрировать этот эффект; когда вентилятор ускоряется или замедляется, цвета появляются, смещаются, меняются и исчезают.
Механизм восприятия цвета Фехнера до конца не изучен.»
Но не только мой мозг. Фотоапарат тоже! Вы сами видете — вот снимок 2004 года.
Синий и желтого цвета!
Потом я забыл. Положил в стол. И лежал до 2024 года.
Как сделать?
Сразу сказать что аппаратная виртуализация не идет!
Hyper-V
VirtualBox
QEMU
дают черный экран и все.
Поэтому нужно реального режима!
И это можно. Он есть.
for /f "tokens=2 delims= " %%i in ('bcdedit /create /application bootsector /d fechner') do (
bcdedit /set %%i device partition=C:
bcdedit /set %%i path \fechner.bin
bcdedit /displayorder %%i /addlast
)
bcdedit /timeout 60
Такой в cmd. и выполнить.
И тогда при перезагрузки появится fechner
Это я так назвал )
Вот
bcdedit создает
Загрузочный сектор реального режима
-------------------------------
идентификатор {0a1587d3-9c52-11ed-adbb-74d4350b9326}
device partition=C:
path \fechner.bin
description fechner
и
displayorder {current}
{0a1587d3-9c52-11ed-adbb-74d4350b9326}
timeout 60
Однако должен быть fechner.bin
Как? Fasm!
flatassembler.net/download.php
flatassembler.net/fasmw17332.zip
Нужен один файл FASM.EXE
И создать fechner.asm
Вот fechner.asm
mov bl,63
mov si,1
mov dx,3c0h
metka:
mov al,11h
out dx,al
mov al,bl
out dx,al
xor bl,63
mov cx,si
delay:
finit
loop delay
in al,60h
cmp al,29
jne noctrl
inc si
lo1:
in al,60h
cmp al,29
je lo1
jmp metka
noctrl:
cmp al,56
jne noalt
dec si
lo2:
in al,60h
cmp al,56
je lo2
jmp metka
noalt:
cmp al,1
jne metka
jmp 0FFFFh:0
Его открыть с помощью FASM.EXE и появится fechner.bin
61 байт! Это самый нужный файл! )
Перезагрузка и выбираете fechner.bin в реального режима!
Три клавиши
Самый левый внизу — Ctrl — для увеличения черный и белый пикселей, по пробуете!
Левый внизу — Alt — для уменьшения который увеличеных.
Самый левый верху — Esc — выйти!
Вот что мы увидели.
Так.
Так.
И еще так.
Явно цвета, синий и желтый (сиреневого, фиолетового)! А на самом деле черно-белый. Мозг и фотоапарата делает их! Можно поиграть.
Всем спасибо!
Немного больше года назад я перенес инсульт. И преодолевает его последствия. Я стараюсь!
Комментарии (19)
SuperTEHb
24.06.2024 07:38Не может ли камера воспринимать сиреневый цвет просто из-за настройки баланса белого? Вспоминается спор по поводу бело-золотого платья или какое оно там было...
vicsoftware
24.06.2024 07:38У фотоаппарата есть ещё эффект муара. Поскольку на экране красный/синий/желтый пиксели разнесены, а у фотоаппарата также присутствуют раздельные фотоэлементы под каждый цвет, то возможна ситуация, когда какие-то точки с экрана просто не попадут на соответствующие фотоэлементы и выпадут из картинки.
IvanPetrof
24.06.2024 07:38+4Если у вас не монохромный монитор (а сейчас такой где взять?) то его изображение всегда состоит из красных/синих/зелёных субпикселей. Какой бы цвет на него не выводили (ну, кроме чёрного). Вы уверены, что это не артефакты цветного монитора, работающего в закритическом режиме?
Javian
24.06.2024 07:38нет.
Если бы этот опыт показать по телевидению, то эффект был бы тот же: на экране черно-белого телевизора вы увидели бы разноцветные кольца.
Скриншот ниже https://habr.com/ru/articles/823560/#comment_26969832
IvanPetrof
24.06.2024 07:38По вашей ссылке немного про другое. эффект Фехнера несомненно существует. И видят его человеки (даже через передачу по телевизору. Но, разумеется, только в динамике. На стопкадре будет ч/б).
Но вот камера, в вашем случае, скорее видит какие-то субпиксельные артефакты (подобно цветному муару). не хватает чистоты эксперимента, где камера смотрит на аппаратный ч/б экран. Ну, или, хотя бы пресловутый диск Фехнера ей показать (а потом рассмотреть стоп-кадр)
Javian
24.06.2024 07:38волчок Бенхама
Так вот как это называется. Десятки лет прошли, но только сейчас я снова этот волчок встретил и наконец-то узнал откуда он взялся.
В.Н.Болховитинов. Твоё свободное время (1975)
markshevchenko
В начале 90-х принимал участие в переводе Turbo Vision в графический режим для новых тогда адаптеров SVGA. Вдоль и поперёк перечитывал книги Джордейна и Нортона, которые рассказывали, как управлять адаптерами EGA. Естественно, делал на языке ассемблера.
Это не так круто, как эффект Фехнера (я про него и не знал до прочтения статьи), но где-то рядом. Испытал острое чувство ностальгии. Спасибо.
Выздоравливайте!
pae174
Graphics Vision что ли?
markshevchenko
Я не знаю, что такое Graphics Vision. Тогда у ребят в Turbo Pascal, кажется, 6-й версии была текстовая GUI библиотека Turbo Vision. Оказалось, что весь её вывод сконцентрирован буквально в одном пользовательском прерывании, если не ошибаюсь, 60h.
Мы переводили экран в графический режим при старте, перехватывали прерывание и там был код, который выводил текст в графических режимах 80060016 или 64040016. Думаю, мы не одни такие были, так что наверное были и другие похожие решения.
pae174
Я в 1994 наверное году пытался применить некую библиотеку с названием GraphicVision (или похожим - я точно не помню), которая представляла собой набор классов, похожий на TurboVision, но только с закосом под графику. Там ничего не перехватывалось а тупо классы были заново переписаны. Можно было размеры окошек и кнопок задавать в пикселях, например. Так что в DOS получалось нечто похожее на виндовую программу, развернутую на весь экран. Её где-то в Москве сделали. Она багливая была до жути, я писал разработчикам багрепорты через FIDO, но не кончилось ничем. В результате мы на винду перелезли и забыли про DOS.
checkpoint
Помоему она называлась SuperVision и была написана на Turbo Pascal-е, эдакий клон Turbo Vision для граф мода. В 93-94-м я писал свою аналогичную на Borland C++. Но потом увидел OS/2 и на этом всё.
Oinky
Разве Turbo Vision использовала прерывание для вывода? Насколько помню, она выводила напрямую в видеопамять, как и стандартный модуль Crt.
markshevchenko
Тут два аспекта. Стандартно, для вывода можно было использовать прерывания 10h (BIOS) и 21h (DOS). Конечно, Turbo Vision не использовала эти прерывания, потому что они работали медленно.
Там был собственный метод вывода и, конечно, он работал через видеопамять. Но как он вызывался? Через пользовательское прерывание 60h (или 61h, я сейчас уже не помню). Пользовательские прерывания отдавались на откуп программистам, их можно было использовать, как угодно. В Turbo Vision — для вывода.
Почему этот метод работал быстрее, чем прерывания BIOS? Там были режимы "скопировать прямоугольную область на экран", "повторить символ N раз" (это для повторения символов). В BIOS и DOS привязаны к курсору: чтобы вывести символ, надо передвинуть курсор. Это было медленно. Простое копирование в видеопамять без привязки к курсору — быстро.
Некоторые детали могут не соответствовать действительности. История из 92-го года, больше 30-ти лет прошло.
Oinky
Да, помню эту привязку к курсору. Да и модуль Crt, хоть и выводил напрямую в видеопамять, тоже требовал позиционировать курсор с помощью gotoxy. При больших объемах вывода в разных местах экрана ещё хорошо было сделать курсор временно невидимым, чтобы на медленных машинах он не мелькал.
Давно не видел исходных текстов Turbo Vision. В 90-е немного её дорабатывал, чтобы работали русские Alt-комбинации (Alt-Ф для '~Ф~айл') и ещё какие-то ошибки исправлял. Про такую систему с прерыванием не помню, и как будто не очень понятно, зачем это могло быть там, ведь достаточно обычной подпрограммы, вызываемой не через int, а через call; это же не резидент. Да и из справочника Ральфа не припомню какого-то особенного прерывания Turbo Vision. Может, раскопаю потом всё это дело.
markshevchenko
Согласен, что странно, но в паскалевской версии TV было так, и это сильно упростило нам разработку графического расширения.
pae174
int на три байта короче far call. Если требуется вызывать подпрограмму из 1000 мест то это сразу экономит 3 килобайта.