Pull to refresh

Comments 22

В начале 90-х принимал участие в переводе Turbo Vision в графический режим для новых тогда адаптеров SVGA. Вдоль и поперёк перечитывал книги Джордейна и Нортона, которые рассказывали, как управлять адаптерами EGA. Естественно, делал на языке ассемблера.

Это не так круто, как эффект Фехнера (я про него и не знал до прочтения статьи), но где-то рядом. Испытал острое чувство ностальгии. Спасибо.

Выздоравливайте!

Turbo Vision в графический режим для новых тогда адаптеров SVGA

Graphics Vision что ли?

Я не знаю, что такое Graphics Vision. Тогда у ребят в Turbo Pascal, кажется, 6-й версии была текстовая GUI библиотека Turbo Vision. Оказалось, что весь её вывод сконцентрирован буквально в одном пользовательском прерывании, если не ошибаюсь, 60h.

Мы переводили экран в графический режим при старте, перехватывали прерывание и там был код, который выводил текст в графических режимах 80060016 или 64040016. Думаю, мы не одни такие были, так что наверное были и другие похожие решения.

Я в 1994 наверное году пытался применить некую библиотеку с названием GraphicVision (или похожим - я точно не помню), которая представляла собой набор классов, похожий на TurboVision, но только с закосом под графику. Там ничего не перехватывалось а тупо классы были заново переписаны. Можно было размеры окошек и кнопок задавать в пикселях, например. Так что в DOS получалось нечто похожее на виндовую программу, развернутую на весь экран. Её где-то в Москве сделали. Она багливая была до жути, я писал разработчикам багрепорты через FIDO, но не кончилось ничем. В результате мы на винду перелезли и забыли про DOS.

Помоему она называлась SuperVision и была написана на Turbo Pascal-е, эдакий клон Turbo Vision для граф мода. В 93-94-м я писал свою аналогичную на Borland C++. Но потом увидел OS/2 и на этом всё.

Разве Turbo Vision использовала прерывание для вывода? Насколько помню, она выводила напрямую в видеопамять, как и стандартный модуль Crt.

Тут два аспекта. Стандартно, для вывода можно было использовать прерывания 10h (BIOS) и 21h (DOS). Конечно, Turbo Vision не использовала эти прерывания, потому что они работали медленно.

Там был собственный метод вывода и, конечно, он работал через видеопамять. Но как он вызывался? Через пользовательское прерывание 60h (или 61h, я сейчас уже не помню). Пользовательские прерывания отдавались на откуп программистам, их можно было использовать, как угодно. В Turbo Vision — для вывода.

Почему этот метод работал быстрее, чем прерывания BIOS? Там были режимы "скопировать прямоугольную область на экран", "повторить символ N раз" (это для повторения символов). В BIOS и DOS привязаны к курсору: чтобы вывести символ, надо передвинуть курсор. Это было медленно. Простое копирование в видеопамять без привязки к курсору — быстро.

Некоторые детали могут не соответствовать действительности. История из 92-го года, больше 30-ти лет прошло.

Да, помню эту привязку к курсору. Да и модуль Crt, хоть и выводил напрямую в видеопамять, тоже требовал позиционировать курсор с помощью gotoxy. При больших объемах вывода в разных местах экрана ещё хорошо было сделать курсор временно невидимым, чтобы на медленных машинах он не мелькал.

Давно не видел исходных текстов Turbo Vision. В 90-е немного её дорабатывал, чтобы работали русские Alt-комбинации (Alt-Ф для '~Ф~айл') и ещё какие-то ошибки исправлял. Про такую систему с прерыванием не помню, и как будто не очень понятно, зачем это могло быть там, ведь достаточно обычной подпрограммы, вызываемой не через int, а через call; это же не резидент. Да и из справочника Ральфа не припомню какого-то особенного прерывания Turbo Vision. Может, раскопаю потом всё это дело.

Согласен, что странно, но в паскалевской версии TV было так, и это сильно упростило нам разработку графического расширения.

не очень понятно, зачем это могло быть там, ведь достаточно обычной подпрограммы, вызываемой не через int, а через call

int на три байта короче far call. Если требуется вызывать подпрограмму из 1000 мест то это сразу экономит 3 килобайта.

Не может ли камера воспринимать сиреневый цвет просто из-за настройки баланса белого? Вспоминается спор по поводу бело-золотого платья или какое оно там было...

У фотоаппарата есть ещё эффект муара. Поскольку на экране красный/синий/желтый пиксели разнесены, а у фотоаппарата также присутствуют раздельные фотоэлементы под каждый цвет, то возможна ситуация, когда какие-то точки с экрана просто не попадут на соответствующие фотоэлементы и выпадут из картинки.

UFO just landed and posted this here

нет.

Если бы этот опыт показать по телевидению, то эффект был бы тот же: на экране черно-белого телевизора вы увидели бы разноцветные кольца.

Скриншот ниже https://habr.com/ru/articles/823560/#comment_26969832

UFO just landed and posted this here

Скорее всего именно так. Попробуйте сделать фото не цафровиком, а обычным плёночные фотоаппаратом. Уверен на 101% что никакого эффекта Фехнера вы не увидите.

то его изображение всегда состоит из красных/синих/зелёных сусубпикселей

Если матрица не WRGB

волчок Бенхама

Так вот как это называется. Десятки лет прошли, но только сейчас я снова этот волчок встретил и наконец-то узнал откуда он взялся.

В.Н.Болховитинов. Твоё свободное время (1975)

В случае CRT монитора может быть иной эффект: разная цветовая температура свечения люминофора под лучом электронной трубки и послесвечения. Но это моё предположение.

Sign up to leave a comment.

Articles