PDA

Просмотр полной версии : Видеоконвертер EGA/CGA/Mono to VGA



Rio444
01.10.2022, 15:00
Даже не знаю, будет ли интересно это устройство на фоне происходящих событий. Тем не менее, уже готов рабочий, выполняющий все основные функции, прототип. Пришло время рассказать о проекте.
В целом видеоконвертер повторяет функции известного «канадского» mce2vga.

Для начала короткое видео с демонстрацией работы (прошу прощения за качество, опыт съёмок чуть меньше, чем никакой):


https://youtu.be/7mMGqXjjjTI

Главные преимущества устройства по сравнению с канадским mce2vga:
- дешевые и легкодоступные комплектующие,
- на порядок лучшая совместимость с адаптерами EGA/CGA/Hercules.
Основной недостаток один – больше пайки, выше трудоемкость сборки.

Для понимания дальнейшего описания проекта, небольшая предыстория.

Начал им заниматься ещё в январе прошлого года. Первоначально скандаблер задумывался как супер-пупер универсальный с экранным меню и возможностью тонкой настройки входного и выходного сигнала. По различным причинам работа постоянно прерывалась, и спаять прототип удалось только в августе прошлого года. В январе была готова первая, тестовая (без захвата входного видео) прошивка. И сразу стало ясно, что основного чипа – CPLD Altera Max EPM3256 абсолютно не хватает для реализации задуманных функций ни по емкости, ни по быстродействию. Необходимо переходить на более современные чипы Altera Max II – EPM570 или EPM1270. Ещё тогда, в январе, сразу заказал на али несколько чипов EPM1270.

Но прежде чем разводить новую плату под эти чипы, нужно было убедиться, что идеи, заложенные в работу устройства в принципе работоспособны, протестировать входные и выходные цепи, задание частот и т.д. и т.п.
То есть попытаться сделать скандаблер с минимальными функциями, который уместился бы в имеющийся чип Altera. И, как ни странно, это получилось. Аппаратная часть работала безупречно. Начал с реализации скандаблера только для сигнала EGA HiRes (640x350).

После проверки работоспособности пора было переходить на Altera Max II EPM570 или EPM1270.
Снова полез на алиэкспресс и был неприятно удивлён. Ещё в январе заказал (и получил) EPM1270 по цене около 300 руб., включая доставку. А уже в апреле они стоили больше 1000 руб. за штуку, в то время как EPM570 более 600 руб. Причем от не очень надежных продавцов с низким рейтингом. От таких можно получить нерабочие чипы, или вообще ничего. Только возврат денег через 2-3 месяца. В то же время применённые EPM3256 по-прежнему стоили и до сих пор стоят копейки – менее 200 руб. за чип.

Встала дилемма – реализовывать первоначальную идею универсального скандаблера, который теперь становился гораздо дороже, или попытаться выжать максимум из текущего, дешевого варианта. Учитывая, что дорогих скандаблеров и так хватает, и универсальность нужна далеко не всем, пока остановился на втором варианте.

С помощью различных ухищрений и оптимизаций удалось реализовать то, что поначалу казалось невозможным – поддержку EGA, CGA, монохромных режимов Hercules и MDA, композитного режима CGA и многое другое. То есть почти всё, что умеет «канадский» скандаблер и даже чуть-чуть «сверху». Что не удалось – обойтись одним чипом памяти. Теоретически это возможно, но нужен более емкий и быстродействующий чип CPLD, например вышеупомянутый EPM570. Кроме того существенно возрастают требования к самим чипам памяти.

Теперь, как это работает. Основные функции – захват входного видеосигнала и формирование выходного VGA сигнала осуществляет уже упомянутый чип CPLD Altera Max EPM3256ATC144. Для записи и воспроизведения видео служат два буфера памяти на чипах SRAM 512Kx8. Они постоянно поочередно меняются местами. После записи полного кадра входной буфер становится выходным, а выходной наоборот входным. Выходной цифровой видеосигнал Altera преобразовывается в аналоговый VGA с помощью DAC (ЦАП). Первоначально использовался VideDAC ADV7123. Он имеет 3 канала по 10 бит. В последствии это решение оказалось избыточным, заменил его на резисторные DAC, 3 канала по 2 бита.

https://pic.maxiol.com/images2/1664624313.781412078..png

Управляет всем МК Atmega. Сейчас стоит Atmega168. Этот чип тоже с большим избытком перекрывает потребности. Экранного меню не будет, шрифты хранить не надо. Поэтому заменю его на Atmega88 или Atmega48. Микроконтроллер обрабатывает нажатия кнопок, принимает и обрабатывает информацию от текущем входном сигнале от Altera, управляет светодиодами, задаёт режимы захвата и вывода видео чипом Altera и управляет синтезатором частот PLL Si5351a.
Последний генерирует тактовые частоты для захвата видео и формирования выходного сигнала VGA. Синтезатор Si5351a – очень мощный чип. Позволяет по интерфейсу i2c с высокой точностью задать до трёх частот, вплоть до 120 МГц. В скандаблере используются две частоты.

Захват производится на частоте пиксель-клока входного сигнала. Для EGA HiRes (640x350) это 16.257 МГц, для CGA и EGA LowRes (640х200 и 320х200) это 14.318 МГц (видеокарта берёт эту частоту с разъёма ISA), для Hercules обычно 16.000 МГц. Для того, чтобы захват был надежен, и попадал примерно на середину пикселя, а не на границу между пикселями, может потребоваться ручная подстройка фазы захвата. Для этого служат две кнопки на корпусе скандаблера (правые верхние). Фаза подстраивается с точностью ¼ периода. То есть может принимать одно из четырёх значений.

На этом пока всё, постепенно буду выкладывать дальнейшее описание.

Напоследок несколько фото без корпуса, до модификаций схемы:
https://pic.maxiol.com/images2/1664624140.781412078.1.jpg
https://pic.maxiol.com/images2/1664624230.781412078.2.jpg
https://pic.maxiol.com/images2/1664624245.781412078.3.jpg

Zugzug
03.10.2022, 02:39
Проект open source? Hdmi выход не планируется?

Rio444
03.10.2022, 14:30
Hdmi выход не планируется?Нет. Для особо страждущих есть китайские переходники VGA-Hdmi. Лично я не понимаю смысла использовать с древним железом широкоформатный моник Full HD или 4К. А все старые 4:3 (и даже многие новые 1920х1080) имеют вход VGA.


Проект open source?Если кто-то объяснит смысл open source для таких проектов, будет open source :)

Продолжу описание.

Входные и выходные форматы видео

1. EGA высокого разрешения (он же "High Resolution" - сокращенно HiRes), разрешение 640х350, пиксельклок 16.257 МГц, кадровая 60 Гц. Строчная 21,85 КГц (однако скандаблер никак эту частоту не использует, в отличии от мониторов). Входной сигнал 6-битный, по два бита на каждый цвет (RGB). Всего возможно 64 цвета, но адаптер EGA может одновременно использовать только 16 цветов (особенности аппаратной реализации, не более того).
Преобразуется в стандартный режим VGA, те же самые 640х350, только кадровая уже 70 Гц (пиксельклок 25,175 МГц, строчная 31,5 КГц).
Это самое простое преобразование. Что получили на входе, то же и выдали на выход. Разница только в пиксельклоке и частотах кадровой и строчной (иначе бы видеобуфер в памяти и вовсе был бы не нужен).

