Dieses Repository enthält Code und Konfiguration zum Rendern eines UDP-Videostreams (netvid) auf einem IBM 5153-kompatiblen Monitor über einen Raspberry Pi. Für RetroArch und Open Broadcaster Software stehen grobe Hooks zur Bereitstellung des Videostreams zur Verfügung.
Videosignale werden über die DPI (Parallel Display Interface) mit 4 Farbbit (RGBI) und 2 Synchronisationssignalen bereitgestellt. Da der RPi-Pixeltakt wählerisch ist, mussten der Pixeltakt und die entsprechenden Timings verdreifacht werden. Die tatsächliche Framebuffer-Auflösung beträgt daher 1920x200.
Das Repository enthält auch eine GPIO-Schnittstelle, die jedoch nie fertiggestellt wurde, nachdem die Oszilloskopanalyse Timing-Probleme aufgedeckt hatte (vermutliche Hauptursache: USB-Polling).
Die eigentliche Adapterplatine und die Timings basierten auf der vorherigen Arbeit von Benjamin Gould. Ich habe einige Widerstände hinzugefügt, um die Stromaufnahme zu begrenzen. reine Vorsichtsmaßnahme. Auf meinem Monitor musste ich außerdem die vertikalen und horizontalen Blenden anpassen, um ein zentriertes Bild zu erhalten.
Die erforderlichen Konfigurations-, Cmdline- und Gerätebaum-Overlay-Dateien, die für einen Raspberry Pi 3 geeignet sind, wurden diesem Repository hinzugefügt.
Der Adapter kann die komplette 16-Farben-CGA-Palette mit einer Auflösung von bis zu 640 x 200 wiedergeben.
Zur Erweiterung der Palette auf 136 Farben wird zeitliches Dithering unterstützt. Das Bild oben zeigt zwei kombinierte 60-Hz-Aufnahmen.
Eine Downsampling-Anwendung stellt die erforderliche Verarbeitung bereit, um einen 16-Bit-/32-Bit-RGB-Videostream (wie von RetroArch/OBS bereitgestellt) in einen CGA-kompatiblen 4-Bit-Videostream umzuwandeln. Es unterstützt das Downsampling der Farbe des nächsten Nachbarn (zum Rendern herkömmlicher CGA/EGA-Ausgabe), zeitliches und Bayer-Dithering, lokale Kontrastverbesserung und Schwarzwertanpassung.
Befehlszeile:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm nearest
Befehlszeile:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2
Befehlszeile:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2 --local-contrast-gain .25 --local-contrast-stddev 32
Durch die lokale Kontrastverstärkung wird versucht, den Helligkeitsbereich für verschiedene Teile des Bildes zu maximieren. Dies ist nützlich, wenn Sie auf eine Palette beschränkt sind, die nur sehr wenige Abstufungen, aber einen großen Bereich aufweist, wie beim IBM5153. Funktioniert gut, wenn die Videoeingabe nicht aus großen, gleichmäßigen Bereichen besteht, z. B. Cartoons.
Befehlszeile:
./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
Durch den Wechsel der Pixelfarbe bei jedem Frame entsteht der Eindruck von mehr Farben, allerdings auf Kosten des Flimmerns.
Befehlszeile:
./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
In diesem Beispiel werden eine 640x200-Eingabe und ein nicht quadratisches Bayer-Muster verwendet, um das Pixel-Seitenverhältnis zu berücksichtigen.