Этот репозиторий содержит код и конфигурацию для рендеринга видеопотока UDP (netvid) на монитор, совместимый с IBM 5153, через Raspberry Pi. Для RetroArch и Open Broadcaster Software доступны грубые перехватчики для обеспечения видеопотока.
Видеосигналы передаются через DPI (интерфейс параллельного дисплея), используя 4 бита цвета (RGBI) и 2 сигнала синхронизации. Из-за требовательности к частоте пикселей RPi, частоту пикселей и соответствующие тайминги пришлось утроить. Таким образом, фактическое разрешение кадрового буфера составляет 1920x200.
Репозиторий также включает в себя интерфейс GPIO, который так и не был доработан после того, как анализ осциллографа выявил проблемы с синхронизацией (предполагаемый основной виновник: опрос USB).
Фактическая плата адаптера и тайминги были основаны на предыдущей работе Бенджамина Гулда. Я добавил несколько резисторов, чтобы ограничить потребляемый ток; чисто предупредительный. На моем мониторе мне также нужно было отрегулировать вертикальные и горизонтальные выступы, чтобы изображение было центрировано.
В этот репозиторий добавлены необходимые файлы конфигурации, cmdline и дерева устройств, подходящие для Raspberry Pi 3.
Адаптер может отображать полную 16-цветную палитру CGA с разрешением до 640x200.
Поддерживается временное сглаживание для расширения палитры до 136 цветов. На изображении выше показаны две объединенные экспозиции с частотой 60 Гц.
Приложение понижающей дискретизации обеспечивает необходимую обработку для преобразования 16-битного/32-битного видеопотока RGB (предоставленного RetroArch/OBS) в 4-битный видеопоток, совместимый с CGA. Он поддерживает понижение разрешения цвета ближайшего соседа (для рендеринга обычного вывода CGA/EGA), временное и байеровское сглаживание, локальное повышение контрастности и регулировку уровня черного.
Командная строка:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm nearest
Командная строка:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2
Командная строка:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2 --local-contrast-gain .25 --local-contrast-stddev 32
Повышение локального контраста пытается максимизировать диапазон яркости для различных частей изображения. Это полезно, когда вы ограничены палитрой с очень небольшим количеством градаций, но широким диапазоном, как в случае с IBM5153. Хорошо работает там, где видеовход не состоит из больших однородных областей, например мультфильмов.
Командная строка:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2 --local-contrast-gain .25 --local-contrast-stddev 32 --temporal-dither client --staggered-temporal-dithering
Переключение цвета пикселей в каждом кадре приводит к появлению большего количества цветов, но за счет мерцания.
Командная строка:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,4 --local-contrast-gain .25 --local-contrast-stddev 32 --temporal-dither client --staggered-temporal-dithering
В этом примере используются входные данные 640x200 и неквадратный шаблон Байера для соответствия соотношению сторон пикселя.