Несмотря на то, что режим VGA 640х350@70Hz древний, как сами знаете что, и появился он именно для совместимости с EGA, он до сих пор поддерживается мониторами.
В эпоху до UEFI BIOS это было жизненно необходимо, так как самый первый экран загрузки BIOS выводится именно в этом разрешении (там где название материнской платы и процессора, количество памяти и т.п.).
После перехода на UEFI это стало не так актуально. Поэтому предполагаю, что какие-то современные широкоформатные мониторы могут не поддерживать этот режим. Однако купленный в этом году AOC 24" 1920x1080 работает с ним без проблем. Могут не заработать мониторы от POS-терминалов, некоторые из них вообще не держат низкие разрешения https://phantom.sannata.org/viewtopic.php?f=28&t=43127&start=31

На "призраках" было пожелание поднять кадровую частоту для более комфортного использования с ЭЛТ мониторами. Уже есть вариант, но нужно тестировать. Сейчас мне доступен только древний Samsung 3ne, полностью аналоговый, с "крутилками", он заработал на кадровой 83,5 Гц. ЖК-мониторы ругались на "Выход вне диапазона". Но "взяли" кадровую 75 Гц. Это нестандартные частоты, мониторы не обязаны с ними работать. Вероятно сделаю в виде опции.

2. EGA низкого разрешения (LowRes), CGA. разрешения 640х200 и 320х200. Цвет задаётся четырьмя битами - три бита RGB и один бит яркости (интенсивности - "intensity"). Такой формат задания цвета называют RGBi. Максимально доступно 16 цветов. Пиксельклок 14,318 МГц (берется с разъёма ISA, поэтому на видеоадаптере обычно отсутствует кварц для этой частоты), кадровая 60 Гц, строчная 15,7 КГц.

Адаптер CGA в разрешении 320х200 может показывать только 4 цвета из 16 (две палитры в двух вариантах яркости, плюс дополнительная - итого пять палитр), в разрешении 640х200 только 2 цвета из 16 (обычно черный и белый, но можно задавать и другие). У адаптера EGA таких ограничений нет, но больше 16-цветов он разумеется не показывает из-за битности видеосигнала.

Несмотря на разнообразие разрешений, цветов и палитр, эти видеорежимы захватываются одинаково, в разрешении 640х200, с частотой пиксельклока 14,318 МГц. Если захватываемое разрешение 320х200, то один пиксель захватывается два раза подряд. И точно так же выводится два раза подряд на VGA.

Так как разрешения VGA начинаются с 350-ти строк, чтобы вывести 200 строк, их нужно удвоить. То есть одна строка выводится два раза подряд.
Самое подходящее разрешение 640х400@70 Гц. Но есть нюанс. Все ЖК мониторы захватывают такой сигнал в разрешении 720х400.
Чтобы было понятнее: есть видимая строка, мы в этой строке выводим 640 пикселей. ЖК монитор эту же строку делит на 720 пикселей, захватывает их, и преобразовывает в свои физические пиксели (800, 1024, 1280 и т.д., в зависимости от разрешения матрицы - 800х600, 1024х768, 1280х1024 и т.д.).
Для монитора 1280х1024 происходит двойное не кратное преобразование, сначала 640 в 720, потом 720 в 1280. К тому же изображение сильно вытянуто по вертикали, т.к. формат таких мониторов 5:4, а не 4:3.
Поэтому помимо вывода этого входного режима в режим VGA 640х400@70Гц, скандаблер может выводить его в 640х480@75Гц. При этом 40 верхних строк и 40 нижних просто черные, без выводимого изображения. Что даёт тот же формат 640х400, только сплюснутый по вертикали. Этот видеорежим правильно воспринимают все мониторы, включая ЖК. Для ЭЛТ он тоже предпочтительней из-за более высокой кадровой. Сжатие по вертикали легко компенсируется настройкой геометрии ЭЛТ монитора.
Для ЖК-мониторов, отличных от 1280х1024 предпочтительным может быть выходной режим 640х400. В режиме 640х480 изображение может оказаться слишком сжатым по вертикали.

3. Монохромные режимы: Hercules и MDA. Разрешения 720х350 и 720х348, пиксельклок 16,257 или 16,000 МГц, кадровая 50 Гц, строчная 18,432/18,425 КГц. Видеосигнал двухбитный - цвет и интенсивность (яркость).
Несмотря на то, что адаптеры принципиально разные (один текстовый, другой графический) и немного отличаются частоты, форматы видеосигнала очень близки и захватываются одинаково.
Проблема возникает только с пиксельклоком. При несовпадении его необходимо переключать вручную. Простого способа автоматического определения, увы, нет.
Фактически совместимы с Hercules и MDA так называемые "монохромные режимы" карт EGA. Текстовый режим - и есть MDA. Что касается графического режима, совместимость зависит от конкретного адаптера EGA (точнее примененного на нем чипа). Есть полностью совместимые, есть в меньшей степени. В частности, мне попадались адаптеры с пиксельклоком 14,318, как у CGA.

Выходной режим VGA - 720х400@70Гц. Изображение выводится не на весь экран. Сверху и снизу по 25 строк черные, без изображения (для графики Hercules - по 26 строк).
Таким образом изображение получается немного сплюснуто, зато очень качественное и четкое.
Скандаблер позволяет выбирать цвет монохрома - черно-белый, зеленый или янтарный.

Продолжение следует..

Shumadan
03.10.2022, 15:03
детальками уже можно закупаться?

Rio444
03.10.2022, 15:38
детальками уже можно закупаться?Пока рано. Доделываю прошивки, ещё не переразвел плату.
Сколько экземпляров Вы хотите изготовить? Планирую продажу наборов для сборки.

Сейчас плата выглядит вот так:
https://pic.maxiol.com/images2/1664801150.94744754.5.jpg

Rio444
22.10.2022, 13:52
Тем не менее, продолжу..

Управление скандаблером

Для управления скандаблером служат пять кнопок и два светодиода. Прошивка в процессе доработки, поэтому функции светодиодов и кнопок могут дополняться и изменяться (кроме основных). На рисунке кнопки пронумерованы от 1 до 5.

https://pic.maxiol.com/images2/1676666937.781410869..png

Основные функции:
- светодиод “Power” – индикатор питания,
- светодиод “H.P. Auto” – индикатор автоматической подстройки положения изображения по горизонтали,
- кнопка “Mode & Alt Func” (№1) – управление доп. функциями (зависят от от текущего режима). При одновременном нажатии на другую кнопку, меняет функцию этой кнопки,
- кнопки “Phase” (№2 и №3) – ручная подстройка фазы захвата. Фаза может принимать одно из четырех значений – от 0 до ¾ периода. Многократное нажатие на кнопку 2 уменьшает фазу до минимума, то есть до нуля. Аналогично кнопка 3 увеличивает фазу максимально до ¾,
- кнопки “H.Pos” (№4 и №5) – ручная подстройка «горизонтальной позиции» (“horizontal position”) – положения изображения по горизонтали. При одновременном нажатии на обе кнопки происходит включение/выключение автоматической подстройки. При этом загорается/тухнет соответствующий светодиод.

Настройка фазы

В случае неправильно выставленной фазы наблюдаются различные искажения изображения. Обычно это рваные вертикальные линии, хаотичные горизонтальные черточки, рябь по всему экрану, дрожание изображения. Примеры на видео:


