Este repositório contém código e configuração para renderizar um fluxo de vídeo UDP (netvid) para um monitor compatível com IBM 5153 por meio de um Raspberry Pi. Ganchos brutos estão disponíveis para RetroArch e Open Broadcaster Software para fornecer o fluxo de vídeo.
Os sinais de vídeo são fornecidos através do DPI (Parallel Display Interface), usando 4 bits de cor (RGBI) e 2 sinais de sincronização. Devido ao clock do pixel RPi ser exigente, o clock do pixel e os tempos relevantes tiveram que ser triplicados. A resolução real do framebuffer é, portanto, 1920x200.
O repositório também inclui uma interface GPIO, que nunca foi concluída, depois que a análise do osciloscópio revelou problemas de temporização (principal suspeito: polling USB).
A placa adaptadora e as temporizações reais foram baseadas no trabalho anterior de Benjamin Gould. Adicionei alguns resistores para limitar o consumo de corrente; puramente preventivo. No meu monitor também precisei ajustar as varandas verticais e horizontais para fornecer uma imagem centralizada.
Os arquivos de configuração, cmdline e sobreposição de árvore de dispositivos necessários adequados para um Raspberry Pi 3 foram adicionados a este repositório.
O adaptador pode renderizar a paleta CGA completa de 16 cores com resolução de até 640x200.
O pontilhamento temporal é suportado para estender a paleta para 136 cores. A imagem acima mostra duas exposições de 60 Hz combinadas.
Um aplicativo de redução de resolução fornece o processamento necessário para converter um fluxo de vídeo RGB de 16/32 bits (conforme fornecido pela RetroArch/OBS) em um fluxo de vídeo de 4 bits compatível com CGA. Ele suporta redução da resolução de cores do vizinho mais próximo (para renderização de saída CGA/EGA convencional), pontilhamento temporal e bayer, aprimoramento de contraste local e ajuste de nível de preto.
Linha de comando:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm nearest
Linha de comando:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2
Linha de comando:
./downsampling/main --recv 0:<input-port> --send <output-host>:<output-port> --algorithm bayer --bayer 2,2 --local-contrast-gain .25 --local-contrast-stddev 32
O aprimoramento de contraste local tenta maximizar a gama de luminosidades para diferentes partes da imagem. Isso é útil quando você está limitado a uma paleta que possui poucas gradações, mas uma ampla variedade, como acontece com o IBM5153. Funciona bem onde a entrada de vídeo não consiste em grandes áreas uniformes, por exemplo, desenhos animados.
Linha de comando:
./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
Mudar a cor do pixel em cada quadro dá a aparência de mais cores, mas às custas da tremulação.
Linha de comando:
./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
Este exemplo usa uma entrada de 640x200 e um padrão bayer não quadrado para acomodar a proporção de pixel.