Ce référentiel contient du code et une configuration pour le rendu d'un flux vidéo UDP (netvid) sur un moniteur compatible IBM 5153 via un Raspberry Pi. Des hooks bruts sont disponibles pour RetroArch et Open Broadcaster Software pour fournir le flux vidéo.
Les signaux vidéo sont fournis via le DPI (Parallel Display Interface), en utilisant 4 bits de couleur (RGBI) et 2 signaux de synchronisation. En raison de la difficulté de l'horloge des pixels du RPi, l'horloge des pixels et les timings correspondants ont dû être triplés. La résolution réelle du framebuffer est donc de 1920x200.
Le référentiel comprend également une interface GPIO, qui n'a jamais été terminée, après que l'analyse à l'oscilloscope a révélé des problèmes de timing (principal coupable présumé : l'interrogation USB).
La carte adaptateur et les timings réels étaient basés sur les travaux précédents de Benjamin Gould. J'ai ajouté quelques résistances pour limiter la consommation de courant ; purement préventif. Sur mon moniteur, je devais également ajuster les porches verticaux et horizontaux pour fournir une image centrée.
Les fichiers de superposition de configuration, de ligne de commande et d'arborescence de périphériques requis adaptés à un Raspberry Pi 3 ont été ajoutés à ce référentiel.
L'adaptateur peut restituer la palette CGA complète de 16 couleurs avec une résolution allant jusqu'à 640 x 200.
Le tramage temporel est pris en charge pour étendre la palette à 136 couleurs. L'image ci-dessus montre deux expositions à 60 Hz combinées.
Une application de sous-échantillonnage fournit le traitement nécessaire pour convertir un flux vidéo RVB 16 bits/32 bits (tel que fourni par RetroArch/OBS) en un flux vidéo 4 bits compatible CGA. Il prend en charge le sous-échantillonnage des couleurs du voisin le plus proche (pour le rendu de la sortie CGA/EGA conventionnelle), le tramage temporel et bayer, l'amélioration du contraste local et l'ajustement du niveau de noir.
Ligne de commande :
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm nearest
Ligne de commande :
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2
Ligne de commande :
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2 --local-contrast-gain .25 --local-contrast-stddev 32
L'amélioration du contraste local tente de maximiser la plage de luminosité pour différentes parties de l'image. Ceci est utile lorsque vous êtes limité à une palette comportant très peu de gradations mais une large gamme, comme avec l'IBM5153. Fonctionne bien là où l'entrée vidéo ne consiste pas en de grandes zones uniformes, par exemple des dessins animés.
Ligne de commande :
./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
Changer la couleur des pixels à chaque image donne l’apparence de plus de couleurs, mais au détriment du scintillement.
Ligne de commande :
./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
Cet exemple utilise une entrée 640 x 200 et un motif Bayer non carré pour s'adapter au rapport hauteur/largeur des pixels.