https://www.youtube.com/watch?v=5WIpQXXMTKA

Большинство видеокарт позволяют правильно захватить изображение в двух положениях фазы для всех режимов (640х350, 640х200, 320х200). Некоторые только в одном. Таким образом вероятность, что начальное положение фазы окажется правильным, составляет примерно 50%. В остальных 50% случаев фазу придется подстраивать вручную. К сожалению, не существует достаточно простого алгоритма автоматической подстройки, который можно было бы применить в устройстве.

Горизонтальное положение

По умолчанию включена автоматическая подстройка положения изображения по горизонтали. При необходимости её можно отключить одновременным нажатием кнопок 4 и 5 (“H.POS”).
Автоматическая подстройка работает очень просто: если какая-то часть изображения выходит за границы экрана вправо или влево, то изображение сдвигается в противоположную сторону. За каждый кадр сдвиг происходит только на один пиксель, и только в одну сторону.

Нужно понимать, что автоматическая подстройка выполняется только по видимому изображению. Черный цвет полностью равнозначен отсутствию изображения.

Поэтому возможны четыре варианта изображения с точки зрения автоматической подстройки:

- видимое изображение по ширине полностью соответствует захватываемому разрешению. В этом случае изображение автоматически выравнивается точно и правильно. Примеры такого изображения – таблица файлового менеджера (как, например, Norton Commander), любая программа, имеющая не черный, а цветной фон,

- видимое изображение меньше ширины захватываемого разрешения. Например – командная строка MS-DOS, или сообщения БИОС при начальной загрузке. В этом случае может потребоваться ручная подстройка. Но, если включена автоматическая, она не позволит сдвинуть изображение за пределы экрана,

- видимое изображение заметно шире захватываемого разрешения. Существуют программы и игры, которые видимо используют низкоуровневый доступ к видеокарте, и заливают фоновым цветом область, выходящую за пределы видимого изображения. Как пример – игра “Burger Time”. В этом случает выравнивание так же не может выполниться автоматически. Вероятно потребуется ручное,

- изображение шире экрана на один пиксель. В силу то ли бага, то ли аппаратных особенностей некоторые видеокарты выводят стандартное разрешение с одним лишним пикселем. По описанному выше алгоритму с каждым кадром изображение будет сдвигаться то влево, то вправо (потому что каждый раз «лишний пиксель» будет «выступать» то справа, то слева). То есть изображение будет дрожать. Поэтому алгоритм скорректирован, и в таком случае выравнивание происходит по левой границе экрана, а «лишние пиксели» будут попадать в невидимую область, справа от экрана.

Есть ещё одна фича. Изображение на самом деле захватывается с запасом. Не 640, а 648 пикселей по ширине, не 720, а 728. ЭЛТ мониторы, и большинство ЖК при необходимости позволяют отобразить эти «лишние» пиксели. У ЭЛТ запас подстройки изображения по ширине обычно очень большой. У ЖК эта настройка называется «подстройка частоты» и позволяет показать несколько лишних пикселей. Скорее всего с искажениями. Поэтому эта возможность более актуальна для ЭЛТ-мониторов.

Продолжение следует..

Rio444
18.02.2023, 13:10
Переразвёл плату с учетом доработок, немного изменил конструкцию, и, наконец, закончил прошивку. Понадобится тестирование и вероятно ещё какие-то доработки. Тем не менее, все (или почти все:)) задуманные функции реализованы.
Поэтому продолжу.
Для начала фото новой версии (кликабельно):
https://pic.maxiol.com/thumbs2/1676712865.781441028.1.jpg (https://pic.maxiol.com/?v=1676712865.781441028.1.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713013.781441028.2.jpg (https://pic.maxiol.com/?v=1676713013.781441028.2.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713034.781441028.3.jpg (https://pic.maxiol.com/?v=1676713034.781441028.3.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713063.781441028.4.jpg (https://pic.maxiol.com/?v=1676713063.781441028.4.jpg&dp=2)

https://pic.maxiol.com/thumbs2/1676713086.781441028.5.jpg (https://pic.maxiol.com/?v=1676713086.781441028.5.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713105.781441028.6.jpg (https://pic.maxiol.com/?v=1676713105.781441028.6.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713122.781441028.7.jpg (https://pic.maxiol.com/?v=1676713122.781441028.7.jpg&dp=2) https://pic.maxiol.com/thumbs2/1676713140.781441028.8.jpg (https://pic.maxiol.com/?v=1676713140.781441028.8.jpg&dp=2)

Теперь собственно продолжение описания.

Частота пикселей ("пиксельклок") входного видеосигнала

Выше уже упоминал, что конвертер сам автоматически настраивается на входной видеосигнал (EGA, CGA, монохром). Однако он не в состоянии автоматически определить пиксельклок. Зачения частот по умолчанию следующие:
EGA HiRes (640x350) – 16.257 МГц
CGA и EGA LowRes (640х200 и 320х200) – 14.318 МГц
Монохром (Hercules, MDA, монохромные режимы EGA) – 16.000 МГц

Первая проблема заключается в том, что видеокарты Hercules обычно тактируются кварцем 16.000, в то время как монохромные режимы карт EGA – кварцем 16.257 (тем же, что и EGA 640х350). Поэтому может понадобиться изменить частоту захвата.
Для этого нужно нажать кнопку 1 (ALT FUNC), и, не отпуская её, нажать кнопку 2 или 3 (ALT Input FREQ).
https://pic.maxiol.com/images2/1676713617.781441028.1021.jpg
Кнопка 2 понижает частоту, кнопка 3 – повышает. Пока нажата кнопка 1, можно нажимать кнопки 2 и 3 сколько угодно раз и в любой последовательности. На настоящий момент зашиты следующие частоты для EGA 640x350 и монохрома: 14.318, 15.99, 16.000, 16.257, 17.750, 18.000 МГц. Частоты переключаются последовательно, в указанном порядке, пока не будет достигнута наименьшая или наибольшая, либо изменено направление переключения.
Это те значения, которые встречались мне в реальных видеокартах.
Как писал выше, на видеокартах Hercules обычно стоит кварц 16.000, на видеокартах EGA 16.257, но есть исключения.
Мне известны две модели карт EGA, на которых установлен кварц на 16.000 МГц вместо 16.257. Это карты на чипах Juko “VDL C3” и CityGate D10.
https://pic.maxiol.com/thumbs2/1676885020.781410937.juko1.jpg (https://pic.maxiol.com/?v=1676885020.781410937.juko1.jpg&dp=2)..https://pic.maxiol.com/thumbs2/1676885125.781410937.d10.jpg (https://pic.maxiol.com/?v=1676885125.781410937.d10.jpg&dp=2)
Как видно, на Juko на самом деле кварц на 32.000 МГц, частота которого делится на два.
Сразу замечу, что подавляющее большинство карт EGA/CGA/Hercules на одинаковом чипе могут иметь разную разводку, но всегда имеют одинаковую схему (иногда с небольшими вариациями), одинаковые настройки и одинаковые параметры видеосигнала (длительность синхроимпульса, пауза до и после СИ, сдвиг фазы между СИ и пикселями и т.п.).
Но бывают и исключения, как карта на том же чипе Juko, но с упрощенной схемой генератора. Из-за упрощения (а возможно ошибки) генератор выдаёт не ровно 16 МГц, а 15.99. Замена кварца ни к чему не привела. Дело именно в схеме.
https://pic.maxiol.com/thumbs2/1676885143.781410937.juko2.jpg (https://pic.maxiol.com/?v=1676885143.781410937.juko2.jpg&dp=2)
Потому исключительно из-за этой карты введена дополнительная частота 15.99.
Другая, даже более распространенная, карта с нестандартными частотами – с двумя выходами EGA+VGA на чипе OAK OTI037. На таких картах стоит кварц на 36.0 или 35.5 МГц, частота которого делится на два. Итоговая 18.0 или 17.75 и является пиксельклоком для режима EGA 640х350 и монохромных. Эти частоты тоже в числе доступных для конвертера.
https://pic.maxiol.com/thumbs2/1676885175.781410937.oti037.jpg (https://pic.maxiol.com/?v=1676885175.781410937.oti037.jpg&dp=2)
Последняя частота – 14.318 попадалась мне на картах EGA в некоторых монохромных режимах. Частота берется с шины ISA. Подозреваю, что режим сильно нестандартный, помимо несоответствующей частоты, у него всего 640 пикселей в строке. Поэтому пока даже не сделал полноценную поддержку этого режима. Изображение четкое, но сжато по горизонтали, потому как выводится в разрешении 720х400, как и другие монохромные режимы.
Другие частоты пиксельклока для режимов 640х350 и монохрома на картах EGA мне не попадались. Если у кого-то есть карты с отличающимися частотами, пишите, добавлю их тоже.
На картах Hercules видел только 16.000 МГц, без вариантов. Гипотетически может быть 16.257, как и на картах MDA.

