PDA

Просмотр полной версии : 256-цветный графический режим на Векторе-06Ц



ivagor
22.01.2013, 11:26
Возможно стоило продолжить какую-то из существующих тем, но не знаю какую, поэтому начал новую.
Есть как минимум 2 примера программ, которые отображают на экране одновременно 256 цветов: Таблица PAL (http://sensi.org/~svo/scalar/ware/768/) и 256 цветов (http://sensi.org/~svo/scalar/ware/770/). Идею из программы b2m можно использовать для организации режима 7(по горизонтали)*256(по вертикали) "точек" (каждая "точка"=32*1 пикселов), каждая из которых может быть одного из 256 цветов. Вопрос в том, можно ли что-то осмысленное изобразить с таким разрешением.

svofski
22.01.2013, 13:49
В общем случае можно менять один-два цвета из палитры каждую строку. Изобразить так, конечно же, что-то можно, но это нужен художник, который преломит мозг таким необычным образом. Даже на Амиге с ее HAM режимом таких находилось немного.

ivagor
22.01.2013, 14:03
В общем случае можно менять один-два цвета из палитры каждую строку.
Понятно, и примеры в исполнении SESа есть. Но описанный выше вариант отличается тем, что не каждую строку 1-2 цвета, а в пределах строки меняем 7 раз. В принципе такой вычурный режим можно попытаться совместить с "обычными" 16ю цветами, и менять один из них для каждого блока из 32 пикселов (я даже про это сначала написал), но по зрелому размышлению тут возможны проблемы, и без проверки не рискну утверждать, что это будет работать.


Изобразить так, конечно же, что-то можно, но это нужен художник, который преломит мозг таким необычным образом.
Может кто-то (полу)автоматический конвертер напишет под эти дела? Хотя если хороший художник сразу нарисовал бы под этот режим, то несомненно получилось бы лучше. Правда для полного счастья ему неплохо бы иметь соответствующий редактор.


Даже на Амиге с ее HAM режимом таких находилось немного.
Под HAM вроде и конвертерами получалось неплохо?

svofski
22.01.2013, 15:10
Если менять в пределах строки, получается очень много ограничений на цвета точек в отдельно взятых позициях и нету уверенности в том, что все железо одинаково хорошо это покажет. Было бы прикольно посмотреть на такое, но я думал об этом еще тогда давно и решил, что выходит слишком мутно.


Под HAM вроде и конвертерами получалось неплохо?
Не знаю, может быть и получалось. У меня интереса к сконвертированной картинке нет никакого. А сделанная специально, все равно даже если кривыми руками, это уже искусство.

b2m
22.01.2013, 21:19
в пределах строки меняем 7 раз
Очень сложно будет попасть OUT-том на нужный пиксел (т.к. палитра меняется для текущего отображаемого цвета).

ivagor
22.01.2013, 21:28
Очень сложно будет попасть OUT-том на нужный пиксел (т.к. палитра меняется для текущего отображаемого цвета).
Поэтому в стартовом посте я и написал про 7 "точек" по горизонтали, это 100% осуществимо, что ты уже и продемонстрировал. Сложности начнутся, если пробовать совместить это с другими цветами.

ivagor
23.01.2013, 07:34
Если все же использовать крупные точки, то совсем не обязательно оставаться в рамках активной части изображения, можно использовать бордюр. По вертикали тогда будет до 288 точек. По горизонтали сложнее, если использовать минимальную дискретность 32 пиксела, то больше 7 "точек" не получится (ну нет больше регистров у ВМ80). Если допустить дискретность по горизонтали 40 пикселов, то можно и 8 "точек" отобразить, но крайние не полностью влезут в экран.

ivagor
23.09.2015, 15:31
С 256цветным точки мягко говоря крупноваты. Зато можно 64цветный с разрешением 256x128. Возможно я уже писал про это, но не подробно
Это идея SESа по двойной буферизации + палитры под 64 цвета
1. Разбиваем экран пополам (верхняя и нижняя половина). Три плоскости под изображение и одна под маску. Каждый кадр регистром скролла сдвигаем нужную половину в центр и палитрой для маски делаем видимой (другую половину, соответственно, невидимой)
2. Палитру для изображения можно задать так
Если обозначить биты палитры 76543210
то для четных кадров для младших 8 цветов будет 7/5/2 ("старший бит градации"), для нечетных - 6/4/1 ("младший бит градации")
Т.е. шимом получим 4 градации для каждого цвета RGB ("старший/младший") - 0/0, 0/1, 1/0, 1/1
Основной недостаток - мерцание.
На 6128 можно и на полный экран

---------- Post added at 18:31 ---------- Previous post was at 17:53 ----------

Оффтоп: в принципе и на корвете с ГЗУ на РУ5 можно попробовать подобным образом показать 64цветную картинку

ivagor
23.09.2015, 20:02
Самому стало интересно, насколько сильно будет мерцать и будут ли различимы 64 цвета. Мерцает сильно, 64 цвета различимы. Тестик с исходником прилагаю.
В readme написал, но продублирую, что смотреть имеет смысл на 50 Гц устройстве отображения. Т.е. или с реала или с de1/de2-115/de1-soc/wxeda. Сам я смотрел на de1. В архиве есть .fdd, как раз для v06cc. В принципе можно и комп с эмулятором настроить для отображения 50 Гц, но мне было проще посмотреть на de1

ivagor
23.09.2015, 20:08
Уточню насчет образа fdd в архиве - он не загрузочный (зато архив в результате меньше 2 Кб). Т.е. на de1 сначала загружаемся с любого загрузочного fdd, потом меняем (через Scroll Lock) на c64.fdd

ivagor
25.09.2015, 08:15
256 цветов на точку с разрешением 256x256 получилось, но только для 6128 и с мерцанием. Тестик с исходником. Wav в архиве для загрузки на de1, проц там до сих пор без таймингов 8085, поэтому загрузка на стандартной скорости может вызывать трудности, а этот wav грузится. Возможно мерцание уменьшится, если перераспределить цвета между чередующимися экранами, на эту тему я не экспериментировал. Этот же подход можно использовать и для организации на 6128 режима 512x256 16 цветов/точку

ivagor
25.09.2015, 08:17
Кстати, в некоторых эмуляторах спектрума для подобных мерцающих режимов бывают специальные варианты отображения. Самый простой - считать вес цветовой компоненты текущего кадра как полусумму из текущего и предыдущего

ivagor
25.09.2015, 11:39
Для полноты картины сделал 512x256 16 цветов/точку для 6128. Насчет выбора цветов в тестике и распределения битов по чередующимся экранам можно поспорить, главное видно, что принцип работает

UPD: Поменял раскладку цветов на экране по "b2mовскому" принципу, как в предыдущих тестах. Так намного наглядее

ivagor
31.03.2021, 17:16
Кстати, в некоторых эмуляторах спектрума для подобных мерцающих режимов бывают специальные варианты отображения.
К счастью не только в эмуляторах спека, в emu80 Настройки>Настройки эмулятора>Экран>Смешивать полукадры>Смешивать. Идеальный вариант для просмотра подобных штук (https://zx-pk.ru/threads/20688-256-tsvetnyj-graficheskij-rezhim-na-vektore-06ts.html?p=830223&viewfull=1#post830223)

KTSerg
10.04.2021, 19:19
Что-то я не уяснил, в этом режиме (64 цвета) палитра остается прежней, т.е отображается одновременно 64 цвета из 256 возможных, или уже из 64К возможных оттенков?
И не соображу, если каждый кадр отображается, то почему появляется мерцание?

ivagor
10.04.2021, 20:16
Палитра каждый кадр меняется, поэтому мигание. Комбинация двух кадров с разными палитрами дает 64 цвета, в этом можно убедиться сделав скриншот теста c64 в emu80 в режиме со смешиванием кадров. Только надо использовать версию с исправленным оскриншочиванием в режиме смешивания и сделать размер изображения 256x256.

KTSerg
11.04.2021, 06:06
Палитра каждый кадр меняется, поэтому мигание.
Не убедительное объяснение.
У Вектора нет понятия чётный/нечетный кадр. Т.к. у них нет смещения на экранную строку, и все кадры отображаются без смещения на одном и том-же месте с частотой 50Гц (каждые 20мс).
А человеку для появления мерцания нужно менее 24Гц. Значит в Векторе даже если гасить каждый второй кадр, мерцания не должно быть.
Или я что-то путаю?

Комбинация двух кадров с разными палитрами дает 64 цвета, ...
Я не возражаю, что там 64 цвета.
Меня интересовало, можно ли отобразить только конкретно именно эти 64 цвета, или это 64 цвета из 64К возможных. Например, можно-ли отобразить 64 оттенка красного цвета?

ivagor
11.04.2021, 06:24
У Вектора нет понятия чётный/нечетный кадр. Т.к. у них нет смещения на экранную строку, и все кадры отображаются без смещения на одном и том-же месте с частотой 50Гц (каждые 20мс).
Для 64c все описанное не нужно.


А человеку для появления мерцания нужно менее 24Гц.
the human flicker fusion threshold is usually taken between 60 and 90 Hz (https://en.wikipedia.org/wiki/Flicker_fusion_threshold)


Меня интересовало, можно ли отобразить только конкретно именно эти 64 цвета, или это 64 цвета из 64К возможных. Например, можно-ли отобразить 64 оттенка красного цвета?
Вариант реализованный в 64c не единственный возможный, но самый интересный для меня. Можно отобразить 15 оттенков красного (или зеленого или желтого).

- - - Добавлено - - -


А человеку для появления мерцания нужно менее 24Гц.
Хотя наверно вот этот фрагмент ближе: Flicker is the perception of visual fluctuations in intensity and unsteadiness in the presence of a light stimulus, that is seen by a static observer within a static environment. Flicker that is visible to the human eye will operate at a frequency of up to 80 Hz. (https://en.wikipedia.org/wiki/Flicker_fusion_threshold#Flicker)

ivagor
11.04.2021, 10:54
Перечислю некоторые режимы, которые можно организовать с таким подходом.
1. С максимальным разрешением 256x128
1.1. 64 цвета, 2 бита/канал
1.2. 15 оттенков желтого или зеленого или красного
2. С максимальным разрешением 256x256
2.1. 7 оттенков синего
В 1.2 и 2.1 палитра не меняется, но мигать все равно будет (хотя и меньше чем в 1.1.), т.к. от кадра к кадру будут меняться интенсивности части точек.
Это не исчерпывающий список, можно еще напридумывать режимов, но я не художник и в первую очередь смотрю в сторону конверсий и удобных для этого режимов.

Пару слов про альтернативы отдельным пунктам.
Если устраивают оттенки серого, то вместо 1.1 лучше использовать ч/б видео выход, там мигать не будет и оттенков как минимум 16 (в палитре скорее всего больше). Тут мешает некоторая недопроясненность оттенков в этом режиме.
Вместо 2.1 возможен немигающий вариант с "типадизером" в режиме 512x256, я даже выкладывал пример, но не вспомнил где.