У видеокарт CGA и для разрешений 640х200 и 320х200 карт EGA с частотами всё проще. В 95% случаев это частота 14.318 с шины ISA. Если не удаётся достичь четкой картинки с платой PC XT, то нужно подстроить частоту с помощью конденсатора на материнской плате, рядом с кварцем 14.318. Наверняка сбита настройка этого конденсатора.
Единственная карта, у которой частота не 14.318 – уже упомянутая выше OTI037. Пиксельклок в ней получается делением на два частоты кварца 28.322. Итоговая частота 14.161 МГц. Также на «всякий пожарный» добавил частоты 14.0 и 15.0. Итоговый перечень частот для CGA/EGA LowRes: 14.0, 14.161, 14,318, 15.0 МГц. Если у кого-то есть карты с другими частотами, пишите, добавлю.


P.S. Модераторам спасибо!

Rio444
18.02.2023, 16:42
Выходные разрешения и частота кадров

Конвертер выводит изображение на выход VGA в следующих форматах:

* 640х350 70Гц – для входного EGA 640x350,
* 720x400 70Гц – для входного монохромного 720х350, 720х348,
* 640х400 70Гц – для входного 640х400 и 320х400 CGA и EGA
* 640х480 75Гц – то же самое

Эти форматы являются стандартными и поддерживаются абсолютным большинством мониторов, как ЖК, так и ЭЛТ. Исключение – последний режим, 640х480@75, который можно назвать «полустандартным». В разных источниках он упоминается, как «режим IBM 640х480». Ни разу не встречал его поддержку в мануалах к мониторам, однако по факту мониторы его поддерживают. Ни один из протестированных ЖК не выдал сообщение о нестандартном разрешении. Проверял на мониторах: Benq 17” FP71G+ (1280х1024), IBM 4820-2GD (12” 800x600 от POS-терминала), LG W1942SE (19” 1440x900), AOC 24B2XH (23.8” 1920x1080).

Переключение между режимами 640х400 и 640х480 производится одновременным нажатием кнопок 2 и 4 (CGA 40/48). Работает только в режиме CGA.

Указанные разрешения хорошо подходят для ЖК мониторов, однако для ЭЛТ кадровая частота 70Гц маловата и не комфортна.
Конвертер позволяет поднять частоту кадров в каждом разрешении до 75, 80 и 85Гц. Для этого нужно нажать кнопку 1 (ALT FUNC), и, не отпуская её, нажать кнопку 4 или 5 (ALT Output FREQ). Частота соответственно понижается или повышается. Удерживая кнопку 1, нажимать на кнопки 4 и 5 можно несколько раз.
https://pic.maxiol.com/images2/1676726858.781441028.1025.jpg
Повышение кадровой частоты производится очень просто – поднятием частоты пикселей изображения выводимого на VGA. Такой способ не требует дополнительных ресурсов от CPLD Altera Max, но имеет недостаток – выходной сигнал оказывается нестандартным.
ЖК мониторы выводят изображение в разрешениях 640х350, 720x400 и 640х400 с повышенным пиксельклоком и частотой кадров 75Гц, но на несколько секунд появляется сообщение о нестандартном разрешении. Помимо этого они могут неправильно определять входное разрешение (например 640х350@75 как 720х400) и искажать изображение. Поэтому повышенная кадровая частота больше подходит для ЭЛТ мониторов.

По моим ощущениям лучший вариант для ЭЛТ – кадровая 75Гц. Так как разрешение нестандартное, придется подстроить геометрию. Мерцание уже практически не заметно и не напрягает.
На частотах кадровой 80 и 85 мерцание ещё меньше, но изображение становится чуть менее четким. Возможно, самому конвертеру сложно работать на такой частоте, или сказывается отсутствие согласования с VGA кабелем. Но даже на этих частотах ЭЛТ мониторы выдают вполне нормальное изображение. Проверял на мониторах: Samsung 3Ne, Viewspnic P655, LG F700P.

ЖК мониторы при частотах кадровой 80 и 85 Гц выводят сообщение о неподдерживаемой частоте и больше ничего не показывают. Исключение – IBM POS-монитор, который выводит изображение, но оно перекрыто сообщением о неподдерживаемой частоте.

Rio444
19.02.2023, 00:28
Дополнительные настройки

Режим EGA 640x350

Для этого режима отсутствуют какие-либо дополнительные настройки. Видеосигнал выводится на монитор VGA ровно в том же виде, в каком получен от EGA видеокарты.

Монохромные режимы 720х350, 720х348

Для монохромных режимов можно выбирать цвет изображения. Переключение цвета производится кнопкой 1 (MODE) по кругу, в следующем порядке: черно-белый (исходный), зеленый, янтарный. Цвет по умолчанию – черно-белый.
https://pic.maxiol.com/images2/1676754244.781410893.green2.jpg.....https://pic.maxiol.com/images2/1676754198.781410893.amber2.jpg
Зеленый цвет – 100% зеленый, без примеси каких-либо других цветов. Янтарный немного с красноватым оттенком, RGB-код на максимальной яркости - #FFAF00. Цвет по коду можно посмотреть например здесь https://www.colorhexa.com/ffaf00
Официально “amber” считается соответствующим коду #ffbf00, но мне он показался слишком желтым, недостаточно «компьютерным». Впрочем, при желании оттенок можно изменить заменой одной резисторной сборки в схеме конвертера.

Режимы CGA и EGA 640х200 и 320х200

Этот режим самый богатый настройками. Выше уже упомянул возможность переключения выходных разрешений между 640х480 и 640х400 по одновременному нажатию кнопок 2 и 4 (CGA 40/48). Режим по умолчанию – 640х480.
https://pic.maxiol.com/images2/1676726858.781441028.1025.jpg
Одновременное нажатие кнопок 3 и 5 (CGA SCANL) включает/выключает эмуляцию так называемых «линий сканирования». Фактически изображение выводится через строчку.
Фото для сравнения (кликабельно):
https://pic.maxiol.com/thumbs2/1676755252.781410893.1.jpg (https://pic.maxiol.com/?v=1676755252.781410893.1.jpg&dp=2)....https://pic.maxiol.com/thumbs2/1676755272.781410893.2.jpg (https://pic.maxiol.com/?v=1676755272.781410893.2.jpg&dp=2)

Нажатие кнопки 1 (MODE) позволяет включить/выключить эмуляцию «композитного» режим CGA. Переключение происходит по кругу: обычный режим (исходный), "композитный 1", "композитный 2". Подробнее композитный режим будет рассмотрен ниже.

Настройки, не зависящие от режимов

В настоящий момент это одна-единственная настройка – принудительная фиксация того или иного входного видеорежима. Если нажать кнопку 1 (MODE) и удерживать её не менее 4-х секунд, то начнут мигать оба светодиода. После этого кнопку 1 можно отпустить. Светодиоды будут продолжать мигать, что означает, что конвертер находится в состоянии выбора фиксированного режима. Теперь нажимая кнопки 2…5 можно принудительно задавать тот или иной режим:

* EGA 640x350 – кнопка 3,
* CGA, EGA 640/320x200 – кнопка 4,
* Монохромный – кнопка 5,
* Возврат к автоматическому определению режима – кнопка 2.

Новый выбранный режим применяется сразу же.
Чтобы вернуть конвертер к обычному состоянию, нужно один раз кратковременно нажать кнопку 1 (MODE). После возврата светодиоды перестанут мигать.

Ручное задание входного видеорежима может потребоваться, если входной сигнал очень «кривой» и конвертер не в состоянии его правильно определить, либо сигнал вообще не от видеокарты EGA/CGA/MDA/HGC, а с какого-то компьютера или оборудования, не имеющего отношения к IBM PC-совместимым. Например, таким образом, принудительной фиксацией режима CGA 640/320х200, удалось захватить изображение ZX Spectrum «Ленинград». Правда оно оказалось сильно смещено по горизонтали и вертикали, и потребовалась корректировка прошивки.

Vasily_A
19.02.2023, 12:47
очень интересно на исходник цплд посмотреть...

Rio444
19.02.2023, 13:05
очень интересно на исходник цплд посмотреть...Вряд ли он Вам будет чем-то полезен. Когда перестаю править, через месяц уже сам забываю, где там что.
Лучше напишите, что конкретно Вас интересует - алгоритм той или иной процедуры, её реализация? С удовольствием расскажу. Можно написать в ЛС, либо на электронку http://ipic.su/img/img7/fs/Email.1569054222.png, или в телеграм

Rio444
19.02.2023, 18:07
«Композитный» режим CGA

Суть «композитного режима» сводится к следующему.
На видеокартах CGA имеется видеовыход, к которому можно подключить телевизор NTSC. В стандарте NTSC цвет точки зависит от её фазы (положения по горизонтали).
Если разрешение 640х200 (черно-белое) вывести на телевизор NTSC, то цвет каждого четвертого (светящегося) пикселя в строке будет повторяться. И наоборот, каждые идущие подряд четыре пикселя будут иметь разные цвета. При этом каждый светящийся пиксель «окрашивает» не только себя, но и соседние пиксели. Если светятся четыре пикселя подряд, то в сумме они дают белый цвет с «радугой» по краям. Это хорошо иллюстрирует картинка ниже:
https://hsto.org/getpro/habr/post_images/680/d8f/6dc/680d8f6dc00b79323d1e806972c7974e.png
Источник https://habr.com/ru/post/256409/
В разрешениях 320х200 цвет кодируется не четырьмя, а двумя пикселями. Но каждый из них уже может быть окрашен, т.е. иметь какое-то смещение по стандарту NTSC.
В обоих случаях итоговое "эффективное" разрешение составить 160х200.
Более подробно можно почитать например здесь https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Composite_output или здесь https://en.wikipedia.org/wiki/Composite_artifact_colors ,

Первая проблема эмуляции композитного режима заключается в сложности найти готовые таблицы преобразования цветов. С тем же вопросом столкнулся автор mce2vga. Видел его старые сообщения на разных форумах с тщетными попытками найти эту информацию. В итоге он каким-то образом умудрился найти или составить такие таблицы.
Не придумал ничего лучше, чем скопировать у него этот код в свой проект. Предполагаю, что в нём есть ошибки. Уже пришлось делать правки, когда в одной из игр небо оказалось розового цвета: https://www.old-games.ru/forum/threads/voprosy-po-kompozitnomu-rezhimu-cga.105705/

В минимальном варианте нужно шесть таблиц. Две для черно-белого режима 640х200 (в нормальной и высокой яркости), и ещё по две для Pallete 0 и Pallete 1, так же для двух уровней яркости.
Таблица для разрешения 640х200 представляет из себя код из 4-х соседних пикселей и яркости, вида ibbbb, где i – яркость (интенсивность), b – состояние пикселя (1 – светится, 0 – погашен) и соответствующего ему 6-битного кода в палитре EGA. Сейчас он в таком виде:


//Для ярко белого цвета
5'b10000: Cpst640_decoder = 6'b000000; //black
5'b10001: Cpst640_decoder = 6'b001001; //green
5'b10010: Cpst640_decoder = 6'b010011; //blue
5'b10011: Cpst640_decoder = 6'b001011; //ligth blue
5'b10100: Cpst640_decoder = 6'b100000; //red
5'b10101: Cpst640_decoder = 6'b101010; //gray
5'b10110: Cpst640_decoder = 6'b110011; //dmagn
//5'b10111: Cpst640_decoder = 6'b111011; //pink меняем на
5'b10111: Cpst640_decoder = 6'b101011; //голубой
5'b11000: Cpst640_decoder = 6'b000100; //dark green
5'b11001: Cpst640_decoder = 6'b001100; //light green
5'b11010: Cpst640_decoder = 6'b010101; //dark gray
5'b11011: Cpst640_decoder = 6'b011110; //acqua
5'b11100: Cpst640_decoder = 6'b110100; //orange
5'b11101: Cpst640_decoder = 6'b111100; //light yellow
5'b11110: Cpst640_decoder = 6'b111010; //salmon
5'b11111: Cpst640_decoder = 6'b111111; //white

// ДЛЯ СЕРОГО ЦВЕТА
5'b00000: Cpst640_decoder = 6'b000000;
5'b00001: Cpst640_decoder = 6'b001000;
5'b00010: Cpst640_decoder = 6'b000011; //Проверил
5'b00011: Cpst640_decoder = 6'b001011; //Проверил
5'b00100: Cpst640_decoder = 6'b100000;
5'b00101: Cpst640_decoder = 6'b010101;
5'b00110: Cpst640_decoder = 6'b110011;
5'b00111: Cpst640_decoder = 6'b011011; //Отдает в зелень (циан)
//5'b01000: Cpst640_decoder = 6'b010100; //Буро-зеленый
5'b01000: Cpst640_decoder = 6'b010000; //Меняем на темно-красный (почти темно-коричневый)
5'b01001: Cpst640_decoder = 6'b001100;
5'b01010: Cpst640_decoder = 6'b010001;
5'b01011: Cpst640_decoder = 6'b001110; //Проверил
//5'b01100: Cpst640_decoder = 6'b110100; //Оранжевый
5'b01100: Cpst640_decoder = 6'b110000; //На красный
5'b01101: Cpst640_decoder = 6'b101000;
//5'b01110: Cpst640_decoder = 6'b110011; //Почему-то розовый
5'b01110: Cpst640_decoder = 6'b100011; //Делаем голубой с розовым оттенком
5'b01111: Cpst640_decoder = 6'b111111;

Для Палитр 0 и 1 таблицы имеют аналогичный вид. Левый столбец вида: "i r1 g1 r2 g2", где i – так же интенсивность, r1 g1 – цвет первого пикселя (без синего), r2 g2 – цвет второго пикселя (так же без синего). Синий зависит от палитры, в Палитре 1 он всегда есть (кроме черного), в Палитре 2 наоборот, его никогда нет.
Чтобы сократить код, мне пришлось упростить таблицы из проекта mce2vga. В палитрах 0 и 1 цвет фона всегда принимается черным. По факту видеокарта CGA позволяет задать фон произвольным цветом, например синим. Из-за этого некоторые (редкие) игры могут отображаться неправильно.

Вторая сложность заключается в том, что существовали «старые карты CGA» и «новые карты CGA», которые показывают композитные цвета по-разному. Игры до 1984 года обычно рассчитаны на «старые» цвета композита, а после 1984 – на «новые». Подробнее здесь http://nerdlypleasures.blogspot.com/2023/01/cga-and-intended-incidental-and-just.html
То есть, в идеале, к указанным выше шести таблицам преобразований нужно добавить ещё шесть (что очень ресурсоёмко), либо сделать выборочную корректировку цветов в этих таблицах (уже более достижимо).

Приглашаю к сотрудничеству заинтересованных в доработке алгоритма эмуляции композитных цветов CGA. Как в работе над таблицами преобразований, так и в тестировании в различных играх. От вас будут нужны файлы игры и скриншоты правильного изображения в композитном режиме CGA.

На настоящий момент в конвертере реализован режим «композитный 1» (упомянут выше, включается кнопкой “MODE”) и «композитный 2». Первый – те самые сокращенные таблицы из проекта mce2vga с небольшими доработками. Второй отличается от первого только инвертированием сигнала яркости. Т.е. для яркого изображения используется таблица от нормального, для нормального – таблица от яркого. В некоторых играх это существенно повышает реалистичность картинки.

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

Напоследок пара скриншотов, из игр King's Quest II (https://www.old-games.ru/game/screenshots/759.html) и Frogger II (https://www.old-games.ru/game/screenshots/2216.html)

https://pic.maxiol.com/thumbs2/1676818223.781410961.1.jpg (https://pic.maxiol.com/?v=1676818223.781410961.1.jpg&dp=2).... https://pic.maxiol.com/thumbs2/1676818251.781410961.2.jpg (https://pic.maxiol.com/?v=1676818251.781410961.2.jpg&dp=2)

Rio444
21.02.2023, 13:31
Сохранение настроек

Часть настроек для каждого входного видеорежима задаётся раздельно, часть общие и не зависят от режима.

Раздельные настройки – это входной пиксельклок, частота кадров выхода VGA и положение изображения по горизонтали. Они сохраняются в оперативной памяти (RAM) микроконтроллера и при возврате в соответствующий режим восстанавливаются, если конвертер оставался включенным.

Аналогичным образом сохраняется цвет монохромного режима, выходное разрешение режима CGA/EGA 640/320Х200 (640х480 или 640х400), состояние “scanlines” в этом же режиме и отдельно положение по горизонтали при эмуляции композитного CGA.

Общие настройки, которые не меняются при изменении входного режима – это фаза и автоматическое выравнивание по горизонтали.
Для фазы обычно доступны одно-два значения, которые выдают качественное изображение во всех режимах конкретной видеокарты. В первую очередь речь о картах EGA. У CGA и Hercules фактически один режим с небольшими модификациями.
Режим автовыравнивания приходится отключать очень редко. Это может быть связано с каким-то не совсем стандартным изображением, которое получается, если софт использует низкоуровневые настройки видеокарты.
Состояние эмуляции композитного режима CGA также не сохраняется, его нужно каждый раз включать вручную.

Помимо этого конвертер сохраняет большинство настроек в энергонезависимой памяти микроконтроллера (EEPROM). Память EEPROM допускает достаточно большое (гарантированно не менее 100 тыс.) но не бесконечное количество циклов записи. Кроме того, чтение/запись в EEPROM у МК Atmega это относительно длительная процедура.
Поэтому запись происходит не сразу, а по истечении примерно 30 секунд после последнего изменения настроек. Т.е. все производимые настройки накапливаются, и записываются в EEPROM сразу «скопом» если в течении 30 секунд не было никаких других изменений. Это подразумевает, что все настройки закончены и полученное изображение Вас полностью устраивает.

Сигнализирует о несохраненных настройках мигающий зеленый светодиод (POWER). Если изменить какую-то настройку, и затем вернуть её в исходное состояние до сохранения в EEPROM, светодиод перестанет мигать – записи не будет. То есть настройки записываются только если они отличаются от хранящихся в EEPROM.

Запись не производится, если до истечения 30 секунд сменился входной видеорежим, или сигнал совсем пропал. Отсчет возобновляется (но начинается с нуля) при возврате в режим с несохраненными настройками.
Можно принудительно сохранить настройки, если нажать и удерживать не менее 2-х секунд кнопку 1 (MODE)

Вышеописанным образом сохраняются следующие настройки:
• Фаза захвата сигнала,
• Входной пиксельклок (для каждого режима),
• Выходная кадровая частота (для каждого режима),
• Цвет для монохромных режимов,
• Формат вывода разрешений 640/320х200 – 640х480 или 640х400,
• Состояние “scanlines”,
• Положение изображения по горизонтали, только при отключенном автоматическом выравнивании, для каждого режима,
• Состояние настройки «автоматическое выравнивание», для каждого режима.

Последняя настройка восстанавливается из EEPROM только для первого видеорежима, после включения конвертера (или после полного отсутствия входного сигнала), и затем уже не меняется.
Фиксированный входной видеорежим сохраняется в EEPROM сразу же после выхода из режима выбора фиксированного режима (нажатия кнопки 1, MODE).

Сброс всех настроек на значения по умолчанию осуществляется по нажатию “ALT+CTRL+DEL”, см. рисунок:
https://pic.maxiol.com/images2/1676973531.781410968.10252.jpg
Причем, по первому нажатию “DEL” происходит сброс настроек только в оперативной памяти. Если выключить-включить конвертер, вернутся старые настройки. И только по второму нажатию “DEL” (“ALT” + “CTRL” нужно продолжать удерживать нажатыми), настройки будут сброшены на значения по умолчанию и в EEPROM.

ALS
21.02.2023, 13:36
Может, сделать какую-нибудь утилиту для настройки этого модуля с ПК ? Могу помочь.

Rio444
21.02.2023, 15:54
Про Open source и документацию к проекту

Практически сразу возникли вопросы о доступности исходных кодов и документации для самостоятельного изготовления, поэтому остановлюсь на этом отдельно.

Как я понимаю Open Source – это когда несколько (иногда десятки) разработчиков по мере сил и возможностей длительно пилят какой-то большой проект. Другой вариант – энтузиаст за несколько (или несколько десятков) вечеров сделал небольшой проект и выложил исходники с комментарием: «Понимаю, что много надо доделывать. Меня устраивает, кому надо доделывайте, вот исходники».
Третий вариант – документацию выкладывают, чтобы энтузиасты могли собрать устройство для себя.

К сожалению реальная ситуация в области новодельных устройств для IBM PC-совместимого железа сейчас совсем другая.
Большинство энтузиастов-разработчиков заняты своими проектами. Шанс, что-то кто-то поучаствует в Вашем, близок к нулю.
Изготавливать для себя одно-два, даже четыре устройства абсолютно не выгодно. В магазинах цены дикие, на али можно заказать детали от 5-10 штук. Печатные платы тоже от 5-ти штук. Купить готовое устройство оказывается выгоднее и дешевле, чем собирать самому.

В итоге, через пару месяцев после появления исходников годного устройства «энтузиасты» начинают продавать наборы для сборки, на авито и ибее появляются готовые изделия, причем по совершенно диким ценам. И их покупают. Потому что продаваны заточены на такие продажи, у них ассортимент, раскрученный аккаунт, много подписчиков, репутация. При том, что в разработку не вложено ни копейки и начисто игнорируется замечание автора разработки, что документация выхожена в общий доступ исключительно для частного, некоммерческого использования.

Если кому-то будет полезен код для своего проекта, с удовольствием поделюсь им и проконсультирую. АБСОЛЮТНО БЕСПЛАТНО.
Если кто-то захочет нажиться на проекте – простите, однозначно нет.

Тут два товарища уже интересовались исходниками и документацией, почему-то после вопроса «зачем?» слились и молчат.



Что касается стоимости готового устройства. Мне бы очень хотелось, чтобы готовый, полный комплект (со шнурком и БП) стоил менее 4500 руб.
Ещё пару месяцев назад это было реально. На днях заглянул на али, и увидел, что цены на комплектующие значительно выросли, доллар уже тоже ~75 руб, внутренний курс али около 80. Поэтому, если курс не вернётся назад, вероятнее всего цена будет выше.
На первую небольшую партию обязательно будет скидка. Детали закупались по старым ценам, плюс небольшая компенсация за возможные баги в софте.
Так же, если будет спрос, возможна продажа неполного комплекта или только основной платы в сборе. В последнем случае останется только собрать "пульт" с кнопками и светодиодами, придумать корпус (или вообще оставить без него, поставив плату на "ножки") и подобрать подходящий БП (5V 0,35А).

Насчет «конструкторов» вопрос пока открыт. Нет статистики работоспособности устройства после сборки. Есть конструкции, которые работают в 99,9% случаев, если нет ошибок сборки. Есть капризные, которые и собрать правильно сложно, и далеко не нулевая вероятность неисправности имеющихся комплектующих.

Если кому-то интересно, принципиальная схема текущей версии: https://disk.yandex.ru/d/rWj_jgUCvFdWew и https://disk.yandex.ru/i/B0W8Q2c4c3cr9g

Напряжение питания конвертера - 5 вольт. Допустимо нестабилизированное напряжение, в пределах 4,5...5,5 вольт. Потребляемый ток: средний - 0,3А, в пике до 0,35А.
Разъём для подключения БП - 5.5х2.5/2.1. Подходят штекеры 5.5х2.5 и 5.5х2.1.



На этом пока всё. Если что-то ещё вспомню, дополню.
Готов выслушать замечания, предложения, пожелания.

Vasily_A
21.02.2023, 21:32
я интересовался... наверное в числе одного из двух.

меня общая "архитектура" цплд заинтересовала,
а именно как решена "коммутация" кучи сигналов и генерация разверток на захват и вывод на средней по числу ячеек цплд.

самого интересного все равно нет - я все думал, как на цплд плл для пиксельклока сделать, пусть даже с внешним гун.
смысл - подключение без вывода клока из компа и без ручной подстройки.

виноват, надо было ответить (не вежливо получилось...).

Rio444
22.02.2023, 01:39
Vasily_A, Вы меня тоже простите за резкость. Признаюсь, намеренно так написал, чтобы спровоцировать ответ.


самого интересного все равно нет - я все думал, как на цплд плл для пиксельклока сделать, пусть даже с внешним гун.
смысл - подключение без вывода клока из компа и без ручной подстройки.Да, это было бы оптимальным решением. И даже существовали специализированные чипы, способные генерировать пиксельклок по строчным СИ и количеству пикселей в строке. Но увы, это дефицитные и дорогие чипы, как я понял давно снятые с производства. Сейчас их функционал встроен в один большой чип в мониторе.



а именно как решена "коммутация" кучи сигналов и генерация разверток на захват и вывод на средней по числу ячеек цплдЧто Вы имеете в виду под "кучей сигналов"? Под каждый конкретный формат видео подстраиваются параметры схемы. На вход и на выход стоят несколько счетчиков, которые считают количество пикселей в строке, паузу после СИ, для выхода - длительность СИ и паузу после него. В зависимости от формата видеосигнала меняются пределы, до которых производится подсчет тактов пиксельклока.

Например, генерация строки вывода изображения производится следующим кодом:


reg [9:0] Pix_Counter; //Счетчик пикселей в строке, до 1024, реально больше 720 не нужно

always @(posedge Clk2) //Счетчик пикселей. Доходит до конца линии и обнуляется
begin
if(H_equal) Pix_Counter <= 10'h1; //Если достигаем предела, начинаем с начала (для строки - с единицы)
else Pix_Counter <= Pix_Counter + 10'h1;
end

reg [1:0] H_phase_counter; //Фаза выходной строчной развертки
// 0 - вывод видимого изо
// 1 - пауза перед СИ
// 2 - СИ
// 3 - пауза после СИ

//Mono выводится в 720 пикселей, всё остальное в 640 пикселей
wire H1_equal; assign H1_equal = (Mono_full?(Pix_Counter == 10'd728):(Pix_Counter == 10'd648)) & H_phase [0]; //Счетчик равен длине видимой строки 640 + запас 8 пикс
wire H2_equal; assign H2_equal = (Pix_Counter == 10'd10) & H_phase [1]; // ..паузе перед СИ
wire H3_equal; assign H3_equal = (Mono_full?(Pix_Counter == 10'd108):(Pix_Counter == 10'd96)) & H_phase [2]; // ..длине СИ
wire H4_equal; assign H4_equal = (Mono_full?{Pix_Counter == 10'd54}:(Pix_Counter == 10'd46)) & H_phase [3]; //Пауза после СИ

wire H_equal; assign H_equal = H1_equal | H2_equal | H3_equal | H4_equal; //Если достигнут предел в любой из фаз

always @(posedge Clk2)
HSo <= ~(H_phase[2] ^ EGA); //EGA HiRes 640х350 ССИ положит, все остальные: 640х480, 720х400, 640x400 - отрицательный

always @(posedge Clk2) //По достижению счетчиком пикселей заданного значения происходит переход в следующую фазу
begin
if(H_equal) H_phase_counter <= H_phase_counter + 2'b1;
end

reg [3:0] H_phase; //Дешифратор фазы
always @(H_phase_counter)
H_phase <= 4'h1 << H_phase_counter;

Rio444
28.03.2023, 23:17
В продаже https://zx-pk.com/forum/viewtopic.php?f=7&t=22352

CodeMaster
02.10.2023, 12:08
Роман, такой вопрос: в связи со смертью проекта ZXKit1 (https://zx-pk.ru/threads/10548-zxkit1-plata-vga-amp-pal.html), который был ориентирован именно на советские ретро-компы, планируешь ли ты в своём прошивки с их поддержкой?

Rio444
04.10.2023, 23:28
CodeMaster, у ZXKit1 ведь исходные коды открытые? Что мешает разобраться и допилить?

Свой изначально собирался сделать достаточно универсальным, чтобы можно было использовать с разными компьютерами и форматами видео.
Но на текущей элементной базе это вряд ли получится.
Конечно постараюсь выжать максимум, что возможно. Но очень сомневаюсь, что получится добавить существенный функционал.

Тут ещё какой момент возникает.
Если входной сигнал один, формат известен и есть откуда взять видеосигнал RGB-TTL и пиксель-клок - то пожалуй ZXKit оптимальный вариант. Простой и дешевый.
Если мы не хотим влезать в схему, а хотим подключиться к внешнему видео-разъёму компьютера, то там сигнал уже аналоговый и дополнительно нужен ADC для преобразования.

Если же устройство предполагается универсальным, способным работать с разными сигналами, то уже не обойтись без экранного меню с настройками.
Текущее железо конвертера это уже никак не потянет.
Микроконтроллер можно подобрать недорогой. CPLD нужно менять на как минимум EPM570. Это поднимет себестоимость.
С учетом затрат на разработку получится аналог конвертера Raspberry Pi Zero https://github.com/hoglet67/RGBtoHDMI/wiki
И зачем он тогда нужен?

Вообще в нынешних условиях разработка сложных устройств не выгода. Ebay закрыли, а внутренний рынок не позволяет даже покрыть затраты на разработку.
Проще собирать известные Open Source проекты, или делать что-то простое, где достаточно развести плату, а схему взять из даташита или скопировать заводское устройство.

CodeMaster
11.10.2023, 12:59
CodeMaster, у ZXKit1 ведь исходные коды открытые? Что мешает разобраться и допилить?
Полное отсутствие ориентации в программировании ПЛИС. Да и я про готовый продукт больше спрашивал. На Барахолке год назад только пустые платы продавали. И одно предложение есть на Авито.


ZXKit оптимальный вариант. Простой и дешевый.
А дешёвый он за счёт отсутствия SRAM? ПЛИС на нём же больше в 2 раза?


Если же устройство предполагается универсальным
Не, я чисто про "RGB-TTL и пиксель-клок".


Проще собирать известные Open Source проекты,
Ну, кроме ZXKit советского нигде же не было.

Rio444
11.10.2023, 13:58
А дешёвый он за счёт отсутствия SRAM? ПЛИС на нём же больше в 2 раза?
ZX-kit:
- EPM3128 128 128 ячеек, 100 ног
- память SRAM 256x16 - 1 штука

Конвертер EGA/CGA/Mono to VGA:
- EPM3256 256 ячеек 144 ноги
- память SRAM 256x16 или 512х8 - 2 штуки
- МК Atmega88
- PLL Si5351
- панель с кнопками и светодиодами
+ разница в площади печатной платы примерно в 2 раза.


Не, я чисто про "RGB-TTL и пиксель-клок".Если есть уровни TTL и пиксель-клок, то опять-таки проще и дешевле адаптировать прошивку ZX-Kit.
Только она нужна будет своя под каждый комп с разными форматами видео.

Что-то ещё можно добавить в видеоконвертер, но немного.
Есть какие-то конкретные пожелания?
Может быть формат видео близок к CGA, и тогда не нужно будет каких-то серьёзных изменений.
Так прошивка была докручена под Спектрум. Сдвинул изображение по горизонтали и вертикали и убрал преобразование темно-желтого в коричневый.


Ну, кроме ZXKit советского нигде же не было.
Имел в виду с коммерческой точки зрения.
И не только конвертеры видео, а вообще.
Что в принципе сложная коммерческая разработка в условиях санкций не выгодна. Внутренний рынок её не окупает.
Времени уходит уйма. Выгоднее это время потратить на сборку готовых open source разработок.
Чем многие успешно и занимаются.

LED
30.01.2024, 07:31
То есть проект всётаки комерческий

SoftCat
15.07.2024, 00:23
Rio444, а для входного сигнала с 720-ю столбцами Вы делаете выходной пиксельклок 28,322 МГц?

Rio444
15.07.2024, 13:24
Rio444, а для входного сигнала с 720-ю столбцами Вы делаете выходной пиксельклок 28,322 МГц?
Для входного 16 или 16,27 МГц, потому что это монохром. Или MDA, или Hercules.
Для выходного 28,322, разрешение 720х400.

SoftCat
15.07.2024, 16:08
Для входного 16 или 16,27 МГц, потому что это монохром. Или MDA, или Hercules.
Для выходного 28,322, разрешение 720х400.

На EGA в текстовом монохромном режиме 7 тоже получается 720x350. Я как-то давно видел утилиту, которая на EGA устанавливает 16-цветный режим 720x350. 16 цветов могут быть любыми из 64-х EGA-шных. Причем можно и текстовый и графический режим. Автор утилиты, по-моему, Ричард Уилтон.

Rio444
15.07.2024, 21:57
На EGA в текстовом монохромном режиме 7 тоже получается 720x350.Так и есть, это режим совместимый с MDA. Только обычно пиксельклок на 16.00, а 16.27.
Том же, что для 640х350х16 цветной.



Я как-то давно видел утилиту, которая на EGA устанавливает 16-цветный режим 720x350. 16 цветов могут быть любыми из 64-х EGA-шных.С любой ли видеокартой это работает?
Было бы здорово найти программы, которые могут работать в таком режиме.
В текстовом наверное любые могут, такие как NC, VC, DN.
Можно найти эту утилиту?
720х350 выглядит гораздо приятнее 640х350.

SoftCat
15.07.2024, 22:14
Так и есть, это режим совместимый с MDA. Только обычно пиксельклок на 16.00, а 16.27.
Том же, что для 640х350х16 цветной.


С любой ли видеокартой это работает?
Было бы здорово найти программы, которые могут работать в таком режиме.
В текстовом наверное любые могут, такие как NC, VC, DN.
Можно найти эту утилиту?
720х350 выглядит гораздо приятнее 640х350.

Найти я пробовал и у меня не получилось. Могу попробовать сам написать. Только у меня вообще нет никакой EGA. Придется давать Вам на тестирование. Если это удобно, то можно попробовать.

Rio444
15.07.2024, 23:26
SoftCat, давайте попробуем.

MoVinG
19.10.2025, 22:17
Rio444, добрый день!
У меня есть очень древний компьютер начала 80х. Это ранняя ХТ от Apricot. Монтор к нему подключался монохромный с параметрами, как во вложении. Ваш адаптер сможет подружить современный монитор с этим компьютером?

Частота строк 15,79кГц, кадровая 71,9Гц., Разрешение 800х400. Уровеь сигнала TTL.

Rio444
20.10.2025, 00:11
MoVinG, приветствую!
Можно попробовать доработать прошивку. Правда нет гарантий, что потянет нужную частоту.
Известна частота пиксельклока?
И можно табличку куда-нибудь перезалить? Здесь ничего не видно.

Если есть телеграм, пишите в личку, дам контакты.